Short answer: upload your spreadsheet to the Bulk LLM Runner, write one prompt that uses your column names in double curly braces, such as What does {{Company}} sell, and how many employees does it have?, and run it. You get your own file back with the AI answers added as new columns, in the original row order. It works with GPT, Claude, Gemini, Perplexity, DeepSeek, Qwen and 350+ other models, can search the web for every row, and needs no API key.
Pasting spreadsheet rows into ChatGPT one at a time works for ten rows. At two hundred it is an afternoon of copy and paste, and the answers come back in a different format every time. This guide shows how to do the whole file in one run with clean, consistent columns, plus the prompts and checks that keep the answers trustworthy.
What kinds of spreadsheet jobs does this solve?
Anything where you ask the same question about every record:
- Enrich a company list with founded year, headquarters, CEO, size or industry.
- Check a fact per row, such as which tests each lab offers or whether each supplier ships to Canada, with evidence and a source link.
- Write copy in bulk: product descriptions, meta titles, FAQs or ad variants for a whole catalogue.
- Classify text: tag reviews, support tickets or survey answers by sentiment, topic and urgency.
- Extract fields from messy text or linked pages and PDFs into clean columns.
The Bulk LLM Runner is the most used AI actor in my catalogue, with over 17,000 runs from nearly 400 users, and most of those runs are exactly this: a spreadsheet in, the same spreadsheet with answers out.
How do you run an AI prompt on every row of Excel or CSV?
- Prepare the file. The first row must hold column names. Excel (.xlsx), CSV and TSV all work, and so does a Google Sheets link shared as "Anyone with the link".
- Upload it in the Spreadsheet field of the Bulk LLM Runner.
- Write one prompt using your column names in double curly braces. Each placeholder is replaced by that row's value. Column names are matched without caring about upper or lower case. If you leave placeholders out, the row's fields are added under your prompt automatically.
- Pick a model and switch on Enable web search if the answer needs current facts.
- Test on 20 rows first (use a small copy of the file), compare the answers with a few records you already know, then run the full file.
- Download the ready-made Excel file from the run's output. It is your file, in its original row order, with the answer columns added.
If a long run is stopped, run it again with the same input: finished rows are skipped, so you only pay for the rest.
How do you get clean columns instead of paragraphs?
Name the fields you want in the prompt. Before the run starts, the actor works out the answer columns once, and every row uses exactly the same columns. So a file with First Name and Last Name and the prompt "what year they were born and what their job is" gives you a Birth year column and a job column, not a sentence per row.
If you need exact column names, write them: "Return founded_year, hq_city and employee_range" produces those three columns. Dates come back as YYYY-MM-DD. For a strict format across thousands of rows, set Response format to JSON Schema and paste your schema.
Yes / no checks with evidence
For verification jobs, use the Checklist field: one item per line. Each item becomes a column answered yes, no or unknown, with an evidence column and a source link next to it. The model says "unknown" instead of guessing when it cannot find clear evidence, and those are the rows worth checking by hand. There is a ready-made setup for this in the lab tests checklist example.
Which AI model should you choose?
- Cheap, fast bulk work such as tagging or short descriptions: a Flash, Flash Lite, mini or nano model, or DeepSeek and Qwen.
- Best writing and instruction following: Claude Sonnet or Claude Opus.
- Hard reasoning: the larger GPT-5 and Claude Opus models.
- Research on every row: Gemini Flash or Perplexity Sonar with web search on. They give fewer "unknown" answers than small general models.
Not sure? Run 10 rows with Compare with extra models turned on. You get one output row per prompt and model, so you can compare GPT, Claude and Gemini on your own data and pick the winner with evidence. See the model comparison example for a ready setup.
How much does it cost?
Two parts: $0.002 per result row, plus the AI model's own usage, which is billed through your Apify account at the provider's standard token rate on a paid Apify plan. You do not need an OpenAI, Anthropic or Google account. Every row carries its exact AI cost in a cost_usd column, and a summary record totals the run.
For 1,000 rows the row fee is $2.00. The model cost depends heavily on the model and whether web search is on: a short answer from a small model costs a fraction of a cent, while long answers from top models cost more. Run your 20-row test, read the summary, and multiply.
One honest limitation: on the free Apify plan, runs are limited to 3 prompts or 3 spreadsheet rows, model comparison is off, and AI usage is charged at 10 times the standard rate. The free plan is for checking that the output works; a real file needs a paid plan. You can open the actor on Apify to see the current rates.
How does this compare with GPT for Sheets or Datablist?
Add-ons like GPT for Sheets run inside Google Sheets and are great when your data already lives there and the job is small. Tools like Datablist give you a hosted table with AI enrichment. The Bulk LLM Runner is a better fit when you want:
- many model families in one place, including Claude, Gemini, Perplexity and the Chinese models, without separate API keys;
- web search and PDF or page reading on every row;
- yes / no / unknown checklists with evidence and source columns;
- runs you can schedule or trigger from n8n, Make or Zapier, with resumable progress on big files.
Tips that keep the answers accurate
- Give the model an escape hatch. Add "If you cannot find it, answer unknown". A forced guess is worse than a blank.
- Include identifying columns. "Acme" is ambiguous; "Acme, acme.com, Denver" is not. Put the website or city in the prompt.
- Ask for a source. With web search on, ask for the URL the answer came from, and spot-check a sample.
- One job per prompt. Five unrelated questions in one prompt lowers quality. Use several prompts; each one runs for every row.
If your data is not in a spreadsheet yet, scrape it first. For example, the Canada411 scraper or Google Maps scrapers produce business lists that this actor can then enrich. For translation jobs specifically, the Bulk AI Translator is built for that.
Frequently asked questions
Upload the file to the Bulk LLM Runner, write your prompt with column names in double curly braces such as {{Company}}, pick a GPT model and run. The output is your file with the AI answers as new columns, in the original row order.
No. Your Apify account is the only login, and the model usage is billed through it. You can use GPT, Claude, Gemini, Perplexity, DeepSeek, Qwen and 350+ other models.
$2.00 in row fees plus the model's token cost, which depends on the model and answer length. Every row shows its exact AI cost, so a 20-row test tells you the full price before you commit.
Yes. Turn on web search and the model gets live search results before answering, which is what you want for company research and fact checks. It can also read PDFs and pages you mention in the prompt.
Your prompts and row values are sent to the model provider you choose so it can answer. Most major providers say they do not train on API traffic, but policies differ, so check your provider's terms before sending sensitive or personal data.
More bulk AI tools, including image generation, text to speech and translation, are in the bulk AI tools hub.
โก Run this without building it
These actors already do what this guide describes. Free $5 credit on a new Apify account.
๐ Keep reading
Get the Free Web Scraping Toolkit
Join the newsletter and get my curated list of scraping tools, proxy comparison cheatsheet, and Python automation templates.