Google Sheets
Learn how to integrate Google Sheets with your pipelines to automatically save and manage data.
Google Sheets Integration
The Google Sheets integration node allows you to automatically save data from your pipeline to Google Sheets spreadsheets. This is particularly useful for logging review results, tracking packet progress, and creating reports.
Overview
The Google Sheets node is an integration node that connects to your Google Sheets account and performs operations on your spreadsheets. It's designed to work seamlessly with manual nodes that have reviews, automatically consuming enriched user information and review data.
Prerequisites
Before using the Google Sheets node, you need to:
- Create a Google Sheets Integration in your organization settings
- Authenticate with Google to grant access to your spreadsheets
- Have a Google Spreadsheet ready with the appropriate sheet name
Configuration
Basic Fields
- Label: The name of the integration as it will appear in the workflow editor
- Description: A brief explanation of what the node is intended to do
- Integration: Select your configured Google Sheets integration from the dropdown
Method Configuration
Currently supported methods:
Add Row
Adds a new row to the specified Google Sheet with the provided data.
Sheet Configuration
-
Spreadsheet ID: The unique identifier of your Google Spreadsheet
- Found in the URL:
https://docs.google.com/spreadsheets/d/{SPREADSHEET_ID}/edit
- Example:
1-2WD3eH66J7ULOTVvpfi6fZTqhXWrl05pGWQAtfNZKE
- Found in the URL:
-
Sheet Name: The name of the specific sheet tab within the spreadsheet
- Default:
Sheet1
- Can be any sheet name in your spreadsheet
- Default:
-
Row Data: Comma-separated values that will be added as a new row
- Supports placeholders for dynamic data
- Example:
{{packet.id}},{{review.status}},{{review.reviewedByUser.displayName}}
Available Placeholders
The Google Sheets node has access to comprehensive data from previous nodes in your pipeline:
Packet Information
{{packet.id}}
- Unique packet identifier{{packet.name}}
- Packet name{{packet.currentNodeId}}
- Current node ID{{packet.organizationId}}
- Organization identifier{{packet.pipelineRef.id}}
- Pipeline identifier{{packet.pipelineRef.path}}
- Full pipeline path
User Information
{{packet.assignedTo.id}}
- ID of assigned user{{packet.assignedTo.path}}
- Path of assigned user
Input Data
{{input.fieldName}}
- Any field from the input data{{metadata.fieldName}}
- Any field from metadata
Review Information (from Manual Nodes)
When the Google Sheets node follows a manual node with reviews:
Review Status
{{review.status}}
- Review status (approved/rejected){{reviews.reviewKey.status}}
- Status of specific review
Reviewer Information
{{review.reviewedBy.displayName}}
- Full name of reviewer{{review.reviewedBy.email}}
- Email of reviewer{{review.reviewedBy.id}}
- User ID of reviewer
Review Results
{{review.results.fieldName}}
- Specific review result field{{reviews.reviewKey.results.fieldName}}
- Result from specific review
Review Metadata
{{review.reviewKey}}
- The review key identifier{{review.path}}
- Firestore path to the review document
Review Timing Information
{{review.reviewStartedAt}}
- When the review was started (ISO 8601 format){{review.reviewEndedAt}}
- When the review was completed (ISO 8601 format){{review.reviewDurationMs}}
- Duration of review in milliseconds{{review.reviewDurationSeconds}}
- Duration in seconds
Architecture & Data Flow
Optimal Pipeline Structure
Manual Node (with Review) → Google Sheets Node → Next Node
- Manual Node: Resolves user information and enriches review data
- Google Sheets Node: Consumes enriched data and saves to spreadsheet
- Next Node: Receives all data including Google Sheets operation result
Data Preservation
The Google Sheets node preserves all input data and adds its operation result:
Input (from manual node):
{
"review": {
"results": {
"approval_state": "slightly_edited",
"edited_boxes": 2
},
"reviewKey": "review",
"reviewedBy": {
"id": "cw9RmVGT0Laajp9IslVFdBrCmy43",
"email": "daro@synergyshock.com",
"displayName": "Omar Dario"
},
"status": "approved",
"reviewStartedAt": "2025-01-28T12:34:16.111Z",
"reviewEndedAt": "2025-01-28T12:34:20.150Z",
"reviewDurationMs": 4039,
"reviewDurationSeconds": 4,
"path": "organizations/iDx5yLKl1cCcq0lqiBw4/pipelinesPackets/6M6npHDG6gqaVKLkZNEr/reviews/AoymTJlRYvul6eWFNSsO"
},
"packetContext": {
"name": "",
"pipelineId": "pFyxX7J7OsDUngq7CC8G",
"currentNodeId": "7864a872-69e4-47f2-99c4-e8cfdcd747d8",
"id": "6M6npHDG6gqaVKLkZNEr"
}
}
Output (to next node):
{
// All input data preserved
"reviews": {
/* ... */
},
"review": {
/* ... */
},
// Google Sheets operation result added
"googleSheets": {
"operation": "ADD_ROW",
"result": {
"spreadsheetId": "1-2WD3eH66J7ULOTVvpfi6fZTqhXWrl05pGWQAtfNZKE",
"updatedRows": 1
},
"timestamp": "2025-01-27T16:00:00.000Z"
}
}
Examples
Example 1: Basic Review Logging
Configuration:
- Spreadsheet ID:
1-2WD3eH66J7ULOTVvpfi6fZTqhXWrl05pGWQAtfNZKE
- Sheet Name:
Review_Log
- Row Data:
{{packet.id}},{{review.status}},{{review.reviewedBy.displayName}},{{review.reviewedBy.email}}
Result in Google Sheets:
| Packet ID | Status | Reviewer | Email |
|-----------|--------|----------|-------|
| abc123 | approved | Omar Dario | daro@synergyshock.com |
Example 2: Detailed Review Results
Configuration:
- Row Data:
{{packet.id}},{{review.results.approval_state}},{{review.results.edited_boxes}},{{review.reviewedBy.displayName}},{{packetContext.pipelineId}}
Result in Google Sheets:
| Packet ID | Approval | Edited Boxes | Reviewer | Pipeline |
|-----------|----------|--------------|----------|----------|
| abc123 | slightly_edited | 2 | Omar Dario | pFyxX7J7OsDUngq7CC8G |
Example 3: Review Timing Information
Configuration:
- Row Data:
{{packetContext.id}},{{review.status}},{{review.reviewedBy.displayName}},{{review.reviewDurationSeconds}},{{review.reviewStartedAt}},{{review.reviewEndedAt}}
Result in Google Sheets:
| Packet ID | Status | Reviewer | Duration (sec) | Started At | Ended At |
|-----------|--------|----------|----------|------------|----------|
| abc123 | approved | Omar Dario | 323 | 2025-01-27T15:30:00.000Z | 2025-01-27T15:35:23.000Z |
Example 4: Complete Review Analytics
Configuration:
- Row Data:
{{packetContext.id}},{{review.status}},{{review.reviewedBy.displayName}},{{review.reviewedBy.email}},{{review.reviewDurationMs}},{{review.reviewDurationSeconds}},{{packetContext.pipelineId}}
Result in Google Sheets:
| Packet ID | Status | Reviewer | Email | Duration (ms) | Duration (sec) | Pipeline ID |
|-----------|--------|----------|-------|---------------|----------|-------------|
| abc123 | approved | Omar Dario | daro@synergyshock.com | 323000 | 323 | pFyxX7J7OsDUngq7CC8G |
Best Practices
1. Position After Manual Nodes
Always place Google Sheets nodes after manual nodes with reviews to access enriched user information.
2. Use Descriptive Headers
Create clear column headers in your Google Sheet to match your row data structure.
3. Handle Missing Data
Consider that some placeholders might be empty. Google Sheets will show empty cells for missing values.
4. Test with Sample Data
Use the pipeline test feature to verify your placeholders resolve correctly before production use.
5. Organize Your Sheets
- Use separate sheets for different types of data
- Include timestamp columns for tracking
- Add metadata columns for filtering and analysis
Troubleshooting
Common Issues
Error: "Spreadsheet not found"
- Verify the Spreadsheet ID is correct
- Ensure the Google Sheets integration has access to the spreadsheet
- Check that the spreadsheet exists and isn't deleted
Error: "Sheet not found"
- Verify the sheet name matches exactly (case-sensitive)
- Ensure the sheet tab exists in the spreadsheet
Empty Values in Cells
- Check that placeholders are spelled correctly
- Verify that the data exists in the previous node's output
- Use the pipeline debugger to inspect available data
Permission Denied
- Re-authenticate your Google Sheets integration
- Verify the integration has write permissions to the spreadsheet
Debugging Tips
- Use the Pipeline Debugger to inspect data at each step
- Check the Node Logs for detailed error messages
- Test with Simple Placeholders first (like
{{packet.id}}
) - Verify Integration Status in organization settings
Advanced Usage
Multiple Review Keys
If your manual node has multiple review types:
{{reviews.quality_review.status}},{{reviews.accuracy_review.status}},{{reviews.quality_review.reviewedBy.displayName}}
Conditional Data
Use the pipeline's condition nodes before Google Sheets to control when data is saved:
Manual Node → Condition Node → Google Sheets Node
Batch Processing
For high-volume pipelines, consider using batch operations or separate sheets for different data types.
Integration with Other Nodes
The Google Sheets node works seamlessly with:
- Manual Nodes: Primary source of review data
- Condition Nodes: Control when to save data
- Action Nodes: Additional processing after saving
- Other Integration Nodes: Combine with Slack, email notifications, etc.
Note: Review data with user information is automatically populated when reviews are submitted in manual nodes. The Google Sheets node consumes this data directly from the pipeline input. User information is available in the reviewedBy
object containing id
, displayName
, and email
fields.