Skip to content

New in October

All articles

Send LinkedIn replies to Zapier, Make or n8n with signed webhooks

NudgeLink team · Published · Last updated · 2 min read

Short answer: open Settings → Integrations → Webhooks, paste the "catch hook" URL from Zapier, Make or n8n, choose the events you want, and press Send test event. NudgeLink then posts a signed JSON message every time a reply arrives, a lead is added or a sequence finishes. Webhooks only report: they never send anything to a lead.

What you can send

EventWhen it fires
reply.receivedA lead replies, on LinkedIn or by email
reply.positiveA reply is classified as positive (can come a little after reply.received)
lead.addedA lead enters your account
sequence.finishedA lead's sequence has run to its end

Typical uses: put a positive reply into your CRM as a task, post it to a Slack channel, add a finished sequence to a "nurture" sheet, or start a Calendly follow-up in your own tool.

Set it up in five steps

  1. In Zapier, Make or n8n, create a scenario that starts with a webhook and copy its URL. It must be https.
  2. In NudgeLink open Settings → Integrations → Webhooks and paste the URL.
  3. Tick the events you want and select Add webhook.
  4. Copy the signing secret. It is shown once.
  5. Press Send test event. The test reaches your tool within a minute.

Webhooks are included in every paid plan, up to three per account. Only events that happen after you add a webhook are sent.

Check that a request is really from NudgeLink

Every request has a NudgeLink-Signature header: t=<unix time>,v1=<hex>. The value v1 is an HMAC-SHA256 of "<t>.<raw body>" with your secret. Compare it in constant time and reject anything where t is more than five minutes old.

import hashlib, hmac, time

def verify(secret, raw_body, header):
    parts = dict(p.split("=", 1) for p in header.split(","))
    if abs(time.time() - int(parts["t"])) > 300:
        return False
    expected = hmac.new(secret.encode(), parts["t"].encode() + b"." + raw_body, hashlib.sha256).hexdigest()
    return hmac.compare_digest(expected, parts["v1"])

Zapier's catch hook cannot check signatures by itself. If that matters, put a small verifying step (a Code step or your own endpoint) in front of it.

What happens when your tool is down

Answer with any 2xx within 10 seconds. Anything else is retried after 1 minute, 5 minutes, 30 minutes, 2 hours and 12 hours, and then given up. After 20 failures in a row the webhook is switched off and Settings says why. A request can arrive twice after a retry, so every attempt for one event carries the same id: store the ids you have handled.

Full reference: Webhooks in the docs.