Dataset AI Enrich (LLM Classify, Extract, Summarise Rows) avatar

Dataset AI Enrich (LLM Classify, Extract, Summarise Rows)

Pricing

from $5.00 / 1,000 row enricheds

Go to Apify Store
Dataset AI Enrich (LLM Classify, Extract, Summarise Rows)

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

Adam Pearce

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

9 hours ago

Last modified

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

  1. Click Try for free (or Start) on this Actor.
  2. Bring in your rows: pick a dataset, paste a File URL (CSV, Excel, JSON, Google Sheet), or paste rows into Data (inline).
  3. Write the Instruction with {{field}} placeholders for the row values you want the model to see.
  4. Define the Output columns: a name, a type (string, number, boolean, array, object) and a one-line description of what goes in each.
  5. Set Preview to 5, run, and check the new columns. Adjust the instruction if needed.
  6. 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 null when 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:

  1. 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.
  2. 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.
ModelTokens per million (in / out)Typical cost per rowGood for
Claude Haiku 4.5 (default)$1.00 / $5.00about $0.001accurate classification and extraction
GPT-4.1 nano$0.10 / $0.40about $0.0001simple labels at scale
Gemini 2.5 Flash Lite$0.10 / $0.40about $0.0001simple labels, long inputs
GPT-4.1 mini$0.40 / $1.60about $0.0004balanced
Claude Sonnet 4.5$3.00 / $15.00about $0.003nuanced 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:

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.