Webhooks by Zapier

Webhooks by Zapier Help & Support

  • How to Get Started with Webhooks by Zapier
  • Popular Things To Do With Webhooks on Zapier
  • Common Problems with WebHooks

How to Get Started with Webhooks by Zapier

A Brief Introduction to Webhooks#

Zapier fully supports webhooks, and though they can be a little overwhelming at first they can be extremely powerful. The easiest way to think of webhooks is as notifications. At their simplest, they carry a payload of data which is usually a single record that has been created or modified, although some apps will send along multiple records at once in the name of efficiency.

There are three common serialization formats that you will commonly see: form-encoded, JSON, and XML. Below are examples of each, respectively:

Note: we will do our best to recursively parse nested XML and JSON for convenience. You can disable it by setting the header X-Recurse-Parse: false.

It is important to be familiar with each, as most apps have different standards though some have options, so you can experiment a bit. Don't worry too much though, Zapier handles all of them just fine!

Note: if a completely empty webhook request is sent to your Zap, it will be ignored. When you send the webhook, make sure to add something in the payload (or the url parameters if it's a GET request) so the Zap can trigger.

Once you have a payload, you need somewhere to send it. Usually its to a special URL where a server is waiting to interpret the payload and do something with it. Usually that is a server you control, but in the case of Zapier, its a server we control on your behalf. When you create a new Zap with a webhook enabled trigger, we will generate a brand new URL for your use, sort of like this one:

Once you have the URL, you'll be able to provide it to the triggering app. After you do that, we should start receiving payloads whenever the app sends them.

The URL is secured by obscurity. It is almost impossible to guess the combination of the number and code in the URL. But if you make the URL public (e.g. in front-end JavaScript) anyone who finds it will be able to spam it and trigger your Zap. Treat it as a password or any other secret!

Also, Zapier can do the inverse, you can give us a URL and we can push a payload to it. But more on actions later, first, let's keep talking about triggers.

Need an Empty Response? Enable Silent Mode#

The webhook URLs will respond with JSON or XML:


Some apps get confused and would like to receive an empty body. To do this, add /silent to the URL or get the full URL by ticking the Silent Mode box before you copy the URL:


Accessing Nested Elements#

Commonly the JSON packet sent to a webhook will contain nested elements like the below example:

Even if we specify results as the root element we still need to get at the first_name attribute. We can do this by entering {{contract_winner__first_name}} as the field. When we parse JSON packets sent to us we flatten nested attributes and place a double underscore between them.

Also note that if you create a webhook, save it, send some data to it and then edit it you should be able to use the previous requests as sample data.

Debugging Triggers#

We do our best to just make webhooks "just work" for you, but we can't predict all the wacky ways apps might choose to implement webhooks. Sometimes, you just have to break out a few debugging tools and see what is going on under the hood.

The simplest place to start is Zapier itself. After you've started your Zap and have configured the webhook URL, we start listening. Even if you don't unpause your Zap, we still track the payloads we get to make it easier for you to debug. You can see them by clicking "Load Samples" on step 4, and we'll also pull keys into step 2 to make it easier to map. Here's how to make sure you see the new payloads:

  • Create your Zap and configure your webhook URL but don't enable your Zap quite yet!
  • Go into the triggering app and do something to trigger a webhook (usually that means create a record of some sort).
  • Return to Zapier and click "Load Samples" or "Reload Samples" in step 4.
  • Do you see the new values coming in? Congrats! You can finish editing your Zap and enable it.

If you didn't see the samples, then we need to do a little more debugging. Let's try the next step.

Generating Your Own Requests#

Sometimes, you'd like to trigger Zapier webhooks on your own without involving a third party app. There are a few tools that help you do that (like curl) but we generally recommend a app like Postman.

When using curl or hurl.it, we work best with POST requests with JSON payloads. Here's a quick curl example to get you going:

Inspect the Requests#

Next, we need to see if the webhooks are even getting sent, or what sort of weird format they might be in. For that, we like to recommend a app like this one. It doesn't try to interpret the payloads, it just prints them to your screen as it receives them, making it easy to see what is going on. Copy and paste the URL you are given as your Unique URL into the Webhooks URL field, and then run the Test to send that information along, and refer to it on the testing page.

Now, log back into your triggering app's settings and replace the old Zapier webhook URL with the new RequestBin URL. Then, take the steps necessary to trigger the webhook once again (usually creating a record of some type). After you do that, simply refresh your RequestBin page and take a look.

Now the question is: did you see any new records show up?

If yes, that means Zapier is getting the payloads but couldn't intepret them properly. You should contact us and send us your RequestBin findings or, if you are a programmer, you can always try parsing the payload yourself via our Developer Platform.

If no, that means the app isn't sending the payload! Usually this is just a misunderstanding as they may not have webhooks enabled for the records you want, but sometimes you just need to check another checkbox somewhere, so you might trying contacting that app before contacting us.

Debugging Actions#

Like we mentioned earlier, Zapier also can send webhooks, not just receive them. That makes it easy to pipe data around the web, especially if you don't want to muck around with setting up connecters to various APIs: you can just dump the data in a nice format via Zapier.

Sending webhooks via Zapier is much more complicated than receiving them via Zapier as you are in charge of interpreting the payloads yourself. If you are a programmer, this usually isn't that hard. If you aren't a programmer, hopefully we can help you as much as we can, so let's get started.

Inspecting Requests, Again#

Just like debugging triggers, we'll be using RequestBin to inspect the payloads. This will help you understand what Zapier is sending, making it easier to adjust it to your liking. First, choose any app as a trigger, though it makes sense to choose one you are familiar with, it certainly isn't a requirement. Second, choose Web Hook as your action, POST is probably the most popular, so start there.

In a reversal, instead of Zapier giving you a URL, you'll need to give Zapier a URL. So, give us a RequestBin URL by visiting their homepage and clicking "Create a Request Bin" and copying the Endpoint URL on the screen and paste it into Zapier's Webhook URL field when you are editing your new Zap. Again, they look kind of like this:

Next, you'll need to start configuring your payload. We offer 4 different options at the time of this article: Payload Type, Data, Basic Auth, and Headers. Let's cover a few examples (leaving the rest empty for now):

  • Payload Type: json
  • Datahello|world

Will result in this webhook (default headers are up top, payload at the bottom):

Now, let's say you switch Payload Type to form. Now, you'll get this webhook:

That certainly isn't the most useful, as the data is static: it never changes. Let's imagine a better example: perhaps we have a Dropbox trigger that pings our web server telling it that there are new files to be copied. We'd want to know about the new files, so maybe we'd do something like this:

  • Payload Type: json
  • Data: path_to_file|

Now, the `` is done via dragging fields from the left to the right in our Zap editor interface. All you have to know right now is that we'll replace it with the real path on the fly, like this:

Of course, you aren't limited to provided only a single item in the data, plus, you can add headers in the same way like so:

  • Payload Type: json
  • Data:

  • Headers: X-From-Service|Zapier

Which will result in a webhook like this (again, headers are up top):

Another option we didn't cover yet is the ability to leave data empty, which tells Zapier to send along all the raw data from the trigger side (which you can always see in step 4). This is a special case that may save you from maintaining a giant list for data mappings.

*Pro tip! * If you want to get even fancier, you can define children objects with our handy double underscore syntax, for example, this:

Will turn into JSON that looks like this:

Catching the WebHooks#

Actually catching and interpreting the webhooks we send is another matter. If you are trying to use webhooks to send payloads to an app we do not support, you may run into insurmountable issues as our data field doesn't support complex structures (for example, lists). In those situations, we highly recommend investing a little time in our developer platform.

However, if you are the one writing the code to catch the webhooks you should be able to interpret with only the examples above as a guide. With PHP, the easiest is probably form encoded (Payload Type as form):

But, if you set Payload Type to json, you'll need to decode first:

We always return a success message for all webhooks - regardless of if there is a Zap behind it that is live or not. This is a technical limitation to enhance availability for a high throughput endpoint - we cannot adjust this!

Triggering Multiple WebHooks At Once#

If you have three Zaps with webhook URLs that look like this:


You can combine them into a single URL like this:


Requests sent to this URL will trigger all three webhook URLs at once.

Sending An Array of Objects#

The WebHooks by Zapier trigger supports sending more than a single trigger event per webhook request. You can send an array of properly formed JSON objects, and we will trigger the Zap once for each object in the array.

For example, if we POST this payload to a Webhook endpoint:

We will trigger the actions 3 times - once for every object in the array.

Unflatten Nested Payloads#

The Unflatten option in Webhook actions allows you to create nested data from a key with two underscores.

For example, if you have this key and value for data:


If you select "yes" for Unflatten and "Json" for Payload Type, that data will ultimately get sent like this:

To opt out of this functionality, select "no" for the "Unflatten" option, which will send the data like this:

Using the Retrieve Poll trigger option#

The Retrieve Poll trigger option in the Webhook by Zapier app will let you query a REST API endpoint on the Internet and retrieve data being returned.

This trigger is one that only supports basic authentication - should you need to create your own polling triggers for APIs that offer advanced forms of authentication, you should create your own private application on the Zapier platform.

Finally, keep in mind that this trigger is one that uses our deduplication process to manage and keep track of records that we have already processed for you that are being returned from this endpoint. You may wish to familiarize yourself with that process before building any Zaps with this specific trigger.

Add Zapier to Your iPhone, iPad, Mac, and Custom Apps#

Zapier Webhooks in Siri Shortcuts

Over 1,300 apps connect directly to Zapier, so you can copy contacts, appointments, form entries, and more without needing to worry about Webhooks URLs and data formats. But if your favorite apps don't have a Zapier integration, webhooks are often the best workaround to connect any app to Zapier.

Have an iPhone or iPad running iOS 12 or later? Apple's Shortcuts app lets you send data from Siri Shortcuts or many iOS apps to a webhooks URL. You can do something similar with Mac search tool Alfred to run Zaps from your Mac. Or, in many apps especially self-hosted business web apps, you can use webhooks to connect your app to Zapier.

Learn more in our companion guides:

Popular Things To Do With Webhooks on Zapier

Add info to a Google Sheet from new Webhook POST requests

Webhooks by Zapier + Google Sheets

Try It

Send a webhook when an RSS feed is updated

RSS by Zapier + Webhooks by Zapier

POST new Facebook Lead Ads to a webhook

Facebook Lead Ads + Webhooks by Zapier

Turn Webhooks Into Sent Emails

Webhooks by Zapier + Email by Zapier

POST new user tweets to a webhook

Twitter + Webhooks by Zapier

Get Slack notifications for new information from a Webhook

Webhooks by Zapier + Slack

Send an email from Gmail when a webhook is received

Webhooks by Zapier + Gmail

POST new Google Forms responses to a webhook URL

Google Forms + Webhooks by Zapier

GET data from a webhook URL every day

Schedule by Zapier + Webhooks by Zapier

New Typeform entry to Webhook post

Typeform + Webhooks by Zapier

Common Problems with WebHooks

I need to send a nested JSON array in the request data.#

To send a nested JSON array, use the Custom Request action. That will allow more flexibility for the payload.

I Got an Error -2. How Do I Fix This?#

This error means the domain lookup for your URL failed. If the URL seems okay, check for extra spaces before or after the URL in your webhook settings. Remove the space and you should be good to go!

Why Is It Always 200 or Success Status? Can I customize the response?#

For High Availability and High Throughput reasons - we always return a success message with a payload of debugging information when collecting a webhook - regardless of whether there is a Zap behind the webhook or if it is paused or not. The only way to know if a URL is live is to visit the editor and look at the URL (which never changes for a Zap). There is no way to customize the response to the request you send to the Catch Hook URL, as the response is sent before the Zap triggers and runs on the webhook request.

Can I do redirects?#

We cannot 301 or 302 you to a different URL and deliver/retrieve payloads from the new address. Doing so will result in a failure!

Why Do I Receive A "413 Request Entity Too Large" Error Status?#

The maximum webhook size we currently support is 10MB. Any payloads that exceed this limit with receive a 413 status code.

Why do I get a "Connection Failure"?#

This is very common if you have a firewall in place to limit access to your local intranet or company network. Open up your instance to the wider internet to give Zapier and similar services access to your server. Be sure to use good passwords if you can!

How do I fix a SSL Certificate Failure?#

Chances are there are a few reasons why you might be running into an SSL certificate failure:

  • Using a self-signed certificate. We currently only support SSL certificates issued by public certificate authorities. A free SSL certificate can be obtained from letsencrypt.org. Let’s Encrypt is a free, automated, and open certificate authority provided by the non-profit Internet Security Research Group (ISRG).
  • Incorrect usage of a www.example.com and example.com certificate on a domain like testing.example.com. The reverse can be the case as well, for example: a *.example.com wildcard certificate for example.com.
  • Other improper installation of the certificate (missing chain certificates, improper modes, etc...). Use a tool like https://www.ssllabs.com/ssltest/ to test.

Webhook Not Returning Results for next Steps#

Unfortunately, not all apps can send back data in a way that our system can interpret in subsequent steps.

If you're familiar with Python or Javascript, a potential workaround is to do this with a Code step. Please note that the Code app is an advanced feature and we aren't able to help troubleshoot the code if there are errors.

Posting JSON from Web Browser + Access-Control-Allow-Headers in Preflight Response Error#

Specifically, the error:

Request header field Content-Type is not allowed by Access-Control-Allow-Headers in preflight response.

This happens when trying to send data to the Zapier webhooks from inside a web browser and altering the Content-Type header during the process. Because of Cross Browser Security restrictions, your browser will reject these requests. To combat this, do not set a custom Content-Type header in the request.

Nothing Found on Trigger Test Stage#

We need to have received a payload of data to that webhook URL before testing for us to be able to find that data.

The request cannot be completely blank, so be sure to add something in the payload (or the url parameters if it's a GET request) so the Zap can trigger.

If you are still having some trouble, drop us an email and let us know as much as possible about your planned workflow for this Zap so we can help!

Error: "Bargle. We hit an error creating a post. :-( Error: -11"#

This means we can't get a reliable IP for the domain. Even though you may be able to access the URL via the browser or an API client, it may still fail our requirements. When it does, this often means there are issues with the DNS configuration for the domain. You can run it through http://dnscheck.pingdom.com/ to find them.

My Zap triggered multiple times and I see many entries in Task History with the same time-stamp#

If the webhook response data is an array of objects, that will run the subsequent steps in your Zap multiple times — once for each object in the array. If this isn't what you're looking to do, you'll need to check the documentation for the API you're connecting to and see if there's a way to limit the number of objects returned in the response to just one (e.g. a limit parameter). If that isn't possible, take a look at building a custom integration using our Developer Platform which will give you full control over the data received from webhook requests and how it is handled in your Zaps.

Connect the apps you use every day

Get started with a Free account

By signing up, you agree to Zapier’s Terms of Service