Free tool

CSV to images

A spreadsheet in, a stack of images out. Each row becomes one image from the same template; a column named after a placeholder fills it, and a column named layer.property changes that layer. Try it with a starter, then send the same file to the API with a key.

Free, no key. 20 renders a minute per visitor.
your result appears here
the same call with your key
curl -X POST "https://api.imageapis.com/v1/collections?template=tpl_…" -H 'X-API-Key: YOUR_KEY' -H 'Content-Type: text/csv' --data-binary @rows.csv

How the columns work

The first row of the CSV names the columns, and the name decides what a column does:

Column What it does Example
title Fills {{title}} wherever the template uses it Ship social cards without a designer
accent.fill Sets the fill property of the layer named accent #22c55e
photo.src Swaps the image in the layer named photo https://example.com/a.jpg
_post Kept as metadata on the image, returned with its URL 102

An empty cell leaves the template as it is. Numbers and true/false are read for the properties that take them, so bar.value can be 72 and stars.visible can be no. Commas, semicolons, tabs and pipes all work as the delimiter, so a CSV exported from Excel in a European locale works as is.

With a key

The same file goes to the API in one request, up to 1,000 rows. Save the template once (or copy a starter), then post the CSV with its id:

curl -X POST "https://api.imageapis.com/v1/collections?template=tpl_…" \
  -H 'X-API-Key: YOUR_KEY' -H 'Content-Type: text/csv' --data-binary @rows.csv

The answer comes back at once with every image's URL already assigned. The images render in the background, and you can poll the collection or pass webhook_url to be told when they are done. Each row costs one image. If the plan does not have enough images left, the request is refused whole and nothing is charged. The CSV guide covers Python, Google Sheets and retrying failed rows.

Get a free key: 150 images a month API reference