{"uid":"cap_bvqXfIgOhRGrn9bNkrXCL","slug":"nero-labs-ai-dataset-enrichment-4d50bb69","name":"Nero Labs AI Dataset Enrichment","description":"Pay-per-call tools for AI agents, 31 in all: read web pages and RSS feeds, OCR, PDF text, transcription; email, phone and domain checks; UK, Irish and Polish company lookups and UK risk reports; website contacts, tech stack and SEO audits; PageSpeed; AI review, job post and row enrichment; data cleaning, joins, dedupe and diffs; US and EU compliance rules. No account or API key: pay each call in USDC on Base over x402.","url":"https://x402-agent-tools.nerolabs.workers.dev/ai/enrich?utm_source=zero.xyz","method":"POST","headers":{},"bodySchema":{"type":"object","properties":{"data":{"type":"array","description":"A JSON array of records to enrich, for ad-hoc data instead of a dataset ID or file URL."},"prompt":{"type":"string","description":"Plain-English instruction applied to each row on its own. Use {{field}} placeholders to insert that row's values (dotted paths like {{address.city}} work). Only the fields you reference are sent to the model; if you reference none, every field is sent. Examples: classify, extract a value, score 1 to"},"skipIfEmpty":{"type":"boolean","default":true,"description":"On (default): a row with nothing in any {{field}} the instruction uses is written out with 'aiSkipped: true' and never sent to the model or charged."},"outputFields":{"type":"array","description":"The new columns the model must fill in for every row, as a JSON list of {\"name\", \"type\", \"description\"}. Types: string (default), number, boolean, array, object. The description tells the model exactly what goes in the column (allowed values, units, language). Leave empty to get one free-text column"},"systemPrompt":{"type":"string","description":"Optional background the model should know for every row: your industry, the categories you use, the language to answer in, edge-case rules."},"includeOriginalFields":{"type":"boolean","default":true,"description":"On (default): each output row is the original row plus the new columns. Off: only the new columns (plus aiModel/aiError)."}}},"responseSchema":{"type":"json","example":{"rows":[{"id":1,"review":"Battery life is fantastic but the case feels cheap.","aiError":null,"aiModel":"anthropic/claude-haiku-4.5","sentiment":"neutral"}],"count":1,"_example_note":"Real output, trimmed: long lists cut to their first items, fields and text shortened."}},"example":null,"exampleRequest":null,"tags":["x402"],"displayCostAmount":"0.002","displayCostAsset":"USDC","priceDynamic":false,"priceHint":null,"priceStatus":"priced","priceSource":"probe","requiresHandshake":false,"reviewCount":0,"rating":{"score":"0.00","successRate":"0.00","reviews":0,"stars":null,"state":"unrated"},"availabilityStatus":"unknown","priceObserved":null,"sessionDeposit":null,"pricing":{"kind":"static","summary":"$0.002/call","primary":{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.002","per":"call","confidence":"exact"},"accepted":[{"kind":"static","protocol":"x402","network":"base","amountUsd":"0.002","per":"call","confidence":"exact"}]},"paymentMethods":[{"uid":"pm_8mGxFQhYl7usaqQrsNeqB","protocol":"x402","methodType":"crypto","chain":"base","mode":"charge","costAmount":"0.002","costPer":"request","priority":0,"asset":"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913","unit":"request","depositMicros":null,"planRef":null}],"brandName":null,"brandSlug":null,"brandBaseUrl":null,"brandDocsUrl":null,"whatItDoes":"Applies a plain-English AI instruction to every row of a JSON array (up to 50 rows), returning new columns defined by the caller — using Claude Haiku at $0.002 per row.","exampleAgentPrompt":"Take this list of 30 customer reviews and classify each one as 'positive', 'negative', or 'neutral' — add a 'sentiment' column (string) and a 'confidence' column (number from 0 to 1) to every row. Use the instruction: 'Classify the sentiment of the review in {{review}}.'","exampleUseCases":[{"title":"Sentiment tagging for customer reviews","prompt":"I have 40 product reviews in a JSON array. For each row, classify the sentiment as positive, negative, or neutral and give a confidence score from 0 to 1. The prompt should use {{review}} to read each review text, and I want two new columns: 'sentiment' (string) and 'confidence' (number)."},{"title":"Lead scoring from CRM export","prompt":"Here's a list of 50 sales leads as JSON. Score each lead from 1 to 10 based on their company size and industry using the instruction 'Score this lead from 1 to 10 based on {{company_size}} and {{industry}}', and add a 'leadScore' (number) and 'scoreReason' (string) column to each row."},{"title":"Category extraction from product descriptions","prompt":"I have a JSON array of 35 product records. Apply this instruction to each row: 'Based on {{description}}, assign a product category from: Electronics, Apparel, Home & Garden, Sports, or Other.' Add a 'category' column (string) and a 'categoryConfidence' column (number) to every row."}],"resultDescription":"A JSON object with a 'rows' array where each element is the original row plus the new AI-generated columns you defined in outputFields (e.g. sentiment, score, category). Each row also includes 'aiModel' (the model used) and 'aiError' (null on success). The 'count' field reports how many rows were processed. Rows where referenced fields were empty are marked 'aiSkipped: true' if skipIfEmpty is on.","failureModes":["Row fields referenced in {{placeholders}} are missing or empty — row is skipped with aiSkipped:true (if skipIfEmpty is on)","Exceeding the 50-row limit causes an error or truncation","Malformed outputFields schema causes model to return unexpected column shapes","Model hallucination or off-format output populates aiError instead of the column values","Network or worker timeout on large or slow batches","Payment not completed (x402) results in 402 response before processing begins"],"whenToPreferThis":"Choose this endpoint when you need to apply a single, consistent AI instruction across many structured records in one call — classification, extraction, scoring, or summarization tasks on tabular/JSON data. It is purpose-built for batch row-level AI enrichment with typed output columns, field-level placeholders, and per-row error handling, making it far more reliable than calling a general LLM repeatedly in a loop. Prefer it over general-purpose LLM APIs when you want predictable column-shaped output, cost-per-row billing transparency, and automatic skipping of empty rows.","instructions":null,"reviewSummary":null,"reviewSummaryHighlights":null,"reviewSummaryConcerns":null,"reviewSummaryGeneratedAt":null,"activationCount":0,"lastUsedAt":null,"lastSuccessfullyRanAt":null,"lastHealthCheckAt":"2026-10-22T12:41:12.766Z","isFirstParty":false,"canonicalSlug":"nero-labs-ai-dataset-enrichment-4d50bb69"}