HeyReach integration
HeyReach is a LinkedIn outreach platform that runs campaigns (connection requests, messages, InMails, profile views, follows, post likes) from several connected LinkedIn sender accounts. Manage lead and company lists and their leads, tags and custom fields; create, configure (settings, schedule, sequence, senders), start, pause and resume campaigns and add or stop leads in them; read the unified inbox and reply; read outreach stats; manage the workspace blacklist and webhooks. Connecting or re-authenticating LinkedIn accounts (passwords, cookies, PINs), proxies, email enrichment, the sender's network export and the Organization Management API (separate organization key) are not exposed, and lead photos, locations, work history and enriched emails, webhook URLs and custom headers are not returned. Actions run from real LinkedIn accounts and count against their LinkedIn limits. Rate limit: 300 requests per minute per API key (429 above). Authentication: a workspace API key (HeyReach, Integrations) sent in the X-API-KEY header.
Say what should happen.
The workflow builds itself.
What you can do with HeyReach
Each of these is one operation on one endpoint, available both as a workflow step and as a tool an AI agent can call on its own. Nothing bundles several operations into one action, so what a run did stays readable afterwards.
Most endpoints run on the free plan. A few, mainly the ones that publish on your behalf, need a paid plan.
Campaign, 6 operations
create_campaignCreate campaignPOSTCreates a campaign in DRAFT status with its lead list, senders, optional schedule (default Mon-Fri 09:00-17:00 UTC) and sequence. Nothing runs until start_campaign. Returns campaignId.create_campaign_from_templateCreate campaign from templatePOSTCreates a DRAFT campaign copying the sequence and schedule of an existing campaign, with a new name, lead list, senders and exclusions. Start it with start_campaign. Returns campaignId.list_campaignsList campaignsPOSTLists campaigns (up to 100 per page) with status, lead list, sender accounts, progress counts and exclusion settings. Filter by name, status or sender account.pause_campaignPause campaignPOSTPauses a running campaign: no further LinkedIn actions until resume_campaign. Pass a campaignId from list_campaigns.resume_campaignResume campaignPOSTResumes a paused campaign: its sender accounts start acting on LinkedIn again. Pass a campaignId from list_campaigns.start_campaignStart campaignPOSTActivates a DRAFT campaign made with create_campaign: it starts real LinkedIn outreach from its sender accounts. Needs a sequence and at least one connected sender; 400 otherwise.
Blacklisted company, 3 operations
add_blacklisted_companiesAdd blacklisted companiesPOSTBlacklists up to 100 companies so their employees are excluded from campaigns. Answers 200 even when some fail: read added, entries, duplicates and validationErrors.list_blacklisted_companiesList blacklisted companiesPOSTLists the workspace's blacklisted companies, newest first (limit 1 to 100, default 10). Leads working at them are excluded from campaigns.remove_blacklisted_companiesRemove blacklisted companiesPOSTRemoves up to 100 entries from the company blacklist (ids from add_blacklisted_companies or list_blacklisted_companies). Empty 200 on success.
Blacklisted lead, 3 operations
add_blacklisted_leadsAdd blacklisted leadsPOSTBlacklists up to 100 leads (excluded from every campaign). Answers 200 even when some fail: read added, entries (ids for remove_blacklisted_leads), duplicates and validationErrors.list_blacklisted_leadsList blacklisted leadsPOSTLists the workspace's blacklisted leads, newest first (limit 1 to 100, default 10), with how each entry resolved (matchingStatus, resolutionStage). Blacklisted leads are excluded from campaigns.remove_blacklisted_leadsRemove blacklisted leadsPOSTRemoves up to 100 entries from the lead blacklist (ids from add_blacklisted_leads or list_blacklisted_leads). Empty 200 on success; ids of other workspaces are ignored.
Campaign lead, 3 operations
add_leads_to_campaignAdd leads to campaignPOSTAdds up to 100 leads to a campaign, each optionally pinned to a sender account, and returns added, updated and failed counts. Leads enter the campaign's real LinkedIn outreach.list_campaign_leadsList campaign leadsPOSTLists a campaign's leads with their campaign, connection and message status, last action time and sender. Only leads already picked up appear; more pending leads may come later.stop_lead_in_campaignStop lead in campaignPOSTStops a lead's progression in a campaign; no further steps run for it. Identify the lead by leadMemberId (linkedin_id) or leadUrl.
Get by id, 3 operations
get_campaignGet campaignGETReturns one campaign: status, lead list, sender accounts, progress counts (pending, in progress, finished, failed, stopped, excluded) and exclusion settings.get_linkedin_accountGet linkedin accountGETReturns one connected LinkedIn sender account with its auth state, cooldowns and daily action limits. Pass an accountId from list_linkedin_accounts.get_listGet listGETReturns one lead or company list: name, type, item count, creation time and the campaigns using it. Pass a listId from list_lists.
Campaign account, 2 operations
add_linkedin_accounts_to_campaignAdd linkedin accounts to campaignPOSTAdds sender accounts to a campaign, keeping the current ones. Returns one result per account; errorStatus explains a failure (e.g. AccountDisconnected, AccountAlreadyAssignedToThisCampaign).remove_linkedin_accounts_from_campaignRemove linkedin accounts from campaignPOSTRemoves sender accounts from a campaign. Returns one status per account: Success, NotPartOfThisCampaign or NotFound.
Conversation, 2 operations
list_conversationsList conversationsPOSTLists LinkedIn conversations of the sender accounts, newest first, up to 100 per page; pass nextCursor back as cursor while hasNextPage is true. Includes recent messages and the correspondent.set_conversation_seen_statusSet conversation seen statusPOSTMarks a conversation as seen (read) or unseen.
Custom field, 2 operations
update_campaign_lead_custom_fieldsUpdate campaign lead custom fieldsPATCHUpserts custom fields on a lead of a campaign (in the campaign's lead list): existing fields change, new ones are created, null or empty deletes. Returns all its custom fields.update_list_lead_custom_fieldsUpdate list lead custom fieldsPATCHUpserts custom fields on a lead in a list: existing fields change, new ones are created, a null or empty value deletes the field. Returns all the lead's custom fields.
Lead tag, 2 operations
add_lead_tagsAdd lead tagsPOSTAdds tags to a lead (found by profile URL or LinkedIn ID) without touching its other tags. Returns the newly assigned tags. Either leadProfileUrl or leadLinkedInId identifies the lead.replace_lead_tagsReplace lead tagsPOSTReplaces all tags of a lead (found by profile URL or LinkedIn ID) with the given tags. Returns the assigned tags. Either leadProfileUrl or leadLinkedInId identifies the lead.
Linkedin account, 2 operations
list_linkedin_accountsList linkedin accountsPOSTLists the connected LinkedIn sender accounts (up to 100 per page): name, email, whether auth is valid, Sales Navigator and Recruiter status, cooldowns and daily action limits.resync_linkedin_accountResync linkedin accountPOSTStarts a resync of a LinkedIn sender account's profile and returns at once; poll get_linkedin_account_status for the result.
List, 2 operations
create_listCreate listPOSTCreates an empty lead list (type USER_LIST, the default) or company list (COMPANY_LIST). Fill a lead list with add_leads_to_list.list_listsList listsPOSTLists lead and company lists (up to 100 per page) with their type, item count and the campaigns using them. Filter by name, type or campaign.
List lead, 2 operations
add_leads_to_listAdd leads to listPOSTAdds up to 100 leads to a lead list and returns how many were added, updated or failed. A list is not a campaign: use add_leads_to_campaign to start leads in a running campaign.list_leads_in_listList leads in listPOSTLists the leads of a lead list (up to 1000 per page): name, headline, company, position, tags, email and custom fields. Filter by keyword, one lead, or creation date.
Webhook, 2 operations
create_webhookCreate webhookPOSTCreates a webhook that POSTs to your URL on one event type, for all campaigns or the listed ones. HeyReach documents no signing secret, so deliveries cannot be verified.list_webhooksList webhooksPOSTLists webhooks with name, event type, campaigns and active flag. Target URLs and custom headers are not returned.
Campaign accounts, 1 operation
replace_campaign_accountsReplace campaign accountsPOSTReplaces the whole list of sender accounts of a campaign (DRAFT, SCHEDULED or PAUSED). On a paused campaign, leads of removed senders are stopped for good.
Campaign schedule, 1 operation
update_campaign_scheduleUpdate campaign schedulePOSTReplaces when a campaign runs (daily window, days, time zone, start and end dates). DRAFT, SCHEDULED or PAUSED only; startDate cannot change after the first start.
Campaign sequence, 1 operation
update_campaign_sequenceUpdate campaign sequencePOSTCreates or fully replaces a campaign's sequence (workflow tree). DRAFT, SCHEDULED or PAUSED only; on a paused campaign lead states are kept and remapped.
Campaign settings, 1 operation
update_campaign_settingsUpdate campaign settingsPOSTReplaces a campaign's name, lead list and exclusion options (DRAFT, SCHEDULED or PAUSED only). All three exclusions are required: copy the current ones from get_campaign to keep them; excludeListId left out is cleared.
Campaign stats, 1 operation
get_overall_stats_by_campaignGet overall stats by campaignPOSTLike get_overall_stats but broken down per campaign: overallStats and each day of byDayStats list one stats object per campaign, with campaignId, campaignName and isCampaignDeleted.
Connection, 1 operation
check_lead_connectionCheck lead connectionPOSTTells whether a lead is a 1st-degree LinkedIn connection of a sender account. Pass leadProfileUrl or leadLinkedInId, not both.
Delete leads from list, 1 operation
remove_leads_from_listRemove leads from listDELETERemoves leads from a lead list by their LinkedIn member IDs (linkedin_id from get_lead or list_campaign_leads).
Delete leads from list by profile url, 1 operation
remove_leads_from_list_by_profile_urlRemove leads from list by profile urlDELETERemoves leads from a lead list by LinkedIn profile URL. Answers 200 even when some are not in the list; those come back in notFoundInList (as usernames).
Delete webhook, 1 operation
delete_webhookDelete webhookDELETEDeletes a webhook. Pass a webhookId from list_webhooks.
Get account status, 1 operation
get_linkedin_account_statusGet linkedin account statusGETReturns the connection status of a LinkedIn sender account (with failureReason when it failed) and whether Sales Navigator and Recruiter are authenticated. Cached for 10 seconds; poll after resync_linkedin_account.
Get campaign sequence, 1 operation
get_campaign_sequenceGet campaign sequenceGETReturns a campaign's sequence as a node tree (nodeType, delays, payload, conditionalNode, unconditionalNode), reusable as-is in update_campaign_sequence. Empty when the campaign has none.
Get chatroom, 1 operation
get_conversationGet conversationGETReturns one LinkedIn conversation with its messages, correspondent and sender account. Pass the sender accountId and the conversation id from list_conversations.
Get webhook by id, 1 operation
get_webhookGet webhookGETReturns one webhook's name, event type, campaigns and active flag. The target URL and custom headers are not returned. Pass a webhookId from list_webhooks.
Lead, 1 operation
get_leadGet leadPOSTReturns a lead's details by LinkedIn profile URL: linkedin_id (used by the other lead tools), name, headline, company, position, email, connections and followers.
Lead campaign, 1 operation
list_campaigns_for_leadList campaigns for leadPOSTLists the campaigns a lead is in (found by email, LinkedIn ID or profile URL) with campaign status and the lead's status in each.
Lead list, 1 operation
list_lists_for_leadList lists for leadPOSTLists the lead lists a lead is in, found by email, LinkedIn ID or profile URL.
List company, 1 operation
list_companies_in_listList companies in listPOSTLists the companies of a company list (up to 1000 per page): name, description, industry, size, LinkedIn employees, location, specialities and website.
Message, 1 operation
send_messageSend messagePOSTSends a LinkedIn message in an existing conversation from a sender account. This really messages the person on LinkedIn.
Remove account, 1 operation
remove_linkedin_accountRemove linkedin accountDELETERemoves a LinkedIn sender account from the workspace. With force=true it is first removed from all its active campaigns. Pass an accountId from list_linkedin_accounts.
Stats, 1 operation
get_overall_statsGet overall statsPOSTReturns outreach stats (profile views, likes, follows, messages, InMails, replies, connections sent and accepted, reply and acceptance rates) overall and per day, for chosen senders and campaigns.
Tag, 1 operation
create_tagsCreate tagsPOSTCreates one or more workspace tags to assign to leads, each with a display name and a color (Blue, Green, Purple, Pink, Red, Cyan, Yellow or Orange).
Update inbox configuration, 1 operation
update_linkedin_account_inbox_configurationUpdate linkedin account inbox configurationPOSTSets how far back a sender account's LinkedIn inbox is synced when it connects: inboxScrapeMode 0 (all time) or 1 (only HeyReach conversations).
Update webhook, 1 operation
update_webhookUpdate webhookPATCHChanges a webhook's name, URL, event type, campaigns or active flag. Fields left out keep their value. Pass a webhookId from list_webhooks.
Use HeyReach from Claude Code, Cursor or Codex
Connect HeyReach in LiveContext, create an API key in Settings, then add the LiveContext MCP server to your client. Its HeyReach operations become tools the client can call, next to every other integration you connected.
claude mcp add --transport http livecontext https://livecontext.ai/mcp --header "X-API-Key: YOUR_API_KEY"[mcp_servers.livecontext]
url = "https://livecontext.ai/mcp"
[mcp_servers.livecontext.http_headers]
"X-API-Key" = "YOUR_API_KEY"{
"mcpServers": {
"livecontext": {
"type": "http",
"url": "https://livecontext.ai/mcp",
"headers": {
"X-API-Key": "YOUR_API_KEY"
}
}
}
}How to connect HeyReach
- Create your workspace
Sign up free. Nothing to install.
- Connect HeyReach once
Add your HeyReach connection in Settings. Every tool from this integration reuses it, and secrets are encrypted at rest and visible only to you.
- Describe the job in chat
The workflow builds itself in front of you and picks the endpoints it needs. Drag the steps yourself on the canvas whenever you would rather be explicit.
HeyReach integration FAQ
What can you do with the HeyReach integration?
LiveContext exposes 57 operations on HeyReach, covering campaign, blacklisted company, blacklisted lead and campaign lead.
