Pre-Black Friday: 20% off, for as long as you stayEARLYBFon Solo and AgencyEnds Nov 28Start free

How-to guide

How to Research an Account Before a Call (in Windsurf)

Add one MCP config entry, ask Cascade about a company domain, and get a one-page call brief for 13 records. Sizing the buying committee costs 0.

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 Windsurf once, then pull a company profile, its tech stack and its senior people from one domain.
  • It takes about 20 minutes the first time and about 8 after that.
  • A full run spends 13 LeadOcean records: 1 for the company, 10 for the people search, 2 for enriching the contacts you will speak to. Counting is free.

Prerequisites

  • A LeadOcean account. Start free: no card, 1,000 records one-off, work email required.
  • Windsurf installed. The Windsurf MCP docs, September 2026, do not limit remote HTTP servers to a paid plan. Enterprise users must turn MCP on, and team admins can allowlist servers.
  • Optional, for the script in Step 6: $LEADOCEAN_API_KEY in your shell and curl.
  • The domain of the account you are about to call. Use the company website domain, not the company name.

You paste no API key into Windsurf. The MCP server uses OAuth sign-in.

Step 1: Add LeadOcean to Windsurf

Add one entry to the MCP config file and sign in. The full walkthrough, including Devin Local, is on Connect LeadOcean to Windsurf. The short version for Cascade:

json
{
  "mcpServers": {
    "leadocean": {
      "serverUrl": "https://api.leadocean.io/mcp"
    }
  }
}

In the Cascade panel, open the ... menu, then the Open MCP config file icon in the MCPs section. Paste the entry under mcpServers and save. Windsurf's docs say a remote HTTP server needs a serverUrl or url field.

Approve the sign-in in your browser. The server exposes 13 tools. Seven are free: the two counts, filter list, enum list, account, get export and list exports. Cascade has a limit of 100 tools across all servers, so 13 leaves room for others.

Step 2: Pull the company profile

Start with the account itself. One domain in, one company record out, for 1 record. A domain we hold nothing for is a miss and costs nothing.

text
Use the leadocean MCP server only. Look up acme.com with
leadocean_get_company. Give me headcount, HQ country, industry, last
funding round and the detected tech stack. If a field is null, say
"not in LeadOcean". Do not guess.

Swap acme.com for your target. The tool takes domain or linkedin_url, and the record comes back as leadocean.company.v1.

Funding and revenue are thin for small private companies. Expect nulls there. The tech stack comes from crawled websites, about 7.8M of them, and every entry has first and last detected dates. Check the dates before you say "I see you use X" on a call.

Step 3: Size the buying committee, then list it

Count first. Counting costs 0 records, so you can tune the filters as often as you like.

text
How many C-Team, VP and Director people work at acme.com? Count only.
Do not pull anyone.

Cascade calls leadocean_count_leads with these arguments:

json
{
  "domain": ["acme.com"],
  "jobLevel": ["C-Team", "VP", "Director"],
  "facets": false
}

When the number looks right, list them. Cap the pull so the cost is known up front:

text
Call leadocean_search_leads for the same filters with limit 10.
Show name, title, job function and whether an email is on file.
Do not enrich anyone yet. Tell me how many records this spent.

The tool call is a flat filter set:

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

This spends up to 10 records, one per person returned. Add jobFunction, for example Sales & Business Development, to narrow to the team you sell to.

Step 4: Enrich the two people you will speak to

Search rows carry a person_id. Enrich only the people on your invite, not the whole list:

text
Enrich the VP of Sales and the Director of Operations from that list
with leadocean_get_lead using their person_id. Show title, level, function,
past roles and the work email with its email_status. Tell me what the call cost.

Each hit costs 1 record, so this step spends 2. Since October 2026 the person record also returns career history: past roles with title, company name and dates, plus education and certifications when we hold them. Past employers carry no company ID yet, so name them rather than look them up. A person we hold nothing for costs nothing. Read email_status before you send a follow-up, because bounced emails are not refunded.

Step 5: Turn the output into a call brief

Everything so far is in the chat. Ask Cascade to write it to a file in your workspace so you can open it before the call.

text
Write account-brief.md using only the tool results above. Sections:
1. Snapshot: name, domain, headcount, HQ, industry, last funding.
2. Stack: detected technologies with last detected date.
3. Who is on the call: title, level, function.
4. Five discovery questions based on the stack and the org size.
5. Not checked: news, hiring, intent and CRM history.
Write "not in LeadOcean" for any missing field.

The last section matters. LeadOcean holds firmographics, website technology and people. It does not hold news, call transcripts, intent signals or your CRM history. Keep those out of the brief rather than letting the model fill the gap.

Step 6: Run the same research from a script

Cascade calls the same API you can call yourself. Use this when you want the brief for 30 accounts in a loop instead of one chat. Filters are arrays and the body is flat JSON.

bash
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", "Director"], "limit": 10}'

To read the whole roster instead, use GET /v1/companies/acme.com/people. It bills one record per person returned and stops at 10,000 rows.

What you get

The count in Step 3 is a live result. We ran it on 2026-10-21 through the LeadOcean MCP server, with acme.com as the domain.

json
{
  "total": 13,
  "totalIsExact": true,
  "totalAll": 276,
  "credits": 0,
  "defaults": "Counted only addresses worth sending to (emailStatus: verified or catch_all_valid or catch_all), which is this tool's default. Pass emailStatus, hasEmail or reachable to choose for yourself.",
  "hasMore": true
}

That is 13 C-Team, VP and Director people with a mailable email (verified, catch_all_valid or catch_all). It cost 0 records. totalAll shows 276 at those levels with any email status or none.

The company record from Step 2 comes back in the response shape from the API reference. These are placeholder values, not a real company:

jsonc
{
  "success": true,
  "data": {
    "company_data": { /* name, domain, industries, headcount, HQ for Acme at acme.com */ },
    "company_detected_technologies": [ /* product, category, first and last detected dates */ ],
    "company_metrics": { /* completion_score, marketability_score */ },
    "meta": { "schema": "leadocean.company.v1" }
  },
  "meta": { "credits": 1 }
}

Search rows show flags such as has_email, not the address. Enrich with reveal_email set to true in the API, or leadocean_get_lead in Cascade, returns the address 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 re-run the sign-in from the MCPs section in Windsurf.
402The 1,000 free records are spent.Check leadocean_get_account, or move to Solo at $97 a month. Free records do not reset.
429Above your plan's rate limit (5 requests a second on Free, 200 on Agency), or a paid plan's fair-use window reached.Wait the Retry-After seconds and retry. Add a short delay between calls.
Empty people 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 the companyWe hold no company for that domain. A 404 costs nothing.Check the spelling, or try linkedin_url instead of domain.
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 records does one account cost?

A full run costs 13: 1 company, 10 people, 2 enrichments. Skip the people search and a quick profile costs 1. Counts and filter lookups are free.

Does it include news or recent funding events?

No. The company record carries the last funding round and its date when we hold one, but LeadOcean has no news feed or intent data. Check those separately and mark them in the brief.

What does a paid plan cost?

Solo is $97 a month for one person and Agency is $497 a month for a team. Neither uses credits. Each has a fair-use pace, and reaching it slows the key until the window resets. See pricing.

Can I research a company from its name?

Not directly. Company lookup takes domain or linkedin_url. With only a name, search companies first, then use the domain that comes back.

Does Cascade ask before it spends records?

Check the tool call before you approve it. Expand the JSON and confirm the domain, the levels and the limit. A wrong limit is the usual way to spend more than you planned. The same recipe runs in VS Code, Cursor and Claude.

Research your next account in minutes, free

Free to start. No credit card. 1,000 records to spend whenever you like.

Get your free API key →