Send every response where it needs to go.
CRMs, Slack, spreadsheets or your own backend. Forms posts each response the moment it arrives, and tries again if the other side is down.
1 →
Before we get started, who are we talking to?
What you get
Signed payloads
Every delivery carries a signature you can verify with your secret, so nobody can fake one.
Automatic retries
If your endpoint is down, Forms tries again later instead of losing the response.
Clean JSON
Answers keyed by question, with stable references you set, so your code doesn’t break when you edit wording.
No-code friendly
Paste a Zapier, Make or n8n webhook URL to reach thousands of apps.
Email alerts
Switch on email alerts and each new response arrives in your inbox too.
Native Google
Google Sheets and Google Drive connect in a couple of clicks.
Set it up in three steps
- 1
Open Webhooks and add your endpoint URL.
- 2
Copy the signing secret into your server or automation tool.
- 3
Submit a test response and watch it arrive.
Free to start
Build and test on the Free plan, then go Pro when you’re ready to switch it on.
Compare plansWhat a webhook delivery looks like
Every completed response is sent as a POST request with a JSON body. Each answer carries the question’s id, the reference you set, its type and title, the raw value and a readable text version, so your code can use whichever it needs.
{
"event": "response.completed",
"form": { "id": "f_…", "title": "Customer feedback" },
"response": {
"id": "r_…",
"submitted_at": "2026-10-05T09:41:00.000Z",
"duration_ms": 48210,
"score": null,
"hidden": { "utm_source": "newsletter" },
"answers": [
{ "question_id": "…", "ref": "name", "type": "short_text", "title": "What’s your name?", "value": "Ada", "text": "Ada" }
]
}
}
How to verify a webhook signature
Each request has an x-forms-signature header in the form t=<timestamp>,v1=<signature>. The signature is an HMAC-SHA256, in hex, of the timestamp, a full stop and the raw request body, keyed with your endpoint’s secret. Recompute it and compare before you trust the body. Checking that the timestamp is recent also stops old requests being replayed.
import crypto from "node:crypto";
function verify(rawBody, header, secret) {
const parts = Object.fromEntries(header.split(",").map((p) => p.split("=")));
const expected = crypto.createHmac("sha256", secret).update(`${parts.t}.${rawBody}`).digest("hex");
const fresh = Math.abs(Date.now() / 1000 - Number(parts.t)) < 300;
const given = Buffer.from(parts.v1 ?? "");
return fresh && given.length === expected.length && crypto.timingSafeEqual(Buffer.from(expected), given);
}Use the raw body exactly as received. Parsing and re-serialising the JSON changes the bytes and the signature won’t match.
Retries and duplicates
If your endpoint doesn’t answer with a success status, Forms tries again with growing gaps, starting at 30 seconds and doubling up to an hour, for up to five attempts in total. Every request also carries an x-forms-delivery header that stays the same across retries, so you can ignore a delivery you’ve already processed.
Zapier, Make and n8n without code
- Zapier: create a Zap with “Webhooks by Zapier” and the “Catch Hook” trigger, copy its URL into Forms, and submit a test response.
- Make: add a “Custom webhook” module, copy the address into Forms, and let Make learn the structure from a test response.
- n8n: add a Webhook node set to POST, paste its production URL into Forms, and activate the workflow.
- From there, send each response to a CRM, Slack, a calendar, an email tool or a database.
Webhooks & integrations, answered
Do you integrate with Zapier?+
Yes, through webhooks. Create a “Catch Hook” in Zapier, paste its URL into Forms, and every response triggers your Zap. Make and n8n work the same way.
How do I verify a webhook?+
Each request is signed with HMAC using your endpoint’s secret. Recompute the signature on your side and compare before trusting the body.
What if my server is down?+
Forms retries a failed delivery up to five times, waiting longer between each attempt.
Which plan includes webhooks?+
Webhooks are part of Pro. Email alerts, Google Sheets and CSV or JSON export are on every plan, Free included.
Get webhooks & integrations with Pro.
Pro is $19 a month: unlimited forms and responses, webhooks, and your own domain with HTTPS included.
Get Pro