All docs
4 min read

Google Sheets

Append each accepted submission as a new row in a spreadsheet you choose. Formspring uses Google's official Sheets API after you connect your Google account - no Apps Script URL and no third-party relay. Available on Forms, Surveys, and Funnels.

What you need

  • A Google account that can edit the spreadsheet.
  • The spreadsheet open in your browser so you can copy its URL and see the tab name exactly as it appears on the tab strip.

Steps

  1. Open your form / survey / funnel → Webhooks → click the Google Sheets card.
  2. Click Connect Google account and approve the spreadsheet permission.
  3. Paste the spreadsheet URL (it must contain /spreadsheets/d/…).
  4. Pick a tab from the list. (Click Refresh tab list if you don't see your new tab.)
  5. Configure the column mapping (see below). You can use Auto-map fields to seed it from your form fields, then drag rows to reorder.
  6. Click Send test row to verify the connection. The row appears at the bottom of your tab.
  7. Save the integration and toggle it active.

How rows are mapped

Each column in the spreadsheet is bound to one of three sources:

  • Form field - pulls the submitted value for a given field by its stable name. The field's value is rendered using the format you pick:
    • raw - string / number / boolean as-is
    • date_iso - ISO 8601 (2026-05-16T14:32:00+00:00)
    • date_human - readable (2026-05-16 14:32)
    • comma - array values joined by ,
    • json - encoded as JSON
    • files_urls - for file fields, joins all uploaded file URLs with ,
  • Reserved token - a stable per-submission value not tied to any field:
    • {created_at} - submission timestamp
    • {submission_id} - Formspring's submission identifier
    • {form_id} - your form / survey / funnel public id
    • {form_name} - the parent's display name
    • {ip}, {user_agent}, {referrer} - request context
    • {status} - received for normal submissions, spam for filtered ones
    • {project_id} - submission's project assignment
  • Empty cell - placeholder so you can keep spacing without binding anything yet.

If a form field is renamed later, the mapping still works - only the columns that referenced the old name will produce empty cells until you remap them. The mapping assistant flags any unknown field names when you save.

The header row in your spreadsheet is separate from the mapping. Use Write headers to sheet to push the mapping's header labels as the sheet's first row, or Import headers from sheet to start the mapping from a header row you've already authored.

Backfill past submissions

Once a Google Sheets integration is active, you can replay historical submissions through it:

  • Pick a window: last 7 days / 30 days / 90 days / all-time (capped at 5,000 rows).
  • Click Queue backfill. The job runs on a dedicated queue so it doesn't slow down live submissions.
  • Each row passes through the same mapping you configured for new submissions.

Backfills are billable against your monthly delivery counter, same as live deliveries.

Reconnect Google account

If Google rejects the saved connection (the most common reason is revoking Formspring access at myaccount.google.com/permissions), the integration pauses automatically:

  • We email the team owner and any member with webhook write permission, once per disconnect.
  • A red banner appears at the top of the integration page for everyone with access.
  • Live submissions are saved as normal - nothing is lost - but they aren't pushed to the sheet until you reconnect.
  • Click Reconnect Google account in the banner or on the integration page to restore the link. Your mapping stays as-is.

We also run a daily background check that surfaces dead connections in the morning instead of at 3 AM, so the email lands while you can act on it.

Tips

  • Tab names are case-sensitive and must match exactly (including spaces). Use the tab dropdown to avoid typos.
  • If Google returns a permission error after reconnecting, confirm the Google account you authorized actually has edit access on the spreadsheet (not just view access).
  • For row-level branching or formula columns, combine Sheets with Automations in Formspring, or use a generic webhook alongside.

Troubleshooting

See Google Sheets troubleshooting for the "row didn't appear" decision tree.

Self-hosting

If you run Formspring yourself, your Google Cloud OAuth client must allow the Sheets callback URL and have the Sheets API enabled. Your team's internal runbook covers the exact redirect URIs and the OAuth verification process.