Claude enrichment means Claude calls a data source for you: you give it a LinkedIn URL, it returns the email, status, phone and career history that source holds. Claude has no contact data of its own. You need to attach a source, and an MCP server is the shortest route.
This guide uses the LeadOcean MCP server. It takes about 15 minutes and spends 3 records on the test.
TL;DR
- Takes about 15 minutes: 5 to connect, 5 to size a list for free, 5 to enrich three people.
- Spends 1 record per matched person. Counts, filter lookups and a person we hold nothing for cost 0.
- Past about 25 people, stop pasting prompts and run the same call from a script (Step 4).
Prerequisites
- A LeadOcean account. Start free: no card, 1,000 records, one-off.
- A Claude account that can add a custom connector. The Claude connector docs, October 2026, describe the steps.
- For Step 4 only: an API key from the app, saved as
$LEADOCEAN_API_KEY, pluscurlandjq.
Step 1: Connect the LeadOcean MCP server
Add https://api.leadocean.io/mcp as a custom connector and sign in with OAuth. No key is pasted.
Customize > Connectors > + Add > Add custom connector
Name: LeadOcean
URL: https://api.leadocean.io/mcpThe server exposes 13 tools. Seven are free: leadocean_count_leads, leadocean_count_companies, leadocean_list_filters, leadocean_list_enum_values, leadocean_get_account, leadocean_get_export and leadocean_list_exports. The full click path is on the Claude setup page.
Step 2: Size the list before you spend a record
Ask Claude for a count first. It costs nothing and tells you whether the filters are worth enriching.
Using LeadOcean, count VPs in Sales & Business Development located in Canada.
Do not search for anyone. Say what the count includes.Claude calls leadocean_count_leads with jobLevel, jobFunction and country. Filter values are exact strings, so Claude checks them with leadocean_list_enum_values when it is unsure. For a company list, leadocean_count_companies does the same job for free.
Step 3: Enrich three people in chat
Pick three LinkedIn URLs and cap the run. The cap keeps the spend visible.
Enrich these 3 people with leadocean_get_lead using reveal_email true:
https://www.linkedin.com/in/janedoe-example
https://www.linkedin.com/in/johnroe-example
https://www.linkedin.com/in/sampleperson-example
Return a table: name, title, company, email, email_status, phone.
If someone is not found, write "not found". Do not guess an address.Each found person costs 1 record. A person we hold nothing for costs 0, the same as a REST 404. Enrichment also returns career history: past roles, education, certifications and awards. Past employers carry no company_id yet.
Read email_status before you send. LeadOcean gives no refund for bounced emails.
Step 4: Script it past 25 people
The same lookup over REST is POST /v1/people/enrich. It takes exactly one of linkedin_url, email, phone or person_id.
curl -s -X POST https://api.leadocean.io/v1/people/enrich \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"linkedin_url":"https://www.linkedin.com/in/janedoe-example","reveal_email":true}' |
jq '{email: .data.contact_data.contact_emails[0].email,
status: .data.contact_data.email_status,
phone: .data.contact_data.contact_phones[0].phone}'There is no name plus domain lookup. To start from a company, search by domain, then enrich by person_id. For a whole list, POST /v1/exports writes up to 50,000 rows a request. Bulk export is not on Free.
What you get
Step 2 returned this on 2026-10-21 (leadocean_count_leads with its default email condition, so total is the mailable audience):
{"total":5574,"totalIsExact":true,"totalAll":18800,"distinctCompanies":3873,"credits":0}The count covers people whose best email is verified, catch_all_valid or catch_all. Without the email condition the same filters match 18,800.
Steps 3 and 4 return one record per matched person. This is the response shape from the API reference, October 2026, with placeholder values:
{
"success": true,
"data": {
"profile_data": { "...": "name, title, company" },
"contact_data": {
"has_email": true,
"has_phone": true,
"email_status": "verified",
"contact_emails": [{ "email": "jane.doe@acme.com", "type": "work", "status": "verified" }],
"contact_phones": [{ "phone": "+14155550133", "type": "mobile" }]
}
}
}Without reveal_email, the address arrays are absent. has_email and has_phone still say whether a value exists.
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| 401 | The x-api-key header is missing or wrong. | Copy a fresh key from the app and re-export $LEADOCEAN_API_KEY. |
| 402 | The 1,000 free records are spent. | Check GET /v1/account, or move to Solo at $97 a month. |
| 404 | We hold nothing for that identifier. | Nothing to fix. It costs 0 records. Try the email or person_id. |
| 429 | Above your plan's rate: 5 requests a second on Free, 200 on Agency. | Wait for Retry-After and retry. |
| Empty results | A filter value is not an exact enum string, such as Vice President for VP. | Run leadocean_list_enum_values and use the string it returns. |
| Export refused | One export is capped at 50,000 rows, and an account at 500,000 rows a day. | Split the job across requests and days, or narrow the filters. |
FAQ
Can Claude enrich contacts without an MCP server?
No. Claude does not hold contact data. It needs a source such as the LeadOcean MCP server or an API script.
How many records does the test use?
Up to 3. Each matched person costs 1 record. A person we hold nothing for costs 0.
Does it work on the free plan?
Yes. Free keys get search and enrich inside the 1,000 one-off records. The MCP server is the same one paid plans use.
Can I enrich companies too?
Yes. POST /v1/companies/enrich takes a company, and leadocean_count_companies sizes a company list for free.
Enrich your first contacts in Claude, free
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →