Help topics

Your forms

Google Sheets

Submits.dev can add each submission to a Google Sheet as a new row.

Connect a sheet

  1. Open your sheet in Google Sheets and press Share.
  2. Add this address as an Editor: click to copy
  3. Copy the sheet's URL from your browser.
  4. On your dashboard, open the form's Settings, paste it into Google Sheet URL and press Save settings.
  5. Press Test Sheet Connection. A green message means it worked.

Leave Sheet tab name blank to use the first tab, or enter a tab's name. Upper and lower case don't matter.

One sheet, one account

Every Submits.dev account writes through the same submitsdev-sheets@submits-dev.iam.gserviceaccount.com address, so a sheet can belong to one account only. Your own forms can share a sheet, on the same tab or different tabs. If you see "connected to another Submits.dev account", someone else's form already uses that sheet: make a copy and connect the copy instead.

How rows are laid out

On an empty tab, the first row becomes the header:

_submitted_at | email | message | _spam_score | _status

When a submission has a field we haven't seen before, we add a column for it at the end of the header. You can reorder columns freely. If you rename a header, the next submission with that field adds a new column with the original name.

The _status column is VERIFIED for clean submissions and SUSPECTED_SPAM for likely spam. Blocked spam never reaches the sheet.

Values stay exactly as typed

Every value a visitor sends is stored as text, so a zip code like 02134 keeps its zero, an answer like 3/4 doesn't turn into a date, and something like =IMPORTXML(...) is never run as a formula. The _submitted_at and _spam_score columns stay a date and a number, so you can sort by them.

At most 100 columns

Each new field name adds a column, so a bot sending made-up field names could otherwise fill your sheet. One submission adds at most 20 new columns, and a tab stops growing at 100. Fields without a column of their own go into one _extra column as JSON, and nothing is lost. A field that missed out gets its column the next time it arrives, if there's room.

If rows stop arriving

Check that the sheet is still shared with submitsdev-sheets@submits-dev.iam.gserviceaccount.com as an Editor and that the tab still exists, then press Test Sheet Connection. When Google is briefly down or busy, we retry for a while. When Google says we have no access, or the sheet or tab doesn't exist, we don't retry, because only you can fix that. Those submissions stay on your dashboard, and you can download them as CSV. Once it's fixed, new submissions reach the sheet again.