// 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

idnamerole
1Ada LovelaceEngineer
2Grace HopperAdmiral
3Linus TorvaldsMaintainer

response

ready
// press Run to fetch

// used in production by

  • Onloop
  • Red Points
  • Papersmiths
  • Braze

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.

  1. 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/edit
    Sheetson Demo— Google Sheets
    ABC
    1idnamerole
    21AdaEngineer
    32GraceAdmiral
    userssheet name → API path
    Sheet2
    (case-sensitive)
  2. 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
  3. 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.

  • AUTHBearer token per sheet. Rotate or revoke from the dashboard.

  • QUOTAUnmetered requests on every plan. Google's own quotas still apply.

  • PRIVATEYour 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.

users— Google Sheets

rows

ABC
1idnamerole
21AdaEngineer
32GraceAdmiral

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.

posts— Google Sheets
ABC
1titleslugpublished
2Hello world/helloTRUE
3Shipping fast/shippingTRUE
4Draft post/draftFALSE

// 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.

  • Feature flags

    Toggle rollout from a sheet your whole team can see. No deploy.

  • Directory & listings

    Job boards, menus, product catalogs — any listing site backed by a sheet anyone can maintain.

  • 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.

MonthlyYearly — save 18%
// plan

Free

Free

Professional

$99/yr

Rows per sheet1,000Unlimited
SpreadsheetsUnlimitedUnlimited
RequestsUnmeteredUnmetered
QueriesPaginationFilter + paginate
Rate limitShared60 req/min
SupportEmailPriority
Start freeSubscribe

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.