Docs navigation
Zapier Webhook
Send leads into Zapier as the trigger for any Zap. Uses Zapier's "Catch Hook" trigger — the URL itself is the credential.
What this is
Zapier is a low-code automation platform with thousands of pre-built connectors. LeadRails fires a POST to your Zapier Catch Hook URL with the lead event; your Zap then runs whatever steps you've configured downstream (CRM, email, Slack, Google Sheets, anything in Zapier's catalog).
Where to find your webhook URL
- Sign in to your Zapier account.
- Click "Create Zap".
- For the Trigger (step 1 of the Zap), pick "Webhooks by Zapier" (a built-in app).
- Pick the "Catch Hook" event.
- Click Continue — Zapier generates a unique webhook URL.
-
Copy the URL — it looks like
https://hooks.zapier.com/hooks/catch/12345678/abcdefg. - Click "Test trigger" → fire a test request OR skip the test and continue.
- Add subsequent action steps in your Zap (the lead data flows into them as fields).
- Turn the Zap ON (top-right toggle).
Domain enforcement
LeadRails validates that the URL is exactly
https://hooks.zapier.com/hooks/catch/* at create time. URLs
that don't match this pattern are rejected to prevent typo-based
misrouting.
Set up your destination in LeadRails
- Sign in → Destinations → New.
- Adapter type:
Zapier Webhook. - Webhook URL: paste the Zapier hook URL.
- Click Create.
Test connection
The destination's "Test connection" check posts a tiny marker body —
{ "_lead_rails_verify": true } — to your Catch Hook URL and
reads the response. It reports:
- Valid → Zapier returned 200 with its
request_idacknowledgement; the hook is live. When present, we quote therequest_idback so you can match it in Zapier. - Disabled (410 Gone) → the Zap was turned off or deleted on Zapier's side.
- Not recognized (404) → Zapier doesn't know this hook URL; the Zap was likely deleted.
- Server error (5xx) → a transient Zapier-side problem; try again in a moment.
-
unsafe_url→ the URL (or a redirect behind it) resolves to a private/blocked address and is refused before any request is sent.
Heads up on quota: Zapier has no separate test mode for
Catch Hooks, so a passing connection test consumes one Zap task, just like
a real lead. The _lead_rails_verify marker lets you filter
these pings out with a Filter step in your Zap if you want.
Test it end to end
- Sources → your source → Settings → ensure a route exists to your Zapier destination.
- Click "Send test event".
- Zapier shows the inbound event in the Zap's "History" tab within seconds.
- If Test trigger was skipped in Zapier, this real event will populate the field schema for subsequent action steps.
What gets sent
- POST with an
application/jsonbody. -
Default (no per-route mapping): the raw lead event is forwarded
verbatim — the same JSON your source sent, e.g.
{ schema_version, event_type, source: {...}, lead: {...}, submitted_at }. Zapier's "Catch Hook" parses this and exposes each top-level field as a step output; use Zapier's dot-notation field picker to reach nested fields likelead.email. -
Per-route mapping: customize the shape via Routes → Mapping editor —
recommended if you want flat fields (
email,phone) instead of the nested raw event. -
Every request carries an
X-Idempotency-Keyheader derived from the delivery job id. Zapier does not deduplicate on it automatically, but a Filter step in your Zap can read it to drop replays.
Important: Zap must be ON
- Newly created Zaps default to OFF. They won't process Catch Hook requests until you flip the toggle to ON.
- If LeadRails reports 2xx but no Zap runs: check the Zap is ON. Catch Hook returns 200 even when the Zap is OFF — the request is just buffered until you turn the Zap on (and may eventually be dropped).
Troubleshooting
-
invalid_zapier_catch_hook_url→ URL doesn't matchhooks.zapier.com/hooks/catch/*. Copy the URL exactly from Zapier; trailing slashes / extra paths are rejected. - Zap isn't running but 2xx response → Zap is OFF. Turn it ON.
- Zap runs but downstream step fails → Check the Zap's Task History → click the failed task → see the actual error (Zapier's diagnostic UI).
- High volume → rate limited → Zapier's free plan has task limits. Upgrade or use per-route filtering to send only qualifying leads.
Zapier task pricing
- Every lead that hits your Zap consumes 1+ task in your Zapier billing plan. If you route 10,000 leads/month through a Zap with 3 action steps, that's 30,000 tasks.
-
Consider per-route filtering in LeadRails to only forward qualified
leads (e.g. only
Lead.score >= 70) so you don't burn Zapier tasks on junk traffic.