Dataset AI Enrich (LLM Classify, Extract, Summarise Rows)
Pricing
from $5.00 / 1,000 row enricheds
Dataset AI Enrich (LLM Classify, Extract, Summarise Rows)
Runs one plain-English instruction against every row of any Apify dataset, CSV/Excel/JSON file URL or JSON array and writes the answer back as new structured columns: classify, extract, score, summarise, translate. No API key needed (tokens billed via apify/openrouter). Pay per enriched row.
Pricing
from $5.00 / 1,000 row enricheds
Rating
0.0
(0)
Developer
Adam Pearce
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 hours ago
Last modified
Categories
Share
Stop hand-tagging scraped data. Dataset AI Enrich takes any Apify dataset, a CSV, Excel or JSON file by URL, a Google Sheet, or a JSON array you paste in, runs one plain-English instruction against every row, and writes the answer back as new structured columns: sentiment, category, a 1 to 10 score, an extracted company name, a summary, a translation, a normalised job title, a yes/no decision. No API key needed: the model tokens are billed to your Apify account through Apify's own OpenRouter proxy, and you only pay this Actor per row that comes back enriched. Use Claude Haiku 4.5 (the default), GPT, Gemini, DeepSeek, Mistral or any of 400+ models by id.
Why use Dataset AI Enrich?
Scrapers give you raw text. What you actually need is a label, a number or a clean field you can filter, sort and count. The usual fix is a Python script with an API key, a prompt loop, retries and a JSON parser, rewritten for every dataset. This Actor is that loop as a reusable, scheduled, API-callable step:
- Reviews and social listening: sentiment, main topic, product aspects, urgency, "needs a reply" flag.
- Lead lists: industry, company size bucket, seniority, buying-signal score, "is this a real business?".
- Job boards: normalised title, seniority, remote or on-site, salary extracted from free text, tech stack.
- E-commerce: category, colour, material, size from a messy title and description; spec extraction.
- Content and news: one-line summary, named entities, language, tone, relevance to your topic.
- Any language: translate a field, or answer in the language you choose.
- Data cleanup the rules can't do: split "Dr. Jane A. Smith-Jones" into first and last name, standardise addresses, resolve "NYC" to "New York".
Because it runs on Apify, you get scheduling, API access, dataset integrations (Zapier, Make, Google Sheets, webhooks), and full run history for free. Chain it after any scraper and before the other Nero Labs dataset tools.
How to use Dataset AI Enrich
- Click Try for free (or Start) on this Actor.
- Bring in your rows: pick a dataset, paste a File URL (CSV, Excel, JSON, Google Sheet), or paste rows into Data (inline).
- Write the Instruction with
{{field}}placeholders for the row values you want the model to see. - Define the Output columns: a name, a type (string, number, boolean, array, object) and a one-line description of what goes in each.
- Set Preview to 5, run, and check the new columns. Adjust the instruction if needed.
- Set Preview back to 0 and run the full input. Optionally export CSV/Excel, append to a named dataset, or POST to a webhook.
The default input runs three product reviews through the default model in a few seconds so you can see exactly how it behaves before pointing it at your own data.
Example
Instruction:
Classify the sentiment of this customer review as positive, neutral or negative.Then name the main topic in one to three words, and list up to three product aspects the customer mentions.Product: {{product}}Review: {{review}}
Output columns:
[{ "name": "sentiment", "type": "string", "description": "exactly one of: positive, neutral, negative" },{ "name": "topic", "type": "string", "description": "what the review is mainly about, one to three words, never the product name" },{ "name": "aspects", "type": "array", "description": "up to three short product aspects the customer mentions" }]
One output row:
{"id": 1,"product": "Wireless earbuds","review": "Battery life is fantastic and the sound is crisp, but the charging case feels cheap and creaks.","sentiment": "neutral","topic": "battery life and build quality","aspects": ["battery life", "sound quality", "charging case"],"aiModel": "anthropic/claude-haiku-4.5","aiError": null}
Writing a good instruction
- Name the allowed values in the column description ("exactly one of: hot, warm, cold") and the model will stick to them. That is what makes the column filterable afterwards.
- Reference only the fields the model needs. Only referenced fields are sent, which keeps cost down and answers focused. Reference none and the whole row is sent.
- Ask for
nullwhen unsure. The system prompt already tells the model never to invent facts; repeat it for high-stakes fields ("if no salary is stated, return null"). - Use Extra context for things that apply to every row: your category list, your industry, the language to answer in.
- Long texts: set Rows per model request to 1 or 2 and raise the per-field character limit if you really need the whole text.
Models and what they cost
Two costs, both visible in your run:
- This Actor: $0.005 per row that comes back enriched. Skipped rows (nothing to process) and failed rows (the model could not answer) are never charged.
- The model tokens, billed to your Apify account by Apify's official OpenRouter proxy at OpenRouter's own rates, shown in the run summary as token counts. A typical short row (a review, a job title, a product name) is roughly 150 to 400 input tokens and 30 to 80 output tokens. Rows are batched five per request by default so the instruction is only sent once per batch.
| Model | Tokens per million (in / out) | Typical cost per row | Good for |
|---|---|---|---|
| Claude Haiku 4.5 (default) | $1.00 / $5.00 | about $0.001 | accurate classification and extraction |
| GPT-4.1 nano | $0.10 / $0.40 | about $0.0001 | simple labels at scale |
| Gemini 2.5 Flash Lite | $0.10 / $0.40 | about $0.0001 | simple labels, long inputs |
| GPT-4.1 mini | $0.40 / $1.60 | about $0.0004 | balanced |
| Claude Sonnet 4.5 | $3.00 / $15.00 | about $0.003 | nuanced judgement, summaries |
So enriching 1,000 short rows with the default model costs about $5 to this Actor plus about $1 of tokens; with GPT-4.1 nano about $5 plus $0.10. Free Apify plans pay 10x the token rate through the proxy (Apify's rule for free accounts), so a paid Apify plan or your own OpenRouter key is worth it above a few thousand rows.
Own key: paste an OpenRouter API key and requests go straight to openrouter.ai on your account, with no token cost billed through Apify.
Input
See the Input tab for the full schema. Three ways to bring in data:
datasetId: any existing Apify dataset (yours or from another Actor's run).fileUrl: a CSV, TSV, Excel, JSON or JSON Lines file, or a Google Sheet link (sharing set to "Anyone with the link can view").data: paste a JSON array directly.
{"datasetId": "YOUR_DATASET_ID","prompt": "Extract the salary range from this job ad. Return the minimum and maximum yearly salary as numbers in the ad's currency, and the currency code. If no salary is stated, return null.\n\nTitle: {{title}}\nDescription: {{description}}","outputFields": [{ "name": "salaryMin", "type": "number" },{ "name": "salaryMax", "type": "number" },{ "name": "currency", "type": "string", "description": "ISO code like USD, GBP, EUR, or null" }],"model": "anthropic/claude-haiku-4.5","previewRows": 5}
Output
Every input row is written to the run's dataset with the new columns added, plus aiModel and aiError (null on success). Rows the model could not process carry the error message in aiError; rows with nothing to process carry aiSkipped: true. Neither is charged. You can download the dataset as JSON, CSV or Excel from the Apify Console, request a ready-made CSV/Excel via exportFormats, append to a named dataset that accumulates across scheduled runs, or POST the result to a webhook. A run summary (rows enriched, skipped, failed, model, token usage, warnings) is saved to the key-value store as AI_ENRICH_SUMMARY.
Pricing
Pay-per-event, no subscription:
- $0.005 per row enriched (a row the model answered and that was written out)
- $0.01 per file export (CSV or Excel)
- $0.02 per confirmed webhook delivery (only when the endpoint responds 2xx)
- A small per-GB run-start fee (the platform default)
- Model tokens are billed separately by Apify's OpenRouter proxy at OpenRouter's rates (see the table above), or not at all if you use your own key
Enriching a 500-row lead list with an industry label and a fit score costs $2.50 here plus roughly $0.50 of tokens on the default model.
Works with the rest of the Nero Labs dataset toolkit
Six small tools that chain together, all pay-per-event, none of them scrape anything:
- Dataset Cleaner & Exporter: dedupe (exact, normalized or fuzzy), flatten nested JSON, clean emails/phones/URLs, export.
- Dataset Filter & Transform: filter rows by rule, reshape fields (dates, replace, split, hash, 25 ops), sort, dedupe, limit; also reads files and Google Sheets by URL.
- Dataset AI Enrich (this one): add model-generated columns to every row.
- Dataset Join & Merge: VLOOKUP-style joins and unions across two datasets on a key field.
- Dataset Aggregate, Group By & Pivot: counts, sums, averages and pivot tables per group.
- Dataset Diff & Change Detector: what was added, removed or changed between two runs.
A common pipeline: scraper, then Cleaner, then AI Enrich (label every row), then Filter & Transform (keep the rows that matter), then Aggregate for the weekly count per label.
Tips
- Always run a Preview of 5 to 10 rows first. It costs a few cents and shows you exactly what the columns will look like.
- Keep Temperature at 0 for labels and extraction; the same row then gets the same answer on every run.
- If a column comes back null too often, put the allowed values or a worked example into the column description or Extra context.
- Rows per model request at 5 to 10 is the sweet spot for short rows; use 1 for rows with long article text.
- Set Maximum rows to process as a cost cap on big datasets, and Also append to a named dataset when this runs on a schedule.
FAQ
Do I need an OpenAI or Anthropic account? No. The model is called through Apify's own OpenRouter proxy and the tokens are billed to your Apify account. You can optionally use your own OpenRouter key instead.
Where does my data go? The referenced fields of each row are sent to the chosen model via OpenRouter for the duration of the request, and the answer comes back into your own Apify storage. This Actor keeps nothing. Check the model provider's data policy on openrouter.ai if your rows contain personal data.
Will it invent values? The system prompt instructs the model to return null when a value cannot be determined from the row, every output is coerced to the declared type (a non-number in a number column becomes null, never a guess), and rows the model could not answer are written with aiError set rather than a made-up value. Models can still be wrong; preview, and keep the source fields alongside the new columns.
What happens on a rate limit or a model outage? Requests retry with backoff. Rows that still fail are written with aiError and are not charged, so a partial outage never silently loses rows or costs you money.
Can I use it from an AI agent or via MCP? Yes. It is pay-per-event with limited permissions, so it works with Apify's MCP server and agentic payments; the description and input fields are written to be read by an agent.
If this replaced a manual tagging or classification pass, a review on this page helps a small tool get found. Found a bug or want a feature? Open an issue on the Issues tab, replies come from a real person, usually within hours.