TL;DR
- Size the audience for free, pull a page of contacts, enrich one person and export a CSV. No card needed at any step.
- It takes about 20 minutes and spends about 26 of your 1,000 free LeadOcean records.
- Free is one-off: 1,000 records for life, all features, 5 requests a second. Bulk CSV export needs Solo ($97 a month).
Free lead gen tools fall into three jobs: find the audience, get the contact, and send the message. This guide covers the first two with a free API. For the third, any free mailbox and a spreadsheet will do at this volume.
The rule that saves money: size before you pull. Counting is free. Pulling is what spends records.
Free tools cover four jobs. Pick one tool per job and keep the stack small.
- Find the audience. Needs filters you can count against: title, level, function, country, headcount, industry. LeadOcean has 50 people filters and 34 company filters, and counting is free.
- Get the contact. Needs a verified email and, sometimes, a phone. Read
email_statuson every row. - Check the fit. A company page, a LinkedIn profile or the site itself. A browser and ten minutes beat any scoring model at 25 rows.
- Send and track. A free mailbox and a spreadsheet work up to a few hundred contacts. Add a sequencer when replies need routing.
Prerequisites
- A free LeadOcean account at app.leadocean.io (no card).
- An API key, exported as
$LEADOCEAN_API_KEY. curlandjq. Nothing else.
export LEADOCEAN_API_KEY="paste-your-key-here"Step 1: Size the audience for free
Start with a count. A count spends no records, so run it as often as you like. The MCP tool leadocean_count_leads does the same job from Claude or any MCP client.
On the API, a search with count=true and limit=1 as query parameters is free. The count is capped at 100,000 in meta.total.
curl -s -X POST "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": ["Director"],
"jobFunction": ["Sales & Business Development"],
"country": ["DE"],
"employeeRange": ["51-200"]
}' | jq '.meta'For companies, GET /v1/companies/count returns an exact total with breakdowns by industry, headcount band and HQ country. It is free too.
Step 2: Pull one page of contacts
Pull only when the count looks right. The body is flat JSON, filters are arrays, and limit runs from 1 to 100. A page of 25 spends 25 records.
curl -s -X POST "https://api.leadocean.io/v1/people/search" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"jobLevel": ["Director"],
"jobFunction": ["Sales & Business Development"],
"country": ["DE"],
"employeeRange": ["51-200"],
"limit": 25
}' > page1.json
jq '.meta' page1.jsonFor the next page, send the cursor value from meta in the next request. One search pages to 10,000 rows, then meta.depthCapped is true. Narrow the filters instead of walking further.
Step 3: Enrich one person
Search gives you the profile. Enrich gives you the full record. Pass exactly one of linkedin_url, email, phone or person_id. Set reveal_email to true to get the address.
curl -s -X POST "https://api.leadocean.io/v1/people/enrich" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{"linkedin_url": "https://www.linkedin.com/in/jane-doe-example", "reveal_email": true}'A hit counts one record. An enrichment that finds nobody returns 404 and costs nothing. Since October 2026 the response also carries career history: past roles, education and certifications.
Step 4: Export a CSV
Free users can build and price an export in the app. In the app, open Exports, set the filters, pick columns and see the record price before you start. Bulk CSV download is not on the Free plan.
If you move to Solo, the same export runs from the API.
curl -s -X POST "https://api.leadocean.io/v1/exports" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"filters": {
"jobLevel": ["Director"],
"jobFunction": ["Sales & Business Development"],
"country": ["DE"]
},
"limit": 500
}'An export takes up to 50,000 rows a request and 500,000 a day.
Step 5: Run the same steps from Claude
LeadOcean ships a hosted MCP server at https://api.leadocean.io/mcp, with 13 tools. Sign-in is OAuth, so you paste no key. The free tools are leadocean_count_leads, leadocean_count_companies, leadocean_list_filters, leadocean_list_enum_values, leadocean_get_account, leadocean_get_export and leadocean_list_exports.
A prompt that stays free until you say go:
Count directors in sales and business development, based in Germany, at companies with 51-200 employees.
Show total, totalAll and distinctCompanies. Do not pull any records yet.leadocean_search_leads and leadocean_get_lead spend one record per person returned. Ask the model to count first, then pull 25.
What you get
The count for Step 1, run on 2026-10-21 with the free leadocean_count_leads tool:
{
"total": 1671,
"totalIsExact": true,
"totalAll": 6954,
"distinctCompanies": 1301,
"credits": 0
}Read it carefully. total is the mailable audience: people whose best email is verified, catch_all_valid or catch_all. totalAll is the same filters with no email condition. credits 0 confirms the count was free.
A search page, response shape from the API reference, with placeholder values. Search rows carry email flags, not addresses.
{
"success": true,
"data": [
{
"profile_data": { "profile_full_name": "Jane Doe" },
"contact_data": {
"has_email": true,
"email_status": "verified",
"contact_current_experiences": [
{ "job_title": "Director of Sales", "company_name": "Acme", "company_domain": "acme.com" }
]
},
"meta": { "source_ids": { "person_id": "1234567890" } }
}
],
"meta": { "count": 1, "limit": 25, "credits": 1, "nextCursor": "NEXT_CURSOR" }
}Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| 401 | Missing or wrong x-api-key | Re-copy the key from app.leadocean.io and check the header name |
| 429 | Above the plan's rate limit (5 a second on Free, 200 on Agency) | Wait for the Retry-After header, then slow the loop |
| 402 | The 1,000 free records are spent | Move to Solo ($97 a month) or Agency ($497 a month) |
| Empty results | A filter value is not an exact enum string | Check values with leadocean_list_enum_values or GET /v1/enums |
| Export refused | Request is over 50,000 rows, or the day is over 500,000 | Split the export by country or headcount band |
FAQ
Is there a free lead generation API with real data?
Yes. LeadOcean's Free plan gives you 1,000 records for life, with every feature and the whole database. It is one-off, not monthly.
What is free forever and what is not?
Counting and sizing are free on every plan, with no limit on how often you run them. Records are the thing you spend. Free gives you 1,000 once, and the data is the same on every plan, so the test tells you what you would buy.
How do I get the most from 1,000 records?
Count first, and narrow the filters until the count is under 200. Pull limit 25 until you trust the filters, then enrich only the people you will contact. Misses cost nothing, so a 404 is a free answer.
Can I send email from this stack?
LeadOcean finds and verifies contacts. It has no sequencer, dialer or CRM. Send from your own mailbox or a sequencer you already use, and read email_status before sending.
When does free stop being enough?
When you need bulk CSV or more than 1,000 contacts. Paid plans have a fair-use pace, not credits: reaching it slows the key until the window resets, with no overage invoice. See pricing.
| Plan | Price | What changes |
|---|---|---|
| Free | $0 | 1,000 records for life, 5 requests a second, no bulk CSV |
| Solo | $97 a month | One person, bulk CSV export, 50 requests a second |
| Agency | $497 a month | Teams, 5 keys, 200 requests a second, 50k rows a file |
| Platform | $1,997 a month | Embed and resell, 10,000 requests a second |
Related reading: predictive lead generation, outbound lead generation and the lead generation funnel. More guides are in the blog.
Build your lead list free, starting with a count that costs nothing
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →