Webhooks: refresh your sheets from anywhere
What webhooks do
A webhook is a secret, token-protected URL for your spreadsheet. Any system that can make an HTTP request — Zoho Books automations, Zoho Flow, Zapier, Make, a CI job or even a browser bookmark — can call it, and G-Integrator re-runs your saved query templates and writes the refreshed Zoho Books values back into the sheet. Your formatting is preserved, and no schedule is needed: data updates the moment something happens in your books.
Unlike scheduled workflows, webhook refreshes run on the G-Integrator servers — there is nothing to deploy, and they work even while the spreadsheet is closed.
Set up a webhook
- Open in the add-on menu.
- Click Generate / Rotate Token — the dialog shows your webhook URL.
- Click Authorize Google (one time per spreadsheet) so our server may write the refreshed values into your sheet on your behalf.
- Pick a Run target: All templates refreshes everything saved in the spreadsheet, or choose a workflow to refresh only that workflow's templates.
- Click Copy URL and paste it into the external system that should trigger the refresh.
If you add or change templates later, click Re-sync Templates in the same dialog so the webhook runs the latest version of your queries.
Calling the webhook
The URL supports both GET and POST:
…/webhook/<token>— refresh all saved templates in the spreadsheet (the default);…/webhook/<token>?workflow=<workflow-uuid>— refresh only the templates of one workflow. Pick the workflow in the dialog and it builds this URL for you.
Example with curl:
curl "https://<your-webhook-url>/webhook/<token>?workflow=<workflow-uuid>"
The webhook answers with JSON — for example
{"status":"ok","action":"workflow","refreshed":3,"rows":1250} on success, or
{"status":"error","message":"…"} when the token is invalid, Google access has not
been granted, or the rate limit is hit. No data is changed on an error.
Real-life use cases
- Refresh when an invoice is paid. Add a Webhook action to a Zoho Books Workflow Rule (e.g. Invoice Status = Paid) that calls your webhook URL — the accounts-receivable sheet and your cash-flow dashboard update within seconds of the payment.
- Keep an expense approval board live. Trigger the webhook from Zoho Flow, Zapier or Make whenever an expense report is approved, so the team's spending tracker in Sheets always shows the latest approved totals.
- Month-end close checklist. Your accountant keeps the webhook URL as a browser bookmark and clicks it right before reviewing the close workbook — fresh invoices, bills and journals, no add-on menu clicks needed.
- Dashboards that are never stale. Call the URL from a cron job or your BI tool's pre-run hook so Looker Studio or internal reports built on the spreadsheet always read current Zoho Books data.
- Targeted workflow refresh. After your bank feed is categorized, call the
?workflow=URL of the "Banking" workflow only, instead of re-running every template in the workbook.
Execution history in your spreadsheet
Every webhook run is recorded in the "Automatic Operations Events Log" tab of the spreadsheet — the same log used by scheduled workflows. The tab is created automatically on the first run, and each refresh adds rows like these:
- Started the execution — the run began;
- Started to Pull / Success — one row per refreshed sheet, with the template name and result;
- Error — a template failed, with the error message;
- Execution ended — the run finished.
Use the log to verify that an external trigger fired, see exactly which sheets were updated, and diagnose failures without leaving the spreadsheet.
Rate limit
By default each webhook can be executed once per hour. Calls over the limit are rejected without changing any data, and the response tells you when to retry:
{"status":"error","message":"Rate limit: this webhook can be executed once every 60 minute(s). Try again in 42 minute(s)."}
Why a limit? Every webhook call runs your queries against Zoho Books and rebuilds your sheets on our servers — that computing time costs us real money. The hourly limit keeps the feature fast and reliable for everyone while keeping it included in your subscription at no extra charge.
Need your data fresher than once an hour? We are investigating offering a lower rate limit for an extra fee. If that would help your team, let us know — hearing about your use case helps us prioritize it.
Keep the URL secret
Anyone who has the token can trigger refreshes — and consume your hourly rate-limit window. If the URL leaks, open and click Generate / Rotate Token to issue a new one, or Revoke Token to disable the webhook entirely; old URLs stop working immediately.