Pre-Black Friday: 20% off, for as long as you stayEARLYBFon Solo and AgencyEnds Nov 28Start free

How-to guide

How to Find Decision Makers at a Company (in Claude)

Add one connector URL, then ask Claude for the VPs and C-level at a domain. Check the roster for free, pull ten rows, enrich the three you want.

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

TL;DR

  • Claude reaches LeadOcean through one custom connector URL. You give it a company domain and a seniority filter, and it returns the people who hold budget.
  • It takes about 15 minutes. The example spends 13 of your 1,000 free records: 10 for the roster search and 3 for work emails.
  • Counts and filter lookups cost 0 records. Only people you receive count, one record each.

Prerequisites

  • A LeadOcean account from app.leadocean.io. The free plan has no card, 1,000 records one-off, and needs a work email.
  • A Claude account that can add a custom connector. Per the Claude docs, October 2026, that covers Free, Pro, Max, Team and Enterprise. Free allows one custom connector, and Team and Enterprise limit who can add one.
  • Optional, for the REST checks: curl and a key in your shell as $LEADOCEAN_API_KEY. The chat steps need no key.
bash
export LEADOCEAN_API_KEY="paste-your-key-here"

Step 1: Add LeadOcean as a custom connector

Claude connects from Anthropic's cloud, so you add a public URL and sign in with OAuth. No key is pasted. On Pro and Max, go to Customize, then Connectors, then "+ Add", then "Add custom connector".

text
Name: LeadOcean
URL:  https://api.leadocean.io/mcp
Request headers: leave empty

Click "Continue", review the authentication settings, then "Add". Sign in on the LeadOcean page and approve. Team and Enterprise steps are on Connect LeadOcean to Claude.

In a new chat, click "+" at the lower left, then "Connectors", and switch LeadOcean on. Claude asks before it runs a tool.

Step 2: Define "decision maker" with exact values

A decision maker is a filter, not a guess. Pick the seniority bands and the department, and let Claude confirm the exact strings first. A wrong string returns nothing.

text
Use leadocean_list_enum_values for job_level and for job_function. Show me the exact
values. I want C-level and VP people in Sales & Business Development. Do not search yet.

The jobLevel values are C-Team, VP, Director, Manager, Staff and Other. For a finer cut, seniority takes lowercase bands such as c_suite, vp and director. Pick one of the two, not both.

Step 3: Size the buyer pool for free

Count before you pull anyone. The count tool takes the same filters as search and spends nothing. This sizes the pool of buyers across companies like yours, so you know the role filter is not empty.

text
Use leadocean_count_leads with jobLevel ["C-Team","VP"], jobFunction ["Sales & Business
Development"], country ["US"], employeeRange ["201-500"], facets false. Report the
total and say which email statuses it counted. Do not call a tool that spends records.

Claude reports the total and notes that the default counts verified, catch_all_valid and catch_all addresses only. That is a mailable count, not everyone we hold. Narrow one filter at a time if the number is wrong for your team.

Step 4: Pull the roster at one company

Now point the same filters at a single domain. Use the domain filter with a limit of 10. A search returns thin records: name, headline, current role, company and location, plus email flags. It does not return addresses.

text
Use leadocean_search_leads with domain ["acme.com"], jobLevel ["C-Team","VP"], limit 10.
Show a table of name, job title and whether an email is on file. Rank the rows by who
most likely signs off on a data purchase. Tell me the record cost before you run it.

Each person returned costs one record, so this step spends up to 10. If acme.com has four VPs and C-level on file, you pay for four. Claude should read the flags and stop there.

The REST route is the same search. The body is flat JSON and every filter is an array.

bash
curl -s https://api.leadocean.io/v1/people/search \
  -H "x-api-key: $LEADOCEAN_API_KEY" -H "content-type: application/json" \
  -d '{
    "domain": ["acme.com"],
    "jobLevel": ["C-Team", "VP"],
    "limit": 10
  }' | jq '.data[] | {person: .meta.source_ids.person_id, email: .contact_data.has_email}'

To list everyone we hold at a company instead, call GET /v1/companies/acme.com/people. It bills one record per person returned and stops at 10,000 rows. Filter by level first on a large company.

Step 5: Enrich the three you will contact

Enrich only the people worth a message. leadocean_get_lead accepts the person_id a search row carries at meta.source_ids.person_id. Search publishes email flags, not addresses, so enrich by the person_id that search returned. Set reveal_email to true to get the address. It costs no extra record.

text
For the three people you ranked highest, use leadocean_get_lead with their person ids
and reveal the email. Show name, title, work email and email_status. Flag any email_status
other than verified. Do not enrich anyone else.

The REST call takes exactly one of linkedin_url, email, phone or person_id.

bash
curl -s https://api.leadocean.io/v1/people/enrich \
  -H "x-api-key: $LEADOCEAN_API_KEY" -H "content-type: application/json" \
  -d '{ "person_id": "<person id from the search row>", "reveal_email": true }' \
  | jq '.data.contact_data | {has_email, email_status, contact_emails}'

A person we hold nothing for is a 404 and costs nothing. Read email_status before you send. Bounced emails are not refunded.

What you get

The count in Step 3 is a real run. We ran it on 2026-10-01 with leadocean_count_leads, which spends 0 records, and it returned this.

json
{
  "total": 22662,
  "totalIsExact": true,
  "credits": 0,
  "defaults": "Counted only addresses worth sending to (emailStatus: verified or catch_all_valid or catch_all), which is this tool's default.",
  "unsupportedFilters": []
}

So 22,662 C-Team and VP sales leaders at US companies with 201-500 staff had a verified, catch_all_valid or catch_all email on 2026-10-01. Your number will differ as the data changes.

The roster search returns rows like this. This is the response shape from the API reference, with placeholder values.

json
{
  "success": true,
  "data": [
    {
      "profile_data": { "...": "name, headline, current role, company, location" },
      "contact_data": { "has_email": true, "has_phone": false, "email_status": "verified" },
      "meta": { "source_ids": { "person_id": "<person id>" } }
    }
  ],
  "meta": { "count": 1, "nextCursor": null }
}

The enrich response has the same shape. With reveal_email true, contact_data also carries contact_emails and contact_phones. Total spend for the run is 10 plus 3, so 13 records at most.

Troubleshooting

ErrorCauseFix
Connector shows, but no tools appearThe sign-in window closed before approval, or the connector is off in this chatClick "Connect" again and approve. Then switch LeadOcean on under "+", then "Connectors".
401Missing, wrong or revoked key on a REST callRe-copy the key from app.leadocean.io and export $LEADOCEAN_API_KEY again.
429Above your plan's rate (5 requests a second on Free, 200 on Agency)Wait the Retry-After seconds and send full pages of 100 instead of many small calls.
402Free plan: the 1,000 records are spentAsk Claude to read the account, or move to a paid plan. Free records do not reset.
Empty results for a real companyA wrong enum value such as jobLevel: "Executive", or the domain is written with www.Use leadocean_list_enum_values for the exact string and pass the bare domain, such as acme.com.
400 "Invalid cursor" on a roster walkThe cursor was edited or came from a different searchRestart the query. Pass back exactly the meta.nextCursor string, unchanged.

FAQ

How many records does it cost to find decision makers at one company?

One record per person returned. A roster of four VPs and C-level costs four, and each enrichment costs one more. Counts, filter lookups and enum lookups are free.

Does LeadOcean tell me who the budget owner is?

No. It filters by jobLevel, seniority, jobFunction and title, so you decide who counts. Ask Claude to rank the rows, then check the ranking yourself.

Does Claude see my API key?

Not through the connector. The MCP server uses OAuth sign-in and you paste no key into the chat. The optional REST steps read $LEADOCEAN_API_KEY from your own shell.

Can I do this in a coding tool instead?

Yes. The same MCP URL works elsewhere. See Claude Code, Windsurf and VS Code. Free is enough for this run. Paid plans start at $97 a month for Solo; see pricing.

Find the decision makers at your next account, free

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

Get your free API key →