TL;DR
- Time: about 15 minutes, most of it the one-time plugin setup.
- Cost: 6 LeadOcean records. The count is free, five sample leads are 5, one enrichment is 1. The Free plan has 1,000 records, no card.
- Result: ChatGPT counts your market, pulls a sample with title and company, and enriches one person, all from a chat.
ChatGPT writes a good outreach email and a bad prospect list. Ask it for "50 VPs of Sales" with no data source and it makes names up. The fix is to connect a real database over MCP, so the model calls a search tool instead of guessing.
Prerequisites
- A free LeadOcean account. No card.
- ChatGPT on the web. OpenAI's guide to adding a custom MCP server, October 2026, says the web app is required and workspace policy applies. It does not list which plans can add one. On a Business or Enterprise workspace, ask your admin.
- Optional, for the REST version of step 2: an API key from the app, exported as
$LEADOCEAN_API_KEY, andcurl.
The MCP route needs no API key. It signs in with OAuth.
Step 1: Add the LeadOcean server as a plugin
Add one URL and sign in. The steps follow OpenAI's guide to connecting a plugin, October 2026.
- Open chatgpt.com/plugins and select the plus button.
- Choose Add custom MCP server and name it LeadOcean.
- Under Connection, paste the server URL. Set authentication to OAuth and leave client credentials empty.
- Accept the risk warning and select Create as a plugin.
- Install the plugin, then sign in to LeadOcean in the window that opens.
Server URL: https://api.leadocean.io/mcp
Auth: OAuth 2.1 (dynamic client registration, scope: mcp)
Tools found: 13You should see 13 tools. Seven spend no records. The full list with record costs is on the ChatGPT setup page.
Step 2: Count your market before you pull anyone
Start with a count, because counting is free and tells you whether the audience exists. In a new chat, type @, pick the LeadOcean plugin, and send this prompt:
Use the LeadOcean plugin only. Call leadocean_count_leads for
jobLevel VP, jobFunction "Sales & Business Development", country US.
Count only. Do not pull anyone.Naming the plugin and the tool keeps ChatGPT from browsing the web instead. That follows OpenAI's own advice to say which app to use.
The REST equivalent is one call. Send count=true as a query parameter, not in the body, with limit 1:
curl -s -X POST "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"],
"limit": 1
}'Both cost 0 records. Enum filters are exact strings, so if ChatGPT gets one wrong, ask it to call leadocean_list_enum_values first.
Step 3: Narrow until the number is a list you would work
A count of 129,494 is a market, not a list. Narrow it in the chat, one filter at a time, and re-count after each change.
Call leadocean_list_filters and find the company size filter.
Re-count with the same filters, limited to 51-200 employees.
Then show the top 5 industries from the breakdown.
Still count only.Each re-count is free. Stop when the number is something one rep can work in a quarter. For most outbound teams that is a few hundred to a few thousand people, not 129,494.
Keep the filters you settle on. You will reuse them in the next step and in any export.
Two habits save records. First, count before every pull, because a count is free and a pull is not. Second, read the defaults note in the response. The count tool counts only mailable addresses unless you tell it otherwise, so a number with no email filter is larger. Label which one you quote in your own plan.
Step 4: Pull a sample of five
Now spend records, on purpose and in small amounts. Ask for five people so you can check quality before you scale.
Using the same filters, call leadocean_search_leads with limit 5.
Return a table: title, company, company size, country.
Do not reveal emails yet.leadocean_search_leads costs 1 record per person returned, so this is 5. The REST version is the same body as step 2 without count=true and with "limit": 5. A search body is flat JSON, filters are arrays, limit runs 1 to 100, and you page with cursor.
Read the five rows. If the titles are wrong, fix the filter in chat and rerun with limit 5 again. That costs 5 more records, not 500.
Step 5: Enrich one person
Pick one row and enrich it. Enrichment takes exactly one of linkedin_url, email, phone or person_id. There is no name plus domain lookup, so enrich by the person_id the search returned.
Call leadocean_get_lead for the first person in that table.
Reveal the email. Show email_status and the current role.That is 1 record, and a lookup that finds nobody costs nothing. The REST version:
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": "PERSON_ID_FROM_STEP_4", "reveal_email": true}'Check email_status before you send anything. There is no refund for bounced emails.
Do not ask ChatGPT to "find me leads" with no filters. A vague prompt makes the model pick filters for you, and it picks wide. A prompt that names the title, level, country and a limit gives you a bounded, predictable spend.
Step 6: Take the list out of the chat
ChatGPT is for sizing, sampling and one-off lookups. It is not where you work 2,000 leads. Move the list to your sequencer or CRM.
Two routes. Ask ChatGPT to call leadocean_export_leads with your filters. Or open the Exports page in the LeadOcean app. There you set filters, pick columns, see the record price before you start, and download a CSV. Bulk CSV export is not on Free. It is included on Solo at $97 a month. An export takes up to 50,000 rows a request and 500,000 a day.
LeadOcean has no sequencer, dialer or CRM. The CSV goes into the tool you already use.
What you get
Here is the real count from step 2, run through the LeadOcean MCP server on 2026-10-21. It cost 0 records.
{
"total": 129494,
"totalIsExact": true,
"totalAll": 350517,
"distinctCompanies": 58121,
"credits": 0,
"defaults": "Counted only addresses worth sending to (emailStatus: verified or catch_all_valid or catch_all)",
"facets": {
"industry": [
{"value": "Financial Services", "count": 12677},
{"value": "Software Development", "count": 10144},
{"value": "Banking", "count": 7813}
],
"company_size": [
{"value": "10001+", "count": 23661},
{"value": "11-50", "count": 20836}
]
}
}I trimmed the facets for length. Note what the number is. 129,494 is VPs with a verified, catch-all-valid or catch-all email. Without that email filter, the same filters match 350,517 people (totalAll).
A record-level search response has this shape, from the API reference (placeholder values, not a real person):
{
"success": true,
"data": [
{
"profile_data": { "...": "title, company, location" },
"contact_data": { "has_email": true, "email_status": "verified" }
}
],
"meta": { "count": 5, "limit": 5, "credits": 5, "nextCursor": "abc123" }
}Search returns a thin projection with no contact points. Emails come from enrichment with reveal_email set to true.
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| No Add custom MCP server option | Not on the web, or workspace policy blocks it | Use chatgpt.com in a browser. On a workspace plan, ask your admin. |
| 401 | Bad or missing x-api-key on a REST call | Re-copy the key from the app and export it as $LEADOCEAN_API_KEY. |
| 429 | Above the plan's rate limit: 5 requests a second on Free, 200 on Agency | Wait for Retry-After, then retry with smaller batches. |
| 402 | The 1,000 Free records are spent | Check leadocean_get_account, shrink limit, or move to a paid plan. |
| Zero results | An enum value that is not in the catalogue, such as "Sales VP" for jobLevel | Call leadocean_list_enum_values and use the exact string. |
| Export refused | Over 50,000 rows a request or 500,000 a day, or you are on Free | Split the filters into smaller exports, or use Solo for bulk CSV. |
FAQ
Can ChatGPT find leads without a plugin?
It can describe a target profile and draft outreach. It cannot return verified contacts on its own. Without a data tool it falls back to web search or to guessing, and guessed emails bounce.
Does ChatGPT see my whole database?
No. It sees only what a tool call returns. A count returns totals and breakdowns. A search returns the rows you asked for, at 1 record each.
Is the MCP route different from the API?
Same data, same balance. MCP signs in with OAuth and suits one-off work. The REST API uses an x-api-key header and suits scripts and pipelines. Both are covered in the outbound lead generation workflow.
Will this replace my lead generation funnel?
No. It replaces the slow part at the top: sizing and sampling an audience. The rest of your lead generation funnel still needs a sequencer, a CRM and a human. For scoring accounts by fit, see predictive lead generation.
Count your market in ChatGPT, free
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →