Free Google Forms webhook payload generator
Pick a payload shape, flat, Apps Script event, or RouteForms-style. Get the JSON body and a copy-paste curl command. For testing custom endpoints without filling the real form.
Pick the format your endpoint expects.
Whatever fields the form has. Used in the JSON body on the right.
POST this with Content-Type: application/json.
{
"Name": "Priya Mehta",
"Email": "priya@example.com",
"Budget": "75000",
"City": "Bangalore"
}Paste into a terminal to send the test request.
curl -sX POST "https://your-webhook.example.com/endpoint" \
-H "Content-Type: application/json" \
-d '{"Name":"Priya Mehta","Email":"priya@example.com","Budget":"75000","City":"Bangalore"}'The three moments developers reach for it
- Building a custom receiver.You've written a server endpoint that's supposed to accept Google Form submissions. You don't want to fill the actual form 20 times while you debug the parser, generate a sample payload, curl it in, iterate until your endpoint returns 200.
- Debugging “malformed payload”. Your existing endpoint started rejecting submissions. Generate a known-good payload in each shape, send it, see which shape your endpoint actually expects, fix the sender.
- Testing dedupe logic. The RouteForms shape includes a stable
_meta.responseId. Curl the same payload twice and confirm your receiver only writes one row.
Pick the one your endpoint expects
- Flat object:
{ "Name": "Priya", "Email": "...", ... }. The shape most people write servers for. No metadata; question title is the key, answer is the value. The Apps Script generator emits this when the destination isn't a Slack webhook. - Apps Script event:
{ namedValues: { Question: [answer] }, range, triggerUid }. The public shape of anonFormSubmitevent. Use this if you're testing Apps Script code outside the Apps Script editor. - RouteForms-style: flat keys plus
{ _meta: { formTitle, formId, responseId, submittedAt } }. What RouteForms POSTs to outbound webhooks and what our script generator emits when you provide a custom URL. TheresponseIdis the dedupe key.
Paste, hit enter, see the response
The curl output is a single self-contained command, endpoint URL, headers, body. It uses curl -sX POST with -H "Content-Type: application/json" and the JSON payload inlined with single-quote escaping so the shell hands it to your server unchanged.
For an auth-protected endpoint, edit the command after pasting to add an Authorizationheader. For a signed-webhook endpoint, you'll need to compute the signature based on the body, the generator can't do that without your secret.
Frequently asked questions
What does this tool do?▾
It generates a sample webhook payload, the JSON body your endpoint would receive on a real Google Form submission, and a copy-paste curl command that POSTs it to any URL. Useful when you're building a custom server-side receiver, debugging an endpoint that says 'malformed payload', or stress-testing a webhook locally without filling the actual form.
What payload shapes are supported?▾
Three: (1) Flat object, every form question is a top-level key with a string value. Easiest to consume from a custom server. (2) Apps Script event shape — { namedValues: { Question: [answer] } } matching what onFormSubmit handlers receive. Useful for testing Apps Script code locally. (3) RouteForms-style, flat keys plus a _meta block with formId, responseId, and submittedAt. Matches what RouteForms POSTs to outbound webhooks and what the Apps Script generator emits.
Is the data sent anywhere?▾
No. Everything runs in your browser, the payload and the curl command stay local. You're getting a JSON string and a shell command to copy; we don't proxy anything. If you want the request actually sent and the response inspected, use /tools/slack-webhook-tester.
How is this different from the webhook checker?▾
The checker actually POSTs to the URL you give it and reports back what happened, status code, latency, response body, error decoded into plain English. The payload generator just gives you the JSON body and a curl command; you run the request yourself. Use the generator when you want to vary the payload shape; use the checker when you want a quick yes/no on whether the endpoint accepts the request.
How do I use the curl output?▾
Copy the curl command, paste it into a terminal, hit enter. The endpoint URL field on the left fills the URL in the curl. If you want to add headers (auth tokens, custom signatures), edit the command in your terminal before running, the generator emits the minimum required (Content-Type: application/json).
Why are there fake UUIDs in the payload?▾
The Apps Script event and RouteForms shapes include identifiers, triggerUid for Apps Script, formId/responseId for RouteForms. We generate random UUIDs so the payload looks realistic and so dedupe logic on the receiver side actually has something to dedupe against. Don't use them for production; they regenerate on every change.
Is the namedValues output exactly what onFormSubmit receives?▾
It mirrors the public shape: namedValues is a map of question titles to arrays of answers, plus range and triggerUid. Real Apps Script events also include the source form reference, which can't be faked outside Apps Script. If your handler reads source, you'll need to test inside the Apps Script environment, the generator covers the e.namedValues path.
What about checkbox or multi-select answers?▾
In all three shapes, multi-select values become a comma-joined string by default in the flat / RouteForms shapes, matching what the Apps Script generator does on the live POST. In the Apps Script event shape, multi-select stays as an array under namedValues. Edit the field value to a comma-separated list to simulate.
Want a hosted webhook with delivery monitoring?
RouteForms is the managed version, it receives Google Form responses, applies routing rules, posts to Slack, and records every delivery attempt. Free for 30 responses a month.
Keep reading
Skip the curl, paste the URL and a test payload runs server-side. Status, latency, and a plain-English diagnosis.
If you've got a real response and want it shaped for Slack, the formatter renders the message and the Block Kit JSON.
Generate the Google Apps Script that POSTs the payload above on every form submission.
All the real options for delivering Google Form responses to Slack, ranked by fit.