Lead source

Find people at a company

Filter on domain, companyName or companyLinkedin, then count the people you can reach. Sizing is free.

Get your free API key →Free to start. No credit card. 1,000 records to spend whenever you like.

Filter on domain, companyName or companyLinkedin, then count the people you can reach. Sizing is free.

Use domain when you know the company. It is the tightest of the three. Add jobLevel, jobFunction or title to reach one buyer.

The filter

FilterTypeExample valuesNote
domainarray of strings["stripe.com"]Company website domain. Exact company, no look-alikes.
companyNamearray of strings["Shopify"]Name keywords, not an exact match. Wider than domain.
companyLinkedinarray of strings["https://www.linkedin.com/company/stripe"]Company LinkedIn URL. Use it when you hold the page, not the domain.

None of the three is a closed list, so there is no enum to resolve. The filters that narrow the people are closed lists: jobLevel takes C-Team, VP, Director, Manager, Staff or Other. jobFunction takes strings like Sales & Business Development. Check them with leadocean_list_enum_values.

How many you can reach

Four live counts from leadocean_count_leads, run on 2026-10-01. Each count is mailable people: verified, catch_all_valid or catch_all email, the tool's default. It spent no records.

FiltersMailable people
domain stripe.com10,301
domain stripe.com, jobFunction Sales & Business Development, jobLevel VP and Director47
domain shopify.com, jobLevel C-Team211
companyName Shopify, jobLevel C-Team764

The last two differ because companyName matches name keywords. domain stays on one company. Use domain for an account list.

Run it from an AI agent

Connect the MCP server at https://api.leadocean.io/mcp (OAuth sign-in, no key pasted), then ask in plain words.

Size the VPs and directors in sales at acme.com, then show me 25 of them.

The agent counts first with the free tool, then calls leadocean_search_leads with this:

json
{
  "domain": ["acme.com"],
  "jobFunction": ["Sales & Business Development"],
  "jobLevel": ["VP", "Director"],
  "limit": 25
}

The search costs 1 record per person returned. The plain roster of one company is also available as GET /v1/companies/{domain}/people. See list the employees of a company.

Run it with the API

One flat JSON body to POST /v1/people/search. Filters are arrays of strings.

bash
curl -X POST "https://api.leadocean.io/v1/people/search" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": ["acme.com"],
    "jobFunction": ["Sales & Business Development"],
    "jobLevel": ["VP", "Director"],
    "limit": 25
  }'

For the free sizing call, put count=true in the URL (not the body) and set limit to 1.

bash
curl -X POST "https://api.leadocean.io/v1/people/search?count=true" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "domain": ["acme.com"],
    "emailStatus": ["verified", "catch_all_valid", "catch_all"],
    "limit": 1
  }'

data comes back empty and meta.countOnly is true. meta.total stops at 100,000 on the REST API.

Each row in a real search is a thin person record. The values below are placeholders, not a captured response.

FieldPlaceholder
contact_data.contact_current_experiences[]job title "VP Sales", domain "acme.com"
contact_data.has_emailtrue
contact_data.email_status"verified"
contact_data.email_type"work"
meta.source_ids.person_id"1234567890"

Send a person_id to enrich that person when you want the address.

Export the list

POST /v1/exports takes the same filters inside a filters object. One export is up to 50,000 rows, and an account can export 500,000 rows a day.

bash
curl -X POST "https://api.leadocean.io/v1/exports" \
  -H "x-api-key: $LEADOCEAN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "acme-sales-leaders",
    "filters": {
      "domain": ["acme.com"],
      "jobFunction": ["Sales & Business Development"],
      "jobLevel": ["VP", "Director"]
    },
    "limit": 500,
    "preset": "search"
  }'

Poll GET /v1/exports/{id}, then download. Prefer clicking? The Exports page in the app at app.leadocean.io has the filter builder, a column picker, the record price before you start, and a CSV download.

Combine it

  • Pass several domains in one domain array to cover an account list, then add jobLevel to keep decision makers. See the decision maker mapper skill.
  • Add title (for example ["Head of Sales"]) or seniority to reach one role. Wrap a title in brackets for an exact match.
  • Add emailType work and emailStatus verified to keep only deliverable work addresses.

Other ways to build a list are on the lead sources hub. To search without naming a company, see find people, find companies and find new companies.

FAQ

Do I use domain or company name?

Use domain when you have the website. Use companyName when you only have a name and can accept extra matches. companyLinkedin fits lists exported from LinkedIn.

How many people can I get from one company?

The Stripe count above is 10,301 mailable people. A roster walk stops at 10,000 rows. Narrow with jobLevel or jobFunction and run smaller searches.

Does it return emails?

A search returns a thin record with has_email and email_status. Enrich a person by person_id to get the address. reveal_email adds no extra record.

What does it cost?

Counting is free, as are list_filters and list_enum_values. A search costs 1 record per person returned. The free plan has 1,000 records, one-off, no card. Pro is $499 a month. See pricing.

Size the people at your target accounts for free

Free to start. No credit card. 1,000 records to spend whenever you like.

Get your free API key →