Go to Studio

Google Sheets Reader

Read and filter data from Google Sheets with advanced filtering, sorting, and pagination

What does this node do?

The Google Sheets Reader node reads data from a Google Sheets spreadsheet and returns it as structured JSON. It supports advanced server-side filtering with 12+ operators, sorting, column range selection, and pagination to efficiently extract exactly the data your workflow needs.

Common use cases:

  • Pull product catalogs or inventory data for AI processing
  • Filter orders or transactions by date, status, or amount
  • Read CRM contact lists for enrichment or outreach workflows
  • Extract specific columns and rows from large datasets

Quick setup

Connect your Google account

Open the node settings and select your Google Sheets integration from the dropdown. If you haven’t connected Google Sheets yet, go to Settings > Integrations to add your Google account.

Select a spreadsheet

Click the spreadsheet picker button to open the Google Picker. Browse or search your Drive and select a spreadsheet. The spreadsheet ID is populated automatically.

Configure sheet and range

Choose the sheet tab name, set column range, and optionally add filters to narrow down the data returned.

Configuration parameters

Required fields

integration_id integration required

Google Sheets integration — Select the Google account to use. The integration must have read access to the target spreadsheet.

spreadsheet_id string required

The unique identifier of your Google Sheet, selected via the Google Picker.

How to find it manually: From the URL: docs.google.com/spreadsheets/d/[SPREADSHEET_ID]/edit

Optional fields

sheet_name string

The name of the sheet tab to read from. Defaults to the first sheet if not specified.

Example: Orders, Sheet1, Q1 Data

has_headers boolean default: true

Whether the first row contains column headers. When enabled, returned data uses header names as keys. When disabled, data is returned as arrays.

column_range_start string

Starting column letter (A-AZ). Limits which columns are read to improve performance on wide spreadsheets.

Example: A

column_range_end string

Ending column letter (A-AZ). Used with column_range_start to define the column range.

Example: F

filters json

JSON filter configuration to select specific rows. Supports 12+ operators for text, numeric, date, and boolean fields, with AND/OR logic for combining conditions.

Supported operators:

CategoryOperators
Textequals, not_equals, contains, not_contains, starts_with, ends_with
Numericgreater_than, less_than, greater_or_equal, less_or_equal
Datebefore, after
Booleanis_true, is_false
Generalis_empty, is_not_empty

Example with AND logic:

{
  "logic": "AND",
  "conditions": [
    {"column": "Status", "operator": "equals", "value": "Active"},
    {"column": "Amount", "operator": "greater_than", "value": "1000"}
  ]
}

Example with OR logic:

{
  "logic": "OR",
  "conditions": [
    {"column": "Region", "operator": "equals", "value": "Europe"},
    {"column": "Region", "operator": "equals", "value": "Asia"}
  ]
}
sort_column string

Column name to sort results by. Must match a header name when has_headers is enabled.

Example: Date, Amount, Name

sort_order string default: asc

Sort direction. asc for ascending, desc for descending.

limit number default: 10000

Maximum number of rows to return. Supports {{variables}} for dynamic limits.

Example: 100, {{max_rows}}

Tip

Use filters and column ranges to reduce the amount of data returned. This improves performance and reduces token usage when passing data to LLM nodes downstream.

Output

sheet_data string

JSON string containing the rows that match your configuration. Each row is an object with column headers as keys (when has_headers is enabled).

With headers:

[
  {"Name": "Widget A", "Price": "29.99", "Stock": "150", "Category": "Electronics"},
  {"Name": "Widget B", "Price": "49.99", "Stock": "75", "Category": "Electronics"}
]

Without headers:

[
  ["Widget A", "29.99", "150", "Electronics"],
  ["Widget B", "49.99", "75", "Electronics"]
]

Access the output: {{GoogleSheetsReader_0.sheet_data}}

Usage examples

Example 1: Pull product data for AI processing

Read a product catalog from Sheets and generate marketing descriptions with an LLM.

Configuration:

  • Sheet name: Products
  • Column range: A to F
  • Filter: Stock greater_than 0
  • Limit: 50

Workflow:

  1. Google Sheets Reader — Read active products
  2. Loop — Iterate over each product
  3. LLM — Generate a marketing description for each product
  4. Google Sheets Writer — Write descriptions back

Example 2: Filter orders by date range

Extract recent orders for daily reporting.

Configuration:

  • Sheet name: Orders
  • Filters: Order_Date after 2024-01-01 AND Status equals Completed
  • Sort column: Order_Date
  • Sort order: desc
  • Limit: 100

Workflow:

  1. Google Sheets Reader — Read recent completed orders
  2. LLM — Summarize daily order trends
  3. Email Sender — Send the summary report

Best practices

  • Use filters to reduce data volume. Reading entire spreadsheets wastes resources. Apply filters server-side to fetch only relevant rows, especially when feeding data to LLM nodes.
  • Set a proper column range. If your spreadsheet has 26 columns but you only need 6, set column_range_start to A and column_range_end to F. This reduces payload size significantly.
  • Keep headers enabled. Named keys make data easier to reference in downstream nodes with {{GoogleSheetsReader_0.sheet_data}} and are more readable for LLM prompts.
  • Use sorting to get the most relevant data first. Combined with a limit, sorting ensures you get the newest or highest-priority rows.

Common issues

No data returned (empty result)

Cause: Filters may be too restrictive, the sheet name may be incorrect, or the spreadsheet may be empty.

Solution:

  • Verify the sheet tab name matches exactly (case-sensitive)
  • Temporarily remove filters to check if data is accessible
  • Confirm the spreadsheet contains data in the specified column range
  • Check that the integration has read access to the spreadsheet
Column names don't match in filters

Cause: Filter column names must match the header row exactly, including spaces and capitalization.

Solution:

  • Open the spreadsheet and verify the exact header text
  • Ensure has_headers is set to true
  • Check for leading/trailing spaces in header cells