Integrations

Send form responses to Google Sheets

There's no native Google Sheets sync in YeetForm today, but you can get the same result - one spreadsheet row per response, appended automatically - with a small Google Apps Script and a webhook. This page walks through the exact script (about 15 lines), how to deploy it as a web app, and how to point a YeetForm webhook at the resulting URL. It takes a few minutes and needs no server of your own.

Setup

1.

Add a webhook integration

Google Sheets has no native YeetForm connector, so the bridge is a webhook: in the form's Integrations tab, add a Webhooks endpoint pointing at a Google Apps Script web app URL.

2.

Create the Apps Script

In your target Sheet, open Extensions → Apps Script, paste the script below, and deploy it as a web app (Execute as: Me, Who has access: Anyone with the link). Use the deployment URL as your webhook endpoint.

function doPost(e) {
  var payload = JSON.parse(e.postData.contents);
  if (payload.event !== "response.created") return ContentService.createTextOutput("ignored");

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var labels = {};
  (payload.fields || []).forEach(function (f) { labels[f.id] = f.label; });

  var row = [payload.response_id, payload.submitted_at];
  Object.keys(payload.answers).forEach(function (id) {
    row.push(labels[id] || id, payload.answers[id]);
  });

  sheet.appendRow(row);
  return ContentService.createTextOutput("ok");
}
3.

Deploy and grab the URL

Deploying creates a URL like https://script.google.com/macros/s/.../exec - paste that into YeetForm's webhook field from step 1.

4.

Send a test response

Submit the form (or use the test button on the webhook integration) and confirm a new row lands in the sheet with the answers in order.

5.

Keep the sheet and form in sync

If you add or remove form fields later, update the script's column mapping - it reads answers by field id, not position, so it won't silently misalign existing columns, but a new field needs a new line in the script.

Tips

  • →Use the response's response_id as a dedupe key in the sheet (skip appending a row if one with that id already exists), since a retried webhook delivery resends the same response.
  • →Map columns from the payload's fields array (id to label) instead of hardcoding field ids, so the script survives you renaming or reordering fields.
  • →This is a webhook recipe, not a native integration - if the Apps Script quota or your account has issues, rows stop appearing silently; check the form's Integrations tab for delivery status instead of only watching the sheet.

Build your form with AI in seconds

Start free

FAQ

Is there a native Google Sheets integration?+
No - YeetForm doesn't sync to Sheets directly. This page shows a webhook-to-Apps-Script recipe that gets you the same result: one row per response, appended automatically.
Will this work with Google Forms' 'Sheets destination' feature?+
No, that feature is specific to Google Forms. This recipe uses a Google Apps Script web app as its own endpoint, triggered by YeetForm's webhook, independent of Google Forms.
What if I add a new field to my form later?+
The script maps answers by field id and label, so it keeps working, but a brand-new field needs a line added to the script (or a small tweak) to appear as its own column - see the tips above.
Does this retry if the script fails?+
Yes - it's a normal webhook delivery under the hood, so a failed Apps Script response gets retried up to 3 times like any other webhook.