Bulk AI Dataset Enricher – Run LLM Prompts on Every Row avatar

Bulk AI Dataset Enricher – Run LLM Prompts on Every Row

Pricing

from $0.80 / 1,000 row enricheds

Go to Apify Store
Bulk AI Dataset Enricher – Run LLM Prompts on Every Row

Bulk AI Dataset Enricher – Run LLM Prompts on Every Row

Run an AI prompt on every row of an Apify dataset, CSV, Excel or JSON list: classify, tag sentiment, extract fields, summarize or translate with GPT, Gemini, Claude, Llama and 400+ models. No API key. $0.80 per 1,000 rows + LLM tokens.

Pricing

from $0.80 / 1,000 row enricheds

Rating

0.0

(0)

Developer

Cemal Atakli

Cemal Atakli

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Bulk AI Dataset Enricher – Run LLM Prompts on Every Row (GPT, Gemini, Claude)

Run an AI prompt on every row of an Apify dataset, a CSV / Excel / Google Sheets file or a pasted JSON list, and get your rows back with new AI columns: sentiment, category, extracted fields, summaries, translations, lead scores, reply drafts, anything you can describe in a prompt.

Write a prompt template with {{column}} placeholders, pick a model (Gemini, GPT, Claude, Llama, Mistral, DeepSeek or any of 400+ OpenRouter models) and choose one text column or structured JSON fields (each field becomes its own column). Rows are processed in parallel with automatic retries.

No API key needed. LLM calls go through Apify's own OpenRouter Actor with your run's Apify token.

$0.80 per 1,000 enriched rows + LLM token cost. Failed rows are free.

How you pay (two parts, both on your Apify bill)

  1. This Actor's fee: $0.0008 per row enriched (plus a $0.00005 start fee). Rows that fail, return invalid JSON or are skipped are not charged.
  2. LLM token cost for each call, billed by Apify to your Apify account through Apify's OpenRouter Actor (apify/openrouter) at OpenRouter's prices. With the default model (Gemini 2.5 Flash Lite) a typical row of ~250 input and ~60 output tokens costs about $0.00005. Note: Apify bills OpenRouter usage on the free plan at 10x the OpenRouter price.

Set a maximum cost per run in the run options and the Actor stops cleanly before going over it.

What people use it for

  • Classify scraped data: tag leads, products, jobs or companies into your own categories ("SaaS / agency / e-commerce").
  • Review and comment analysis: sentiment, main topic, "needs a reply?" and a reply draft for each review.
  • Extract structured fields from messy text: company, role, email found, price, size, address parts, dates.
  • Lead qualification: score each lead 1-10 with a reason, from your scraper's output.
  • Summarize long descriptions, articles, posts or tickets into one line.
  • Translate product titles, reviews or listings into any language.
  • Clean and normalize: fix capitalization, standardize job titles, map free-text countries to ISO codes.

It pairs naturally with any Apify scraper: run the scraper, then pass its dataset (or use {{resource.defaultDatasetId}} in an integration) to enrich every item automatically.

Input

FieldMeaning
datasetIdsApify datasets to enrich (resource picker)
fileUrlsCSV, TSV, XLSX, XLS, ODS, JSON or JSON Lines URLs. Google Sheets ("Anyone with the link"), Drive, Dropbox, OneDrive and GitHub links work
itemsOr paste a JSON array of rows
taskcustom (your template), or presets sentiment, classify, extract, summarize, translate
promptTemplate with {{column}}, dot paths like {{address.city}}, or {{row}} for the whole row as JSON
outputModetext = one column (outputColumn), json = structured fields from outputFields
outputFields{"field": "description"}. a|b|c = one of these labels, number ..., integer ..., boolean ..., array ..., anything else = text
model / customModelModel from the list, or any OpenRouter model ID
maxRows, concurrency, maxOutputTokens, maxInputChars, temperatureLimits and performance
keepOriginalColumns, keepColumns, includeUsageOutput shape

Example: review analysis with structured fields

{
"datasetIds": ["YOUR_REVIEWS_DATASET_ID"],
"prompt": "Analyze this customer review.\nProduct: {{product}}\nStars: {{rating}}\nReview: {{review}}",
"outputMode": "json",
"outputFields": {
"sentiment": "positive|negative|neutral|mixed",
"mainTopic": "short topic, e.g. battery, shipping, noise, quality",
"needsReply": "boolean - true if customer support should respond",
"replyDraft": "one polite sentence the shop could reply with, in the review's language"
},
"maxRows": 1000
}

Example: classify leads from a CSV

{
"fileUrls": ["https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/edit"],
"task": "classify",
"labels": ["SaaS", "Agency", "E-commerce", "Other"],
"prompt": "{{company_name}} - {{website}} - {{description}}"
}

Example: translate product titles

{ "datasetIds": ["YOUR_DATASET_ID"], "task": "translate", "targetLanguage": "German", "prompt": "{{title}}" }

Output

Each output row = your original row + the AI columns + aiError (null when everything worked). Rows keep their original order.

{
"product": "Wireless earbuds",
"review": "Left earbud stopped working after two weeks. Support never answered my emails.",
"rating": 1,
"sentiment": "negative",
"mainTopic": "defect / support",
"needsReply": true,
"replyDraft": "We're very sorry about your earbud and our slow reply; please reply with your order number and we'll send a replacement right away.",
"aiError": null
}

Export as CSV, Excel, JSON or send it to Google Sheets with an integration. The run summary (OUTPUT record) shows rows enriched, errors, and total prompt / completion tokens.

Pricing compared

This ActorTypical bulk LLM runner
Fee per row$0.0008$0.002
LLM tokensyour Apify account, OpenRouter pricesimilar
API keynot neededoften not needed
Inputsdataset, CSV/XLSX/Google Sheets URL, JSONusually dataset or JSON
Structured JSON columnsyes, with types and label listsvaries
Failed rowsfreevaries

Use with AI agents (Apify MCP)

Add the Actor to Claude, ChatGPT, Cursor or any MCP client through the Apify MCP server. An agent can pass a dataset ID or JSON rows plus a prompt and get typed columns back, for example: "Classify every company in this dataset as SaaS, agency or e-commerce and give a one-line reason."

FAQ

Do I need an OpenAI / OpenRouter key? No. The Actor uses your run's Apify token to call Apify's OpenRouter Actor; token costs appear on your Apify bill.

Which model should I use? Start with the default google/gemini-2.5-flash-lite (fast and cheap). For harder reasoning or nuanced writing try Claude Haiku 5.5, GPT-5.4 mini or Claude Sonnet 5.5.

What happens when a row fails? It is saved with an aiError message and is not charged. Rate limits and server errors are retried automatically (up to 4 attempts). If the model returns invalid JSON it is asked once more. Note that LLM tokens already used for a failed row are still billed by OpenRouter.

What if a column is missing in some rows? The placeholder becomes empty text. If all placeholders of a row are empty, the row is skipped for free.

How many rows can I process? Any number; datasets and files are streamed. Use maxRows for a test first and raise concurrency for speed.

Is there an output limit? Apify's OpenRouter Actor allows up to 2,048 output tokens per call, which is plenty for row-level tasks.

Is my data used for training? Rows are sent to the model provider you choose through OpenRouter; each provider's data policy applies (see openrouter.ai). Don't send data you are not allowed to process with third-party AI services.