# How to connect Google Sheets to OpenClaw (no API keys)

> Connect Google Sheets to OpenClaw with no Google Cloud project, no OAuth client, and no credentials JSON. Hosted OAuth, 40 Sheets tools, and fixes for the Sheets API errors agents actually hit.

Web version: https://claw-link.dev/openclaw/google-sheets

The usual route to Google Sheets access for OpenClaw is an MCP server you configure and keep running, plus your own OAuth app or API keys. ClawLink gives OpenClaw a more practical Google Sheets setup: install one ClawHub skill, connect Google Sheets in the browser, and OpenClaw can call real Google Sheets actions from any chat surface with no auth, token refresh, or tool wiring to build yourself.

**Start here:** install the ClawLink plugin (`openclaw plugins install clawhub:clawlink-plugin`), pair it in the browser, then connect the app in the ClawLink dashboard. The interactive install prompt is on the web version of this page: https://claw-link.dev/openclaw/google-sheets

## Setup

It takes three steps to connect OpenClaw to Google Sheets.

1. **Install ClawLink** — add the plugin to OpenClaw once.
2. **Connect Google Sheets** — one-click OAuth in the ClawLink dashboard.
3. **Use it from chat** — ask OpenClaw in plain English.

**Alternative for any agent (no plugin needed):** if the OpenClaw plugin route isn't available or doesn't work, any AI agent with shell access can use the ClawLink CLI instead:

```bash
npx -y @useclawlink/cli login          # sign in via browser — no API key to paste
npx -y @useclawlink/cli connect google-sheets  # connect Google Sheets (browser OAuth)
npx -y @useclawlink/cli actions google-sheets  # list available actions
npx -y @useclawlink/cli run google-sheets <action> --input '<json>'  # execute (add --confirm for writes)
```

### Install by command

The setup prompt above does all of this in one paste. By hand, it is one install command plus a browser approval:

```bash
openclaw plugins install clawhub:clawlink-plugin
```

Then ask OpenClaw to set up ClawLink. It starts browser pairing and prints an approval link — open it, approve the device, return to the chat, and say `done`. Finally, connect Google Sheets in the [ClawLink dashboard](https://claw-link.dev/dashboard) — a one-click OAuth approval, no API keys.

Verify the connection by asking OpenClaw:

> Find the spreadsheet named Q3 budget in my Google Sheets, list its sheet names, then read the first 50 rows of the main sheet and summarize what is in it.

### Using a different agent?

The OpenClaw plugin is one client of ClawLink's MCP server. Claude Code, Cursor, Codex, or any agent that can run a shell command pairs with the same ClawLink account through the CLI:

```bash
npx -y @useclawlink/cli login
```

`login` opens the same browser approval and stores a credential locally. Once Google Sheets is connected in the dashboard, that agent calls the same 40 Google Sheets tools over MCP. Full setup for MCP clients and shell agents: [connect apps to any AI agent](https://claw-link.dev/learn/connect-apps-to-any-ai-agent).

## Google Sheets MCP for OpenClaw

Looking for a Google Sheets MCP server for OpenClaw? ClawLink connects Google Sheets to OpenClaw and exposes 40 Google Sheets tools your agent can call over [MCP](https://claw-link.dev/learn/what-is-an-mcp-server), with [hosted auth](https://claw-link.dev/learn/oauth-for-ai-agents) and nothing to run or maintain yourself. Using Hermes instead? The [Hermes Google Sheets integration](https://claw-link.dev/hermes/google-sheets) uses the same hosted Google provider and the same 40 tools, but Hermes pairs through its own CLI handshake rather than the OpenClaw skill flow.

Every walkthrough the answer engines surface for this query starts in the Google Cloud Console: create a project, enable the Sheets and Drive APIs, configure an OAuth consent screen, download a credentials JSON, then run gog auth on the machine OpenClaw lives on. None of those steps exist here, because ClawLink owns the verified Google OAuth app. You install one skill, click Connect next to Google Sheets in the dashboard, approve the two permissions Google shows on its own consent screen, and the 40 tools below work from your next chat. There is no service account in this flow either, so there is nothing to share your sheets with.

## What the OpenClaw Google Sheets integration can do

40 Google Sheets tools are ready for OpenClaw once the account is connected. The 30 below are the ones people reach for most; your agent can call all 40.

### 30 of 40 Google Sheets tools for OpenClaw

| Tool | What it does |
|---|---|
| **Add sheet** `googlesheets_add_sheet` | Add a new sheet to a spreadsheet |
| **Aggregate column data** `googlesheets_aggregate_column_data` | Aggregate column data by matching and computing |
| **Batch get** `googlesheets_batch_get` | Retrieve data from multiple cell ranges |
| **Clear values** `googlesheets_clear_values` | Clear cell content from a range |
| **Create chart** `googlesheets_create_chart` | Create a chart in a Google Sheet |
| **Create google sheet1** `googlesheets_create_google_sheet1` | Create a new Google Spreadsheet |
| **Create spreadsheet column** `googlesheets_create_spreadsheet_column` | Create a new column in a Google Sheet |
| **Create spreadsheet row** `googlesheets_create_spreadsheet_row` | Insert a new row into a Google Sheet |
| **Find replace** `googlesheets_find_replace` | Find and replace text across cells |
| **Format cell** `googlesheets_format_cell` | Apply text and background formatting to cells |
| **Get data validation rules** `googlesheets_get_data_validation_rules` | Get data validation rules from a spreadsheet |
| **Get sheet names** `googlesheets_get_sheet_names` | List all worksheet names in a spreadsheet |
| **Get spreadsheet info** `googlesheets_get_spreadsheet_info` | Get metadata for a Google Spreadsheet |
| **Lookup spreadsheet row** `googlesheets_lookup_spreadsheet_row` | Find a row by exact cell content match |
| **Search spreadsheets** `googlesheets_search_spreadsheets` | Search for Google Spreadsheets by name or content |
| **Set data validation rule** `googlesheets_set_data_validation_rule` | Set data validation rules or dropdowns on a range |
| **Spreadsheets sheets copy to** `googlesheets_spreadsheets_sheets_copy_to` | Copy a sheet to another spreadsheet |
| **Spreadsheets values append** `googlesheets_spreadsheets_values_append` | Append values to the end of a Google Sheet |
| **Spreadsheets values batch clear** `googlesheets_spreadsheets_values_batch_clear` | Clear values from multiple ranges at once |
| **Update sheet properties** `googlesheets_update_sheet_properties` | Update sheet tab properties like name or color |
| **Update spreadsheet properties** `googlesheets_update_spreadsheet_properties` | Update spreadsheet-level properties like title or locale |
| **Update values batch** `googlesheets_update_values_batch` | Update values in multiple ranges at once |
| **Upsert rows** `googlesheets_upsert_rows` | Upsert rows by key column, appending or updating |
| **Values get** `googlesheets_values_get` | Read values from a range in a Google Sheet |
| **Values update** `googlesheets_values_update` | Update values in a range of a Google Sheet |
| **Get conditional format rules** `googlesheets_get_conditional_format_rules` | List conditional formatting rules for each sheet (or a selected sheet) in a normalized |
| **Get spreadsheet by data filter** `googlesheets_get_spreadsheet_by_data_filter` | Returns the spreadsheet at the given ID, filtered by the specified data filters |
| **Search developer metadata** `googlesheets_search_developer_metadata` | Search for developer metadata in a spreadsheet |
| **Spreadsheets values batch get by data filter** `googlesheets_spreadsheets_values_batch_get_by_data_filter` | Return one or more ranges of values from a spreadsheet that match the specified data filters |
| **Append dimension** `googlesheets_append_dimension` | Append new rows or columns to a sheet, increasing its size |

## Example prompts

**Read and summarize**

> Find the spreadsheet named Q3 budget in my Google Sheets, list its sheet names, then read the first 50 rows of the main sheet and summarize what is in it.

**Append rows**

> Append these rows to the end of the Expenses sheet in that spreadsheet, using USER_ENTERED so the dates and amounts arrive as typed values rather than text.

**Update a range**

> In my forecast spreadsheet, update Summary!B2:B13 with the new monthly numbers I paste below, and read the range back to confirm what changed.

**Recover from a missing id**

> If a Sheets call fails saying spreadsheet_id is required, search my spreadsheets by name first and retry the same call with the real id from the search results instead of asking me.

## What the Google Sheets tools actually expect

The argument rules behind most of the Sheets failures we log. The first two account for more real errors than everything else combined.

- **Every tool wants the spreadsheet ID, never the name, and the missing id is the most common real Sheets failure in ClawLink logs.** The ID is the long string in the sheet's URL between `/d/` and `/edit`. An agent can get it two ways: you paste the sheet's URL into chat, or it calls `googlesheets_search_spreadsheets` with a name query and reuses the id from the results.
- **The argument name flips between snake_case and camelCase across the 40 tools.** `googlesheets_values_get`, `googlesheets_values_update` and `googlesheets_batch_get` want `spreadsheet_id`; `googlesheets_spreadsheets_values_append` and `googlesheets_update_sheet_properties` want `spreadsheetId`. Same value, different key, and an agent that carries arguments from one call into the next gets `arguments.spreadsheetId is required` with no hint that only the casing changed.
- **`value_input_option` is required on updates and appends, and the two values behave differently.** `USER_ENTERED` parses input the way typing does, so dates become dates and `=SUM(A1:A3)` becomes a live formula; `RAW` stores every string exactly as sent. Omitting it is our second most common validation failure, 107 logged calls. On appends, `insertDataOption` takes `OVERWRITE` or `INSERT_ROWS`.
- **Ranges are A1 notation with the sheet name in front.** `Sheet1!B2:D10` works, a sheet name containing spaces needs single quotes (`'Monthly budget'!A1:C10`), and a wrong sheet title fails with the literal `Invalid sheet identifier or cell reference provided.` Get real titles from `googlesheets_get_sheet_names` before building the range.
- **`values` is an array of arrays**, one inner array per row. A flat array or a bare string fails validation with `arguments.values[0][0] must be a string` style messages before the request reaches Google.
- **The read tool is `googlesheets_values_get`.** Agents regularly invent `googlesheets_get_values`, `googlesheets_get_spreadsheet_values` and `googlesheets_get_spreadsheet`, 32 logged not-found calls. The error names the closest real tools, so the retry is free.
- **`googlesheets_search_spreadsheets` runs on the Drive API, not the Sheets API.** Its query syntax is Drive's (`name contains 'budget'`, `fullText contains 'sales'`), its `order_by` fields are Drive's, and it is the first tool to break when the Drive permission was left unticked at consent.
- **Per-cell loops burn quota.** Google's documented Sheets read quota is 60 requests per minute per user; a loop that reads one cell at a time hits 429 (`Too many requests. Try again shortly.`) well before a batch call would. `googlesheets_batch_get` and `googlesheets_update_values_batch` do the same work in one request. On a 429, wait and retry; reconnecting changes nothing.

## ClawLink vs. building it yourself

The alternative to ClawLink is usually manual OAuth app setup plus your own token handling, permission troubleshooting, and tool plumbing for OpenClaw. That is fine if you want to build and maintain the integration yourself. Most teams just want Google Sheets working from chat.

| | Manual | ClawLink |
|---|---|---|
| **Connection flow** | Register a Google Sheets app, configure redirect URLs, manage consent details, and reconnect users when auth settings drift. | Users connect Google Sheets through the hosted browser flow and ClawLink keeps the token lifecycle out of your app code. |
| **Ongoing maintenance** | You own refresh logic, permission debugging, environment config, and every provider-specific edge case for Google Sheets. | ClawLink handles the repetitive integration plumbing so your team can focus on the workflow instead of the infrastructure. |
| **Agent usability** | You still need to expose the right Google Sheets actions to the runtime in a format your agent can reliably use. | 40 tools for Google Sheets are already exposed through ClawLink, so the agent can read and act from chat immediately. |

## ClawLink vs. Composio

Composio also exposes Google Sheets to AI agents. It is developer infrastructure: Python and TypeScript SDKs, an MCP server, and a catalog past 1,000 apps, aimed at teams shipping agent products. ClawLink is built for OpenClaw users instead. You install the plugin once, connect Google Sheets in the browser, and the 40 tools above work from chat. There is no SDK, no config file, and no API key handling. Choosing between them? Read the full [Composio alternatives](https://claw-link.dev/hub/composio-alternatives) comparison.

### OpenClaw installed the Google Sheets skill but can't call the tools
The ClawHub skill teaches OpenClaw about Google Sheets, but the calls run through the ClawLink plugin and your connected account. Make sure Google Sheets is connected in the dashboard, then start a fresh chat so OpenClaw reloads the tool catalog. If OpenClaw runs as a persistent gateway, restart it so the new tools register.

### Connection succeeds but no tools appear
Reconnect Google Sheets from the dashboard, then start a fresh chat if the runtime still has the old tool catalog loaded.

### "Tool schema not loaded yet" error when calling Google Sheets tools
Google Sheets tool schemas load on demand the first time a tool runs and are cached after that, so this error usually clears on its own: wait a few seconds and retry the same request. If every Google Sheets call keeps failing with it in a fresh chat, reconnect from the dashboard, and contact support if it still persists — that pattern points to a configuration problem on our side, not something you can fix by reconnecting again.

### Google Sheets returns 403 or "permission denied" on one action while others work
Two usual causes. The connected account may not have access to the specific workspace, inbox, store, or project in the request — check that first. If access looks right, the agent may have sent a placeholder value (like "YOUR_ID" or an example id from documentation) instead of a real one: ask it to run a list or search tool first, then retry the action with a real id from those results. Most failures at this stage are one of these two, not ClawLink bugs.

### "arguments.spreadsheet_id is required" (or "arguments.spreadsheetId is required") from Google Sheets
The agent referred to the sheet by its name, and no Sheets tool accepts a name. Both spellings are real: `values_get`, `values_update` and `batch_get` take `spreadsheet_id`, while `spreadsheets_values_append` and `update_sheet_properties` take `spreadsheetId`, so the same mistake shows up under two messages. The fix is one extra step: paste the sheet's URL into chat, or have the agent call `googlesheets_search_spreadsheets` with a name query and reuse the returned id. This family is the most common real Sheets failure we log.

### "arguments.value_input_option is required" when updating a Google Sheet
`googlesheets_values_update` will not guess how to interpret your data, because the two options produce different spreadsheets. `USER_ENTERED` behaves like typing: `3/1/2026` becomes a date, `=AVERAGE(B2:B20)` becomes a live formula. `RAW` stores the exact strings. Tell the agent which you want; for most tasks that move real data into a sheet, `USER_ENTERED` is the right answer. 107 logged calls failed by omitting it.

### "Invalid sheet identifier or cell reference provided" from Google Sheets
The range did not resolve: the sheet title in front of the `!` does not exist in that spreadsheet, or the A1 reference is malformed. Sheet titles are exact, including spaces and case, and titles with spaces must be wrapped in single quotes, as in `'Monthly budget'!A1:C10`. Have the agent call `googlesheets_get_sheet_names` first and build the range from a title in that response instead of assuming `Sheet1` exists.

### "Tool 'googlesheets_get_values' not found" and other missing Google Sheets tools
Two different problems share this shape. If the message names a specific tool and suggests alternatives (`Did you mean: 'googlesheets_values_get'`), the agent invented a plausible name; the suggestion is almost always the right tool, so retry with it. If entire Google Sheets tools are missing from the catalog in a fresh chat, the runtime has a stale tool list: reconnect from the dashboard and start a new chat. There is no local server process to restart and no `token.json` to delete in this flow; advice mentioning either belongs to self-hosted MCP setups, not this one.

### "Request had insufficient authentication scopes" (403) when searching Sheets while reads still work
The connection is alive but its Google grant is missing the Drive permission. ClawLink requests two non-sign-in permissions, spreadsheets and Drive, so Google shows a consent screen with a checkbox for each; unticking the Drive box produces a connection where `values_get` works and `googlesheets_search_spreadsheets` or `googlesheets_get_spreadsheet_info` fail exactly like this, which is the pattern in our logs. Reconnect Google Sheets from the dashboard and leave every box on Google's consent screen ticked.

### "Connected account is not in an ACTIVE state. Current status is REVOKED" from Google Sheets
The grant behind this connection was removed on the Google side, usually under Third-party apps and services or by a workspace admin, and every call will fail until it is re-established. Reconnect Google Sheets from the ClawLink dashboard and approve the consent screen again. This is the one Sheets error where reconnecting is the whole fix.

### OAuth finished in the browser but the account is still missing
Try reconnecting Google Sheets and complete the consent flow in the same browser session. Partial OAuth approvals or switching accounts mid-flow can leave the connection incomplete.

### Is there a OpenClaw Google Sheets integration?
Yes. ClawLink is the fastest way to connect OpenClaw to Google Sheets: link your Google Sheets account once in the browser and OpenClaw can call the Google Sheets API through 40 ready-made tools — no custom code or token handling.

### How do I add Google Sheets to OpenClaw with ClawLink?
Paste the setup prompt from this page into OpenClaw. It installs the ClawLink Google Sheets skill from ClawHub, then you click Connect in the dashboard to authorize Google Sheets. OpenClaw calls the tools from the next message — no config files or API keys to manage.

### How long does it take to connect Google Sheets to OpenClaw?
About two minutes. Sign in, click Connect next to Google Sheets in the dashboard, authenticate, and OpenClaw can use it from the next chat message.

### Why use ClawLink instead of wiring Google Sheets up myself?
The alternative to ClawLink is usually manual OAuth app setup plus your own token handling, permission troubleshooting, and tool plumbing for OpenClaw. That is fine if you want to build and maintain the integration yourself. Most teams just want Google Sheets working from chat.

### Do I need a Google Cloud project, an OAuth app, or gog auth to connect Google Sheets to OpenClaw?
No. That checklist belongs to the self-hosted route: create a Cloud project, enable the Sheets and Drive APIs, configure a consent screen, download a credentials JSON, authenticate a CLI on the machine running OpenClaw. ClawLink replaces the whole list with its own verified Google OAuth app. Install the skill, click Connect, approve on Google's consent screen; the token lives with ClawLink and refreshes itself, and nothing is stored on your machine.

### Do I need to share my sheet with a service account email?
No, and if a guide tells you to find a `client_email` and share your sheet with it, that guide is describing a different setup. Service accounts are robot identities used by self-hosted integrations; ClawLink's flow has none. The connection signs in as you, so it sees exactly the sheets your Google account can open, with no sharing step. If a call fails with a 403 anyway, the cause is almost always a wrong or invented spreadsheet id, not a missing share.

### Which Google permissions does the Sheets connection request?
Two non-sign-in scopes, `https://www.googleapis.com/auth/spreadsheets` and `https://www.googleapis.com/auth/drive`, plus your email address to label the connection; we read that string off a live connection rather than the catalog. The Drive scope is there because finding a spreadsheet by name or content is a Drive API call. Google's consent screen shows a checkbox per permission, and the search tools stop working if the Drive box is unticked. Revoke the grant any time under Third-party apps and services in your Google account, or delete the connection in the dashboard.

### Is it safe to connect Google Sheets to an AI agent?
The mechanics are inspectable rather than a trust claim. The consent screen names the two permissions being granted, and the tool table on this page is the complete list of what the agent can invoke; there is no API key or credentials file that can leak, because none exists in this flow. Revocation is immediate from either side: remove the grant in your Google account or delete the connection in the dashboard. ClawLink keeps tool execution logs for 90 days and then deletes them. The strongest lever stays with you: connect a Google account that only sees the sheets you want an agent touching, and keep write-heavy work in a spreadsheet you can restore from version history.

### OpenClaw installed the Google Sheets skill but can't call the tools
The ClawHub skill teaches OpenClaw about Google Sheets, but the calls run through the ClawLink plugin and your connected account. Make sure Google Sheets is connected in the dashboard, then start a fresh chat so OpenClaw reloads the tool catalog. If OpenClaw runs as a persistent gateway, restart it so the new tools register.

## Related

- [OpenClaw Google Super integration](https://claw-link.dev/openclaw/google-super) — Unified access to multiple Google services in one integration
- [Connect Google Drive](https://claw-link.dev/openclaw/google-drive) — Upload, search, and manage files
- [Google Analytics](https://claw-link.dev/openclaw/google-analytics) — Connect Google Analytics properties through hosted Google OAuth
