# Send leads to Zapier or a webhook

> Send each new lead to a Zapier, Make or Pabbly webhook, what it receives, and how to check it came from Chirp Builder.

Source: https://www.chirpbuilder.com/help/collections-leads/lead-webhooks  
Plans: Essentials, Creator, Business, Academy  
Last checked: 2026-10-27

When you're done, every new lead reaches your Zap or scenario.

**Who can do this:** the account owner on any plan, and workspace admins.

## Add it

1. Make the trigger: in Zapier "Webhooks by Zapier → Catch Hook", in Make "Custom webhook", in Pabbly
   "Webhook". Copy its address.
2. In the lead form's **Where new leads go**, click **+ Webhook** and paste the address.

   ![Where new leads go with the webhook box opened, outlined, and the note on where to find the address in Zapier, Make and Pabbly.](https://mjmtbasmrtksluvlnema.supabase.co/storage/v1/object/public/help-media/web-optimized/collections-leads/lead-webhooks/SS-MKT-045-01__add-webhook__creator__desktop__v01.webp?v=ac13f0aba7)

3. Choose whether to send only leads who ticked "updates", or every lead, and save. If your form
   doesn't offer the "updates" box, choose every lead, or the webhook gets nobody.
4. Copy the signing secret it shows. It's shown once. "Zapier, Make and Pabbly work without it."
5. Click **Test**: "Test lead sent. Check your Zap or scenario."

## What it receives

A POST with JSON:

```json
{
  "event": "lead.created",
  "lead": { "id": "…", "email": "…", "name": "…", "first_name": "…", "last_name": "…",
            "wants_updates": true, "consent": "…", "captured_at": "…" },
  "source": { "type": "chirp", "id": "…", "name": "…", "link": "https://www.chirpbuilder.com/c/…" }
}
```

Headers include `X-Chirp-Event: lead.created`, `X-Chirp-Timestamp` (Unix time in seconds) and
`X-Chirp-Signature: sha256=…`: an HMAC-SHA256 of the timestamp, a dot and the body, made with the whole
signing secret (starting whsec_) as the key. For a Collection, the source's link is
`https://www.chirpbuilder.com/collection/…`.

## Good to know

- **Each lead reaches each webhook once.** When someone sends the form again, it goes only where it
  hasn't arrived yet: a webhook that failed or skipped it, or one added since.
- **New webhooks don't get earlier leads,** unless one of those people sends the form again or you click
  **Send again**.
- **Failures:** the Leads page shows "1 failed" with the reason; click **Send again**. Failed leads are
  also tried again (up to 3 at a time, each at least 5 minutes old) after a new lead reaches the same
  webhook, up to 6 tries in all.
- **Redirects aren't followed:** "The webhook address redirected. Use the final address."
- **The webhook must answer within 10 seconds.**
- **Removing it:** "Stop sending leads here? Leads already sent stay where they are."

## If it doesn't work

- **"The webhook address must start with https://"**
- **"Use a public web address (not an IP address or a local one)"**
- **"The destination didn't answer within 10 seconds."**
- **"The list or address wasn't found. Check the destination."**
- **"The service is busy (rate limit). It will be tried again."** or **"The service had a problem (…).
  It will be tried again."**
- **"The service said no (…): …"**
