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

How-to guide

How to Build a Lead List (in Claude)

Add one connector URL, size the audience for free, spot-check ten rows, then export the list as a CSV.

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

TL;DR

  • Claude reaches LeadOcean through one custom connector URL. You size the audience for free, check a sample, then export a CSV.
  • It takes about 20 minutes. The example spends about 260 records: 10 for the spot-check and 250 for the export. Bulk CSV export needs Solo ($97 a month) or above; on Free you page the rows with search.
  • Counts, filter lookups and enum lookups cost 0 records. Only people you receive count.

Prerequisites

  • A LeadOcean account from app.leadocean.io. The free plan has no card, 1,000 records one-off, and needs a work email.
  • A Claude account that can add a custom connector. Per the Claude docs, October 2026, that covers Free, Pro, Max, Team and Enterprise. Free allows one custom connector, and Team and Enterprise limit who can add one.
  • Optional, for the REST checks: curl and a key in your shell as $LEADOCEAN_API_KEY. The chat steps need no key.
bash
export LEADOCEAN_API_KEY="paste-your-key-here"

Step 1: Add LeadOcean as a custom connector

Claude connects from Anthropic's cloud, so you add a public URL and sign in with OAuth. No key is pasted. On Pro and Max, go to Customize, then Connectors, then "+ Add", then "Add custom connector".

text
Name: LeadOcean
URL:  https://api.leadocean.io/mcp
Request headers: leave empty

Click "Continue", review the authentication settings, then "Add". Sign in on the LeadOcean page that opens and approve. Full click-by-click steps, including Team and Enterprise, are on Connect LeadOcean to Claude.

In a new chat, click "+" at the lower left, then "Connectors", and switch LeadOcean on. Claude asks before it runs a tool.

Step 2: Check your balance

Read the account before you spend anything. The account tool is free and shows your plan, records used and remaining, and your export ceilings.

text
Use the LeadOcean connector to read my account. Tell me how many records I have left
and my export limits. Do not search or export anything.

The REST route does the same with GET /v1/account, which also costs nothing.

bash
curl -s https://api.leadocean.io/v1/account \
  -H "x-api-key: $LEADOCEAN_API_KEY" | jq '.data.records'

Step 3: Size the audience for free

Write the audience as filters, then ask for a count. The example is VP-level sales leaders at US software companies with 51 to 200 staff. Ask Claude to resolve the exact industry string first.

text
Use leadocean_list_enum_values to confirm the exact industry value for software.
Then use leadocean_count_leads with jobLevel ["VP"], jobFunction ["Sales & Business
Development"], country ["US"], industry ["Software Development"], employeeRange
["51-200"]. Report the total and say which email statuses it counted.
Do not call any tool that spends records.

Filter values are exact strings. A value like "Software" returns nothing, so let Claude look it up. If the count is too big or too small, change one filter and count again.

The same sizing call over REST is a search with count=true as a query parameter and limit at 1. The body stays flat JSON with arrays.

bash
curl -s "https://api.leadocean.io/v1/people/search?count=true" \
  -H "x-api-key: $LEADOCEAN_API_KEY" -H "content-type: application/json" \
  -d '{
    "jobLevel": ["VP"],
    "jobFunction": ["Sales & Business Development"],
    "country": ["US"],
    "industry": ["Software Development"],
    "employeeRange": ["51-200"],
    "emailStatus": ["verified", "catch_all_valid", "catch_all"],
    "limit": 1
  }' | jq '.meta'

Step 4: Spot-check ten rows

Look at real rows before you buy hundreds. Ten records is a cheap test of whether the filters match the people you mean. A search returns thin records: name, headline, current role, company and location, plus email flags, not addresses.

text
Use leadocean_search_leads with the same filters and limit 10. Show a table of name,
job title, company and company domain. Flag any row that does not look like a sales
leader, and suggest an excludeTitle list to remove that noise. Do not pull more.

Each person returned costs one record, so this step spends 10. Add the suggested excludeTitle values to your filters, for example ["assistant","intern"], and keep them for the export.

Step 5: Export the list as a CSV

Use an export for the bulk pull instead of paging through the chat. A search page holds at most 100 people, and long tables are hard to read in a conversation. An export writes one file.

text
Start a LeadOcean export with the same filters, limit 250, preset full. Poll it with
leadocean_get_export until it is done, then give me the download link. Tell me the
record cost before you start.

Claude calls leadocean_export_leads, then leadocean_get_export. Each row costs one record, and the export reserves up to your limit when it starts. A request takes up to 50,000 rows and a day takes up to 500,000. Bulk CSV export is on Solo and above, not on Free. On Free, ask for leadocean_search_leads pages of 100 instead, at the same one record per person.

If you prefer the REST route, the same export is one request. It needs a key with the enrich scope, because the full preset reveals emails.

bash
curl -s https://api.leadocean.io/v1/exports \
  -H "x-api-key: $LEADOCEAN_API_KEY" -H "content-type: application/json" \
  -d '{
    "name": "US VP sales, software, 51-200",
    "filters": {
      "jobLevel": ["VP"],
      "jobFunction": ["Sales & Business Development"],
      "country": ["US"],
      "industry": ["Software Development"],
      "employeeRange": ["51-200"],
      "emailStatus": ["verified", "catch_all_valid", "catch_all"]
    },
    "limit": 250,
    "preset": "full"
  }' | jq '.data | {id, status, requested, remaining, pollAfter}'

The app does the same on its Exports page. It has a filter builder, a column picker, the record price before you start and a Download button.

What you get

The count in Step 3 is a real run. We ran it on 2026-10-01 with leadocean_count_leads, which spends 0 records, and it returned this (facets trimmed to the filters we sent).

json
{
  "total": 1603,
  "totalIsExact": true,
  "credits": 0,
  "defaults": "Counted only addresses worth sending to (emailStatus: verified or catch_all_valid or catch_all), which is this tool's default.",
  "facets": {
    "country": [{ "value": "US", "count": 1603 }],
    "industry": [{ "value": "Software Development", "count": 1603 }],
    "seniority": [{ "value": "vp", "count": 1603 }],
    "company_size": [{ "value": "51-200", "count": 1603 }]
  },
  "unsupportedFilters": []
}

So 1,603 people matched on 2026-10-01 with a verified, catch_all_valid or catch_all email. That is a mailable count, not everyone we hold for those filters. Your number will differ as the data changes.

The export request returns a job. This is the response shape from the API reference, with placeholder values.

json
{
  "success": true,
  "data": {
    "id": "<export id>",
    "name": "US VP sales, software, 51-200",
    "status": "queued",
    "requested": 250,
    "perRow": "<1, or 2 when a column needs the full record>",
    "remaining": "<records left after this reservation>",
    "pollAfter": 10,
    "file": null
  }
}

The finished download is a .csv with one row per person. The full preset has 45 columns and up to three emails and two phones. Total spend for the run is 10 plus 250, so 260 records, unless perRow comes back as 2. The full 1,603 fits in one export on Solo or Agency.

Troubleshooting

ErrorCauseFix
Connector shows, but no tools appearThe sign-in window closed before approval, or the connector is off in this chatClick "Connect" again and approve. Then switch LeadOcean on under "+", then "Connectors".
401Missing, wrong or revoked key on a REST callRe-copy the key from app.leadocean.io and export $LEADOCEAN_API_KEY again.
429Above your plan's rate (5 requests a second on Free, 200 on Agency)Wait the Retry-After seconds and send full pages of 100 instead of many small calls.
402Free plan: the 1,000 records are spent, or the export limit is above what is leftAsk Claude to read the account, lower the limit, or move to a paid plan. Free records do not reset.
Empty results or a count of 0A filter value outside the catalogue, such as industry: "Software"Ask Claude to call leadocean_list_enum_values and use the exact string it returns.
400 export_limit_rowsThe export limit is above 50,000 rowsSplit the audience by country or headcount band and run several exports.

FAQ

How many records does a lead list in Claude cost?

One record per person returned and one per export row. Counts, filter lookups and account checks are free. The example spends about 260: 10 for the sample and 250 for the export.

Does Claude see my API key?

Not through the connector. The MCP server uses OAuth sign-in and you paste no key into the chat. The optional REST steps read $LEADOCEAN_API_KEY from your own shell.

Can I use the free plan for this?

Yes, for the count, the spot-check and search pages. Free gets the same MCP server and API as paid plans, with search and enrich inside 1,000 one-off records. Bulk CSV export starts on Solo at $97 a month; Agency is $497. See pricing.

Can I do this in a coding tool instead?

Yes. The same MCP URL works elsewhere. See build a lead list in Claude Code and in Windsurf, or watch the 5,000-lead webinar. More recipes are in the blog hub.

Build your first lead list in Claude, free

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

Get your free API key →