Databases and spreadsheets
In developmentSend form submissions to Google Sheets
A spreadsheet is still the fastest way to sort, filter and share a pile of submissions, and everyone on the team already knows how to use one. Google Forms gets you a sheet but not your own markup. This gets you both: your form, your styling, rows appended to your sheet.
The native Google Sheets destination is still being built. The steps below use a webhook, which works today and needs no change to your form once the adapter ships.
What will land in Google Sheets
The native adapter is still in progress. The webhook route below delivers the same data today.
- One appended row per submission
- Columns matched to your existing header row by name
- New fields appended as new columns rather than silently dropped
- Spam quarantined before it reaches the sheet
Setup
Prepare the sheet
Create a header row whose labels match your form field names. Header matching is what keeps columns aligned as the form evolves.
Add a webhook destination today
Point a WebForms webhook at a Google Apps Script web app or a function using the Sheets API. Sample below.
Switch to the native adapter when it lands
The Google Sheets destination will connect with OAuth, let you pick a spreadsheet and tab, and map headers automatically.
Google Sheets example
Swap in your own endpoint and these run as-is.
Google Apps Script, deployed as a web app with access set to anyone. Paste the deployment URL into a webhook destination.
function doPost(e) {
const body = JSON.parse(e.postData.contents);
const sheet = SpreadsheetApp.getActiveSpreadsheet()
.getSheetByName("Submissions");
const headers = sheet
.getRange(1, 1, 1, sheet.getLastColumn())
.getValues()[0];
// Match on header name so reordering columns never scrambles the data.
const row = headers.map(function (h) {
if (h === "Submitted at") return new Date();
return body.data[h] || "";
});
sheet.appendRow(row);
return ContentService.createTextOutput("ok");
}Worth knowing
- The native Google Sheets destination is in development. This page describes the Apps Script route, which works today.
- Apps Script web apps must be deployed with access set to anyone, or the POST is redirected to a login page and never arrives.
- Matching on header names rather than column index means reordering columns in the sheet does not scramble future rows.
Google Sheets form FAQ
Today, deploy a small Apps Script web app and point a WebForms webhook destination at its URL. A native Sheets adapter with OAuth is in development.
It is your own markup, styling and validation instead of a Google-branded page, with layered spam filtering and delivery to other destinations at the same time. If you are happy with a Google-hosted form, Google Forms is fine.
Add a matching header to the sheet and it populates from the next submission. Fields without a header are stored in the dashboard and never lost.
Other destinations
Sending from your stack
The destination is set in the dashboard, so the form itself is the same plain POST everywhere. These guides have the markup for the common setups.
Send your next form submission to Google Sheets
Free for 300 submissions a month. Endpoint in under a minute, no card required.
Start free