Google Sheets Sync
Append FormPilot submissions to a selected Google Sheet.
FormPilot can append one row to a selected Google Sheet when a public form receives a new submission. This integration uses Google OAuth and the Google Sheets API.
This is not a Google Workspace Marketplace app. FormPilot does not install into your Google Workspace, does not list Drive files, and does not include a Drive file picker. Paste the target spreadsheet URL in FormPilot settings.
Requirements
- A FormPilot workspace on Starter, Pro, Business, or an active trial.
- A workspace member with the
org:webhooks:managepermission. - A Google account that can edit the target spreadsheet.
Setup
- Open Dashboard -> Settings -> Google Sheets sync.
- Click Connect Google and approve Sheets access.
- Paste the target Google Sheet URL or spreadsheet ID.
- Load tabs, choose the tab where rows should be appended, and save.
- Send a test row to verify the connection.
FormPilot stores only an encrypted Google refresh token and safe spreadsheet metadata. The token is never shown in the browser.
Row Columns
FormPilot writes this stable header row when the selected tab has an empty first row:
event_id, event_type, test, submitted_at, form_title, form_slug, submission_id,
dashboard_url, customer_name, email, phone, service, urgency, location, message,
attachment_count, summary_status, summary_text, answers_jsonIf row 1 already contains values, FormPilot does not overwrite it.
Common columns such as customer_name, email, phone, service, urgency,
location, and message are filled by matching safe form field labels and field
ids. answers_json contains the submitted field ids, labels, and values as a
fallback for fields that do not map to a common column.
Media upload fields are represented with attachment metadata such as file name, content type, and size. FormPilot does not write private upload URLs.
Delivery Behavior
Live rows use:
event_type:submission.createdtest:false
Test rows use:
event_type:webhook.testtest:true
Filter out rows where test is true before using the sheet for production
automation.
Google Sheets delivery is at-least-once. A network failure can happen after
Google accepted a row but before FormPilot receives the response, so duplicate
rows are possible. Use event_id to dedupe.
A delivery is considered successful when Google returns any HTTP 2xx response
within 10 seconds. Failed live deliveries retry with bounded backoff: 5 minutes,
15 minutes, 1 hour, and 6 hours. After 5 total attempts the delivery is marked
failed. Google Sheets sync is automatically disabled after 10 consecutive live
failures.
Test rows are single-attempt diagnostics. They do not retry, do not increment failure counts, and do not auto-disable the integration.
Disconnecting
Disconnecting Google Sheets removes the local encrypted token and attempts to revoke the Google refresh token. Future submissions will no longer append rows.
Current Scope
Pivot 04D supports one Google Sheets integration per FormPilot workspace. It does not include Drive file listing, a Google Workspace Marketplace app, service accounts, two-way sync, editing submissions from Sheets, per-form routing, formula generation, or API keys.