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 Cursor)

Add one mcp.json entry, ask in plain English, and get the C-level and VP contacts at a target company for 12 records.

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

TL;DR

  • You connect LeadOcean to Cursor once with one mcp.json entry. Then you ask for the C-level and VP people at any company domain.
  • It takes about 15 minutes the first time and about 5 after that.
  • A full run spends 12 LeadOcean records: 10 for the search, 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.
  • Cursor installed. The Cursor MCP docs, October 2026, say Cursor reads servers from mcp.json and supports OAuth for remote servers.
  • Optional, for the script in Step 5: $LEADOCEAN_API_KEY in your shell, plus curl.
bash
export LEADOCEAN_API_KEY="paste-your-key-here"

You paste no API key into Cursor. The MCP server uses OAuth sign-in. On Enterprise, admins can allowlist remote servers 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.

json
{
  "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, with the tool list, is on Connect LeadOcean to Cursor. The OAuth server supports dynamic client registration, so you add no client ID.

Step 2: Size the decision makers before you pull anyone

Ask for a count first. Counting costs 0 records, so you can tune the filters as often as you like. Open Cursor chat and send:

text
Use the leadocean MCP server only. How many C-Team and VP people in
Engineering are in the UK? Count only. Do not pull anyone.

Cursor may ask for approval before it runs an MCP tool, depending on your settings. Expand the tool call to see the arguments. Expect a call to leadocean_count_leads like this:

json
{
  "jobLevel": ["C-Team", "VP"],
  "jobFunction": ["Engineering"],
  "country": ["GB"],
  "facets": false
}

The values are exact strings. If the model guesses one, tell it to call leadocean_list_enum_values first.

Step 3: Search one company by domain

Now point the same filters at one company. Use the domain, not the company name. Names match loosely, and a domain matches the employer exactly.

text
Use the leadocean MCP server 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 tool call looks like this:

json
{
  "domain": ["acme.com"],
  "jobLevel": ["C-Team", "VP"],
  "limit": 10
}

This spends up to 10 records, one per person returned. A small company returns fewer. Swap acme.com for the domain you care about. Add jobFunction to narrow to one department.

Step 4: Enrich the two people you want

Search rows carry a person_id. Enriching by that id reaches a person with no LinkedIn URL. Ask Cursor to enrich only the people you picked:

text
Enrich the CTO and the VP of Engineering 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 call spent.

Each enrichment costs 1 record. A person we hold nothing for is a miss, and a miss costs nothing. Read email_status before you send anything. Bounced emails are not refunded.

Step 5: Run the same search from a script

Cursor calls the same API you can call yourself. Use this when you want the list in a file instead of a chat. The search is a flat JSON body, and filters are arrays.

bash
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 the search row:

bash
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 instead, use GET /v1/companies/acme.com/people, which bills one record per person returned.

What you get

The filter values in Step 2 are exact strings. We looked up the job levels through the free leadocean_list_enum_values tool on 2026-10-01:

json
{
  "name": "job_level",
  "description": "Seniority band of the person's current role.",
  "total": 6,
  "matched": 6,
  "values": ["C-Team", "Director", "Manager", "Other", "Staff", "VP"],
  "truncated": false
}

That lookup cost 0 records. We then ran the Step 2 count on 2026-10-21 through leadocean_count_leads (trimmed):

json
{
  "total": 7716,
  "totalIsExact": true,
  "totalAll": 21877,
  "distinctCompanies": 5411,
  "credits": 0,
  "defaults": "Counted only addresses worth sending to (emailStatus: verified or catch_all_valid or catch_all), which is this tool's default."
}

So 7,716 mailable C-Team and VP engineering leaders in the UK, at 5,411 employers, for 0 records. With no email condition the same filters match 21,877 people. Your number will differ as the data changes.

For one company, the people come back in the response shape from the API reference. These are placeholder values, not a real person:

jsonc
{
  "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 contact_emails and contact_phones, a phone looking like +1 415 555 0133, at no extra record.

Troubleshooting

ErrorCauseFix
401Missing 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.
402Free plan: the 1,000 records are spent.Ask the agent to run leadocean_get_account, or move to Solo at $97 a month.
429Above your plan's rate: 5 requests a second on Free, 200 on Agency.Wait a second and retry. Add a short delay between calls.
Empty resultsAn 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 enrichWe hold no person for that identifier.Search by domain first, then enrich by person_id. A 404 costs nothing.
Export refusedA bulk pull is past 50,000 rows a request or 500,000 a day.Split the pull into smaller exports across days.

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.

Do I need to write code?

No. Steps 1 to 4 run entirely in Cursor chat with plain prompts. The script in Step 5 is optional.

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 the agent spend my records without asking?

Cursor can ask for approval before it uses an MCP tool, and admins can allowlist tools to run automatically, so check your settings. Read the arguments, especially limit, before you approve. A wrong limit is the usual way to spend more records than you planned.

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 →