API access

Pull your projects and leads out of SignalsAPI programmatically — the same data you see in the app, available as JSON or CSV over a small REST API. Build it into a script, a scheduled sync, or your own dashboard.

The API is read-only and returns exactly what you can already see and download in the app: your own projects, their leads, and a full per‑project export that is identical to the project’s Download CSV button.

Building an AI agent, or want the underlying hiring panel rather than your own leads? That is a separate machine-facing surface — see the Agent data plane.

Base URL

https://api.signalsapi.com

Authentication

Every request uses your personal API key as a Bearer token:

Authorization: Bearer YOUR_API_KEY

Find your key in the app under Settings → API Key (you can regenerate it there at any time — regenerating invalidates the old key). Every request is scoped to your own account: you can only ever see your own projects and leads.

Situation Response
Missing or invalid key 403
Expired or deactivated key 403
A project that isn’t yours, or doesn’t exist 404
An unsupported format value 422

List your projects

GET /projects/

Returns all of your projects, newest first, each with a usable_lead_count (the number of leads in that project that are ready to use).

curl -H "Authorization: Bearer YOUR_API_KEY" \
  https://api.signalsapi.com/projects/
{
  "projects": [
    {
      "id": 654,
      "name": "Customer Success",
      "export_name": null,
      "created_at": "2026-05-12T09:31:00",
      "updated_at": "2026-06-28T14:02:11",
      "usable_lead_count": 85
    }
  ],
  "total": 1
}

Browse a project’s leads

GET /projects/{project_id}/leads

Page through a project’s usable leads as structured JSON. Each lead carries its nested person and company.

Query parameter Default Notes
limit 50 Page size, 1500
offset 0 Number of leads to skip
unlocked_only false Return only unlocked leads
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.signalsapi.com/projects/654/leads?limit=2&offset=0"
{
  "leads": [
    {
      "id": 90217,
      "project_id": 654,
      "created_at": "2026-06-20T08:14:00",
      "updated_at": "2026-06-20T08:14:00",
      "unlocked_at": null,
      "email": null,
      "email_status": "verified",
      "is_usable": true,
      "person": {
        "id": null,
        "first_name": "Matteo",
        "last_name": "Attems-Thonet",
        "name": "Matteo Attems-Thonet",
        "title": "Head of Customer Success",
        "headline": null,
        "linkedin_url": "https://www.linkedin.com/in/…"
      },
      "company": {
        "id": 4412,
        "name": "zollsoft GmbH",
        "domain": "zollsoft.de",
        "industry": "Software",
        "country": "DE",
        "headcount": 180
      }
    }
  ],
  "total": 85,
  "limit": 2,
  "offset": 0
}

total is the full count of usable leads in the project (not just the current page) — use it to drive pagination. To pull every lead at once, use the export endpoint below instead of paging.


Export a whole project

GET /projects/{project_id}/leads/export?format=json|csv

Streams all usable leads of a project in one response — no page limit. The CSV is byte‑for‑byte the same file you get from the project’s Download CSV button in the app, so any importer mapping you already have keeps working.

Query parameter Default Values
format json json, csv
# CSV, streamed straight to a file
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.signalsapi.com/projects/654/leads/export?format=csv" \
  -o leads.csv

# JSON array of rich rows
curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.signalsapi.com/projects/654/leads/export?format=json"

The CSV columns are:

website,decision_maker_linkedin_url,decision_maker_email,decision_maker_phone,signal_job_title

The JSON export returns the same rows with the full set of person, company, and signal fields. A project with no usable leads exports cleanly — a header‑only CSV or an empty [] — rather than an error.

The export is streamed, so even very large projects download in constant memory on both ends. It is read‑only and never consumes credits.


Notes & limits

  • Usable leads only. All three endpoints return the same usable‑lead set you see in the app; the export matches the web CSV download exactly.
  • Read‑only. Nothing here unlocks leads, runs enrichment, or spends credits.
  • Your data only. Requests are always scoped to your account; another user’s project id returns 404.
  • Rate limiting on the export endpoint is not yet enforced — be reasonable with very frequent full pulls.

See Limits for every pagination default and rate limit stated across the API in one place.

Recent changes

  • 2026-06-30 — API access launches: a read-only REST API for pulling your own projects and leads out of SignalsAPI as JSON or CSV.

  • 2026-04-16Company name in CSV exports – the company name column was missing from CSV downloads; now included.

  • 2025-01-14 — Fewer fields in CSV export

  • 2024-12-03 — Bugfix: not exporting leads that are in process of unlocking email

  • 2024-11-29 — Showing integration type in export list

  • 2024-06-20 — Export showing integration name and exports per day stats.

  • 2024-05-18 — List views of searches, filters, personas, lead lists and exports show where they are taking data from and where they are sending it to.

  • 2024-05-13 — Leads are downloaded based on the applied filters

  • 2024-05-01 — Fixed: lead status does not change to “exported” after exporting happens

  • 2024-04-30 — Fixed: it is now possible to approve a lead before emails finished unlocking, export will happen automatically when unlocking is finished

  • 2024-04-29 — Leads will get exported after you approve them by clicking “Approve” or “Reject” buttons, or enabling auto-approval in lead list settings.

  • 2024-04-28 — New tab “Leads” for working with leads in a mailbox-style with folders, downloading, unlocking emails, etc

  • 2024-04-25 — Showing people counts in filters, personas, exports

  • 2024-04-23 — Each page (searches, filters, personas, export) showing running status automatically updates when running is finished

  • 2024-03-20 — Matches are downloadable as CSV, go to Matches -> Download