Fill in the blanks
B2B data enrichment that runs where the work happens
Enrichment goes wrong when it happens somewhere else. Run it as columns on the rows you are already working and the answer, its source, and its cost stay attached to what you act on.
Enrichment is usually bought as a bulk job: upload a file, wait, download a wider file, and hope the mapping survived the round trip. What comes back is a snapshot with no memory of which vendor said what, which is why nobody can ever answer where a wrong field came from.
Here enrichment is a column. Each cell records the provider that answered, the inputs it was given, the outputs it produced, the cost, and any error. Dependencies between columns are explicit, so a company lookup feeding a contact lookup runs in that order without anyone sequencing it by hand.
Example searches
Ask for it the way you'd say it
Each example is a request in plain words, with what it returns underneath.
Widen an account list
add headcount, funding stage, and country to every company sitting in this table
The company lookup fills headcount and country, a funding lookup fills the stage, and each cell names the lane that filled it.
Standing fill on new records
whenever a new company record appears, fill in its firmographics automatically
The saved configuration is the standing permission, so new records arrive filled rather than queued.
Fill what came back empty
run the company lookup again on the rows that came back blank and leave the filled ones alone
A scheduled refresh re-runs only empty or failed cells unless you force a full pass, so rows that already hold an answer are not billed again.
Plays
Three motions you can run this week
Each one is a chain of OXYGEN primitives: the same hosted objects your workspace already has, composed.
Enrich once, then promote
Fields you decide to trust become part of the account record with the run that produced them.
- 1Run the enrichment columns on the working table and inspect a sample of the cells by hand.
- 2Promote the fields you accept. The ones you reject stay in the table rather than in your CRM.
oxygen enrich-column runA standing rule for new records
Records created by a form, an import, or a webhook get filled without anyone remembering to.
- 1Enable enrichment on the object and pick which named enrichments run, such as company details or funding history.
- 2Read the backfill preview first, then let records enrich as they arrive from then on.
oxygen crm enrichment enableRefresh a segment on a schedule
A market map stays roughly current without the quarterly rebuild nobody has time for.
- 1Schedule the column as a full refresh with --force, since a schedule fills only empty or failed cells by default.
- 2Cap each delivery, then promote only the differences that changed the account's shape.
oxygen tables schedule set
Capabilities
What you get
Columns, not a bulk upload
Enrichment runs where the rows already live. No export, no re-import, and no mapping step that silently drops a field on the way back in.
Dependencies that resolve themselves
A column that reads another column runs after it. The order comes from the references you wrote, not from somebody remembering the sequence.
Every cell explains itself
Provider, inputs, outputs, retries, and errors open from the cell, and its cost is one command away. Tracing a wrong value takes a click, not an argument.
Your own keys where you have them
Managed access is the default lane. Where you already pay a vendor directly, connect that key on the $99 plan or above. Your vendor bills the call, and OXYGEN adds a small platform fee per call.
Boundaries
What Tables does not own
Enrichment is Tables work. The enriched row is a candidate until you promote it onto Records, which owns canonical attributes and their merge history. Scheduling a recurring refresh across several steps belongs to Workflows.
Data sources
Data sources and CRM connections
People Data LabsThe second lane for funding and revenue fields, tried when the first lane returns nothing, so those blanks get another chance.
CrustdataOn your own Crustdata key, headcount trend, funding, and job-posting context, the fields that turn a static row into a moving one.
Blitz APICompany and profile detail from LinkedIn, and the head lane when a row needs a work email next.
- LeadMagic
A fallback lane for funding, tech stack, and hiring fields, and for work email and mobile, tried when the earlier lanes come back empty.
Professional Network Data
OXYGEN's public LinkedIn data lane for public profile and company detail without touching a connected account.
Use managed credits where available, or connect a supported provider key on an eligible paid plan. Your provider bills its calls; OXYGEN adds a per-call platform fee. Signed-in CRM connections such as HubSpot have no per-call fee. Connected sending accounts reserve monthly credits. See pricing and supported integrations.
Limits
Where this stops
- Every provider sounds confident and some of them are wrong. Sample a dozen rows by hand before promoting a field across a whole table, headcount and revenue bands most of all.
- Enrichment only surfaces what a source already holds. A company nobody has indexed stays mostly empty however many lanes you stack behind it.
FAQ
Questions people ask first
Is this a bulk upload job?
How do I know which provider filled a cell?
Can enrichment run on new records automatically?
What stops a run from enriching everything?
Do enriched fields overwrite what I already have?
What does enrichment cost?
Try Tables in your own workspace
Sign up, get a working workspace with a one-time credit grant, and run the first play from the web app, the CLI, or your AI assistant over MCP.