Build the account list
Company search that writes rows into a real table
A company search is worth little when the output is a download. Here the result set is a table you keep: filters are recorded, rows carry the lane that found them, and the next pass runs on the same data.
Every company search starts as a guess. You name a size band, a geography, and an industry, look at the first page, and realize the filter you actually wanted is not one the search box offers. What makes a search tool useful is how cheaply you can be wrong twice.
Planning a query costs nothing here and calls no provider. You see which lanes could answer it and what a live run would draw, and only then does the run write rows into a table you named. Those rows are typed, collapsed on a key you choose, and stamped with the search that produced them.
Example searches
Ask for it the way you'd say it
Every search below runs on the same hosted Tables, with the cost previewed before anything is spent.
Firmographic first pass
software companies in Germany and the Netherlands with 20 to 200 employees that have raised a round
The plan step names which lanes can serve those filters before a paid call is made.
Companies by what they run
show me companies whose job posts mention kubernetes and who sell into large enterprises
Job-post text is a sharper stack filter than a category tag, because a human wrote it last month.
A segment no industry tag carries
find companies that run paid onboarding for their own customers, whatever they call it on their site
A description-shaped lane reaches segments a category filter cannot express, and those rows enrich like any other.
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.
Plan the query, then pay for it
A segment is checked on filters and expected shape before a single provider call is billed.
- 1Resolve the stored ICP so the filters start from your own definition instead of a blank form.
- 2Plan the search, read the lanes and the estimate, then run it into a table you name.
oxygen companies search planOne segment asked of several lanes
Coverage improves because the same filters are put to more than one kind of source.
- 1Run the firmographic lane, then a hiring lane and a description lane across the same filters.
- 2Collapse on domain, keep the union, and promote only the accounts you intend to work.
oxygen tables dedupeKeep the segment alive
Companies that newly match the definition arrive on a schedule instead of in a quarterly rebuild.
- 1Bind the search to the table as a feed, with a cadence and a per-cycle ceiling agreed up front.
- 2New rows land as additions, and a company whose values moved shows as a changed cell with the previous run still on it.
oxygen feeds bind
Capabilities
What you get
A plan step that costs nothing
Planning resolves your filters against the available lanes and returns an estimate. Nothing is called and nothing is drawn, so you can iterate freely.
Rows with a source on them
Every row records the lane that produced it and when. Where two sources disagree, the disagreement is visible rather than quietly settled in the background.
Deduplication you control
A search upserts on its intent's key, the domain for companies, so a rerun collapses onto rows you already hold. A different key is a standing setting on the table, and a cleanup after the fact is one more command.
Filters past the category tag
Headcount, funding, and location are the easy part. Hiring text, detected technology, and how a company describes itself are where a segment gets specific.
Boundaries
What Tables does not own
Company search is Tables doing the work of building a set. The canonical company object, its lifecycle, and its activity timeline belong to Records, and a sourced row becomes truth only when you promote it. Nothing here sends anything; that is Sequences.
Data sources
What the data actually comes from
Every value lands with its provider and cost recorded on the cell.

TheirStack
Job-post search, the cleanest way to filter companies by what they are building and staffing right now.

People Data Labs
Firmographic breadth for the size, industry, and geography pass that opens most segments.

Exa
Semantic company search for a segment you can describe but not filter, which is most of the interesting ones.

Crustdata
Free label and enum resolution before a paid page, so a filter value is the one the provider recognizes rather than a guess.
Run these on Oxygen's managed credits, or connect your own provider keys and pay the vendor directly — the same columns, the same runs, the same provenance either way. See every integration.
Limits
Where this stops
- Sources disagree about headcount and category more often than anyone admits. Treat one field as an estimate and let a second lane settle the rows where it changes a decision.
FAQ
Questions people ask first
Does planning a search cost credits?
What happens when I rerun the same search?
Can I search by technology or by hiring?
How do these rows reach my CRM?
Why do two sources describe one company differently?
Is there a ceiling on how many companies a table holds?
Run company search that writes rows into a real table on 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.