Automate Google Sheets workflows including reading/writing data, managing spreadsheets and tabs, formatting cells, filtering rows, and upserting records through Composio's Google Sheets toolkit.
Toolkit docs: composio.dev/toolkits/googlesheets
RUBE_MANAGE_CONNECTIONS with toolkit googlesheets
RUBE_SEARCH_TOOLS first to get current tool schemasGet Rube MCP: Add https://rube.app/mcp as an MCP server in your client configuration. No API keys needed — just add the endpoint and it works.
RUBE_SEARCH_TOOLS respondsRUBE_MANAGE_CONNECTIONS with toolkit googlesheets
When to use: User wants to read data from or write data to a Google Sheet
Tool sequence:
GOOGLESHEETS_SEARCH_SPREADSHEETS - Find spreadsheet by name if ID unknown [Prerequisite]GOOGLESHEETS_GET_SHEET_NAMES - Enumerate tab names to target the right sheet [Prerequisite]GOOGLESHEETS_BATCH_GET - Read data from one or more ranges [Required]GOOGLESHEETS_BATCH_UPDATE - Write data to a range or append rows [Required]GOOGLESHEETS_VALUES_UPDATE - Update a single specific range [Alternative]GOOGLESHEETS_SPREADSHEETS_VALUES_APPEND - Append rows to end of table [Alternative]Key parameters:
spreadsheet_id: Alphanumeric ID from the spreadsheet URL (between '/d/' and '/edit')ranges: A1 notation array (e.g., 'Sheet1!A1:Z1000'); always use bounded rangessheet_name: Tab name (case-insensitive matching supported)values: 2D array where each inner array is a rowfirst_cell_location: Starting cell in A1 notation (omit to append)valueInputOption: 'USER_ENTERED' (parsed) or 'RAW' (literal)Pitfalls:
valueRanges[i].values; treat missing as empty arrayGOOGLESHEETS_BATCH_UPDATE values must be a 2D array (list of lists), even for a single rowtableRange; use returned updatedRange to verify placementWhen to use: User wants to create a new spreadsheet or manage tabs within one
Tool sequence:
GOOGLESHEETS_CREATE_GOOGLE_SHEET1 - Create a new spreadsheet [Required]GOOGLESHEETS_ADD_SHEET - Add a new tab/worksheet [Required]GOOGLESHEETS_UPDATE_SHEET_PROPERTIES - Rename, hide, reorder, or color tabs [Optional]GOOGLESHEETS_GET_SPREADSHEET_INFO - Get full spreadsheet metadata [Optional]GOOGLESHEETS_FIND_WORKSHEET_BY_TITLE - Check if a specific tab exists [Optional]Key parameters:
title: Spreadsheet or sheet tab namespreadsheetId: Target spreadsheet IDforceUnique: Auto-append suffix if tab name exists (default true)properties.gridProperties: Set row/column counts, frozen rowsPitfalls:
index when creating multiple sheets in parallel (causes 'index too high' errors)GOOGLESHEETS_GET_SPREADSHEET_INFO can return 403 if account lacks accessWhen to use: User wants to find specific rows or apply filters to sheet data
Tool sequence:
GOOGLESHEETS_LOOKUP_SPREADSHEET_ROW - Find first row matching exact cell value [Required]GOOGLESHEETS_SET_BASIC_FILTER - Apply filter/sort to a range [Alternative]GOOGLESHEETS_CLEAR_BASIC_FILTER - Remove existing filter [Optional]GOOGLESHEETS_BATCH_GET - Read filtered results [Optional]Key parameters:
query: Exact text value to match (matches entire cell content)range: A1 notation range to search withincase_sensitive: Boolean for case-sensitive matching (default false)filter.range: Grid range with sheet_id for basic filterfilter.criteria: Column-based filter conditionsfilter.sortSpecs: Sort specificationsPitfalls:
GOOGLESHEETS_LOOKUP_SPREADSHEET_ROW matches entire cell content, not substringsWhen to use: User wants to update existing rows or insert new ones based on a unique key column
Tool sequence:
GOOGLESHEETS_UPSERT_ROWS - Update matching rows or append new ones [Required]Key parameters:
spreadsheetId: Target spreadsheet IDsheetName: Tab namekeyColumn: Column header name used as unique identifier (e.g., 'Email', 'SKU')headers: List of column names for the datarows: 2D array of data rowsstrictMode: Error on mismatched column counts (default true)Pitfalls:
keyColumn must be an actual header name, NOT a column letter (e.g., 'Email' not 'A')headers is NOT provided, first row of rows is treated as headersstrictMode=true, rows with more values than headers cause an errorWhen to use: User wants to apply formatting (bold, colors, font size) to cells
Tool sequence:
GOOGLESHEETS_GET_SPREADSHEET_INFO - Get numeric sheetId for target tab [Prerequisite]GOOGLESHEETS_FORMAT_CELL - Apply formatting to a range [Required]GOOGLESHEETS_UPDATE_SHEET_PROPERTIES - Change frozen rows, column widths [Optional]Key parameters:
spreadsheet_id: Spreadsheet IDworksheet_id: Numeric sheetId (NOT tab name); get from GET_SPREADSHEET_INFOrange: A1 notation (e.g., 'A1:F1') - preferred over index fieldsbold, italic, underline, strikethrough: Boolean formatting optionsred, green, blue: Background color as 0.0-1.0 floats (NOT 0-255 ints)fontSize: Font size in pointsPitfalls:
worksheet_id, not tab title; get from spreadsheet metadataGOOGLESHEETS_SEARCH_SPREADSHEETS with query
GOOGLESHEETS_GET_SPREADSHEET_INFO, extract from sheets metadataGOOGLESHEETS_FIND_WORKSHEET_BY_TITLE
Google Sheets enforces strict rate limits:
GOOGLESHEETS_BATCH_GET and GOOGLESHEETS_BATCH_UPDATE for efficiencyGOOGLESHEETS_UPSERT_ROWS for CRM syncs, inventory updates, and dedup scenariosfirst_cell_location) is safest for adding new recordsGOOGLESHEETS_CLEAR_VALUES to clear content while preserving formattingFORMAT_CELL needs numeric sheetId, not tab titleGOOGLESHEETS_DELETE_DIMENSION is irreversible; double-check bounds| Task | Tool Slug | Key Params |
|---|---|---|
| Search spreadsheets | GOOGLESHEETS_SEARCH_SPREADSHEETS |
query, search_type |
| Create spreadsheet | GOOGLESHEETS_CREATE_GOOGLE_SHEET1 |
title |
| List tabs | GOOGLESHEETS_GET_SHEET_NAMES |
spreadsheet_id |
| Add tab | GOOGLESHEETS_ADD_SHEET |
spreadsheetId, title |
| Read data | GOOGLESHEETS_BATCH_GET |
spreadsheet_id, ranges |
| Read single range | GOOGLESHEETS_VALUES_GET |
spreadsheet_id, range |
| Write data | GOOGLESHEETS_BATCH_UPDATE |
spreadsheet_id, sheet_name, values |
| Update range | GOOGLESHEETS_VALUES_UPDATE |
spreadsheet_id, range, values |
| Append rows | GOOGLESHEETS_SPREADSHEETS_VALUES_APPEND |
spreadsheetId, range, values |
| Upsert rows | GOOGLESHEETS_UPSERT_ROWS |
spreadsheetId, sheetName, keyColumn, rows |
| Lookup row | GOOGLESHEETS_LOOKUP_SPREADSHEET_ROW |
spreadsheet_id, query |
| Format cells | GOOGLESHEETS_FORMAT_CELL |
spreadsheet_id, worksheet_id, range |
| Set filter | GOOGLESHEETS_SET_BASIC_FILTER |
spreadsheetId, filter |
| Clear values | GOOGLESHEETS_CLEAR_VALUES |
spreadsheet_id, range |
| Delete rows/cols | GOOGLESHEETS_DELETE_DIMENSION |
spreadsheet_id, sheet_name, dimension |
| Spreadsheet info | GOOGLESHEETS_GET_SPREADSHEET_INFO |
spreadsheet_id |
| Update tab props | GOOGLESHEETS_UPDATE_SHEET_PROPERTIES |
spreadsheetId, properties |
Powered by Composio