Pushing Leads To HeyReach
How to push LinkedIn signal leads into a HeyReach campaign from Topa.
Pushing Leads To HeyReach
Topa can automatically send LinkedIn leads from your signals into a HeyReach.io campaign. Once configured, every time a signal runs and captures new leads, Topa applies your saved filter and Ai Messaging pitch (optional), enriches contact details (optional), and pushes matching leads into HeyReach by their LinkedIn profile URL.
Company posts and irrelevant posts are excluded by default.
Unlike email outreach tools, HeyReach does not require an email address. Leads are identified by their LinkedIn profile URL and are still delivered even when enrichment finds no email.
Step 1: Connect your HeyReach API key
Before you can push leads, add your HeyReach API key to Topa.
Get your HeyReach API key: Log in to HeyReach and open Public API under Integrations to create or copy your key.
- Log in to Topa
- In the sidebar, click API Key / Integrations
- Scroll to the HeyReach.io section
- Enter a friendly account name (for example: Main HeyReach Account)
- Paste your HeyReach API key
- Click Connect
You can add multiple HeyReach accounts if you use more than one API key. Each account gets a friendly name so you can pick the right one when setting up a signal integration.
Step 2: Open Integrations on a signal
HeyReach is configured per signal — each signal can push to its own HeyReach campaign.
- In the sidebar, click LinkedIn Signals
- Find the signal you want to connect in the signals table
- In the Actions column, click Integrations
The Integrations dialog opens. You will see options for Smartlead, Instantly, Webhook, Topa Campaign, and HeyReach.
Step 3: Choose HeyReach and set delivery options
Click HeyReach.io — Send leads to a HeyReach campaign.
Topa walks you through Step 1 of the HeyReach setup:
Apply a saved filter (optional)
Choose Yes if you only want leads matching a saved filter to be pushed. Select the filter from the dropdown.
Choose No to push all eligible leads from the signal (still excluding company posts and irrelevant posts by default).
If you have not created a saved filter yet, go to LinkedIn Leads, set up your ICP filters, and click Save filter first.
Apply an Ai Messaging template (optional)
Choose Yes if you want Topa to generate personalised messaging for each lead before pushing. Select the pitch from the dropdown.
Choose No to push leads without generating Ai messaging first.
Prewritten messages will be available as custom user fields in the HeyReach campaign (for example ai_outreach_message and ai_connection_message).
If you have not created a pitch yet, go to LinkedIn Leads and add one under Ai Messaging Pitch first.
Enrichment options
Enrichment is optional for HeyReach. Choose how Topa should enrich leads before pushing:
- None — push leads by LinkedIn profile only (no email or phone lookup)
- Enrich Email — look up email addresses when available
- Enrich Cell & Email — look up both cellphone and email when available
When enrichment is enabled, Topa waits for it to complete before sending a lead to HeyReach. Enrichment uses credits from your account. A lead without an email is still delivered — HeyReach identifies the contact by their LinkedIn profile URL.
Click Continue when you are done.
Step 4: Select your HeyReach account and campaign
In Step 2 of the HeyReach setup:
- Select your HeyReach API key from the dropdown (the friendly name you set in Step 1)
- Select the HeyReach campaign you want leads added to
- Click Save Integration
The HeyReach card on the Integrations home screen will show an Active badge when the integration is saved.
Step 5: Test and push leads
Once the integration is active, you have two useful actions on the HeyReach card:
- Push Test Lead — send test leads to HeyReach to verify delivery is working
- Push Old Leads — re-queue all eligible existing leads from this signal into HeyReach (useful if you set up the integration after leads were already captured)
Clicking Push Old Leads asks you to confirm before queuing.
When does this trigger?
Each time your signal runs and captures new leads, Topa automatically:
- Excludes company posts and irrelevant posts
- Applies your saved filter (if configured)
- Enriches email and/or cellphone (if configured)
- Generates Ai messaging from your pitch (if configured)
- Pushes matching leads into your HeyReach campaign by LinkedIn profile URL
Leads are sent with profile details, company info, LinkedIn activity context, and any Ai-generated messaging as custom user fields in HeyReach.
What data is sent to HeyReach?
Topa sends a POST request to https://api.heyreach.io/api/public/campaign/AddLeadsToCampaignV2 for each lead, with your API key in the X-API-KEY header. Empty fields are omitted from the payload.
Request shape
{ "campaignId": 12345, "accountLeadPairs": [ { "lead": { "profileUrl": "https://www.linkedin.com/in/example", "firstName": "Sarah", "lastName": "Chen", "summary": "VP Sales at Acme Inc", "companyName": "Acme Inc", "position": "VP Sales", "emailAddress": "sarah.chen@acme.io", "location": "San Francisco, United States", "customUserFields": [ { "name": "lead_type", "value": "liked" }, { "name": "ai_outreach_message", "value": "Hi Sarah, ..." } ] } } ]}Lead fields (visible in HeyReach)
customUserFields
Example Data Available In HeyReach To Run Campaigns
Example: Commenter (lead_type: commented)
A person who commented on a post on a monitored profile or company page. Same as a liker, but includes comment_text.
customUserFields
{ "campaignId": 12345, "accountLeadPairs": [ { "lead": { "profileUrl": "https://www.linkedin.com/in/jamesortiz", "firstName": "James", "lastName": "Ortiz", "summary": "Head of Growth at BuildCo", "companyName": "BuildCo", "position": "Head of Growth", "emailAddress": "james.ortiz@buildco.com", "location": "London, United Kingdom", "customUserFields": [ { "name": "lead_type", "value": "commented" }, { "name": "author_headline", "value": "Head of Growth at BuildCo" }, { "name": "comment_text", "value": "This is exactly the problem we are solving — great post." }, { "name": "post_text", "value": "Excited to share our Q1 results — outbound is working better than ever." }, { "name": "source_author_name", "value": "Dan Wardrope" }, { "name": "source_author_url", "value": "https://www.linkedin.com/in/dan-wardrope/" }, { "name": "signal_name", "value": "Dan Wardrope Engagement" }, { "name": "signal_target", "value": "https://www.linkedin.com/in/dan-wardrope/" }, { "name": "ai_outreach_message", "value": "Hi James, your comment on Dan's post really stood out..." }, { "name": "ai_connection_message", "value": "Hi James — great comment on Dan's post. Would love to connect." }, { "name": "company_industry", "value": "Construction Tech" }, { "name": "follower_count", "value": "3100" }, { "name": "connection_count", "value": "900" }, { "name": "phone", "value": "+14155550987" } ] } } ]}Example: Poster (lead_type: posted)
A person who posted about your monitored keyword (Keyword Monitoring signal). Includes keyword and their own post_text. For posters, source_author_name / source_author_url point to the poster themselves (they are the author).
customUserFields
{ "campaignId": 12345, "accountLeadPairs": [ { "lead": { "profileUrl": "https://www.linkedin.com/in/emmawalsh", "firstName": "Emma", "lastName": "Walsh", "summary": "Founder at SaaS Foundry", "companyName": "SaaS Foundry", "position": "Founder", "emailAddress": "emma.walsh@saasfoundry.com", "location": "Austin, United States", "customUserFields": [ { "name": "lead_type", "value": "posted" }, { "name": "author_headline", "value": "Founder at SaaS Foundry" }, { "name": "keyword", "value": "outbound sales" }, { "name": "post_text", "value": "We just hit $1M ARR using outbound sales — here is what worked for us." }, { "name": "source_author_name", "value": "Emma Walsh" }, { "name": "source_author_url", "value": "https://www.linkedin.com/in/emmawalsh" }, { "name": "signal_name", "value": "Outbound Sales Keyword" }, { "name": "signal_target", "value": "outbound sales" }, { "name": "ai_outreach_message", "value": "Hi Emma, congrats on the $1M ARR post about outbound sales..." }, { "name": "ai_connection_message", "value": "Hi Emma — loved your post on outbound sales. Would love to connect." }, { "name": "company_industry", "value": "Software" }, { "name": "follower_count", "value": "8900" }, { "name": "connection_count", "value": "2100" }, { "name": "phone", "value": "+14155550654" } ] } } ]}Example: Liker (lead_type: liked)
A person who liked a post on a monitored profile or company page.
customUserFields
{ "campaignId": 12345, "accountLeadPairs": [ { "lead": { "profileUrl": "https://www.linkedin.com/in/sarahchen", "firstName": "Sarah", "lastName": "Chen", "summary": "VP Sales at Acme Inc", "companyName": "Acme Inc", "position": "VP Sales", "emailAddress": "sarah.chen@acme.io", "location": "San Francisco, United States", "customUserFields": [ { "name": "lead_type", "value": "liked" }, { "name": "author_headline", "value": "VP Sales at Acme Inc" }, { "name": "post_text", "value": "Excited to share our Q1 results — outbound is working better than ever." }, { "name": "source_author_name", "value": "Dan Wardrope" }, { "name": "source_author_url", "value": "https://www.linkedin.com/in/dan-wardrope/" }, { "name": "signal_name", "value": "Dan Wardrope Engagement" }, { "name": "signal_target", "value": "https://www.linkedin.com/in/dan-wardrope/" }, { "name": "ai_outreach_message", "value": "Hi Sarah, loved seeing you engage with Dan's post on outbound..." }, { "name": "ai_connection_message", "value": "Hi Sarah — saw you liked Dan's post on outbound. Would love to connect." }, { "name": "company_industry", "value": "Software" }, { "name": "follower_count", "value": "4200" }, { "name": "connection_count", "value": "1800" }, { "name": "phone", "value": "+14155550123" } ] } } ]}