SheetDB vs sheet2api: two spreadsheet APIs with MCP for AI agents
Short answer: SheetDB and sheet2api are the two closest products in this category. Both turn a spreadsheet into a hosted REST API that returns rows as JSON objects with your column names unchanged, both filter rows with wildcards, negation and numeric comparisons, and both run a remote MCP server so Claude, ChatGPT or Cursor can read and write the sheet after an OAuth sign-in. The differences are in the details. sheet2api works with Google Sheets and Excel Online; SheetDB works with Google Sheets only. SheetDB adds sorting and pagination, batch writes, a read cache with a duration you choose, CORS and IP restrictions, separate agent permissions per API and a server-side approval step before an agent deletes or mass-updates rows, and it has a free plan. sheet2api requires a filter on every agent delete but has no approval step of its own, and its pricing page lists no free plan. Choose sheet2api when your data lives in Excel Online; choose SheetDB when you want the agent's destructive actions to pass through a human, or when you need queries, caching and production controls on a Google Sheet.
At a glance
| SheetDB | sheet2api | |
|---|---|---|
| Spreadsheets | Google Sheets. | Google Sheets and Excel Online. |
| Setup | Sign in with Google, paste the spreadsheet URL. | Sign in with Google or Microsoft, share a private Google Sheet with their service account, paste the link. |
| Endpoint | sheetdb.io/api/v1/{id}, tab chosen with ?sheet= | sheet2api.com/v1/{user}/{api}/{sheet}, one endpoint per tab |
| JSON format | Flat array of objects, header names as-is. | Flat array of objects, header names as-is. |
| Auth / OAuth | No OAuth in your code; optional Bearer token or Basic auth per API. | No OAuth in your code; optional Basic auth per API. |
| Write support | POST many rows at once; PATCH, PUT and DELETE by any column value or by a search; batch update; JSON import; create and delete tabs. | POST one row per request; PUT, PATCH and DELETE by filters in the query string, with an optional limit. |
| Search / filter | Comparisons, wildcards, negation, AND and OR, sorting, pagination with limit and offset, number casting. | Exact match, * and ? wildcards, ! negation, numeric comparisons, AND or OR, limit. Sorting and offset are not in the public docs. |
| Caching | Read cache on by default (15 s), duration configurable, purge on demand. | Per-API caching toggle; the duration is not described in the public docs. |
| Access controls | Per-method permissions, CORS origin restriction, IP whitelist. | Per-method permissions (read, create, update, delete), Basic auth. |
| AI agents (MCP) | Remote MCP server at sheetdb.io/mcp, Streamable HTTP, OAuth sign-in with Google; 10 tools, including search and create from a spreadsheet URL. | Remote MCP server at sheet2api.com/mcp/, JSON-RPC over HTTP POST, OAuth sign-in with Google or Microsoft; 7 tools, including cell reads. |
| Agent permissions | Separate per API: agents only read until you enable create, update or delete, never more than the API allows over HTTP. | The same read, create, update and delete toggles as the REST API; MCP can be switched on or off per API. |
| Agent deletes | Preview first, with a count and a sample; confirmed in the chat up to 10 rows and 5% of the tab, approved in the SheetDB panel above that. | Run immediately; a filter is required so that an empty filter cannot clear a worksheet. No approval step on the server. |
| Agent limits | One tool call = one request; 30 tool calls per minute per connection on top of the API rate limit. | One tool call = one request; a per-minute limit for agents is not stated. |
| Teams | Team accounts on Business: shared APIs, shared settings per API, agents see what the member sees. | Team invites by e-mail; members get the same access as the owner. |
| Free plan | 2 APIs, 500 requests/month, no credit card; MCP included. | None on the pricing page: a 7-day trial with a card on every plan. |
| Rows per sheet | No per-plan limit; Google's limit of 10 million cells per spreadsheet applies. | No limit stated on the pricing page; their comparison pages say unlimited rows. |
| Uptime | Public status page: status.sheetdb.io | No public status page found; the top plan mentions an SLA. |
| Extras | WordPress plugin, HTML snippet, OpenAPI specification, no-code guides. | Auto-generated docs per API, cell reads, Python client. |
sheet2api facts are taken from sheet2api's public documentation, MCP documentation, blog and pricing page as of November 2026. Check their site for current details.
Where sheet2api is a good choice
sheet2api is the option when your workbook lives in Excel Online: sign in with Microsoft, paste the link and you get the same kind of JSON endpoint, and the same MCP server, for a Microsoft 365 spreadsheet. SheetDB does not read Excel files. The REST API is familiar if you have used SheetDB: a plain array of objects, filters in the query string with wildcards and comparisons, updates and deletes by filter rather than by row number. Reading single cells by address (/cells/A1,B2) is available both over REST and to agents. Every API comes with auto-generated documentation, and there is a Python client.
Where SheetDB goes further
- Human approval for agent deletes.
delete_recordsdeletes nothing by itself. It counts the matching rows and returns a preview written by the server; the agent confirms small deletions in the chat and sends larger ones to the SheetDB panel, where you approve or reject them while signed in. sheet2api's delete tool runs as soon as it is called; the documentation requires a filter and asks the agent to list the rows first, which depends on the model doing what the docs say. Details: the approval model on the MCP page. - Agent permissions of their own. In SheetDB the first agent connection adds an AI agents section to every API, with agents allowed to read and nothing else until you say so. Those switches are separate from, and never wider than, the API's HTTP permissions, so you can keep POST open for a form on your website and still deny the agent writes. In sheet2api the agent uses the same four toggles as the REST API.
- Queries.
?sort_by=age&sort_order=descand?limit=20&offset=40run on the server (read, search), and the MCP tools take the same sorting and paging arguments, so an assistant can page through a long tab instead of pulling it whole. sheet2api's public docs describelimitbut no sorting or offset. - Batch writes. One
POSTappends many rows and one batch update changes many rows; JSON import fills a sheet in one go. sheet2api's REST and MCP docs append one row per call. - Caching you control. Read responses are cached for 15 seconds by default and you choose the duration or purge the cache (cache), which keeps a busy page or a chatty agent away from Google's per-minute quotas. Plan quotas and rate limits are on the limits page.
- Production controls. Lock an API to your domain with CORS origin restriction, allow only some IP addresses, switch off writes with permissions, and protect the endpoint with a Bearer token.
- Ready integrations. A free WordPress plugin, an HTML snippet that renders rows on any page, guides for Bubble, Adalo and n8n and Make, and an OpenAPI specification for agent frameworks that do not speak MCP.
- Free plan. 2 APIs and 500 requests a month without a card, MCP included, so you can connect an assistant to a sheet before deciding anything.
What an AI agent can do in each
Both services expose one MCP server address for every account and sign the user in with OAuth, so there is no API key to paste into Claude, ChatGPT or Cursor. From there the two designs diverge.
| SheetDB | sheet2api | |
|---|---|---|
| Transport | Streamable HTTP, added as a URL in Claude.ai, Claude Desktop, Claude Code, ChatGPT and Cursor. | JSON-RPC over HTTP POST without an SSE stream; Claude Desktop and Cursor go through the mcp-remote bridge, ChatGPT connects directly. |
| Read tools | list_apis, describe_api (tabs, columns, sample rows), read_records with sorting and paging, search_records with AND or OR conditions. | list_worksheets (tabs and columns), list_rows with filters and limit, get_cell_values. |
| Write tools | create_records (many rows), update_records, delete_records, confirm_pending_action, get_pending_action, create_api_from_spreadsheet. | create_row (one row), update_rows (replaces the whole row), update_rows_partial, delete_rows. |
| Before a delete | The server returns the count and a sample; up to 10 rows and 5% of the tab the agent confirms with the expected count, above that you approve in the panel. The rows are read again from Google right before deletion. | The filter is mandatory; the docs ask the agent to confirm the rows with list_rows first. The deletion runs on the call. |
| Mass updates | The same threshold and panel approval as for deletes, with the changed cells highlighted. | Run on the call; update_rows empties the columns you leave out, update_rows_partial keeps them. |
| When a tool is refused | A plain answer with a link to the AI agents section of that API, so the assistant tells you where to switch it on. | A tool error naming the disabled permission. |
| Connections | Listed in the panel with the client name and last use; revoke any of them. | Tokens listed in the MCP dashboard with recent activity; revoke one token or all tokens of a client. |
The difference that matters most is the step between "the agent decided to delete" and "the rows are gone". Every MCP client has a mode in which a destructive tool runs without asking, so a server that executes on the call is relying on the model to be careful. SheetDB keeps that decision on the server, scales it with the size of the change and, above the threshold, moves it to a signed-in page that the model cannot click. Guides per assistant: Claude, ChatGPT, Cursor; the reasoning behind the whole setup is on Google Sheets for AI agents.
How simple it is with SheetDB: read adults, add a row
The task: a sheet with columns id, name, age, comment. Get the people older than 18, then add one. With SheetDB the response is exactly what is in your sheet:
- No wrapper key. The response is a plain JSON array, as in sheet2api.
- No filtering in your code. Comparisons like
age=>18go into the URL and only matching rows are returned. - Many rows in one request.
datais an array, so onePOSTappends one row or a thousand. - One endpoint for the whole spreadsheet. Pick the tab with
?sheet=instead of keeping one URL per tab.
Here is the whole thing, using plain fetch(). It runs in Node.js or in the browser, and the endpoint below is a real demo API you can try right now:
const api = 'https://sheetdb.io/api/v1/58f61be4dda40';
const params = new URLSearchParams({ age: '>18' });
const adults = await fetch(`${api}/search?${params}`).then((response) => response.json());
// [{ "id": "2", "name": "Alex", "age": "24", "comment": "" }, ...]
await fetch(api, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ data: [{ id: 'INCREMENT', name: 'Mark', age: '35', comment: '' }] }),
});
That is the entire integration: one GET to /search?age=>18 returns the adults, one POST with a JSON body appends Mark, and INCREMENT fills in the next id for you. The new row shows up in the spreadsheet immediately. In a chat, the same two steps are search_records with age: ">18" and create_records, once you have enabled create for that API in its AI agents section.
Updating and deleting work by any column value: PATCH /api/v1/{id}/id/4 changes the row whose id is 4 and DELETE /api/v1/{id}/id/4 removes it, even after someone sorts the sheet (update, delete). Language guides: Node.js, PHP.
FAQ
What is the difference between SheetDB and sheet2api?
Both turn a spreadsheet into a hosted REST API that returns rows as JSON objects, and both run a remote MCP server so an AI assistant can read and write the sheet after an OAuth sign-in. sheet2api also supports Excel Online; SheetDB works with Google Sheets only. SheetDB adds sorting, pagination, a configurable read cache, CORS and IP restrictions, separate agent permissions per API and a server-side approval step before an agent deletes or mass-updates rows. sheet2api requires a filter on every agent delete but has no approval step of its own.
Can I connect Claude, ChatGPT or Cursor to both?
Yes. Both publish one MCP server address for every account and sign the user in with OAuth, so there is no key to paste. SheetDB uses the Streamable HTTP transport that Claude.ai, Claude Desktop, Claude Code, ChatGPT and Cursor connect to directly (setup per client). sheet2api's documentation describes JSON-RPC over HTTP POST without an SSE stream, with Claude Desktop and Cursor going through the mcp-remote bridge and ChatGPT connecting directly.
What happens when an AI agent deletes rows?
In SheetDB the delete tool only returns a count and a sample of the matching rows as a Pending action. Up to 10 rows and 5% of the tab the agent confirms it in the chat with the expected count; above that you approve or reject the deletion in the SheetDB panel while signed in, so the model cannot skip the human. In sheet2api the delete tool runs as soon as it is called; its documentation requires a filter so that an empty filter cannot clear a worksheet and tells the agent to list the rows first.
Does an MCP tool call count as a request?
In both services one tool call counts as one request of the monthly plan quota, the same as one REST call. In SheetDB the calls that list your APIs, check a Pending action, confirm it or create an API from a spreadsheet do not count, and each Agent connection is additionally limited to 30 tool calls per minute so a looping assistant cannot drain the quota.
Can I switch from sheet2api to SheetDB without changing my spreadsheet?
Yes, for Google Sheets. Both read the same spreadsheet and both return a plain array of objects keyed by the header row, so the response shape stays the same. Update the base URL, choose the tab with ?sheet= instead of a path segment, send several rows in one POST as {"data": [...]}, and move filters from the query string of the base URL to /search. Workbooks in Excel Online have to be moved to Google Sheets first.
Is there a free plan?
SheetDB has a free plan with 2 APIs and 500 requests per month, no credit card required, and MCP is included on every plan. sheet2api's pricing page lists no free plan: every plan starts with a 7-day trial and asks for a card.
Try SheetDB on your own sheet
Point it at the same spreadsheet you use today, connect your assistant and compare. Free plan, no credit card.
Create free APIHave a question?
Ask about the API or your sheet. Developers answer, usually the same day.