Contacts per account
People search that returns contacts you can act on
A person row without a channel is trivia. People search here returns the individuals at an account, keeps them attached to it, and leaves finding an email or a mobile as its own deliberate step.
Prospecting usually breaks at the join. Companies come from one tool, people from a second, contact details from a third, and the afternoon goes on matching them back together in a sheet where nobody can tell afterwards which source claimed what.
A search here writes person rows that stay attached to the account row they came from. Seniority and function are filters rather than cleanup you do later, and a public profile can be read without your connected account touching it. Channels stay a separate column because finding who works somewhere is cheap and reaching them is not.
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.
The committee, not one name
for each account here find the VP of engineering, the head of platform, and whoever owns security
Three person rows attach to the same account, so a company never fragments into unrelated leads.
Seniority without title guesswork
people at director level or above in revenue operations at companies with 50 to 300 staff
Seniority is a filter rather than a string match, which keeps an odd title at a small company in.
From profile URLs you already hold
I have 300 linkedin profile urls from an event list, turn them into rows with title and company
Public profile reads run cookieless, so research never eats the quota a sending account needs.
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.
One buying committee per account
Every target account ends with the two or three people who decide, linked to the company row.
- 1Start from the account list, then run the people search per row with your seniority filters.
- 2Resolve a channel for the shortlist only, then enroll with the account as the shared thread.
oxygen people search runResearch without spending a seat
Public profile data lands in the table with no connected LinkedIn account involved at any point.
- 1Point the cookieless public lane at the profile URLs or the names you already hold.
- 2Promote the people who matter onto contact records and leave the remainder in the table.
oxygen tables promoteCatch the job changes before a bounce does
Contacts who moved employer surface as rows worth revisiting rather than as bounces found next quarter.
- 1Run the per-row job-change check across the contacts you sell to; it bills on a hit and reads best from a profile URL plus a domain.
- 2The differences land as cells on the row, so you update only the records whose employer really moved.
oxygen columns run
Capabilities
What you get
People stay attached to accounts
A person row keeps its link to the company it was found at. That link lets you work one account with three contacts instead of chasing three strangers who share a domain.
Seniority as a real filter
Search by level and function rather than by exact title strings, so an unusual title at a twelve-person company still lands where you would expect to find it.
Public research with no account attached
Reading public profiles runs on a cookieless lane. Your connected account is kept for messages you intend to send, not spent on research volume.
Channels priced on their own
Finding a person and reaching them are different costs. Keeping them apart lets you search widely and pay only to open a channel to the shortlist.
Boundaries
What Tables does not own
This is Tables sourcing people into a working set. The contact record, its merge lineage, and its activity timeline belong to Records. Sending anything to someone you found, including a first LinkedIn message, belongs to Sequences rather than here.
Data sources
What the data actually comes from
Every value lands with its provider and cost recorded on the cell.

Apollo
Runs managed on our key by default and draws Oxygen credits; connect your own Apollo key on a paid plan and the same lane runs on your Apollo quota.

People Data Labs
Person records at scale for the broad pass where title and seniority are the filters doing the work.
LinkedIn Scraper
The cookieless LinkedIn Scraper reads public profiles and posts without consuming a connected account.

ContactOut
Contact lookup from a profile, for rows where the person is identified but no channel is resolved yet.
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
- Seniority is inferred from titles, and titles overstate and understate in both directions at small companies. Read the shortlist yourself before a founder-level send goes out.
FAQ
Questions people ask first
Does this use my connected LinkedIn account?
Can I search inside accounts I already have?
Does a person row arrive with an email?
What stops one account becoming five duplicate leads?
How current is the employer shown on a profile?
Can I bring my own provider key?
Run people search that returns contacts you can act on 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.