How do I generate images from a CSV or spreadsheet?
Updated July 2026
Ask an AI about this guide
Open this article in your assistant with a ready-made question about doing the same job on your own API keys.
One image per row is the core operation behind product catalogs, localized ad variants, content pipelines, and dataset work. In 2026 there are three real ways to do it, and they differ mostly in how much babysitting and glue code they demand.
Option 1: a chat tool (ChatGPT or Gemini) - fine for 10 rows
Both ChatGPT and Gemini will read an uploaded CSV and are genuinely good at the first half of the job: turning rows into well-written image prompts. The second half is where it drags - images generate one at a time in the conversation, the model needs nudging to continue through the list, rate caps arrive quickly (users report roughly 50 images per 3 hours on ChatGPT Plus and around 20 per day on Gemini free), and nothing links output images back to source rows. Workable for a ten-row sheet; painful beyond that.
Option 2: a script against an image API - powerful, all on you
If you code, the loop is straightforward: read the CSV, fill a prompt template from columns, call the OpenAI Images API (GPT Image, roughly $0.006 to $0.21 per image by model and quality) or the Gemini API (Nano Banana, about $0.039 per image), and save each file named by row ID. No daily caps on paid API tiers, no visible watermarks (Gemini output retains an invisible SynthID mark; OpenAI output carries C2PA metadata).
The hidden cost is everything around the loop: concurrency without tripping rate limits, retries on failures, progress tracking so a crash at row 180 does not restart from zero, and somewhere to review 300 images that is not a bare folder. The script is an afternoon; the pipeline around it is the real project.
Option 3: a purpose-built batch tool
The third path is a tool where CSV-to-images is a native feature: upload the sheet, map columns to a prompt template, pick a model, run. What to evaluate in any such tool: whether it uses your own API keys (per-image cost and no platform markup) or resells credits, how many generations run in parallel, whether results stay linked to rows, and whether you can re-run only the failed rows instead of the whole sheet.