// google sheets → rest api
Your spreadsheet,
now an endpoint.
Connect a Google Sheet, get a REST endpoint. Read and write rows over HTTP — no OAuth, no Google client library, no cell-range parsing.
Free plan included · no credit card · 1,000 rows per sheet
~/ sheetson · zsh$ curl https://api.sheetson.com/v2/sheets/users \ -H "Authorization: Bearer $SHEETSON_KEY" \ -H "X-Spreadsheet-Id: 1AbCdEfGhIjKlMnOpQrStUvWxYz"
source · users
| id | name | role |
|---|---|---|
| 1 | Ada Lovelace | Engineer |
| 2 | Grace Hopper | Admiral |
| 3 | Linus Torvalds | Maintainer |
response
ready// press Run to fetch// used in production by
From sheet to endpoint in three steps.
The whole product is the path from a spreadsheet to a working API. Here it is, end to end.
prepare
Get the spreadsheet ID and sheet name.
Grab the spreadsheet ID from the Google Sheets URL — the long string between /d/ and /edit. Note the tab name at the bottom; it's case-sensitive. Share the sheet with google@sheetson.com as an editor. Your sheet stays private — public sharing is never required.
docs.google.com/spreadsheets/d/1AbCdEfGhIjKlMnOpQrStUvWxYzspreadsheet ID/editSheetson Demo— Google SheetsA B C 1 id name role 2 1 Ada Engineer 3 2 Grace Admiral userssheet name → API pathSheet2(case-sensitive)call
Hit the endpoint.
Sheet name goes in the path. Spreadsheet ID goes in the X-Spreadsheet-Id header. Bearer token for auth. No OAuth in your app, no Google client library, no cell-range parsing. The header row becomes JSON keys.
GET /v2/sheets/users X-Spreadsheet-Id: 1AbCdEfGhIjKlMnOpQrStUvWxYz Authorization: Bearer $SHEETSON_KEY
ship
Go to production.
Unmetered requests on every plan. Rotate or revoke keys from the dashboard. Your editor updates the sheet; your app reads the API. No deploy to change a value.
[{ "id": "1", "name": "Ada", … }] 200 OK · 142ms
Everything the Sheets API should have been.
One endpoint per sheet. Standard HTTP verbs. Rows come back as JSON objects, not cell ranges.
GET /— Read rows as objects — no Google Sheets auth in your code.POST /— Append rows. PATCH to update. DELETE to remove. Standard REST verbs.AUTH— Bearer token per sheet. Rotate or revoke from the dashboard.QUOTA— Unmetered requests on every plan. Google's own quotas still apply.PRIVATE— Your sheet stays private. Public sharing is never required.
// read & write
Rows as objects, over HTTP.
Your sheet's header row becomes JSON keys. Each row below becomes an object. Read with GET, write with POST, update with PATCH — no Google auth in your app, no cell-range parsing.
rows
| A | B | C | |
|---|---|---|---|
| 1 | id | name | role |
| 2 | 1 | Ada | Engineer |
| 3 | 2 | Grace | Admiral |
objects
[
{
"id": "1",
"name": "Ada",
"role": "Engineer"
},
{
"id": "2",
"name": "Grace",
"role": "Admiral"
}
]GET /v2/sheets/{id}/users
// cms
A CMS your client already knows.
Editors edit a Google Sheet. Your site reads the API. Fixing a typo doesn't need a deploy or a ticket.
| A | B | C | |
|---|---|---|---|
| 1 | title | slug | published |
| 2 | Hello world | /hello | TRUE |
| 3 | Shipping fast | /shipping | TRUE |
| 4 | Draft post | /draft | FALSE |
// your client edits here. your app reads the API.
Built for the jobs a sheet already does.
If your data fits in a grid, it fits behind an endpoint.
Headless CMS
Editors update a sheet. Your site reads the API. No CMS to install, no admin panel to learn.
Compare Sheetson vs SheetDB →Feature flags
Toggle rollout from a sheet your whole team can see. No deploy.
Compare Sheetson vs Sheety →Directory & listings
Job boards, menus, product catalogs — any listing site backed by a sheet anyone can maintain.
Compare Modern CSV and other desktop editors with a free browser alternative →Config & i18n
Environment config and copy strings in a sheet. Change a value, your app picks it up. No redeploy.
Simple pricing. Flat per plan.
Free forever. Pay a flat price when you outgrow it.
| // plan | Free Free | Professional $99/yr |
|---|---|---|
| Rows per sheet | 1,000 | Unlimited |
| Spreadsheets | Unlimited | Unlimited |
| Requests | Unmetered | Unmetered |
| Queries | Pagination | Filter + paginate |
| Rate limit | Shared | 60 req/min |
| Support | Priority | |
| Start free | Subscribe |
For small projects and getting started. For production apps that need filtering, pagination, and higher rate limits.
Frequently asked questions.
The short version of the docs. Anything else, email us.
We don't limit the number of requests your apps and sites can make. Google Sheets API quotas still apply. On the Free plan, the server is shared across all users within its available resources. On Professional you get a dedicated 60 req/min quota, unaffected by other Free users. Email support@sheetson.com to set it up on your account.
No. Sheetson proxies between the Google Sheets API and your apps, so we don't store your data on our servers.
Basic queries paginate your requests. Advanced queries filter data with multiple operations. See docs.sheetson.com/manage-data/paginate-filter for the full reference.
The Free plan is forever and covers most needs — no credit card required. Pay yearly for a 17% discount versus monthly billing. Subscribing to Pro helps us keep the service running long-term.
PayPal, all major credit cards, Apple Pay, and wire transfers (ACH/SEPA/BACS).
All prices exclude tax, since tax varies by country. For card payments, local taxes are added at checkout based on the details you provide. For wire transfers and purchase orders, fees are exclusive of any applicable taxes, duties, and government charges — the customer is responsible for those.
Yes. Cancel before the expiration date to avoid the next charge; otherwise the system bills your card automatically.