The Google Sheets connector sends the SubmissionEnvelope to a Google Apps Script web app, which writes the data into a Google Sheet. This gives you a live spreadsheet of all form submissions without any server infrastructure.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
url |
string |
Yes | — | Published Apps Script web app URL |
method |
string |
No | "POST" |
POST or PUT |
authHeader |
string |
No | — | Value for the Authorization header (optional security layer) |
SubmissionEnvelope as JSON to the Apps Script URLFollow these steps to create a Google Apps Script that receives submissions and writes them to a Google Sheet.
Submissions| A | B | C | D | E | F |
|---|---|---|---|---|---|
| Submission ID | Submitted At | IP | Origin | Name |
Adjust the last columns to match the fields in your form's payload.
Code.gsEdit the sheet.appendRow([...]) array to match the fields your form collects. The envelope.payload object contains whatever JSON the submitter sent.
formdata.dev receiverMeAnyonehttps://script.google.com/macros/s/AKfycb.../execSetting "Who has access" to "Anyone" means any HTTP request can trigger the script. This is required because formdata.dev's queue consumer sends the request from Cloudflare's infrastructure, not from your Google account. You can add an authHeader for extra security (see below).
Submit a test form entry:
Open your Google Sheet — a new row should appear within a few seconds.
For an extra layer of security, you can set an authHeader in your destination config. formdata.dev will send it as the Authorization header with every request to your Apps Script.
Google Apps Script has limited access to request headers. The Apps Script URL itself is already an unguessable shared secret, so authHeader is an optional additional layer.
When you modify your Apps Script code:
The URL stays the same — no need to update the destination config in formdata.dev.