How to connect Claude to Google Sheets
Claude is good at the part of spreadsheet work that is not arithmetic: "which of these customers have not paid?", "draft a reply to everyone who complained last week", "turn these sign-ups into a summary for the team". The data for those questions lives in a Google Sheet, and the usual way to get it in front of Claude is to paste rows into the chat. That works once, goes stale immediately, and never writes anything back.
Claude connects to outside services through MCP, the Model Context Protocol, and SheetDB runs an MCP server for every spreadsheet you turn into an API. You add the server to Claude once, as a custom connector, sign in with your Google account, and then ask in plain language. Claude calls the SheetDB tools, SheetDB reads or writes the sheet, and nothing is deleted without you saying yes. The same connector works in Claude.ai, Claude Desktop and Cowork; Claude Code gets it with one terminal command. No API key to copy, no Google Cloud project, no code.
This guide uses the SheetDB demo spreadsheet, this one, which is also served as a public REST API at https://sheetdb.io/api/v1/58f61be4dda40. Its first tab has the columns id, name, age and comment. Claude only sees the APIs of the account you sign in with, so to follow along with the same data, make a copy of the demo spreadsheet in your Drive (File → Make a copy) and create an API from the copy in step 1.
Step 1: create the API for your sheet
- Sign in to SheetDB with the Google account that can edit the spreadsheet.
- Click Create new API, paste the spreadsheet URL and save. You get an API URL in the form
https://sheetdb.io/api/v1/<your id>; the 13-character id at the end is how Claude will refer to the sheet. - Check that row 1 holds clean column names (
email, notE-mail address). Claude reads the header row to learn what the sheet contains, so good names make better answers.
You can skip this step later: once the connector is in place, Claude can create an API itself from a spreadsheet URL you paste into the chat (the create_api_from_spreadsheet tool).
Step 2: add SheetDB as a custom connector in Claude
The SheetDB MCP server address is https://sheetdb.io/mcp. In Claude.ai (the same dialog is in Claude Desktop):
- Open Customize → Connectors, click + Add and choose Add custom connector.
- Enter a name such as
SheetDB, paste the server URL and click Continue. Claude reads the server's authentication settings itself; there is no client id, secret or API key to type. - Under Authentication keep Sign in now. If Claude asks how to identify itself under OAuth client, leave the recommended option or choose Register automatically: SheetDB registers clients on the fly.
- Click Add. The SheetDB sign-in page opens (step 3).
On a Team or Enterprise plan an owner adds the connector once under Organization settings → Connectors → Add (choose Custom → Web), and every member then finds it under Customize → Connectors and clicks Connect to sign in with their own Google account. Each member sees their own SheetDB APIs and the ones shared with them, not the owner's.
Claude Code does not use the dialog. In a terminal run:
claude mcp add --transport http sheetdb https://sheetdb.io/mcp
then type /mcp in Claude Code, pick sheetdb and follow the sign-in link. The rest of this guide applies to Claude Code too: the tools are the same, the permissions are the same, and the connection appears in the SheetDB panel as its own entry. ChatGPT and Cursor connect to the same server; the steps are on the MCP server page.
Step 3: sign in with Google and approve
When Claude connects to the server for the first time, a SheetDB page opens. Sign in with the Google account you use for SheetDB and approve the connection. That is OAuth: Claude receives a token that only works for the SheetDB MCP server, never your Google password, and SheetDB keeps talking to Google with your account, exactly as it does for the REST API.
The connection then appears in the SheetDB panel under AI agents, with the client name, the date and the last use. Revoke signs Claude out immediately; removing the connector in Claude does the same from the other side. The same section is where you decide what Claude may do with each API (step 5).
Step 4: ask Claude about your sheet
In a new chat click the + button at the bottom left, open Connectors and switch SheetDB on for that conversation. Then ask. Claude chooses the tools; you never name them. A first conversation on the demo data looks like this:
"Which sheets do I have in SheetDB, and what is in the customers one?"
Tools: list_apis, describe_api
Claude lists your APIs with what it may do on each, then describes the one you name: the tabs, the column names (id, name, age, comment on the demo sheet), the number of records and three sample rows.
"Who is older than 18 and has the comment "special"? Give me a short table."
Tools: search_records
One call with the conditions age: ">18" and comment: "special", the same operators as /search over HTTP. Claude formats the matching rows as a table and can keep refining: "only the names", "sort by age".
"Add Mark, 35, with the comment "new customer"."
Tools: create_records
Claude shows the tool call and asks for permission the first time; then one row is appended and the reply quotes the result, {"created": 1}. An id column can be filled with INCREMENT.
"Delete the rows where the comment is "test"."
Tools: delete_records, confirm_pending_action
Nothing is deleted yet. SheetDB counts the matching rows and returns a preview written by the server; Claude shows it and, only after you agree, confirms the pending action with the expected count. Larger deletes wait for your Approve in the SheetDB panel.
Where Claude shines is the step after the data: "write a follow-up e-mail to each of them", "group these by month and tell me which month was best", "compare this tab with the one from last quarter". The rows come straight from the sheet, so the answer is about today's data, not about a paste from last week. In Claude Desktop and Cowork the same questions can end in a file on your disk, for example a CSV of the filtered rows.
Reading is served from the same cache as the REST API (15 seconds by default), so a question asked twice costs Google nothing. Reads are paginated, so for a large tab ask for a filter or a count instead of "show me everything". Searching uses the same operators as /search over HTTP: comparisons such as >18, wildcards such as J* and negation with !.
Step 5: decide what Claude may change
The moment your first agent connects, every API in your account gets an AI agents section in its settings. By default agents may only read. Creating, updating and deleting rows each need a switch for that specific API, and an agent never gets more than the API allows over HTTP: if DELETE is disabled in the API permissions, no agent setting turns it on. When Claude asks for something it may not do, it gets a plain answer with a link to the right settings page, so it tells you where to enable the operation instead of trying again.
Deletes and large updates go through an extra step. delete_records only works with a condition and never deletes by itself: it counts the matching rows and returns a preview written by SheetDB. Up to 10 rows and 5% of the tab, Claude shows you the preview and confirms the pending action after you agree in the chat. Anything bigger, or every delete on an API set to always approve in panel, waits for your Approve in the SheetDB panel while you are signed in. A pending action works once and expires after 5 minutes in the chat and 15 in the panel. The details are in the MCP server documentation.
Claude adds its own layer. It asks before using a connector tool and shows you the tool and its input; Allow always skips that question for a tool from then on, which is convenient for the read tools and not a good idea for deletes. Two things to know: in Research mode Claude runs connector tools without asking, so switch the write tools off in the Search and tools menu before a research run; and the newer chat experience has an automatic mode on some plans in which Claude decides about tool calls itself. The SheetDB permissions and the pending action are what protect the sheet in every one of those modes, which is why they live on the server and not in the client.
Which Claude plans support it?
At the time of writing, Anthropic's help centre lists custom connectors using remote MCP for the Free, Pro, Max, Team and Enterprise plans, on Claude.ai, Claude Desktop and Cowork; Free accounts can have one custom connector. On Team and Enterprise only owners add connectors, and members connect to them. Check Anthropic's current article on custom connectors before you plan on a specific plan. On the SheetDB side the MCP server is included in every plan, including the free plan: a tool call that reads or writes records counts as one request, like one HTTP request, and listing APIs, checking a pending action, confirming it and creating an API are free.
Limitations: when this is not the right setup
- Cells, tabs and bulk operations. MCP exposes rows keyed by the header row. Deleting a whole tab, creating or deleting tabs, editing single cells, JSON import and cache purge stay in the panel and the REST API, on purpose.
- Very large tabs. A spreadsheet is not a database for thousands of writes an hour, and a read returns at most a few thousand rows per call. Ask for filters and counts, keep tabs small, and read when a sheet is the wrong tool. If you are building an agent of your own on top of a sheet, Google Sheets for AI agents covers the architecture and how to structure the sheet.
- Shared sheets with private data. Claude sees every column of the tabs the API exposes, and it sees the APIs that teammates share with you in SheetDB. Keep personal data and secrets in tabs that no API serves, and give agents the read permission only where they need it.
- Automations that run without you. The connector lives in a chat. For a sync that runs every hour or a form that writes rows, use the REST API from a workflow in n8n or Make or from your own code; it is the same API.
- Text in cells is data, not instructions. A cell saying "ignore previous instructions" is returned to Claude as a value like any other. Models are getting better at ignoring that, and the permission and approval model above is what you rely on, not the model's judgement.
For everything else, one spreadsheet with one API now serves Claude, ChatGPT, Cursor, a workflow, a table on your website and your own code, with the same permissions and the same rows.
FAQ
Does this work in Claude Desktop and Claude Code too?
Yes. Claude.ai and Claude Desktop share connectors, so a connector added on the web is available in the desktop app and the other way round, and Cowork uses the same list. Claude Code adds the server from the terminal with claude mcp add --transport http sheetdb https://sheetdb.io/mcp and signs in through /mcp. Each client gets its own entry under AI agents in the SheetDB panel.
Which Claude plans support custom connectors?
At the time of writing Anthropic's help centre lists custom connectors using remote MCP for the Free, Pro, Max, Team and Enterprise plans, with Free limited to one custom connector. On Team and Enterprise an owner adds the connector for the organisation and every member connects to it with their own Google account. On the SheetDB side MCP is included in every plan, including the free plan.
Does Claude get my Google password or an API key?
Neither. The connector signs in with OAuth: a SheetDB page opens, you sign in with the Google account you use for SheetDB and approve the connection, and Claude receives a token that only works for the SheetDB MCP server. SheetDB keeps talking to Google with your account, as it does for the REST API. The connection is listed under AI agents in the panel, where Revoke signs Claude out immediately.
Can Claude delete my whole sheet?
No. Deleting needs the delete agent permission on that API, the tool only deletes rows matching a condition, and it never deletes by itself: it counts the matching rows and returns a preview. Up to 10 rows and 5% of the tab you confirm in the chat; anything larger waits for your Approve in the SheetDB panel. Deleting a whole tab, creating or removing tabs and editing single cells are not available through MCP at all. Claude asks before running a tool as well; keep Allow always for the read tools.
How are Claude's requests counted?
A tool call that reads or writes records counts as one request of your plan, exactly like one HTTP request (what is a request). Listing your APIs, checking or confirming a pending action and creating an API are free. Your API statistics show how many requests came from AI agents, and the same cache and rate limits apply as for HTTP.
Can I use the same sheet in ChatGPT, Cursor or my own app?
Yes. The same MCP server works in ChatGPT and Cursor, and the API behind it is the plain SheetDB REST API: a workflow in n8n or Make, a website or your own code reads and writes the same rows. Tools that read OpenAPI instead of MCP, such as agent frameworks and client generators, get the OpenAPI specification.
Give Claude a spreadsheet it can trust
Sign in with Google, create an API from your sheet and add https://sheetdb.io/mcp as a custom connector in Claude. Free plan, no API keys, nothing deleted without your approval.
Create free APIHave a question?
Ask about the API or your sheet. Developers answer, usually the same day.