input_data, and the agent researches each gap on the live web and fills it. Your values are treated as ground truth and passed through untouched. Only the blanks get researched.
This page enriches ten rows from the Dataset Building quickstart. One of them gets a full brief in Research.
The result
Efforthigh, 4.5 minutes, 5 rows back for 5 in. Trimmed:
company and domain untouched. Every CEO and pricing page filled from the company’s own site. Three employee_band cells and one funding amount are null: the agent found no public figure and said so, rather than guessing.
This was the second attempt. The first sent the same agent ten rows. It ran for 21 minutes, researched the first five fully, and returned the last five with only the input values filled: trust grade medium, “cells fill rate is 57%”, status completed. Ten rows by six researched fields was more than one high run could finish. Five rows took four and a half minutes and filled 90% of cells. Batch size is the lever; see Iterate.
Build it
1
Pick the effort
Enrichment runs at
high: a 5-row batch with 6 researched fields in about 5 minutes for $0.50. Use x-high when fields need deep digging (financials, named executives at private companies) and drop to one to three rows per run. medium only for one to three shallow fields read from the row’s own site, one row per run. See Effort and Cost.2
Create the agent
The skill fixes the source order and the rules the agent must follow on every row: identify by two keys, never infer, never construct an email, constrain people to the row’s own company. The schema is a table (array root) because
input_data is a list of rows.3
Run it on a batch
Rows go in Poll while
input_data. The input is one sentence. Start with five rows: five rows by six researched fields is what one high run finishes comfortably. The hard cap is 20 rows and 200 input cells.A list in
input_data needs a table-shaped schema (array root). A single object in input_data takes an object root. Mismatch returns 422 before the run starts.is_active is true, then fetch the result. The loop is in the Quickstart.4
Check the rows
- Five rows back for five in, in order, with
companyanddomainunchanged, and every row researched. A row that comes back with only its input values means the run ran out of budget before reaching it. Fewer rows, extra rows or a swapped domain means a row was lost or a similarly named company crept in. - Fill per field. Count nulls per column. Public fields (
has_pricing_page,ceo_namefor a funded startup) should fill nearly always. A column that is mostly null was not public, or the skill did not say where to look. - Open the
ceo_source_urlfor two rows. The page should name that person at that company. This is the field most prone to cross-attribution.
pre_existing and grades every researched cell by JSON path. Use it to sort which rows to check first, not as a substitute for checking. See Evaluating Results.5
Iterate
Best practices for enrichment
- Two keys per row. Name plus domain. Name alone is how the wrong company gets enriched.
- Rows in
input_data, never in the prompt. The prompt stays one sentence; the rows come back markedpre_existingand untouched. - Batch by what one run finishes, not by the cap. The cap is 20 rows and 200 input cells. What one
highrun finishes is about five rows with six researched fields, or ten rows with two or three. Rows beyond the budget come back with only their input values and the run still sayscompleted. One row per run when fields need deep digging. - Constrain people to the row’s own company. Say it in the skill. Cross-attribution is the most common enrichment error.
- Nullable everything you research; require only identity. A required field the web cannot fill forces an invented value or a dropped row.
- Enums with a
cannot_verifyvalue for judgments. “No” after reading the site and “could not read the site” are different facts. - Say where to look. Own site first, then dated press, then filings. Name the pages (“about, team, pricing, newsroom”).
- Ask for the page URL, not a confidence score.
ceo_source_urlmakes the row auditable. The trust report already grades every path; a self-assessed confidence field duplicates it badly. - Qualifying fields are the fragile ones. Personal emails, mobile numbers, review counts and named decision-makers are rarely on a public page. Ask for the URL of the published contact page instead, and forbid pattern-built emails.
- Reuse the agent. Same agent, next ten rows. The skill and goals are tuned once; consistency across batches comes from running the same agent.
From vague to production-ready
- Vague
- Better
- Production-ready
Troubleshooting
422: input_data is a list ... needs a table output_schema
422: input_data is a list ... needs a table output_schema
A list of rows needs an array root with the row shape in
items. A single object in input_data takes an object root.422: rows > 20 or cells > 200
422: rows > 20 or cells > 200
The batch cap. Rows times fields in the schema must stay under 200, and rows under 20. Split the batch or narrow the schema.
Fewer rows back than sent
Fewer rows back than sent
A row was dropped, usually because a required field could not be filled. Make researched fields nullable and add “one output row per input row” as a goal.
The last rows came back with only the input values
The last rows came back with only the input values
The batch was larger than one run could research at this effort. The fill rate in the trust reasoning shows it (57% on a 10-row run that finished five). Halve the batch, or drop to two or three researched fields per run.
The wrong company's executive
The wrong company's executive
Two-key identification and the person constraint belong in the skill. Smaller batches also reduce cross-attribution.
A column is mostly null
A column is mostly null
Either the value is not public for this segment (private-company revenue, personal emails), or the skill did not say where it is published. Check two rows by hand before changing anything.
Values like 'Not stated publicly' as text
Values like 'Not stated publicly' as text
The absence rule is missing or the field is not nullable. “Return null” in the skill plus
["string", "null"] in the schema.Trust in enrichment runs
Every value carries a claim per JSON path in the trust report:
The run’s overall grade counts only researched values, and a gap the agent could not fill comes back as a cited
null. The grade is computed from fill rate and citation presence, so treat it as a sort key for review, not as verification.
Templates
Read a copied template’s goals and sources before running it.