Pushing Leads Via Webhook

Step-by-step guide to sending LinkedIn signal leads to a custom webhook endpoint.

Pushing Leads Via Webhook

Topa can automatically send LinkedIn leads from your signals to any webhook endpoint you control. 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 POSTs one JSON payload per lead to your URL.

Company posts and irrelevant posts are excluded by default.

Step 1: Prepare your webhook endpoint

Before connecting a signal, set up an HTTPS endpoint that can receive lead data from Topa.

  1. Create a URL on your server (for example https://your-server.example.com/webhooks/topa)

  2. Accept POST requests with a JSON body

  3. Return any 2xx HTTP status code when the payload is received successfully

Topa sends requests with Content-Type: application/json and User-Agent: TopaLinkedInSignalWebhook/1.0. If your endpoint returns an error or times out, Topa retries automatically (with backoff) before marking a lead as failed.

You do not need to add an API key in Topa for webhooks — the endpoint URL is configured per signal.

Step 2: Open Integrations on a signal

Webhooks are configured per signal — each signal can send to its own endpoint.

  1. In the sidebar, click LinkedIn Signals

  2. Find the signal you want to connect in the signals table

  3. 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 Webhook and set delivery options

Click WebhookPOST every new lead to a custom URL.

Topa walks you through Step 1 of the Webhook setup:

Apply a saved filter (optional)

Choose Yes if you only want leads matching a saved filter to be sent. Select the filter from the dropdown.

Choose No to send 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 sending. Select the pitch from the dropdown.

Choose No to send leads without generating Ai messaging first.

Prewritten messages will be available in the webhook payload as ai_outreach_message, ai_vm_message, and ai_connection_message on the lead object.

If you have not created a pitch yet, go to LinkedIn Leads and add one under Ai Messaging Pitch first.

Enrichment options

Unlike email tools, webhooks do not require an email address. Choose how Topa should enrich leads before sending:

  • None — send leads with LinkedIn profile data only (no enrichment lookup)

  • Enrich Email — look up email addresses before sending

  • Enrich Cell & Email — look up both cellphone and email

When enrichment is enabled, Topa waits for lookups to complete before sending the webhook. Enrichment uses credits from your account.

Click Continue when you are done.

Step 4: Enter your webhook URL and save

In Step 2 of the Webhook setup:

  1. Enter your Webhook endpoint URL (must start with http:// or https://)

  2. Review the summary (signal, saved filter, Ai Messaging template, enrichment)

  3. Click Save webhook

The Webhook card on the Integrations home screen will show an Active badge when a URL is saved. Clear the URL field and save to disable the webhook.

Step 5: Test and push leads

Once the integration is active, you have two useful actions on the Webhook card:

  • Push Test Lead — send three sample payloads (posted, commented, and liked scenarios) to your endpoint to verify delivery is working

  • Push Old Leads — re-queue all eligible existing leads from this signal through the webhook pipeline (useful if you set up the integration after leads were already captured)

Clicking Push Old Leads asks you to confirm before queuing.

Test payloads include test: true, test_batch: true, and test_scenario at the top level so you can tell them apart from live traffic. The lead object uses the same fields as live delivery.

When does this trigger?

Each time your signal runs and captures new leads, Topa automatically:

  1. Excludes company posts and irrelevant posts

  2. Applies your saved filter (if configured)

  3. Enriches email and/or cellphone (if configured)

  4. Generates Ai messaging from your pitch (if configured)

  5. Sends one POST request per matching lead to your webhook URL

Each lead is sent as its own request. Your endpoint should respond with a 2xx status to acknowledge receipt.

What data is sent to your webhook?

Topa sends a POST request to the URL you configured on the signal. The body is a single JSON object. Unset fields on the lead object may appear as null (for example comment_text on a poster, or enriched_email when enrichment is off). Your integration should treat null and missing keys the same.

Top-level fields

Field Description

event

Always linkedin_signal.lead

sent_at

ISO timestamp when Topa sent the request

attempt

Delivery attempt number (starts at 1, increments on retries)

signal

Object with signal metadata (see table below)

lead

Object with lead data (see table below)

signal object fields

Field Description

id

Topa signal ID

name

Signal name

type

Signal type (profile or keyword monitoring)

target

Monitored LinkedIn profile/company URL or keyword

webhook_enrich_mode

none, email, or email_phone

webhook_had_ai_pitch

true if an Ai Messaging template was enabled

webhook_had_saved_filter

true if a saved filter was enabled

lead object fields

Field Description

id

Topa lead ID

user_id

Topa account user ID

signal_id

Topa signal ID

lead_type

liked, commented, or posted

source

Internal source tag (for example linkedin_person_signal or linkedin_keyword_signal)

keyword

Matched keyword (keyword signals / post authors)

author_name

Lead's LinkedIn display name

author_headline

LinkedIn headline

author_title

Job title

author_url

LinkedIn profile URL

post_text

LinkedIn post content

post_url

LinkedIn post URL

comment_text

Comment text (commenters only)

company

Company name

country / city

Lead location

enriched_email

Email from enrichment (if configured and found)

enriched_phone

Cellphone from enrichment (if configured and found)

ai_outreach_message

Ai-generated outreach message (if pitch enabled)

ai_vm_message

Ai-generated voicemail script (if pitch enabled)

ai_connection_message

Ai-generated LinkedIn connection note (if pitch enabled)

Example Data Available In Your Webhook To Run Campaigns

Below are example lead payloads for each engagement type. The signal object is included once for context — it is the same shape on every request.

Example signal object (engagement signals)

FieldValue

id

sig_abc123

name

Dan Wardrope Engagement

type

profile

target

https://www.linkedin.com/in/dan-wardrope/

webhook_enrich_mode

email_phone

webhook_had_ai_pitch

true

webhook_had_saved_filter

false

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. The monitored profile is identified by signal.target.

FieldValue

lead_type

commented

source

linkedin_person_signal

author_name

James Ortiz

author_headline

Head of Growth at BuildCo

author_title

Head of Growth

author_url

https://www.linkedin.com/in/jamesortiz

comment_text

This is exactly the problem we are solving — great post.

post_text

Excited to share our Q1 results — outbound is working better than ever.

post_url

https://www.linkedin.com/feed/update/urn:li:activity:7123456789012345678

company

BuildCo

city

London

country

United Kingdom

enriched_email

james.ortiz@buildco.com

enriched_phone

+14155550987

ai_outreach_message

Hi James, your comment on Dan's post really stood out...

ai_vm_message

Hi James, calling about your comment on outbound strategy...

ai_connection_message

Hi James — great comment on Dan's post. Would love to connect.

Full webhook payload

{  "event": "linkedin_signal.lead",  "sent_at": "2026-06-16T14:30:00.000Z",  "attempt": 1,  "signal": {    "id": "sig_abc123",    "name": "Dan Wardrope Engagement",    "type": "profile",    "target": "https://www.linkedin.com/in/dan-wardrope/",    "webhook_enrich_mode": "email_phone",    "webhook_had_ai_pitch": true,    "webhook_had_saved_filter": false  },  "lead": {    "id": "00000000-0000-0000-0000-000000000002",    "user_id": "00000000-0000-0000-0000-000000000099",    "signal_id": "sig_abc123",    "lead_type": "commented",    "source": "linkedin_person_signal",    "keyword": "",    "author_name": "James Ortiz",    "author_headline": "Head of Growth at BuildCo",    "author_title": "Head of Growth",    "author_url": "https://www.linkedin.com/in/jamesortiz",    "post_text": "Excited to share our Q1 results — outbound is working better than ever.",    "post_url": "https://www.linkedin.com/feed/update/urn:li:activity:7123456789012345678",    "comment_text": "This is exactly the problem we are solving — great post.",    "company": "BuildCo",    "country": "United Kingdom",    "city": "London",    "enriched_email": "james.ortiz@buildco.com",    "enriched_phone": "+14155550987",    "ai_outreach_message": "Hi James, your comment on Dan's post really stood out...",    "ai_vm_message": "Hi James, calling about your comment on outbound strategy...",    "ai_connection_message": "Hi James — great comment on Dan's post. Would love to connect."  }}

Example: Poster (lead_type: posted)

A person who posted about your monitored keyword (Keyword Monitoring signal). Includes keyword and their own post_text. The keyword is also on signal.target.

Example signal object (keyword signal)

FieldValue

id

sig_xyz789

name

Outbound Sales Keyword

type

keyword

target

outbound sales

webhook_enrich_mode

email

webhook_had_ai_pitch

true

webhook_had_saved_filter

true

FieldValue

lead_type

posted

source

linkedin_keyword_signal

keyword

outbound sales

author_name

Emma Walsh

author_headline

Founder at SaaS Foundry

author_title

Founder

author_url

https://www.linkedin.com/in/emmawalsh

post_text

We just hit $1M ARR using outbound sales — here is what worked for us.

post_url

https://www.linkedin.com/feed/update/urn:li:activity:7987654321098765432

company

SaaS Foundry

city

Austin

country

United States

enriched_email

emma.walsh@saasfoundry.com

enriched_phone

+14155550654

ai_outreach_message

Hi Emma, congrats on the $1M ARR post about outbound sales...

ai_vm_message

Hi Emma, quick note about your outbound sales post...

ai_connection_message

Hi Emma — loved your post on outbound sales. Would love to connect.

Full webhook payload

{  "event": "linkedin_signal.lead",  "sent_at": "2026-06-16T15:45:00.000Z",  "attempt": 1,  "signal": {    "id": "sig_xyz789",    "name": "Outbound Sales Keyword",    "type": "keyword",    "target": "outbound sales",    "webhook_enrich_mode": "email",    "webhook_had_ai_pitch": true,    "webhook_had_saved_filter": true  },  "lead": {    "id": "00000000-0000-0000-0000-000000000001",    "user_id": "00000000-0000-0000-0000-000000000099",    "signal_id": "sig_xyz789",    "lead_type": "posted",    "source": "linkedin_keyword_signal",    "keyword": "outbound sales",    "author_name": "Emma Walsh",    "author_headline": "Founder at SaaS Foundry",    "author_title": "Founder",    "author_url": "https://www.linkedin.com/in/emmawalsh",    "post_text": "We just hit $1M ARR using outbound sales — here is what worked for us.",    "post_url": "https://www.linkedin.com/feed/update/urn:li:activity:7987654321098765432",    "company": "SaaS Foundry",    "country": "United States",    "city": "Austin",    "enriched_email": "emma.walsh@saasfoundry.com",    "enriched_phone": "+14155550654",    "ai_outreach_message": "Hi Emma, congrats on the $1M ARR post about outbound sales...",    "ai_vm_message": "Hi Emma, quick note about your outbound sales post...",    "ai_connection_message": "Hi Emma — loved your post on outbound sales. Would love to connect."  }}

Example: Liker (lead_type: liked)

A person who liked a post on a monitored profile or company page. Uses the same engagement signal object as the commenter example above.

FieldValue

lead_type

liked

source

linkedin_person_signal

author_name

Sarah Chen

author_headline

VP Sales at Acme Inc

author_title

VP Sales

author_url

https://www.linkedin.com/in/sarahchen

post_text

Excited to share our Q1 results — outbound is working better than ever.

post_url

https://www.linkedin.com/feed/update/urn:li:activity:7123456789012345678

company

Acme Inc

city

San Francisco

country

United States

enriched_email

sarah.chen@acme.io

enriched_phone

+14155550123

ai_outreach_message

Hi Sarah, loved seeing you engage with Dan's post on outbound...

ai_vm_message

Hi Sarah, quick voicemail about your interest in outbound sales...

ai_connection_message

Hi Sarah — saw you liked Dan's post on outbound. Would love to connect.

Full webhook payload

{  "event": "linkedin_signal.lead",  "sent_at": "2026-06-16T16:10:00.000Z",  "attempt": 1,  "signal": {    "id": "sig_abc123",    "name": "Dan Wardrope Engagement",    "type": "profile",    "target": "https://www.linkedin.com/in/dan-wardrope/",    "webhook_enrich_mode": "email_phone",    "webhook_had_ai_pitch": true,    "webhook_had_saved_filter": false  },  "lead": {    "id": "00000000-0000-0000-0000-000000000003",    "user_id": "00000000-0000-0000-0000-000000000099",    "signal_id": "sig_abc123",    "lead_type": "liked",    "source": "linkedin_person_signal",    "keyword": "",    "author_name": "Sarah Chen",    "author_headline": "VP Sales at Acme Inc",    "author_title": "VP Sales",    "author_url": "https://www.linkedin.com/in/sarahchen",    "post_text": "Excited to share our Q1 results — outbound is working better than ever.",    "post_url": "https://www.linkedin.com/feed/update/urn:li:activity:7123456789012345678",    "company": "Acme Inc",    "country": "United States",    "city": "San Francisco",    "enriched_email": "sarah.chen@acme.io",    "enriched_phone": "+14155550123",    "ai_outreach_message": "Hi Sarah, loved seeing you engage with Dan's post on outbound...",    "ai_vm_message": "Hi Sarah, quick voicemail about your interest in outbound sales...",    "ai_connection_message": "Hi Sarah — saw you liked Dan's post on outbound. Would love to connect."  }}