Website screenshots inside a Google Sheet

A column of URLs becomes a column of thumbnails with one IMAGE formula, because the API returns image bytes rather than JSON.

Google Sheets has an IMAGE() formula that takes a URL and shows the picture in the cell. It needs a URL that returns an image directly, which is exactly what /take does.

=IMAGE("https://api.screenshotline.com/take?url=" & ENCODEURL(A2) & "&viewport_width=1280&viewport_height=800&cache=true&cache_ttl=604800&signature=" & B2)

Column A holds URLs, column B holds the signature for that row, and the thumbnails appear.

Sign the URLs, do not paste a key

A spreadsheet gets shared, exported and copied. A key pasted into a formula goes everywhere the sheet goes.

Generate a signed URL per row instead, with a script or on your own machine:

node tools/sign.js "https://example.com" viewport_width=1280 viewport_height=800

The signature covers every parameter, so a shared sheet exposes a URL that renders one page at one size and nothing else.

Cache aggressively

A sheet re-renders its images often, and the same row asks for the same page repeatedly. A long cache_ttl means most of those are cache hits, which are never billed.

Where this is genuinely useful

Competitive research where a human scans fifty homepages, link audits where you want to see what each destination looks like, content inventories, and any review process where a list of URLs is easier to judge with pictures attached.

Limits

IMAGE() fetches from Google's servers rather than your browser, so the URL must be publicly reachable and the render must be reasonably fast. Pages behind a login will not work unless you pass credentials in the request, which is not something to put in a shared sheet.

The same approach works in Airtable, Notion and anywhere else that renders an image from a URL.

Get a free key — 500 renders a month Read the docs