Google Sheets Image Generation: Render Selected Rows

Published October 15, 2026 by Balaji

Uncategorized

Google Sheets image generation with jsontoimg is a button, not a background job. You select rows, click Render selected, and each row becomes a signed image URL written back into the sheet. Knowing that up front prevents the most common misunderstanding about it.

How it works

The add-on is an Apps Script project you install with clasp. You map header columns to named layers, choose a template and format, and pick where results go. For each selected row it mints POST /api/v1/img/sign, warms the signed GET /api/v1/img/{template} URL, and writes that URL to a URL column. For PNG, JPG, WebP, and AVIF it also inserts the image into the cell with SpreadsheetApp.newCellImage.

Set up

  1. Create an API key under Integrations, then API keys.
  2. In the sidebar open Settings, paste the key, and click Test connection. Leave Base URL blank for the hosted service.
  3. Pick the header row, template, and format.
  4. Map each layer to a column. Text layers stringify the cell; image layers take an http or https URL.
  5. Choose a URL column, an image column, or both.

The key is stored in UserProperties for your Google account, and the mapping lives in DocumentProperties on the spreadsheet. Use a dedicated key you can revoke.

Limits to plan around

  • 50 selected rows per run. The header row is skipped. A 500-row sheet is ten runs.
  • Button-driven. It does not run when a cell changes. For edit-driven or scheduled work, use n8n or an HTTP step.
  • In-cell images are raster only. PDF returns a URL, not a picture in the cell.
  • First fetch bills a credit. Re-running a row with identical values is a cache hit; changing a value renders again.

If the first render is still running, the signed URL responds 503, and the add-on retries for you.

A sheet layout that works

name course photo_url image_url (result)
Ada Lovelace JSON renders https://example.com/ada.jpg written back

Keep one row per output file and one column per changing layer. Anything constant stays in the template, not a column.

Where it fits

For a one-off cohort or a catalog refresh that a person triggers, this is the shortest route. For recurring automation, use the pattern in the Image Automation API guide. Apps Script itself is documented at developers.google.com/apps-script.

FAQ

How do I generate images from Google Sheets?

Install the jsontoimg Apps Script add-on, map columns to template layers, select up to 50 rows, and click Render selected. Each row’s signed image URL is written back to the sheet.

Does the Sheets add-on run automatically on edit?

No. It is button-driven and renders only the rows you select. For edit-driven automation, use n8n or an HTTP step.

Can I render more than 50 rows?

Run it again on the next 50. The cap is 50 selected rows per run, so a 500-row sheet takes ten runs.

Can the sheet show PDFs as in-cell images?

No. In-cell images work for PNG, JPG, WebP, and AVIF only. PDF output is written as a URL.

Related Resources