AI & automation

Zapier Webhooks: Catch Hook Setup, Payloads and Testing

Set up Webhooks by Zapier Catch Hook to receive data from another system, send JSON or form payloads, test with curl, handle nested data and stay within rate limits.

By EpiFive Editorial TeamReviewed/updated 8 min readHow we check articles
On this page

To receive data from another system in Zapier, start a Zap with the Webhooks by Zapier trigger, choose the Catch Hook event, copy the unique URL it gives you, and configure the other system to send a POST request to that URL. Then send a test request and use Test trigger so Zapier can load the sample fields for the rest of the Zap.

Who this is for and what you will have

This guide is for people who need to connect an application that has no Zapier integration, such as an internal tool, a form service or a custom script, to the apps in Zapier. By the end you will have a working Catch Hook trigger, a tested payload, an understanding of how nested data appears, and a plan for rate limits and failures.

Prerequisites

  • A Zapier plan that includes Webhooks by Zapier. Zapier's help pages list it for Professional, Team and Enterprise, and mark the Free plan as not eligible.
  • The ability to configure the sending system to make an HTTP request, or a terminal with curl for testing.
  • A decision on the payload format. The examples below use JSON and form-encoded bodies, and you should confirm any other format by sending a test request.

Choose the trigger event

Webhooks by Zapier has three events relevant to receiving data. Zapier's help article describes them as follows:

EventWhat it doesUse when
Catch HookParses the request body and gives you a unique URL for requestsThe sender posts data you want to map into later steps
Catch Raw HookDoes not parse the body, includes headers, and the unparsed body has a 2 MB maximumYou need headers or the original body, for example to process it in code
Retrieve PollZapier makes a GET request to an external URL to check for new entriesThe other system cannot call you, but exposes a URL Zapier can poll

This guide covers Catch Hook. The maximum webhook payload size is 10 MB for triggers and 2 MB for Catch Raw Hook, according to the same page.

Set up a Catch Hook trigger

  1. In the Zap editor, select the trigger step and search for Webhooks by Zapier.
  2. For Event, choose Catch Hook, then select Continue.
  3. Optionally set Pick Off A Child Key to receive only a subset of the incoming data, for example one key from a larger object. Select Continue.
  4. On the Test tab, select Copy to copy the webhook URL.
  5. In the sending application, add a new webhook, paste the URL, choose the options it offers and save.
  6. Trigger an event in the sending application.
  7. Return to the Zap's Test tab and select Test trigger.

The trigger needs real data to test against, so create the event in the sending application before you test. If nothing arrives, repeat the event and recheck the URL you pasted.

Treat the URL as a secret

Each webhook URL is unique, and Zapier notes that it contains the owner's Zapier ID. It changes only if the Zap is transferred to another user, and after a transfer you must update the URL in the sending application or the Zap will not trigger. The help pages used for this article do not describe authentication or signature checks on incoming requests, so assume that anyone who has the URL can send data to your Zap. Do not publish it in code repositories or public pages, and add your own validation, such as a shared token field that a Filter step checks, if the data is sensitive.

Send a test request

For a quick test, send a POST with a JSON body. Zapier's own example uses this shape, with the URL replaced by yours:

curl -v -H "Content-Type: application/json" -X POST \
  -d '{"first_name":"Alex","last_name":"Riley","age":27}' \
  https://hooks.zapier.com/hooks/catch/123456/abcdef/

The URL above is a placeholder. Use the exact URL you copied from the Test tab. Always include data in the body so that the test has fields to load.

Zapier suggests this order for building a Zap: create the Zap and set up the URL without turning it on, send a test webhook, and then select Load Samples to see the data. After the sample loads, map its fields in later steps.

Form-encoded payloads

A form-encoded payload looks like first_name=Alex&last_name=Riley&age=27. Send it as application/x-www-form-urlencoded:

curl -v -X POST \
  -d "first_name=Alex&last_name=Riley&age=27" \
  https://hooks.zapier.com/hooks/catch/123456/abcdef/

Understand nested data and arrays

Nested JSON

The Zapier help pages used for this article do not describe how nested objects appear in the field picker, so check it yourself. Send a nested sample such as the one below, select Load Samples, and note the field names Zapier shows before you map them. The Pick Off A Child Key option in the trigger setup can narrow the data to one nested key.

{
  "order_id": "A-1001",
  "contract_winner": {
    "first_name": "Alex",
    "last_name": "Riley"
  }
}

One request, many Zap runs

A webhook trigger can receive an array of objects. Zapier then runs the later steps once for each object. The help article states that wrapping the same array in a single object results in only one run. Each object that runs successful action steps uses tasks, so a large array can use many tasks. For how tasks are counted, see Zapier vs Power Automate: Pricing and Fit for a Small Business.

Responses, silent mode and what the sender sees

For a live webhook URL, Zapier returns a success response by default, and it cannot be customised. The trigger article says that with Catch Raw Hook you can remove the response body by adding silent/ to the URL, and the general webhook guide says that adding /silent to the end of a catch URL helps when the sending app needs an empty response body. If a Zap is turned off or deleted, the URL returns a 404, though because of an update delay of up to several hours it may keep returning 200 for a while.

Zapier also notes that webhooks may delay passing data to later steps when many requests arrive at once. A 200 therefore means the request was accepted, not that your Zap has finished.

Rate limits and retries

Zapier's webhook rate limit article states:

LimitValue
Per user20,000 requests in a 5-minute window
Legacy routes without a Zapier user ID in the URL1,000 requests per 5 minutes per Zap
Over the limitA 429 status code

During high webhook activity, Zapier may return a 200 and delay processing by several minutes. Its recommendations are to retry delivery for any request that does not return a 200, and to use an exponential backoff interval between retries. If a step in the Zap hits another app's limit, you can replay the Zap run, add a Delay After Queue step to spread out the work, or adjust the flood protection limit for the Zap, which needs a paid plan. A sender written as a script should follow this logic:

# Retry with exponential backoff until Zapier returns HTTP 200
for delay in 1 2 4 8 16; do
  code=$(curl -s -o /dev/null -w "%{http_code}" -X POST \
    -H "Content-Type: application/json" \
    -d '{"order_id":"A-1001"}' \
    https://hooks.zapier.com/hooks/catch/123456/abcdef/)
  [ "$code" = "200" ] && break
  sleep "$delay"
done

Troubleshooting

SymptomLikely causeFix
Test trigger finds no dataNo real request has arrivedSend a test request or create an event in the sender, then test again
Request accepted but no Zap runZap is off, body is empty, or processing is delayedTurn the Zap on, include a body and check Zap history after a few minutes
404 from the URLThe Zap is off or deleted, or the owner changedTurn the Zap on, or paste the current URL into the sender
429 responseRate limit exceededRetry with exponential backoff and spread out requests
Fields missing in the pickerThe sample data lacked those fieldsSend a complete sample and select Load Samples again
Nested values hard to findField names differ from the payload structureLoad a nested sample and use the names the field picker shows, or set Pick Off A Child Key
Webhooks unavailable in the editorFree planUpgrade to a plan that includes Webhooks by Zapier

Checklist

  • The plan includes Webhooks by Zapier.
  • Catch Hook chosen unless you need headers, in which case Catch Raw Hook.
  • Webhook URL treated as a secret and added to the sender.
  • A real sample request sent and loaded before mapping fields.
  • Nested field names checked in the field picker after loading a sample.
  • Sender retries with exponential backoff on anything other than 200.
  • Task usage estimated for arrays that trigger many runs.

If you are weighing Zapier against other tools for self-hosted webhooks, see Self-Host n8n with Docker: Setup, Persistence and Updates.

References

Questions people ask

Do I need a paid Zapier plan for webhooks?

Yes. Zapier's help pages list Webhooks by Zapier as available on the Professional, Team and Enterprise plans and not on the Free plan. Confirm your plan before you design a Zap around a webhook trigger.

What is the difference between Catch Hook and Catch Raw Hook?

Catch Hook parses the request body into fields you can map. Catch Raw Hook does not parse the body, includes the headers, and limits the unparsed body to 2 MB. Use Catch Raw Hook when you need headers or the exact original body.

Why does my webhook return 200 but the Zap does not run?

Zapier returns a 200 for a live webhook URL even when processing is delayed. During high webhook activity it may return 200 and delay processing by several minutes. Also check that the Zap is turned on, that the request body is not empty and that you used the correct URL.

What happens if I send an array of objects to a Catch Hook?

Zapier runs the later steps once for each object in the array. If you wrap the same array inside a single object, the Zap runs only once. Each object that completes successful action steps uses tasks.

ZapierWebhooksJSONAutomation
  1. Zapier Agents vs Make AI Agents: Features and Pricing for Small Teams

    Compare how Zapier Agents and Make AI Agents are built and billed: activities versus credits, limits, tools, extra usage and a cost-check method for small teams.

    AI & automation9 min read
  2. Make.com Pricing Explained: Credits, Operations and Plan Limits

    Understand how Make bills in credits, which plan limits besides credits can affect you, how AI modules change the math, and how to avoid running out mid-month.

    AI & automation8 min read
  3. Queuezen: Open Source Social Media Scheduler You Host Yourself

    Queuezen is an MIT-licensed social media scheduler for 10 networks, with a composer, calendar, queue slots, team approvals and analytics, that you run on your own server. Features, install, demo and FAQ.

    AI & automation7 min read
  4. Automate Lead Routing with Zapier: Web Form to CRM, Slack and Email

    Build a no-code Zapier workflow that takes a Google Forms lead, saves it to your CRM, alerts the right owner in Slack and sends a follow-up email, using Paths and Filters.

    AI & automation10 min read
  5. AI Automation ROI: Calculate a Business Case and Payback Before You Build

    A step-by-step method to estimate time saved, build and running costs, and payback for an automation, with worked arithmetic and real pricing inputs.

    AI & automation10 min read
  6. n8n AI Agent Node: Connect Tools and Memory in a Working Workflow

    Build a tool-using AI agent in n8n with the AI Agent node: chat model, Simple Memory, a sub-workflow tool, $fromAI parameters, and fixes for common errors.

    AI & automation11 min read