AI Adoption GuideGeneralSelect
Data enrichment
AI data enrichment adds generated classifications, summaries, extracted fields, cleanup, or missing context to spreadsheet rows when manual review is slowing down the work.
By Don, DoneThat’s AI coach · updated
Put the generated value in a new column, with a cite
The job is to add one extra field per row that a person can check: a classification, a short summary, an extracted date or amount, a cleaned format, or context buried in a notes cell. The extra field must point back to the source cell or attached text that supports it. If the source for that field is blank, the extra field stays blank.
That is quality enrichment, not a rewrite of the row. The vendor name, website, invoice ID, and original notes stay exactly as they were. You are not researching a better company name, guessing a domain for an empty website cell, or minting an industry label because the closed list feels coarse.
ChatGPT, Claude, Excel Copilot, and Google Sheets can all propose those extra fields. Treat them as one class of tools: they read nearby cells or pasted text and emit language. A chat window, an in-sheet side panel, and a formula-like prompt change the ergonomics. They do not change the contract. The contract is a new column, a cite, blanks left blank, and a person who accepts the values before anything downstream trusts them.
If you let the model overwrite source cells, you lose the audit trail in a single paste. A generated domain in the Website column looks like a researched URL. A polished legal name in the Vendor column looks like the official join key. Both are invented records dressed as cleanup.
Lock source columns before the model writes anything
Lock means the model may read the source columns and must not write them. Name the readable columns in the prompt (Vendor, Website, Notes, Attachment) and the writable columns (Industry (AI), Notes summary (AI), Cite). If your sheet cannot enforce cell protection, duplicate the tab first and treat the originals as read-only by convention.
Write the output shape before you generate. Three columns cover most select-stage work: the enriched value, a cite (column letter plus a short quote), and later a Reviewed flag that a person sets. Do not dump a paragraph into the value cell. A paragraph is hard to accept, hard to filter, and easy to treat as finished copy.
Cites should be cheap to check. "Notes, refrigerated last-mile for two grocery banners" is checkable in seconds. "Based on the overall context of the row" is not a cite. If the model cannot quote a span, it does not have support. Leave the value blank.
When the same lock-and-cite pattern repeats, stop retyping it into a fresh chat. AI Skills are the place for "read only these columns, write only these columns, quote the span." If you encode that contract as a small script that walks the sheet, that is vibe scripting, not a one-off conversation. Either way, the source columns stay frozen.
Blank sources stay blank, and labels stay on the list
Empty stays empty. If Website is blank, the enrichment must not fill it. A plausible domain is still a fabricated identifier. Mail merges, crawlers, and match keys will treat it as real. Retracting a fake URL costs more than leaving the cell blank.
The same rule applies to names. Do not invent a company name. If the name cell is empty, the enriched name is empty. A guess like "likely the parent is Acme Holdings" will be read as a fact.
Categories fail a second way: invention. If Industry must be one of Logistics, Software, Professional services, Other, or blank, then "cold-chain grocery enablement" is wrong even when it is descriptively true. Pivots and joins need the closed list. Instruct the model to pick from the list or leave blank. Use Other only when the notes clearly describe a business that is none of the named buckets. Use blank when the notes are too thin to support any bucket.
Put the rules in the prompt as constraints:
- Read only the named source columns and attached text.
- If the source for this field is blank or too thin, output blank.
- Cite the cell and quote the span you used.
- Do not add a website, legal name, or category that is not in the source or the allowed list.
- Do not use the public web to complete the row unless a person asked for a separate research pass, in a separate column, with a separate accept step.
A research pass is not enrichment. Mixing them is how blank domains get filled.
Work one vendor-intake row by the rules
Row 18 is a vendor intake line.
- Vendor: Northwind Fleet
- Website: (blank)
- Notes: They handle refrigerated last-mile for two grocery banners. Contract is month-to-month. Contact is the ops manager we met on Tuesday. No public site mentioned.
Ask for Industry from {Logistics, Software, Professional services, Other, blank}, a one-sentence notes summary, and a cite for each filled field.
A valid result:
- Industry: Logistics. Cite: Notes, "refrigerated last-mile for two grocery banners"
- Notes summary: Refrigerated last-mile grocery work on a month-to-month contract. Cite: Notes
- Website stays blank. Notes never named a domain, and the Website cell is empty.
Invalid on the same row:
- Website filled with northwindfleet.com, or any look-alike, because they must have a site
- Vendor rewritten to Northwind Fleet LLC because that looks official
- Industry set to cold-chain grocery logistics SaaS, when Software is a separate allowed value and the notes never described software
- A summary that adds headcount, revenue, or a headquarters city the notes do not contain
That row is the whole method. A blank domain stays blank. A category comes from the list or not at all. Apply the same pattern to extracted fields: a date buried in notes, a contact role, a contract term. Extract only what is there. Cite it. Leave the rest empty.
If you are cleaning a chat paste of messy rows, AI assistants are a reasonable surface. Paste the source columns, demand the output shape, and paste results into new columns. Do not paste back into Vendor or Website.
A person accepts the column before anything else reads it
The AI column is a junior analyst's notes until someone accepts it. Acceptance is a pass over the new fields: check cites against the quoted cells, scan for filled blanks, reject invented categories, then copy accepted values into a production column or set a Reviewed flag. Unreviewed cells must not feed a dashboard, a CRM import, or an automation.
Treating the generated column as production data is the failure that scales. One invented domain is an embarrassment. A full import of invented domains is a cleanup project. The model will not tell you which rows it guessed. Review is the only filter.
Do not point workflow automation at the raw AI column. Automations will send the invented domain, join on the invented legal name, and file the invented category. Enrichment sits in the select stage: you are choosing a quality field, not shipping a pipeline. Production reads only accepted cells.
Make review cheap so it actually happens. Keep values short. Keep cites next to the value. Filter for rows where the source website is blank and the AI website is not; those are defects. Filter for Industry values off the allowed list; those are defects. Reject any value whose cite cannot be traced to a source cell or attached text, even when it sounds right. Sounding right is how blank websites get domains.
When the enrichment is weekly and the rules are stable, reuse the skill or the script. Keep the lock. Keep the human accept. Filling a column quickly does not make the tool a system of record.
Is this worth automating for you?
Whether this pays back depends on how much time it takes your team today. Most teams estimate that from memory, and the estimate is usually wrong in one direction or the other.
DoneThat reconstructs where the time actually went, with no timers to forget, so you can measure the baseline before committing to a project and check the gain afterward.
Measure the baseline first