Bulk LLM Runner — ChatGPT, Claude & Gemini on CSV & Datasets
Pricing
from $1.00 / 1,000 row answereds
Bulk LLM Runner — ChatGPT, Claude & Gemini on CSV & Datasets
Run a prompt on every row of a CSV, Excel file, Google Sheet or Apify dataset with ChatGPT, Claude, Gemini, DeepSeek or any OpenRouter model. Answers as new columns or typed JSON fields. No API key needed. $1 per 1,000 rows.
Pricing
from $1.00 / 1,000 row answereds
Rating
0.0
(0)
Developer
Salih Küçükkayış
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Run a prompt on every row of a CSV, Excel file, Google Sheet or Apify dataset with ChatGPT, Claude, Gemini, DeepSeek, Perplexity or any of the 400+ models on OpenRouter, and get the answers as new columns: free text, or typed JSON fields (category, score, yes/no, lists) ready for your spreadsheet. Classify leads, summarise pages, extract fields, translate, tag reviews, score companies. No OpenAI, Anthropic or Google API key needed.
$1 per 1,000 rows (one row answered by one model), plus the model's own cost at OpenRouter's price. Failed rows are free. No platform usage fees.
Quick start
Press Start with the example input. It asks the default model (GPT-6 Luna) one question about each of two companies:
{"rows": [{ "name": "Notion", "description": "The connected workspace for docs, wikis and projects." },{ "name": "Figma", "description": "Figma helps teams create, test and ship better designs." }],"prompt": "In one short sentence, what does this company do and who are its customers? Company: {{name}}. Website text: {{description}}"}
You get your rows back with the answer next to them:
[{"name": "Notion","description": "The connected workspace for docs, wikis and projects.","model": "openai/gpt-6-luna","llmOutput": "…the model's answer…","llmCostUsd": …,"tokens": …,"llmError": null}]
(The shape of a row; the answer and cost depend on the model.)
Typed columns instead of text: add output fields, one per line.
{"fileUrl": "https://docs.google.com/spreadsheets/d/…/edit","prompt": "Company: {{name}}. Description: {{description}}","outputFields": ["industry: one or two words","is_b2b (boolean): sells mainly to companies","employees_estimate (integer)","keywords (list): three keywords"]}
Each field becomes its own column (industry, is_b2b, employees_estimate, keywords), using the models' structured output where they support it and a strict JSON instruction for the others.
What you get
- Any table in, the same table out with answers. Apify datasets (pick one from any earlier run), CSV, TSV, Excel, JSON and JSONL links, Google Sheets, Google Drive and Dropbox share links, or rows pasted as JSON. Input columns are kept.
- Prompt templates.
{{column}},{{nested.field}}or{{row}}(the whole row as JSON). - Typed JSON columns with
outputFields: string, number, integer, boolean or list, with light type fixes ("7" becomes 7). - Any model, or several at once. OpenAI, Anthropic, Google, DeepSeek, Mistral, Perplexity, xAI and more through Apify's OpenRouter Actor. List several models to get one row per model for a side-by-side comparison.
- Web search (optional) with the cited pages in each row.
- Cost in every row (
llmCostUsd) and in total in the summary.
Typical uses
- Lead enrichment: industry, size, B2B or B2C and a one-line pitch for every company in a scraped list.
- Classify and tag: support tickets, reviews, job posts, products.
- Summarise: pages from a crawl, documents converted to text, transcripts.
- Extract fields from free text into columns.
- Translate or rewrite product descriptions in bulk.
- Compare models on your own data before you pick one.
Chains well with: Document to Markdown, Audio to Text, Career Site Jobs, Dataset Merge & Dedupe and any scraper: pick its dataset as the input.
Input
| Field | Default | Meaning |
|---|---|---|
prompt | Template run on every row; {{column}} placeholders. | |
dataset | An Apify dataset to process. | |
fileUrl, sheet | A file or share link, and the Excel sheet. | |
rows | Rows pasted as a JSON array. | |
prompts | Independent prompts when you have no table. | |
models | openai/gpt-6-luna | One or more OpenRouter model ids. |
outputFields | Typed JSON columns: name (type): description. | |
systemPrompt | Instructions for every request. | |
outputColumn | llmOutput | Column for the free-text answer. |
keepColumns | true | Copy the input columns into the output. |
webSearch | false | Let the model search the web first. |
maxRows | 1,000 | Safety limit on the number of rows. |
temperature, maxAnswerTokens, concurrency | Model settings and parallel requests (default 8). |
Output
Your row (when keepColumns is on), then:
| Field | Meaning |
|---|---|
model | Model that answered |
llmOutput (or your outputColumn) | The answer text |
your outputFields | One column per field, when you asked for them |
citations | Pages used, with web search |
llmCostUsd, tokens | The model's cost for this row |
llmError | Why this row failed (failed rows are free) |
Without data, each row has the prompt instead of input columns.
What it costs
You pay two things: $0.001 per answered row to this Actor, and the model's own cost, which Apify's OpenRouter Actor charges to your Apify account at OpenRouter's price. Both appear on your Apify bill; each row shows its model cost (llmCostUsd).
Model cost depends on the model and the length of your rows. Prices per million tokens on OpenRouter (October 2026, input / output): GPT-6 Luna $0.10 / $0.50, DeepSeek V4.1 Flash $0.15 / $0.60, Gemini 3.8 Flash $0.83 / $4.13, Claude Sonnet 5.5 $2 / $10. A row with a 300-word prompt and a 50-word answer is roughly 500 tokens: about $0.0001 with GPT-6 Luna, $0.0015 with Claude Sonnet 5.5 (estimate).
| Run | This Actor | Model cost (estimate, short rows) |
|---|---|---|
| 1,000 rows with GPT-6 Luna | $1.00 | about $0.10 |
| 1,000 rows with Claude Sonnet 5.5 | $1.00 | about $1.50 |
| 1,000 rows x 3 models (comparison) | $3.00 | sum of the three |
On Apify's free plan, Apify's OpenRouter Actor charges 10 times the model price, so a paid plan is much cheaper for bigger jobs. The run's spending limit covers this Actor's charges; maxRows keeps the number of model calls in check.
Good to know
- Retries: a row is asked again only when the model refused before answering (rate limit, server error), which providers do not bill. A timeout, an empty or unreadable answer is not asked again, because it may already have been billed; the row gets an
llmErrorand is free. - If five rows in a row fail, or your Apify account cannot pay the model (no credit), the run stops instead of failing every row.
- Rows are sent to the model provider through OpenRouter; do not process data you may not share with them.
- If the run is moved to another server, it continues where it stopped without asking or charging rows twice.
FAQ
Do I need an OpenAI or Anthropic API key? No. The models are called with your run's Apify token through Apify's OpenRouter Actor.
Can I use a Google Sheet? Yes: share it as "Anyone with the link can view" and paste its link in fileUrl.
Can I process the results of another Actor? Yes: pick its dataset in the dataset field.
Am I charged for failed rows? No. Only rows with an answer (and, with output fields, a valid JSON answer) are charged.
Next steps with your results
- Join the answers back to another table, filter or remove duplicates with Dataset Merge.
- Send every row to your CRM, webhook or any API: give this run's dataset to Bulk HTTP Requests.
- Track how ChatGPT, Claude, Gemini and Perplexity talk about your brand with AI Visibility Tracker.
More from this developer
- AI Visibility Tracker: how often ChatGPT, Claude, Gemini and Perplexity mention and cite your brand vs competitors, $15 per 1,000 checks.
- Dataset Merge & Dedupe: merge, deduplicate, filter and join datasets, CSV and Excel files.
- Document to Markdown: PDF, Word, PowerPoint, Excel and scanned images to clean Markdown, $2 per 1,000 pages.
- Bulk HTTP Requests: call any API once for every row of a CSV, JSON list or Apify dataset.
Code examples (curl, Python, Node.js, n8n) for this and the other Actors: github.com/msalihk/apify-actor-examples.
Questions or a missing feature: open an issue on the Actor page.