Leads & Lead Lists
Find, import, enrich and edit leads, and manage the lists that hold them.
Tools (11)
Section titled “Tools (11)”get_lead_comments
Section titled “get_lead_comments”Full name: campaignstack_get_lead_comments
Freshly read recent LinkedIn comments for one lead/profile with a hard maxRequests cap. Nothing is written to the other platform and nothing is stored from this read. Charges recent_comments_read credits per call; campaignstack_estimate_cost gives the number before you commit. Charged per Voyager call the runner makes, not per comment returned. The workspace’s own connected account reads free.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
workspaceId | string | No | — | Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too. |
profileUrl | string | Yes | — | LinkedIn profile URL to read comments from. (min length: 1) |
untilDate | string | Yes | — | ISO date to read back to, e.g. 2026-08-10. (min length: 1) |
maxRequests | integer | No | 10 | (min: 1, max: 30) |
accountId | string | No | — |
get_lead_enrichments
Section titled “get_lead_enrichments”Full name: campaignstack_get_lead_enrichments
List recent workspace lead enrichment rows for async audit: type enrichment_queue (default) covers profile/company refresh jobs, type contact_finder covers built-in email/phone lookups (pass requestId for one specific lookup). The two job kinds have different status vocabularies and are never merged into one list. Use when queue counts are not enough and the user needs bounded row-level evidence. It reads audit state only and never retries work. Results are one page. When pagination reports more, say so rather than presenting the page as the whole set, and page through before counting anything.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
workspaceId | string | No | — | Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too. |
type | enrichment_queue | contact_finder | No | "enrichment_queue" | enrichment_queue = profile/company refresh jobs (status: pending/processing/completed/failed). contact_finder = built-in email/phone lookups (status: queued/linked/submitted/completed/failed). Different systems with different status vocabularies; never mixed in one list. |
status | string | No | — | Status filter in the selected type’s own vocabulary (validated against enrichment_queue or contact_finder statuses). |
requestId | string | No | — | When type is contact_finder, look up exactly this request instead of listing. |
limit | integer | No | 20 | (min: 1, max: 100) |
cursor | string | No | — |
get_lead_lists
Section titled “get_lead_lists”Full name: campaignstack_get_lead_lists
Read lead lists by ids, or list a campaign’s or the workspace’s lead lists, narrowed by origin (source) or by LinkedIn account (accountId: that account’s connections, invited and post engagers lists). Optionally includes a bounded page of members. Use this when the user asks which lists exist or who is in them; it does not add or remove members. Results are one page. When pagination reports more, say so rather than presenting the page as the whole set, and page through before counting anything.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
workspaceId | string | No | — | Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too. |
ids | string[] | No | — | Specific lead-list IDs. Max 25. |
campaignId | string | No | — | List lead lists in this campaign when ids are omitted. Without it, the workspace’s lists are listed. |
source | manual | import | event | group | scheduled_sync | linkedin_connections | linkedin_invited | linkedin_post_engagers | No | — | Only lists of this origin. linkedin_connections, linkedin_invited (people the account’s workflows sent a connection request to) and linkedin_post_engagers (people who reacted to, commented on or reposted the account’s posts) are the lists a LinkedIn account owns; the last two are kept up to date by CampaignStack and their members cannot be edited. |
accountId | string | No | — | Only the lists this LinkedIn account owns in the workspace (its connections, invited and post engagers lists). |
includeMembers | boolean | No | false | |
limit | integer | No | 20 | (min: 1, max: 100) |
cursor | string | No | — |
get_lead_refresh_status
Section titled “get_lead_refresh_status”Full name: campaignstack_get_lead_refresh_status
Read workspace lead-enrichment queue status counts, optionally for one campaign. Use this when the user asks whether lead refresh/enrichment is moving; it does not enqueue refreshes.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
workspaceId | string | No | — | Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too. |
campaignId | string | No | — | Optional campaign filter for enrichment queue status. |
get_leads
Section titled “get_leads”Full name: campaignstack_get_leads
Read leads by ids or search filters in one bounded V2 envelope. Includes are capped; campaign-specific scoreBreakdown requires campaignId. Use this instead of legacy search/get pairs when the user needs leads plus selected context. It does not modify leads or enqueue outreach. Results are one page. When pagination reports more, say so rather than presenting the page as the whole set, and page through before counting anything.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
workspaceId | string | No | — | Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too. |
ids | string[] | No | — | Specific lead IDs to hydrate. Max 25. |
query | string | No | — | Name, email, or LinkedIn URL search when ids are omitted. |
companyId | string | No | — | Restrict search to leads attached to this company. |
limit | integer | No | 20 | (min: 1, max: 100) |
cursor | string | No | — | |
campaignId | string | No | — | Required when include.scoreBreakdown is true. |
include | object | No | {} | |
include.signals | boolean | No | false | |
include.scoreBreakdown | boolean | No | false | |
include.outreachHistory | boolean | No | false | |
include.mutualConnections | boolean | No | false | Previously recorded LinkedIn connection edges only, not a live crawl of the lead’s full network. Absence of an edge means not yet observed, not that none exists. Returns { connections, total }, total being the count returned under the limit. |
include.mutualConnectionsDegree | 1st | 2nd | 3rd | out_of_network | No | — | Only with mutualConnections: keep edges of this observed degree. |
include.latestEnrichment | boolean | No | false | Two distinct job kinds, kept separate: refreshJob is the latest enrichmentQueue profile/company refresh job; contactFinderRequests are bounded, recent built-in Contact Finder (email/phone) lookups. They use different status vocabularies and are never merged into one list. |
include.limit | integer | No | 10 | (min: 1, max: 50) |
refresh_leads
Section titled “refresh_leads”Full name: campaignstack_refresh_leads
Queue up to 50 LinkedIn lead profiles for fresh enrichment. Uses bounded queue priority only: normal joins the standard queue, high asks the queue to prioritize these items. This may consume queue capacity and enrichment credits when workers complete rows.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
workspaceId | string | No | — | Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too. |
accountId | string | Yes | — | (min length: 1) |
campaignId | string | No | — | |
priority | normal | high | No | "normal" | |
results | object[] | Yes | — |
enrich_leads
Section titled “enrich_leads”Full name: campaignstack_enrich_leads
Run contact enrichment for up to 25 leads with bounded include flags. Email is on by default; phone must be explicitly requested and can cost more. Per-lead provider errors are returned independently. Charges vary by mode (email reveal: contact_email_reveal credits per result found; phone reveal: contact_phone_reveal credits per result found). campaignstack_estimate_cost accepts variant or variantCounts before you commit. Email is on by default; phone is charged separately only when include.phone is true.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
workspaceId | string | No | — | Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too. |
leads | object[] | Yes | — | |
provider | bettercontact | apollo | instantly | clay | No | "bettercontact" | |
include | object | No | {} | |
include.email | boolean | No | true | |
include.phone | boolean | No | false | |
clayRoutineId | string | No | — |
edit_lead_list
Section titled “edit_lead_list”Full name: campaignstack_edit_lead_list
Create set/query lead lists, update list metadata/query, or add/remove up to 50 members. Query-list membership is predicate-owned; explicit add/remove requires an editable set list.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
workspaceId | string | No | — | Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too. |
op | create | create_query | update | add_members | remove_members | Yes | — | |
leadListId | string | No | — | |
campaignId | string | No | — | |
name | string | No | — | (min length: 1) |
query | object | No | — | |
query.include | object[] | Yes | — | |
query.exclude | array | Yes | — | |
query.filter | object[] | Yes | — | |
query.logic | and | or | Yes | — | |
query.excludedLeadIds | string[] | No | — | |
members | object[] | No | — |
edit_leads
Section titled “edit_leads”Full name: campaignstack_edit_leads
Apply bounded lead edits. Metadata patches write workspace overlays for global or private leads; contact patches are global-row contact updates only after workspace membership proof; profile link/unlink is provenance-bounded to private leads. Max 50 leads per call.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
workspaceId | string | No | — | Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too. |
leads | object[] | Yes | — |
import_leads
Section titled “import_leads”Full name: campaignstack_import_leads
Import parsed CSV lead rows into private workspace leads with CSV provenance, optionally attaching successful rows to one lead list. Max 100 rows per call; per-row failures are returned without aborting the whole import.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
workspaceId | string | No | — | Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too. |
rows | object[] | Yes | — | CSV rows already parsed into fields. Max 100 per call. |
leadListId | string | No | — | Optional set lead-list to attach imported rows to. |
importedFrom | object | No | {"type":"csv"} | |
importedFrom.type | string | Yes | — | |
importedFrom.name | string | No | — |
delete_lead_list
Section titled “delete_lead_list”Full name: campaignstack_delete_lead_list
Delete up to 50 lead lists from the bound workspace. The list row is removed and entries drain asynchronously. This permanently deletes a root record. Before calling it, name exactly what will be deleted, explain that it cannot be undone, and wait for an explicit yes.
Parameters
Section titled “Parameters”| Name | Type | Required | Default | Description |
|---|---|---|---|---|
workspaceId | string | No | — | Workspace ID. Omit it when this connection reaches one workspace: a workspace key (cs_) is bound to its own, and a user key (csu_) or connected app whose person belongs to exactly one workspace defaults to that one. Required only when the person belongs to several; the error then lists them, and campaignstack_whoami reports them too. |
leadListIds | string[] | Yes | — | |
confirmed | boolean | Yes | — | This permanently deletes a root record. Before calling it, name exactly what will be deleted, explain that it cannot be undone, and wait for an explicit yes. |