Docs
Get API key

Leads

List and find leads

GET/leads

The workspace’s leads, newest first, a page at a time. Filters combine: a list, a campaign (and each person’s status in it), the lead’s Stage or status, a tag, the app’s search (name, job title, company or LinkedIn link), or what changed since a time. linkedinUrl or email finds one person: everyone saved for them.

Try itSend a real request with your API key

Your key stays in this page and goes only to Salesteam.

Query

  • searchstring

    The app’s search: matches first and last name, job title, company and LinkedIn link. Up to 200 characters. Example: acme.

  • listIdstring

    Only people in this list.

  • campaignIdstring

    Only people in this campaign.

  • campaignStatusstring

    With campaignId: only people at this point in it. One of active, waiting_for_acceptance, retrying, paused, needs_review, replied, suppressed, finished, stopped.

  • stagestring

    Only leads at this Stage, as the Leads table’s Stage filter. One of new, queued, contacted, connected, replied, interested, qualified, booked, attended, won, not_interested, no_show, lost, suppressed, blacklisted.

  • statusstring

    Only leads with this status. One of new, queued, contacted, connected, replied, suppressed.

  • tagstring

    Only people with this tag (name or ID).

  • updatedSincestring · date-time

    Only leads that changed at or after this time (see updatedAt). To sync, keep the time you started and send it next time.

  • linkedinUrlstring

    Find one person by their LinkedIn link. Example: https://www.linkedin.com/in/jamie-lee-example.

  • emailstring · email

    Find one person by email: the one Salesteam found or was sent. Example: jamie@example.co.

  • limitinteger

    Leads per page. Defaults to 100.

  • cursorstring

    nextCursor from the previous page.

Answer

200 OK Leads.

  • dataarray of LeadRequired
    Each item
    • idstringRequired
    • firstNamestringRequired
    • lastNamestringRequired
    • fullNamestringRequired
    • titlestringRequired
    • companystringRequired
    • companyShortstringRequired

      What {{company_short}} (and {{company_name}}) say for this lead in messages: the short name set for them, or the company name cleaned up (no Inc., no tagline).

    • companyShortSetbooleanRequired

      A short company name was set for this lead; false means the automatic one.

    • locationstringRequired
    • industrystringRequired
    • linkedinUrlstringRequired
    • emailstring or nullRequired

      A found email, when it is usable.

    • emailStatusstring or nullRequired

      One of deliverable, catch_all, unknown.

    • statusstringRequired

      One of new, queued, contacted, connected, replied, suppressed.

    • stagestringRequired

      Where the person is, as the Leads table’s Stage column says it: Blacklisted or Do not contact (suppressed) first, then an outcome you recorded (interested, qualified, booked, attended, won, no_show, lost), then Interested or Not interested from tags and AI reply tags, else the automatic status (new, queued, contacted, connected, replied). One of new, queued, contacted, connected, replied, interested, qualified, booked, attended, won, not_interested, no_show, lost, suppressed, blacklisted.

    • tagsarray of stringRequired
    • customFieldsobjectRequired

      The lead's custom field values by field key: text, numbers, dates as YYYY-MM-DD, web addresses, and lists for Multi-select fields.

    • listsarray of objectRequired
      Each item
      • idstringRequired

        The list's ID.

      • namestringRequired

        The list's name.

    • fromPostobject or nullRequired

      The LinkedIn post this person liked or commented on when they were saved from it (Posts › Engagers), kept beside how they were first added. Null when they weren't saved from a post.

      Inside it
      • postUrlstringRequired
      • topicstring or nullRequired

        What the post was about, in the workspace's words: what {{post_topic}} says in messages.

      • interactionstringRequired

        One of like, comment.

      • commentstring or nullRequired

        Their comment, up to 300 characters.

      • yourPostbooleanRequired

        The post is one of the workspace's own.

      • engagedAtstring · date-timeRequired
      • savedAtstring · date-timeRequired
    • createdAtstring · date-timeRequired
    • updatedAtstring · date-timeRequired

      The last time anything about this person changed: their details, lists or tags, an email found, outreach or a reply. What updatedSince filters on.

    • campaignsarray of LeadCampaignRequired
      Each item
      • campaignobjectRequired
        Inside it
        • idstringRequired
        • namestringRequired
        • statusstringRequired

          draft: not launched. active: running. paused: stopped by the owner. completed: finished. One of draft, active, paused, completed.

      • statusstringRequired

        Where the person is in a campaign. One of active, waiting_for_acceptance, retrying, paused, needs_review, replied, suppressed, finished, stopped.

      • stepintegerRequired

        The step they are on, from 1.

      • stepsintegerRequired
      • senderobject or nullRequired

        The LinkedIn account reaching out.

        Inside it
        • idstring
        • namestring
      • connectionRequestSentAtstring · date-time or nullRequired
      • acceptedAtstring · date-time or nullRequired
      • lastContactedAtstring · date-time or nullRequired
      • messagesSentintegerRequired
      • repliedAtstring · date-time or nullRequired
      • finishedAtstring · date-time or nullRequired
      • nextStepAtstring · date-time or nullRequired

        When the next step is due, while active.

      • pausedReasonstring or nullRequired
  • nextCursorstring or nullRequired

    Pass as cursor for the next page; null on the last page.

Errors

  • 400 Bad requestinvalid_request invalid_json duplicate_in_request
  • 401 Unauthorizedunauthorized
  • 404 Not foundnot_found not_in_campaign
  • 429 Too many requestsrate_limited
  • 500 Server errorserver_error

Every error has the same shape. See Errors.

GET /leads
curl "https://app.salesteam.dev/api/v1/leads?search=acme" \
  -H "Authorization: Bearer $SALESTEAM_API_KEY"
200 answer
{
  "data": [
    {
      "id": "lead_7Qm2xT9a",
      "firstName": "Jamie",
      "lastName": "Lee",
      "fullName": "Jamie Lee",
      "title": "Head of Sales",
      "company": "Pear Sky",
      "companyShort": "Pear Sky",
      "companyShortSet": true,
      "location": "London, United Kingdom",
      "industry": "Software",
      "linkedinUrl": "https://www.linkedin.com/in/jamie-lee-example",
      "email": "jamie@example.co",
      "emailStatus": "deliverable",
      "status": "new",
      "stage": "new",
      "tags": [
        "tag"
      ],
      "customFields": {},
      "lists": [
        {
          "id": "list_7Qm2xT9a",
          "name": "Founders Q4"
        }
      ],
      "fromPost": {
        "postUrl": "https://example.com",
        "topic": "topic",
        "interaction": "like",
        "comment": "comment",
        "yourPost": true,
        "engagedAt": "2026-11-12T09:00:00.000Z",
        "savedAt": "2026-11-12T09:00:00.000Z"
      },
      "createdAt": "2026-11-12T09:00:00.000Z",
      "updatedAt": "2026-11-12T09:00:00.000Z",
      "campaigns": [
        {
          "campaign": {
            "id": null,
            "name": null,
            "status": null
          },
          "status": "active",
          "step": 1,
          "steps": 1,
          "sender": {
            "id": null,
            "name": null
          },
          "connectionRequestSentAt": "2026-11-12T09:00:00.000Z",
          "acceptedAt": "2026-11-12T09:00:00.000Z",
          "lastContactedAt": "2026-11-12T09:00:00.000Z",
          "messagesSent": 1,
          "repliedAt": "2026-11-12T09:00:00.000Z",
          "finishedAt": "2026-11-12T09:00:00.000Z",
          "nextStepAt": "2026-11-12T09:00:00.000Z",
          "pausedReason": "paused reason"
        }
      ]
    }
  ],
  "nextCursor": null
}