TL;DR
- You connect LeadOcean to Cursor once. Then three prompts give you the company profile, the buying committee and a one-page call brief.
- It takes about 20 minutes the first time and about 5 after that.
- A full run spends 13 LeadOcean records: 1 for the company, 10 for the people search, 2 for enriching the two people you will meet. Sizing is free.
Prerequisites
- A LeadOcean account. Start free: no card, 1,000 records one-off, work email required.
- Cursor installed. The Cursor MCP docs, September 2026, say Cursor reads servers from
mcp.jsonand supports OAuth for remote servers. - Optional, for the script in Step 6:
$LEADOCEAN_API_KEYin your shell, pluscurl.
export LEADOCEAN_API_KEY="paste-your-key-here"You paste no key into Cursor. The MCP server uses OAuth sign-in. On an Enterprise plan an admin can limit remote servers to an MCP allowlist by URL, so ask them to approve https://api.leadocean.io/mcp if Cursor refuses the entry.
Step 1: Connect LeadOcean to Cursor
Add one url entry to mcp.json. Use ~/.cursor/mcp.json for every project, or .cursor/mcp.json inside one project.
{
"mcpServers": {
"leadocean": {
"url": "https://api.leadocean.io/mcp"
}
}
}Save the file, open the MCP list in Cursor and start the sign-in for leadocean. Your browser opens on LeadOcean. Approve and return to Cursor. The server exposes 13 tools, and seven of them are free.
The full walkthrough is on Connect LeadOcean to Cursor. Other editors are covered on the MCP hub.
Step 2: Size the account for free
Ask how many reachable people we hold at the domain before you spend a record. Open Cursor chat and send:
Use the leadocean MCP server only. How many people do you hold at acme.com
with an email I can send to? Count only. Do not pull anyone.Cursor asks for approval before it runs an MCP tool. Click the arrow next to the tool name to read the arguments. Expect a call to leadocean_count_leads:
{
"domain": ["acme.com"],
"facets": false
}A count costs 0 records. If it returns 0, the domain is wrong or we hold nobody there, and you have saved yourself a search.
The default count covers only people whose best email is verified, catch_all_valid or catch_all. It is a mailable count, not a headcount. A large account with a small count usually means few people have an address on file, so plan a LinkedIn route for the rest.
Step 3: Pull the company profile
One company lookup gives you headcount, industry, HQ and detected technology. Use the domain, not the name. The lookup costs 1 record.
Use leadocean_get_company for acme.com. Give me a five-line summary: what they
do, headcount band, HQ country, funding if known, and any tools in their
detected technologies that relate to what I sell. Say which fields are null.The tool call is short:
{ "domain": "acme.com" }Fields we do not hold come back as null, and funding and revenue are often empty for small private companies. Tell the model to say so rather than fill the gap.
Step 4: Find the buying committee
Search the same domain for senior people. Set a limit so the run has a ceiling.
Use leadocean_search_leads with domain ["acme.com"], jobLevel ["C-Team","VP"]
and limit 10. Show name, title, level, and whether an email and a phone are on
file. Do not enrich anyone yet.{
"domain": ["acme.com"],
"jobLevel": ["C-Team", "VP"],
"limit": 10
}This spends up to 10 records, one per person returned. A small company returns fewer. Add jobFunction such as Sales & Business Development to narrow to one department, or title for one role.
Ask for the flags, not the addresses. Search rows show whether an email or phone is on file. The address itself arrives only when you enrich, so you pay for contact data only on the people you will meet.
Step 5: Enrich two people and write the brief
Search rows carry a person_id. Enriching by that id works for people with no LinkedIn URL. Pick the two people you will meet and enrich only them.
Enrich the two people I name below with leadocean_get_lead using their
person_id, with reveal_email on. Then write a one-page call brief to
briefs/acme.md in this project: company summary, who is on the call, their
titles and past roles, one opener per person, and the email_status for each
address.
Tell me how many records this step spent.Each enrichment costs 1 record. Since October 2026 it also returns career history: past roles with title, company name and dates, plus education and certifications when we hold them. A shared past employer is often the best opener. Past employers carry no company ID yet, so name them rather than look them up.
A person we hold nothing for is a miss, and a miss costs nothing. Read email_status before you send a follow-up, because bounced emails are not refunded.
The brief is a plain file in your project, so you can commit it, diff it or paste it into your CRM. Keep the openers grounded in fields the tools returned, such as title, level and detected technologies. Tell Cursor to write "not on file" instead of guessing.
Rerun the prompts the morning of the call. The dataset is refreshed monthly and each record carries its own fetched_at date, so a stale title is the usual thing to check.
Step 6: Run the same research from a script
Cursor calls the same API you can call yourself. Use this when you research many accounts in a loop. Requests go to https://api.leadocean.io with an x-api-key header.
curl -s -X POST https://api.leadocean.io/v1/companies/enrich \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain": "acme.com"}'
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}'
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}'The search body is flat JSON and filters are arrays. Enrich takes exactly one of linkedin_url, email, phone or person_id. Page past 10 rows with cursor.
What you get
The Step 2 count is a real result. We ran it through the free leadocean_count_leads tool on 2026-10-21 for the domain acme.com:
{
"total": 32,
"totalIsExact": true,
"totalAll": 707,
"credits": 0,
"defaults": "Counted only addresses worth sending to (emailStatus: verified or catch_all_valid or catch_all)"
}That is 32 mailable people. totalAll is the same filter with no email condition: 707 people. The count cost 0 records. Your domain will return a different number.
The company lookup returns a record in the leadocean.company.v1 schema. This is the response shape from the API reference, with placeholder values:
{
"success": true,
"data": {
"company_data": {
"company_name": "Acme",
"company_domain": "acme.com",
"company_description": "Industrial sensors for warehouses.",
"company_employees": { "number_of_employees": 240, "number_of_employees_code": "201-500" },
"company_primary_address": { "city": "Austin", "country_code": "US" },
"company_number_of_profiles": 312
},
"company_detected_technologies": [ /* product, vendor, category, dates */ ]
},
"meta": { "credits": 1 }
}The enriched person comes back with contact_data.email_status and, with reveal_email on, contact_emails and contact_phones. A phone looks like +1 415 555 0133. Run cost: 1 + 10 + 2 = 13 records, with seven of the 13 tools free. On a paid plan (Solo at $97 a month or Agency at $497 a month) there are no credits to spend, only a fair-use pace.
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| 401 | Missing or wrong x-api-key header, or the MCP sign-in was not approved. | Check $LEADOCEAN_API_KEY, or start the sign-in for leadocean in Cursor again. |
| 402 | The 1,000 free records are spent. | Ask the agent to run leadocean_get_account, or move to a paid plan on pricing, from $97 a month for Solo. |
| 429 | More requests a second than your plan allows (5 on Free, 200 on Agency). | Wait a second and retry. Add a short delay in a loop. |
| Empty search or count of 0 | The domain has a typo, or an enum value such as VP of Sales is not an exact string. | Use the bare domain. Call leadocean_list_enum_values and copy jobLevel values exactly. |
| 404 on enrich | We hold no person or company 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. | Split it into smaller exports across days. |
FAQ
How many records does one account cost?
13 in this recipe: 1 company, up to 10 people, 2 enrichments. Sizing costs nothing. Lower the search limit to 5 and the run costs 8.
Does LeadOcean tell me what the company is doing this quarter?
No. It returns company facts, people and contacts, not news or intent signals. Add your own source for recent news, and keep LeadOcean for who to talk to.
Can the agent spend my records without asking?
By default Cursor asks for approval before it uses an MCP tool. Read the arguments, especially limit, before you approve. Cursor's run modes can change that, so check yours.
Can I do this in another editor?
Research your next account in Cursor, free
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →