Google Forms Integration
Start workflows from form submissions using NexFlow's generated Apps Script.
On this page
How Google Forms works
NexFlow does not connect to Google Forms through OAuth. The trigger generates a webhook URL, a one-time visible secret, and a ready-to-copy Apps Script. An installable form-submit trigger runs that script whenever a response is submitted.
Node settings
| Setting | Purpose |
|---|---|
| Variable Name | Names the result; default googleForm. |
| Form Name | Optional label stored with the node for clarity. |
| Expected Form ID | Optional form ID recorded in node settings. The current trigger executor validates webhook payload shape but does not enforce this field against submissions. |
Connect a form
- Add Google Form, configure its fields, save the node, and save the workflow.
- Reopen settings and select
Generate Webhook. Copy the secret immediately; it is shown only once. - Copy the generated Apps Script.
- Open the Google Form, use the three-dot menu to open Apps Script, replace the default script, and save the project.
- In Apps Script Triggers, add a trigger for function
onFormSubmit, event sourceFrom form, event typeOn form submit, then authorize it. - Submit a test response through the form and inspect NexFlow Executions.
Warning
Do not press Run directly for onFormSubmit. A manual Apps Script run has no form-submit event object and intentionally fails.
Webhook controls and local URLs
Copy URLcopies the current public webhook route.Copy Secretis available only when a new or regenerated secret is shown.Regenerate webhook secretimmediately invalidates the old script secret and requires replacing the installed script.Copy Scriptcopies the generated code and remembers which URL that browser last copied so it can warn when the public URL changes.
Localhost cannot receive Google submissions
The trigger panel detects localhost and temporary Cloudflare Quick Tunnel URLs. If a tunnel hostname changes, update only WEBHOOK_URL in Apps Script. Do not regenerate the secret merely because the public URL changed.
Form output and variables
{
"data": {
"eventId": "response-id",
"submittedAt": "2026-08-10T10:00:00.000Z",
"form": { "id": "form-id", "title": "Feedback" },
"response": {
"id": "response-id",
"answers": { "Email": "person@example.com" },
"answerList": [{ "question": "Email", "value": "person@example.com" }]
}
}
}Use {{googleForm.data.response.answers.Email}} when a question title is a valid path segment. answerList is useful when titles contain spaces or when another action consumes the complete JSON array.