30-minute emergency response · 8:00-18:00 UK time

Zoho CRM Webhook Not Firing? 5 Causes and How to Fix Them

A Zoho CRM webhook that stops firing usually comes down to one of five things: the workflow rule behind it not triggering, the endpoint failing until Zoho disables the webhook, an expired auth token, a changed payload or a firewall blocking Zoho's servers. Start with the failure log under Setup > Automation > Actions > Webhooks.

Why has my Zoho CRM webhook stopped firing?

Webhooks in Zoho CRM fail silently. There’s no banner, no dashboard alert and usually no email anyone reads. The first sign is normally a downstream symptom: the warehouse system stops receiving orders or the Slack channel goes quiet, sometimes weeks after the actual break.

Work through these in order. Most webhook failures are found at step one or two.

  1. Open the failure log. Setup > Automation > Actions > Webhooks, click the webhook and read the failure entries. Failures logged means the webhook is firing and your endpoint is rejecting it.
  2. Confirm the workflow rule fired at all. A webhook is an action attached to a rule. No rule trigger, no webhook.
  3. Test the endpoint yourself. A curl request from your own machine settles in ten seconds whether the receiving end is alive.
  4. Check the auth token at the receiving end. Expired credentials are the most common reason a webhook that has worked for months suddenly stops.
  5. Ask what changed recently. Deleted CRM fields, API updates at the receiver, firewall changes by your hosting provider.

The sections below take each in turn, plus the one fact that matters most: Zoho CRM never retries a failed webhook call.

Where is the webhook failure log in Zoho CRM?

Setup > Automation > Actions > Webhooks. Open the webhook by name and look at its failure log.

Zoho’s placement here is genuinely unhelpful. You attach a webhook to a workflow rule, so the rule is where everyone looks first, but the diagnostics live under Actions, three menus away. Once you find it, the log earns its keep: each failed call is recorded with the HTTP status code your endpoint returned and that code is the best evidence you’ll get. A 401 points at authentication. A 400 points at the payload. A 403 suggests a firewall and a timeout means a server that is down or too slow.

While you’re on this screen, check one more thing: whether the webhook is still active and still associated with its rule. Zoho deactivates webhooks that fail repeatedly and gives you little indication it has done so.

1. The workflow rule behind the webhook never fired

A webhook in Zoho CRM fires exactly when its workflow rule fires. If the rule’s criteria don’t match the record, the webhook does nothing and logs nothing.

The fast test: add a second, harmless action to the same rule, such as a task, then save a record that should qualify. If the task never appears, the rule is where to look. Rule problems have their own list of suspects: execution events set to Create when records arrive as edits, criteria failing on blank fields, deactivated rules and several more. We cover all nine in our guide to workflows not triggering.

2. Your endpoint failed until Zoho disabled the webhook

Zoho calls your URL and expects a 2xx response, quickly. Anything else counts as a failure: a 500 from a crashed application, a 404 from a moved route or a response that takes too long to arrive. Timeouts are the sneaky one. An endpoint that does heavy work before responding can drift past the limit under load while passing every manual test.

After repeated failures, Zoho disables the webhook. This is what turns a brief outage into a permanent one. Your server was down for an hour on Saturday, the webhook racked up failures and now it stays off even though the server has been healthy for days. Fixing the endpoint isn’t enough; you must also re-enable the webhook in CRM.

Test from your own machine before assuming anything:

curl -i -X POST "https://yourapp.example.com/hooks/zoho" \
  -H "Content-Type: application/json" \
  -d '{"test": true}'

If that hangs, errors or returns anything outside the 200 range, the problem is at your end.

3. An auth token expired at the receiving end

Most webhook URLs carry authentication: a token in a query string parameter or an API key in a custom header. Those credentials belong to the receiving system and they expire on its schedule, not yours.

This is the classic cause of a webhook that ran flawlessly for eighteen months and then stopped. Someone rotated keys during a security review. A SaaS platform expired its old tokens. The endpoint starts returning 401, Zoho logs failures and eventually disables the webhook, while the CRM configuration sits there looking exactly as it always has. Nobody thinks to check CRM because nobody changed CRM.

The fix is mechanical: generate a fresh credential at the receiving end, update the URL or header in Setup > Automation > Actions > Webhooks, re-enable the webhook and push a test record through.

4. The payload format changed

Payload problems come from either direction.

From the CRM side, the webhook body is built from field merge parameters. Delete or restructure a custom field the body references and the payload changes shape without anyone touching the webhook configuration. A strict receiver rejects the malformed body with a 400.

From the receiving side, APIs move on. A platform retires an old endpoint version, renames a required key or starts demanding JSON where it previously accepted form-encoded parameters. Zoho keeps sending exactly what it always sent, which is now wrong.

Compare the two ends. The webhook configuration screen shows what Zoho sends, including the body type, which matters more than people expect: Zoho can send form-encoded parameters or a raw JSON body and most receivers accept only one. The receiving platform’s current API documentation tells you what it wants today.

5. A firewall or allowlist is blocking Zoho’s servers

If Zoho’s failure log shows timeouts or 403s while your application logs show nothing arriving at all, the block sits in front of your application: a web application firewall, an IP allowlist, bot protection on a CDN or a corporate proxy.

This one tends to follow an infrastructure change. A server migration, a tightened WAF rule, an IT policy that allowlists known IP addresses and never included Zoho’s. Older servers also get caught on TLS: an endpoint that only speaks an outdated TLS version will have the handshake refused before your code ever runs.

Ask whoever runs the receiving infrastructure what changed around the date the failures started. The failure log gives you that date.

Does Zoho CRM retry failed webhooks?

No. One attempt per event, then nothing. If your endpoint was mid-deploy for ninety seconds, every record saved in those ninety seconds is missing from the downstream system and Zoho won’t send them again. There is no replay button.

That single fact should shape how you build anything important on webhooks. Three patterns we use on client systems:

  • Log before you process. The endpoint’s first job is writing the raw payload somewhere durable. Validation and business logic come after. When something breaks downstream, you can replay from your own log.
  • Reconcile on a schedule. A daily job comparing records modified in CRM against calls received at the endpoint catches gaps within a day instead of within a quarter. Even a crude count comparison is worth having.
  • Queue anything critical. The endpoint validates the call, drops it on a queue and returns 200 in milliseconds. A worker processes the queue with retries and backoff. This keeps responses well inside Zoho’s timeout and isolates downstream failures from the webhook itself. If the worker writes back into Zoho, watch your API limits; a worker chewing through a backlog can burn the daily allowance fast.

A lighter option for plain visibility: replace the webhook action with a Deluge custom function. invokeurl lets you read the response and shout when it fails, which a native webhook never will:

payload = Map();
payload.put("dealId", dealId.toString());
resp = invokeurl
[
    url :"https://yourapp.example.com/hooks/zoho"
    type :POST
    parameters:payload.toString()
    detailed:true
];
if(resp.get("responseCode") != 200)
{
    sendmail
    [
        from :zoho.adminuserid
        to :"ops@yourcompany.co.uk"
        subject :"CRM webhook call failed"
        message :"Endpoint returned " + resp.get("responseCode") + " for deal " + dealId
    ];
}

If the receiving end is Zapier rather than your own server, the diagnosis is similar but with some Zapier-specific wrinkles - our Zoho Flow vs Zapier guide covers where the two differ.

Quick diagnostic checklist

  1. Open Setup > Automation > Actions > Webhooks and read the failure log. Note the status codes and the date failures began.
  2. Is the webhook still active and still attached to its rule? Zoho disables webhooks after repeated failures.
  3. Did the workflow rule fire at all? Add a temporary task action to the same rule and test.
  4. curl the endpoint from your own machine. Anything other than a 2xx is your answer.
  5. Check the auth token at the receiving end. A 401 or 403 in the log points here.
  6. Compare the payload against what the receiver currently expects, including form-encoded versus JSON.
  7. Ask hosting or IT what changed on the failure start date: WAF rules, allowlists, TLS, migrations.
  8. Fixed it? Re-enable the webhook in CRM. Fixing the endpoint alone does nothing.

When to stop debugging and get help

Most of the causes above are findable in under an hour. The ones that aren’t tend to involve several systems failing politely at once: a webhook feeding middleware feeding an ERP, where every layer insists it’s fine. This is the point where most people should stop and get help, because the cost of a missing-orders gap grows by the day.

If records are failing to reach a system you bill from or ship from, our emergency Zoho developer service puts a senior developer on the problem within 30 minutes during UK business hours. For the longer-term fix, meaning webhooks replaced with monitored, queue-backed integrations that tell you when something breaks, that’s the core of our Zoho integrations work.

H4Z is a UK-based team working with clients worldwide. The discovery consultation is free and our pricing is published, so get in touch and we’ll tell you whether you’re looking at an hour’s fix or an architecture problem.

Frequently asked questions

Does Zoho CRM retry failed webhooks?

No. Zoho CRM makes one attempt per webhook call. If your endpoint is down, slow or returns an error, that notification is gone and Zoho won't send it again. After repeated failures Zoho disables the webhook entirely. For anything business-critical, put a lightweight queue in front of the real processing so your endpoint can accept calls instantly and retry the downstream work itself.

Where do I find the webhook failure log in Zoho CRM?

Go to Setup > Automation > Actions > Webhooks, open the webhook in question and check its failure log. It records recent failed attempts with the HTTP response code your endpoint returned. Cross-reference this with your own server logs: the combination of what Zoho sent and what your server saw usually identifies the fault in minutes.

Why did my Zoho CRM webhook work for months and then stop?

Almost always a change at the receiving end: an expired or rotated API token, a server migration that altered firewall rules, or an update to the receiving application's API. Zoho keeps calling, your endpoint starts rejecting and after enough failures Zoho disables the webhook. The CRM configuration looks fine because nothing there has changed.

Can I make a Zoho CRM webhook more reliable?

Yes. Replace the webhook action with a Deluge custom function using invokeurl, which lets you check the response code and alert someone on failure. For critical integrations, have the endpoint queue incoming calls and return 200 immediately, then process the queue with retries. Zoho offers no retry of its own, so resilience has to be built at your end.

Keep reading

More Zoho guides

Why Is the Zoho CRM to Zoho Books Sync Creating Duplicate Contacts?

Why the native Zoho CRM to Books sync creates duplicate customers, why disconnecting makes it worse and the cleanup route that works, from a UK Zoho team.

Read →

Zoho CRM API Limit Exceeded: What Error 4820 Means and How to Fix It

Why Zoho CRM throws error 4820 and 429s, how the API credit system works, how to find the integration burning your credits and the fixes that last.

Read →

Stuck on something like this?

Our emergency service puts a senior Zoho developer on your problem within 30 minutes during UK business hours - or book a free consultation for anything less urgent.