Docs · Getting started

From install to a live table in about four minutes.

Steps one to three need no account at all. Activation only matters when you want to fetch from a URL. Nothing here assumes you write code.

On this page 1 · Install the add-on 2 · Open the sidebar 3 · Paste JSON, insert a table 4 · Activate for URL imports 5 · Your first API request 6 · Save a credential 7 · Keep it fresh Choosing an array mode When something breaks
Step 01

Install the add-on

After the Marketplace release, install the add-on and accept the permission prompt. The add-on asks for access to the spreadsheet you have open and nothing else — no Drive, no mail, no contacts. You can install it on a personal account or, if your admin allows it, across a Workspace domain.

Join the beta
Step 02

Open the sidebar

In any spreadsheet, go to the Extensions menu and choose JSON for Sheets, then Open JSON for Sheets. The same menu holds the JSON Tools shortcuts, your saved requests, and your account and usage screen.

Extensions → JSON for Sheets → Open JSON for Sheets
Step 03

Paste JSON and insert a table

Choose Paste, drop a payload in, and the explorer appears. Tick the fields you want, pick a destination, and read the predicted row and column count. Press Insert table. This whole flow runs inside the spreadsheet — no sign-in, no request counted, and your data never reaches us.

01

If your payload wraps the array in an envelope, click the array in the tree instead of hunting for the path — the root path fills itself in.

02

Untick anything you do not need. Fewer columns means a table people will actually read.

03

Writing to a new sheet is the safe default while you are learning the shape of a payload.

Step 04

Activate, for URL imports only

Fetching from a URL goes through our service so caching, quotas, and URL safety checks can be applied. That needs a free account. Click Activate in the sidebar, approve the connection in the browser tab that opens, and come back — the sidebar picks it up on its own. No card, and the Free plan is granted immediately.

No account needed

All 12 local functions · paste JSON · read JSON from a cell · the explorer · range to JSON

Needs a free account

Public URL imports · JSON_IMPORT() · authenticated requests · saved requests · schedules

Your credential is stored per user in the add-on's own storage, is revocable at any time, and is scoped to this product only.
Step 05

Your first API request

Switch the source to URL, paste an endpoint, and press Test. You get the response tree, the status, the duration, and the size. Choose your root path and fields, then Import. If you already have the request as a cURL command, paste it instead — method, headers, query, and body are filled in for you.

For a public GET you can skip the sidebar entirely and use the formula. Press the Copy formula button in the preview and it is built for you:

=JSON_IMPORT("https://api.example.com/orders", "$.data[*]", "array=join;cache=3600")

Never put a token in a formula argument — it would be visible to anyone with the spreadsheet. Authenticated requests belong in the sidebar, where the secret stays server-side.

Step 06

Save a credential once

Open Connections, choose a type, paste the secret, name it something you will recognise in six months, and press Test. From then on requests reference it by name. The value is encrypted on save and never shown again — you can rotate or revoke it, but not read it back.

Bearer token API key in header API key in query Basic auth Custom secret headers
Step 07

Keep it fresh

Save the request, then decide how it updates. Manual refresh works on every plan. Starter can schedule it daily, Pro hourly. Choose the output mode that matches what the sheet is for:

Overwrite

Replace the managed range with the latest response. Right for a current-state snapshot.

Append

Add new rows below the existing ones. Right for an event log you want to accumulate.

Update or append

Match on one unique key, update those rows, append the rest. Your own extra columns are preserved and nothing is deleted. The key must exist in both the response and the destination header, and duplicates are refused.

A scheduled request rechecks your plan before every run, so a downgrade disables an hourly schedule rather than failing quietly for weeks.

Choosing an array mode

The single decision that determines whether your table is useful. Ask what one row should mean.

rows

One row per child item. Choose it when you want to pivot or sum by the child — line items, tags, participants. Watch the multiplier: 500 orders with 4 items each is 2,000 rows.

join

One row per record, the array collapsed into one cell. Choose it when the array is labels you want to read, not numbers you want to total.

json

One row per record, the array kept as JSON. Choose it when you want to decide later — JSON_VALUE() can reach inside afterwards.

When something breaks

Every failed run has a debug ID and a sanitised record of what was sent. Open Request history, find the run, and read it before changing anything.

401 Unauthorized

The saved token was rejected. Rotate the connection rather than editing the request.

Response too large

Narrow the path, select fewer fields, or reduce the API's page size. Your per-response limit is on the pricing page.

Blocked destination

The URL resolved to a private or internal address. Local and intranet endpoints cannot be reached — this is deliberate and not configurable.

Duplicate key in source

Upsert refuses to guess which row wins. Pick a genuinely unique field, or deduplicate upstream.

Still stuck? Email support with your debug ID →