Connect REST API to Google Sheets

Point at any JSON REST API, handle pagination and auth, pull the records out and land them in your destination. The escape hatch for any tool without a dedicated connector.

What you can pull from REST API

A REST API job pulls records into a flat table on your schedule. Nested fields are flattened into ordinary columns, so what lands in Google Sheets is ready to sort, filter and total rather than needing another cleanup step.

  • Any JSON endpoint
  • Page / offset / cursor paging
  • Bearer, header or query auth

Options you can set

url
The full request URL
method
GET or POST — defaults to GET
records_path
Dot path to the array holding your rows, e.g. data.items
pagination
none, page, offset or cursor — defaults to none
page_size
Records per page, up to 1,000 — defaults to 100
max_pages
Safety cap on the paging loop, up to 1,000 — defaults to 50
timeout
Per-request timeout in seconds, up to 300 — defaults to 30

How it lands in Google Sheets

Google Sheets accepts append and overwrite writes. Overwrite replaces the target range, which suits a snapshot; append adds rows underneath, which suits a log you are accumulating. There is no upsert here, so rows are added or replaced rather than merged.

  • Append adds rows below existing content; overwrite replaces the target range.
  • No upsert: a spreadsheet has no primary key, so there is nothing to merge on. Use Airtable or Postgres if rows must be updated in place.
  • Google caps a spreadsheet at 10 million cells across all tabs. Filter before writing rather than after.

Authentication

REST API authenticates with an API key held as a stored connection, so it never appears in a spreadsheet cell, a formula, or a shared copy of a sheet.

Keeping runs incremental

Yes. Most APIs accept an updated-since query parameter; set it in query_params and the run fetches only what changed.

Because Google Sheets has no upsert, decide what a re-run should mean before you schedule it. Overwrite keeps a current snapshot; append accumulates history and will grow without bound.

Limits and pacing

These are the provider-side ceilings that shape a schedule, not ours. Knowing them up front is the difference between a job that runs quietly every morning and one that starts failing the week your data grows.

LimitValueApplies to
Page sizeup to 1,000 recordsREST API
Pages per run Defaults to 50.up to 1,000REST API

Common gotchas

Most of what goes wrong with a scheduled sync is not a bug — it is a detail of how one side behaves that nobody wrote down. These are the ones that come up for this pair.

Cursor pagination reads the cursor from the response body

The next cursor is taken from a dot path inside the JSON body, and may be either an opaque token or a full next-page URL. APIs that return their cursor in a Link response header instead - Shopify’s REST Admin API and the GitHub API among them - cannot be followed past page one. Page and offset pagination are unaffected.

The URL is re-validated on every page

With cursor pagination the next URL comes from the response, which makes it attacker-influenced. It is checked again before each request rather than trusted because the first one passed.

An open-ended range beats a padded one

Writing to A2:D is better than A2:D1000 for appends: the padded form reserves rows you may not need and makes the append boundary ambiguous.

Set it up in four steps

  1. 1

    Connect REST API

    Optional. A stored credential is sent as a bearer token, a named header, or a query parameter - never pasted into a spreadsheet cell.

  2. 2

    Connect Google Sheets

    Connect your Google account once. Paste a spreadsheet URL or ID.

  3. 3

    Shape the data

    Select the columns you want, filter rows, cast types and add computed fields. Everything else is dropped before it reaches the destination.

  4. 4

    Schedule it

    Run once, or on a cron. Every run refreshes Google Sheets with the latest REST API data.

Do I need an add-on or extension for this?

No. The job runs server-side and writes into Google Sheets through its API, so there is nothing installed in the spreadsheet itself. It keeps running when nobody has the file open, and a copy of the file does not need anything installed to work.

How often does the data refresh?

On whatever schedule you set with a cron expression — hourly, daily, or a specific time on specific days. Each run pulls the latest from REST API.

Do I need to write any code?

No. You connect both sides, map the fields in a wizard and set a schedule. Computed fields accept small expressions — abs, round, min, max, len — but there is nothing to host or maintain.

What if my API is not in the connector list?

That is what this connector is for. If it speaks JSON over HTTP, point the REST source at it, set the path to the array holding your rows, and pick a pagination style.

Where does my API key live?

In a stored connection, sent as a bearer token, a named header or a query parameter at request time. It is never written into a spreadsheet cell or a formula, which is the usual failure mode of script-based approaches.

Do I have to give access to my whole Google Drive?

No. Only the spreadsheets scope is requested. The Drive scope that most spreadsheet tools ask for is a restricted scope granting read access to every file you own; it is deliberately not requested here, which is why you paste a spreadsheet URL rather than browsing Drive.

Will this keep working if I copy the sheet?

The job writes to a specific spreadsheet ID, so a copy will not receive data until you point a job at it. Nothing is installed in the file itself, though, so copying never breaks the original.

Is the REST API connector free to use?

You can connect REST API and start syncing on the free plan.