Configure Sayify to append enriched response data, AI metrics, custom fields, and approved destination items to Google Sheets.
Google Sheets Integration
The Google Sheets integration appends Sayify response data to a spreadsheet. Use it for reporting, campaign tracking, lead review, support queues, and lightweight exports.
Rows are built from the same enriched response.submitted payload used by Zapier. Sayify flattens nested data into column names such as session__link_name, responses__budget, and use_case_metrics__lead_score.
What Google Sheets Receives
| Event | Behavior |
|---|---|
response.submitted |
Appends one row per submitted response after AI enrichment. |
destination_item.approved |
Appends approved destination payloads when a reviewed item is pushed to the integration. |
Google Sheets does not receive response.started; it is designed for completed rows with response and AI data.
Requirements
| Requirement | Details |
|---|---|
| Sayify plan | Workspace must include google_sheets_integration. |
| Google account | You must authorize Sayify with Google OAuth. |
| Spreadsheet access | The connected Google account must be able to access the selected spreadsheet. |
| Sheet tab | A target sheet tab must exist. Sayify defaults to Sheet1 when possible. |
Configure Google Sheets
- Open Integrations in Sayify.
- Choose Google Sheets.
- Click Connect Google Sheets.
- Approve the Google OAuth prompt.
- Return to Sayify.
- Pick the target spreadsheet.
- Pick the sheet tab.
- Save the integration.
- Use Test to append a test row.
The integration can be global or assigned to a specific form from Form Builder > Automation > Always-On Integrations.
Spreadsheet Permissions
Sayify uses Google OAuth with Drive file access. The connected Google account must have permission to the spreadsheet you select.
If a spreadsheet does not appear:
- Open the spreadsheet in Google Drive with the connected account.
- Confirm the account can edit it.
- Reopen the Google Sheets integration in Sayify.
- Reconnect if the token expired or access changed.
Row Format
Sayify builds Google Sheets rows in three steps:
- Build the nested
response.submittedpayload. - Flatten it using Zapier-style
__keys. - Append a row using those flattened keys as columns.
Example flattened row data:
{
"event": "response.submitted",
"timestamp": "2026-02-17T10:13:30.794Z",
"session__uuid": "abc123-session-uuid-456",
"session__link_name": "Lead Qualification",
"session__link_slug": "lead-qualification",
"session__duration_seconds": 85.79,
"contact__name": "Alex Johnson",
"contact__email": "alex@example.com",
"responses__company_size": "51-200",
"responses__company_size__question": "How large is your company?",
"responses__current_solution": "We use spreadsheets today.",
"ai_evaluation__insights__executive_summary": "The respondent is evaluating a more scalable process.",
"use_case": "lead_qualification",
"use_case_metrics__lead_score": 88,
"use_case_metrics__icp_fit": "Strong Fit",
"custom_fields__decision_process": "Finance approval required"
}
Column Order
Sayify puts stable metadata columns first, dynamic response columns next, and any remaining fields after that.
Common leading columns:
| Column | Description |
|---|---|
event |
Usually response.submitted. |
timestamp |
Delivery timestamp. |
session__uuid |
Response session UUID. |
session__link_name |
Form name. |
session__link_slug |
Form slug. |
session__started_at |
Session start time. |
session__duration_seconds |
Completion duration. |
respondent__ip_address |
Respondent IP address. |
respondent__location__country |
Country when available. |
respondent__location__city |
City when available. |
workspace__name |
Workspace name. |
Dynamic columns include:
| Column Pattern | Description |
|---|---|
responses__<field_key> |
Answer value for a form question. |
responses__<field_key>__question |
Original question prompt. |
responses__<field_key>__response_type |
Response type such as text, rating, dropdown, or voice. |
responses__<field_key>__sentiment_score |
Per-answer AI sentiment when available. |
responses__<field_key>__executive_summary |
Per-answer AI summary when available. |
use_case_metrics__<key> |
Use-case metrics such as lead score, ICP fit, or urgency. |
custom_fields__<key> |
Custom extraction fields configured for the form. |
extracted_data__<key> |
AI-extracted values from the case. |
use_case_key_points__<key> |
Key point arrays converted to comma-separated strings. |
Metric:<key> |
Legacy metric alias. |
Field:<key> |
Legacy extracted-field alias. |
Headers and New Fields
When the first row is appended, Sayify can create headers from the available flattened payload. If later submissions contain new fields, those keys may appear as new columns depending on the existing sheet state and append behavior.
To keep reporting clean:
- Finalize your form field keys before launching a campaign.
- Submit one test response per important use case.
- Confirm the sheet has the expected columns.
- Avoid renaming field keys during an active campaign unless you are ready for new columns.
Dynamic Use-Case Fields
Different forms produce different metrics:
{
"use_case": "lead_qualification",
"use_case_metrics__lead_score": 88,
"use_case_metrics__buyer_intent": "Ready to Buy"
}
{
"use_case": "support_intake",
"use_case_metrics__issue_category": "Billing",
"use_case_metrics__urgency_level": "High"
}
Google Sheets stores whichever fields are present in the payload. It does not require every use case to share the same schema.
Assign Google Sheets to a Form
- Open the form in Form Builder.
- Go to Automation.
- Open Always-On Integrations.
- Select the Google Sheets integration.
- Save the form.
Use separate Google Sheets integrations when different forms should write to different spreadsheets or tabs.
Filters and Workflow Rules
You can filter Google Sheets delivery so only matching submissions append rows. Common examples:
| Goal | Setup |
|---|---|
| Log only qualified leads | Filter on lead_score or qualification_status. |
| Log only urgent support requests | Filter on urgency or action required. |
| Route different forms to different sheets | Assign integrations per form in Form Builder. |
Destination approval flows can also push approved data to Google Sheets after a reviewer confirms extracted fields.
Testing
Use Test from the integration page to verify that Sayify can append a row. Then submit a real form response to verify:
- Dynamic response fields appear.
- AI summary appears.
- Use-case metrics appear.
- Custom fields appear.
- The row lands in the expected spreadsheet and sheet tab.
Troubleshooting
| Problem | What To Check |
|---|---|
| Connect fails | Confirm the workspace plan includes Google Sheets and server OAuth credentials are configured. |
| Spreadsheet is missing | Confirm the connected Google account has access. Reconnect if needed. |
| Token expired | Reconnect Google Sheets from the integration page. |
| Rows are missing AI metrics | Use response.submitted and wait for AI enrichment. Test with a form that actually produces metrics. |
| Wrong sheet tab | Reopen the integration and select the correct tab. |
| New columns appear unexpectedly | A question field key, use case, or custom extraction field changed. |