You get a shortlist of candidates, with career history and a mailable email status, from one Claude conversation. Claude calls the LeadOcean MCP server at https://api.leadocean.io/mcp. You sign in with OAuth, so no key is pasted. LeadOcean has no sequencer or CRM, so the shortlist stays in the chat or in a CSV.
How it works
- Trigger. In Claude, go to Customize, then Connectors, click "+ Add", then "Add custom connector", and paste
https://api.leadocean.io/mcp. Sign in with OAuth. Claude's docs list custom connectors on Free, Pro, Max, Team and Enterprise, with one custom connector on Free (Claude custom connectors, September 2026). Full steps are on LeadOcean in Claude. - Size the pool. Ask: "How many VPs of Engineering in Canada have a mailable email?" Claude runs
leadocean_count_leads. Counts are free. - Search. Tighten the filters until the pool is reviewable, then ask Claude to run
leadocean_search_leads. It costs 1 record per person returned. - Qualify. For the top rows, Claude runs
leadocean_get_lead. Person enrich returns career history: past roles, education, certifications and awards. Claude compares past titles and dates against your brief, scores each profile out of five with a one-line reason, and writes the shortlist.
Where it goes: the shortlist table lives in the chat. Ask Claude to keep only rows whose email status is verified or catch_all_valid. For a bigger list, ask Claude to run leadocean_export_leads, or use the Exports page in app.leadocean.io and download the CSV.
Configuration
The MCP route needs no key. To run the same steps from a script, use the API with your key:
echo 'Step 1, size the pool (free): count=true goes in the query string'
curl -s "https://api.leadocean.io/v1/people/search?count=true&limit=1" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"jobLevel":["VP"],"jobFunction":["Engineering"],"country":["CA"]}'
echo 'Step 2, search (1 record per person returned)'
curl -s -X POST "https://api.leadocean.io/v1/people/search" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"jobLevel":["VP"],"jobFunction":["Engineering"],"country":["CA"],"limit":25}'
echo 'Step 3, enrich one person by id (career history in resume_data)'
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":"PERSON_ID_FROM_SEARCH","reveal_email":true}'Check enum values with leadocean_list_enum_values first. They are exact strings: Engineering is one of the 22 job functions, VP one of the 6 job levels. For a finer cut, swap jobLevel for seniority, whose values are lowercase (vp, head, director). Add excludeTitle to drop titles such as intern or assistant, and education to require a school or degree.
Field mapping
| LeadOcean field | Shortlist column | Note |
|---|---|---|
contact_current_experiences[] | Current role | Title and employer |
resume_data.experiences[] | Past roles | Title, company name, dates, job level |
resume_data.educations[] | Education | When held |
resume_data.certifications[] | Certifications | When held |
| email status | Mailable? | Read it before you send. No refund for bounces |
contact_phones[].phone | Phone | Only after leadocean_find_phone or enrich |
Past employers carry no company_id yet, so match them by name.
Cost at 10,000 rows
| Item | Cost | Source |
|---|---|---|
| LeadOcean Free | Does not cover it: 1,000 records for life | leadocean.io/pricing |
| LeadOcean Solo | $97 a month. 100k search records every 5 hours, 10k enrichments every 5 hours | leadocean.io/pricing |
| Counts and list sizing | $0 | leadocean.io/pricing |
| Claude usage | Covered by your Claude plan's usage limits, not billed per row | claude.com/pricing |
Searching 10,000 rows and enriching 10,000 people fits inside one Solo window. Do not enrich everyone: count, filter, then enrich the top few hundred. Search rows are a thin profile with no contact points, which is often enough to cut the list before you enrich. A person we hold nothing for costs nothing.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Claude cannot see the tools | Connector not signed in | Reconnect and finish the OAuth sign-in |
| 402 response | Free records spent | Upgrade at /pricing |
| Count looks too high | Filtered on email presence, not status | Filter by emailStatus, then recount |
| Search stops at 10,000 rows | meta.depthCapped is true | Narrow the filters by country or level |
| 429 response | Over the plan's rate limit (5 a second on Free, 50 on Solo) | Wait for Retry-After, then ask Claude for smaller batches |
| Empty search on a job function | Value not an exact enum string | Look it up with leadocean_list_enum_values and retry |
FAQ
Does Claude need my API key?
No. The MCP server uses OAuth 2.1 sign-in. Use a key only for scripts.
Can Claude contact the candidates?
No. LeadOcean returns data only. Send from your own tool.
How many tools does the server expose?
13, including the free leadocean_count_companies. See /mcp/claude.
Where can I read more?
Go deeper in how to automate candidate sourcing with Claude Code and multi-layer candidate filtering with Claude. Compare plans on /pricing.
Source your first shortlist from Claude
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →