A lead data tool is usable when a stranger can size a list, pull rows and trust the output without asking support. Five checks cover it. This guide runs them against LeadOcean, and each check works on any vendor with an API.
TL;DR
- Run five checks: size, filters, rows, enrichment, export. Score each pass or fail.
- It takes about 20 minutes and spends about 20 LeadOcean records on steps 1 to 4, inside the free 1,000. The export check needs a paid plan.
- A tool that cannot tell you a list size before charging you fails check one.
Prerequisites
- A free LeadOcean key in
$LEADOCEAN_API_KEY(start free, no card: pricing). curlandjq.- One target in mind, such as US sales VPs. Write it down before you test.
Step 1: Size the list before you spend anything
Counting must be free and exact. If a vendor charges to tell you how many rows match, you cannot budget.
curl -s "https://api.leadocean.io/v1/people/search?count=true&limit=1" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "content-type: application/json" \
-d '{
"jobLevel": ["VP"],
"jobFunction": ["Sales & Business Development"],
"country": ["US"]
}' | jq '.meta'count=true is a query parameter, not a body field. The body rejects unknown fields. meta.total is capped at 100,000, so read the cap before you trust a big number.
Step 2: Read the filters instead of guessing them
Enum filters are exact strings. Director works. director returns nothing. List the allowed values first.
curl -s https://api.leadocean.io/v1/enums -H "x-api-key: $LEADOCEAN_API_KEY" | jq -r '.data.enums[] | "\(.name) \(.count)"'
curl -s https://api.leadocean.io/v1/enums/job_level -H "x-api-key: $LEADOCEAN_API_KEY" | jq '.data'Both calls are free. If you work from an AI client instead, the hosted MCP server at https://api.leadocean.io/mcp exposes leadocean_list_filters and leadocean_list_enum_values for the same job. It signs in with OAuth, so you paste no key.
Step 3: Pull 15 rows and read them
One search page of 15 is 15 records. Ask only for addresses worth sending to, then judge the rows by eye.
curl -s https://api.leadocean.io/v1/people/search \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "content-type: application/json" \
-d '{
"jobLevel": ["VP"],
"jobFunction": ["Sales & Business Development"],
"country": ["US"],
"emailStatus": ["verified"],
"limit": 15
}' > people.json
jq -r '.data[] | [.profile_data.profile_full_name, .contact_data.contact_current_experiences[0].job_title, .contact_data.contact_current_experiences[0].company_name, .contact_data.email_status] | @tsv' people.jsonSearch is a flat JSON body, filters are arrays, and limit runs 1 to 100. Page on with cursor. One search pages to 10,000 rows, then meta.depthCapped turns true. Narrow the filters instead of walking further.
Step 4: Enrich five people and count the empty fields
Enrich takes exactly one of linkedin_url, email, phone or person_id. There is no name plus domain lookup, so search first and enrich by person_id.
for id in $(jq -r '.data[0:5][].meta.source_ids.person_id' people.json); do
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\": \"$id\"}" | jq '{title: .data.contact_data.contact_current_experiences[0].job_title, past_roles: (.data.resume_data.experiences | length)}'
doneA person we hold nothing for is a 404 and costs nothing. Enrich also returns career history in resume_data: past roles, education and certifications. Past employers carry no company_id yet. Score the tool on how many of the five came back with a current role.
Step 5: Export a small file and open it
Exports are where tools hide limits. Check the ceiling, the columns and the price before you press go.
curl -s -X POST https://api.leadocean.io/v1/exports \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "content-type: application/json" \
-d '{
"name": "usability-test",
"filters": {
"jobLevel": ["VP"],
"jobFunction": ["Sales & Business Development"],
"country": ["US"]
},
"limit": 100,
"preset": "full"
}' | jq '.data | {id, status, requested, estimatedTotal}'Poll GET /v1/exports/{id} until status is done, then fetch the file from downloadUrl.
An export takes up to 50,000 rows a request and 500,000 a day. Bulk CSV export is not on the Free plan, so this step needs Solo or above and spends up to 100 records. On a paid plan, the app at app.leadocean.io has an Exports page with a filter builder, a column picker and the record price before you start.
What you get
On 2026-10-21 the free MCP tool leadocean_count_leads returned this for VP, Sales & Business Development, US:
{
"total": 129494,
"totalIsExact": true,
"totalAll": 350517,
"distinctCompanies": 58121,
"credits": 0
}The 129,494 counts people with a verified, catch_all_valid or catch_all email. Without any email condition the same filters match 350,517. Quote the one you mean.
Row-level response shape from the API reference, with placeholder values (not a real person):
{
"success": true,
"data": [
{
"profile_data": { "profile_full_name": "Jane Doe" },
"contact_data": {
"email_status": "verified",
"contact_current_experiences": [
{ "job_title": "VP of Sales", "company_name": "Acme", "company_domain": "acme.com" }
]
},
"meta": { "source_ids": { "person_id": "PERSON_ID" }, "fetched_at": "2026-10-01" }
}
],
"meta": { "count": 1, "nextCursor": "NEXT_CURSOR" }
}Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| 401 | Missing or wrong x-api-key | Copy the key from app.leadocean.io and export it again |
| 429 | Above the plan rate limit (5 a second on Free, 200 on Agency) | Honor Retry-After, or move to a higher plan |
| 402 | Records spent (Free has 1,000 for life) | Check GET /v1/usage, then pick a plan on pricing |
| Empty results | A bad enum value, such as vp for jobLevel | Check exact strings with leadocean_list_enum_values |
| 404 on enrich | Nothing held for that person | No cost. Try another person_id |
| Export refused | Over 50,000 rows a request or 500,000 a day | Split the export. Bulk CSV is not on Free |
FAQ
What makes a lead gen tool usable?
A free exact count, filters you can list, rows you can read and a stated export ceiling. Anything you must ask sales about fails.
How many records does this test cost?
About 20 on LeadOcean. Counts, filter lists and an enrichment that finds nobody cost nothing.
Does LeadOcean replace my sales intelligence platform?
No. It returns data through an API, an MCP server and an exports page. It has no rep workspace, sequencer, dialer, CRM or Chrome extension.
Can I run these checks on another vendor?
Yes. Swap the endpoints and keep the five questions. For ranked lists of vendors, see the best B2B lead gen and sales intelligence companies, the best sales intelligence platforms and the most innovative tools.
Test your own list size in two minutes
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →