Webhooks

Webhooks notify you when new leads are found. LikesToLeads sends an HTTP POST request to your endpoint with the lead data.

Setup

Go to Settings and add a webhook URL. The URL must use HTTPS. You can create up to 5 webhooks.

Each webhook gets a signing secret, visible on the Settings page. Use it to verify that requests are authentic.

Events

Event Trigger
lead.enriched One or more leads were enriched

Payload

{
  "delivery_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "event": "lead.enriched",
  "timestamp": "2026-04-09T12:34:56.000000+00:00",
  "data": {
    "leads": [
      {
        "urn": "ACoAAExampleURN1234567890",
        "full_name": "Jane Smith",
        "headline": "VP of Sales at Acme Corp",
        "company_name": "Acme Corp",
        "job_title": "VP of Sales",
        "location": "San Francisco, California",
        "linkedin_url": "https://www.linkedin.com/in/janesmith",
        "engagement_type": "reaction",
        "signal_name": "John Doe",
        "reaction_type": "LIKE",
        "comment_text": "",
        "connections": 2500,
        "followers": 8400,
        "industry": "Software Development",
        "company_size": "201-500",
        "post_id": "f1e2d3c4-b5a6-4789-0123-456789abcdef"
      }
    ],
    "posts": [
      {
        "id": "f1e2d3c4-b5a6-4789-0123-456789abcdef",
        "url": "https://www.linkedin.com/posts/johndoe_example-activity-1234567890",
        "text": "Excited to announce our new product launch...",
        "date": "2026-05-08T14:23:00.000Z"
      }
    ],
    "count": 1
  }
}

leads and posts are normalized: each post appears once in posts, and every lead references it via post_id. When a popular post drives many engagements in a single delivery, you get the post’s text once instead of duplicated per lead.

Top-Level Fields

Field Type Description
delivery_id string Unique ID for this delivery (UUID). Use to deduplicate.
event string Event type (e.g., lead.enriched)
timestamp string ISO 8601 UTC timestamp
data object Event-specific payload

Lead Fields

Field Type Description
urn string Stable LinkedIn person identifier. Use this as your dedup key — linkedin_url formats can vary.
full_name string Full name
headline string LinkedIn headline
company_name string Current company
job_title string Current job title
location string Profile location
linkedin_url string LinkedIn profile URL
engagement_type string reaction, comment, or repost
signal_name string The signal (monitored profile) that authored the post
reaction_type string Reaction kind (LIKE, PRAISE, EMPATHY, INTEREST, APPRECIATION, ENTERTAINMENT). Empty string for non-reaction engagements.
comment_text string The comment the lead left on the post. Empty string for non-comment engagements.
connections integer Number of connections
followers integer Number of followers
industry string Industry
company_size string Company size range (e.g., “201-500”)
post_id string | null Reference to an entry in posts. null if the post is no longer available.

Post Fields

Posts in the posts array represent the LinkedIn posts the leads engaged with. Each post was authored by the signal named in the lead’s signal_name.

Field Type Description
id string Stable identifier — match against lead.post_id
url string Direct link to the LinkedIn post
text string Full post text
date string ISO 8601 timestamp of when the post was published

Signature Verification

Each delivery includes an X-Webhook-Signature header — an HMAC-SHA256 hex digest of the request body, signed with your webhook secret.

import hmac
import hashlib

def verify_signature(payload_body, signature, secret):
    expected = hmac.new(
        secret.encode(),
        payload_body.encode(),
        hashlib.sha256,
    ).hexdigest()
    return hmac.compare_digest(expected, signature)

# In your webhook handler:
signature = request.headers.get('X-Webhook-Signature')
is_valid = verify_signature(request.data.decode(), signature, YOUR_WEBHOOK_SECRET)

Headers

Header Value
Content-Type application/json
X-Webhook-Signature HMAC-SHA256 hex digest
X-Webhook-Event Event type (e.g., lead.enriched)

Testing

Use the “Test” button next to any webhook on the Settings page. Test payloads include "test": true so you can distinguish them from real deliveries.

Managing Webhooks

Enable / Disable — Toggle a webhook without deleting it.

Delete — Permanently removes the webhook.