TL;DR
- You add LeadOcean to Claude Code with one
claude mcp addcommand, then ask for the C-level and VP people at any company domain. - It takes about 10 minutes the first time and about 2 after that.
- A full run spends 12 LeadOcean records: up to 10 for the search and 2 for enriching the people you pick. Counting is free.
Prerequisites
- A LeadOcean account. Start free: no card, 1,000 records one-off, work email required.
- Claude Code installed. The Claude Code MCP docs, September 2026, cover adding remote servers.
- Optional, for the script in Step 6:
curland an API key exported as$LEADOCEAN_API_KEY.
export LEADOCEAN_API_KEY="paste-your-key-here"The MCP steps need no key. The server uses OAuth sign-in. Full setup, including SSH sign-in, is on Connect LeadOcean to Claude Code. The examples use acme.com as a placeholder.
Step 1: Add the LeadOcean server
Add the server over HTTP, then sign in. Claude Code opens your browser for the OAuth step.
claude mcp add --transport http --scope user leadocean https://api.leadocean.io/mcp
claude mcp login leadoceanThe --scope user flag loads the server in every project. Drop it to keep LeadOcean in the current project only. Run claude mcp list to confirm the server is connected.
Do not pass a --header flag. There is no key to paste.
Step 2: Size the decision makers before you pull anyone
Ask for a count first. Counting costs 0 records, so tune the filters as often as you like. Start claude and send this.
Use the leadocean tools only. How many C-Team and VP people in
Sales & Business Development are in the US? Count only. Do not pull anyone.Claude Code asks before it runs a tool for the first time. Check the arguments, then approve. The call looks like this.
{
"jobLevel": ["C-Team", "VP"],
"jobFunction": ["Sales & Business Development"],
"country": ["US"],
"facets": false
}The values are exact strings. If Claude guesses one, tell it to call leadocean_list_enum_values first.
To size the accounts rather than the people, ask for leadocean_count_companies. It is also free, and it breaks the total down by industry, headcount band, HQ country, HQ state and NAICS.
Step 3: Search one company by domain
Now point the same levels at one company. Use the domain, not the company name. A domain matches the employer exactly, while a name matches loosely.
Use the leadocean tools only. Find decision makers at acme.com: C-Team and
VP level people. Call leadocean_search_leads with limit 10. Show title,
level and whether an email is on file. Do not enrich anyone yet.The arguments are flat JSON, and every filter is an array.
{
"domain": ["acme.com"],
"jobLevel": ["C-Team", "VP"],
"limit": 10
}This spends up to 10 records, one per person returned. A small company returns fewer, and you pay only for the rows you get back.
Step 4: Enrich the two people you want
Each search row carries a person_id. Enriching by that id works even when you have no LinkedIn URL. Name the people you want so Claude does not enrich the whole list.
Enrich the CEO and the VP of Sales from that list with leadocean_get_lead
using their person_id. Show the work email and its email_status. Tell me
how many records this step spent.Each enrichment costs 1 record, so this step spends 2. A person we hold nothing for is a miss, and a miss costs nothing on the MCP server. Read email_status before you send anything, because bounced emails are not refunded.
The enriched record also carries career history when we hold it: past roles with titles, employers and dates, plus education and certifications. A VP who joined last month reads differently from one with five years in the seat.
Step 5: Save the run as a slash command
Claude Code reads Markdown files in .claude/commands/ as slash commands. Its slash command docs, October 2026, say commands have merged into skills, and files in .claude/commands/ keep working. $ARGUMENTS holds whatever you type after the command. Save the steps once and re-run them per company.
---
description: C-level and VP contacts at one company, from LeadOcean
argument-hint: [domain]
---
Find decision makers at $ARGUMENTS with the LeadOcean MCP server only.
1. Count C-Team and VP people for the domain. Do not pull anyone yet.
2. Search the same domain with jobLevel C-Team and VP and limit 10.
3. Show a table of title, level and email_status. Mark the likely buyer.
Do not enrich anyone until I name them. Stop after 12 records.Save it as .claude/commands/decision-makers.md, then run /decision-makers acme.com. Claude Code still asks before each tool that spends records.
Step 6: Run the same search from a script
The agent calls the same API you can call yourself. Use the script when you want a file instead of a chat. The headless docs, September 2026, describe claude -p for non-interactive runs, but a plain request needs no agent at all.
curl -s -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"], "jobLevel": ["C-Team", "VP"], "limit": 10}'Enrich one person with the id from a search row.
curl -s -X POST https://api.leadocean.io/v1/people/enrich \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"person_id": "1234567890", "reveal_email": true}'Enrich takes exactly one of linkedin_url, email, phone or person_id. To list everyone we hold at a company, call GET /v1/companies/acme.com/people. It stops at 10,000 rows and bills one record per person returned.
What you get
The count in Step 2 is a live result. We ran the same filters through the free leadocean_count_leads tool on 2026-10-21.
{
"total": 279115,
"totalIsExact": true,
"totalAll": 954471,
"credits": 0,
"defaults": "Counted only addresses worth sending to (emailStatus: verified or catch_all_valid or catch_all)",
"unsupportedFilters": []
}That is 279,115 C-Team and VP sales leaders in the US with a verified, catch_all_valid or catch_all email. It cost 0 records. Everyone we hold for those filters, with or without an email, is totalAll: 954,471.
The company search returns rows in the response shape from the API reference. These are placeholder values, not a real person.
{
"success": true,
"data": [
{
"profile_data": { /* name, title, company for Jane Doe at acme.com */ },
"contact_data": {
"has_email": true,
"has_phone": true,
"email_status": "verified",
"email_type": "work"
},
"meta": { "source_ids": { "person_id": "1234567890" } }
}
],
"meta": { "count": 1, "nextCursor": null }
}Search shows flags such as has_email, not the address. Enrich with reveal_email set to true returns the address and any phone, such as +1 415 555 0133, at no extra record.
The full run is 12 records: 10 for the search and 2 for enriching. That figure comes from the per-tool costs in the LeadOcean MCP docs, September 2026, not from a metered run on a real company.
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| 401 | Missing or wrong x-api-key header on a script call, or the MCP sign-in was not approved. | Check $LEADOCEAN_API_KEY, or run claude mcp login leadocean again. |
| 402 | The 1,000 free records are spent. | Call leadocean_get_account, or move to Solo at $97 a month. |
| 429 | Above the plan rate limit (5 a second on Free, 50 on Solo, 200 on Agency), or a fair-use window reached. | Wait the Retry-After seconds and retry. Add a short delay between calls. |
| Empty results | An enum value is not an exact string, such as VP of Sales for jobLevel. | Call leadocean_list_enum_values and copy the value. Use title for free-text job titles. |
| 404 on enrich | We hold no person for that identifier. | Search by domain first, then enrich by person_id. A 404 costs nothing. |
| Export refused | A bulk pull is past 50,000 rows a request or 500,000 a day. Bulk CSV export is not on Free. | Split the pull into smaller exports across days. Exports start on Solo. |
FAQ
How many decision makers will I find at one company?
It depends on company size. A 10-person startup may return two or three C-level people, and a large company can fill the 10-row limit. Page with cursor for more, and each extra person costs 1 record.
What does it cost past the free plan?
Solo is $97 a month for one person, and Agency is $497 a month for teams. Paid plans have a fair-use pace instead of credits. See pricing.
Do I need an API key for Claude Code?
No. The MCP server uses OAuth sign-in. The REST API uses an x-api-key header. Both draw on the same record balance.
What counts as a decision maker?
Use jobLevel set to C-Team and VP as the base. Add Director for mid-market accounts. Add jobFunction or title when you want one buyer, such as a head of RevOps.
Can I do this in another editor?
Find the decision makers at your next target account, free
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →