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:

  1. Create a Google Sheets Integration in your organization settings
  2. Authenticate with Google to grant access to your spreadsheets
  3. 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
  • Sheet Name: The name of the specific sheet tab within the spreadsheet

    • Default: Sheet1
    • Can be any sheet name in your spreadsheet
  • 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
  1. Manual Node: Resolves user information and enriches review data
  2. Google Sheets Node: Consumes enriched data and saves to spreadsheet
  3. 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

  1. Use the Pipeline Debugger to inspect data at each step
  2. Check the Node Logs for detailed error messages
  3. Test with Simple Placeholders first (like {{packet.id}})
  4. 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.