Turn a visitor into a lead by enriching what your visitor tool already gives you: a company domain or an email. LeadOcean does not identify visitors. It supplies the six enrichment calls that come after.
A visitor-identification tool, or your own form and reverse-IP log, sits upstream. This guide starts at the moment you hold a domain such as acme.com.
TL;DR
- Six calls take a domain to a company profile, a shortlist of buyers, a revealed work email and a phone number.
- It takes about 20 minutes to wire up and costs about 11 records on the example, so the Free plan covers dozens of visitors.
- Counts are free. Searches and enrichments that return nothing cost nothing, except v2 contact calls, which cost one record even on a miss.
What your visitor tool gives you
Visitor tools return one of three things, and each one enters this recipe at a different step.
- A company domain, from reverse-IP matching. Start at Step 1. This is the common case and the weakest signal, because it names an account, not a person.
- An email, from a form fill, a newsletter box or a tool that resolves people. Start at Step 4 with
email, or Step 6 for the phone. - A LinkedIn URL. Start at Step 4 with
linkedin_url.
Treat a domain as a lead for the account, not for a person. Enrichment is how you pick the person.
Prerequisites
- A LeadOcean API key from app.leadocean.io, exported as
$LEADOCEAN_API_KEY. Free gives you 1,000 records for life, no card. - A visitor tool or log that hands you a company domain, an email or a LinkedIn URL. Any of them works.
curlandjq, or the same calls from your own webhook handler.- Optional: the LeadOcean MCP server at
https://api.leadocean.io/mcpfor the free count in Step 1.
Step 1: Size the buyers at the account (free)
Check how many people you could reach before you spend a record. The MCP tool leadocean_count_leads and people search with count=true both cost nothing.
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 '{"domain":["acme.com"],"jobLevel":["VP","C-Team"]}'count=true is a query parameter, not a body field. meta.total is capped at 100,000 and data comes back empty.
Step 2: Enrich the company from the domain
Call company enrich first to confirm the account is one you want. It takes a domain or a linkedin_url.
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"}'The response carries company_data, company_detected_technologies and company_metrics. A company we hold nothing on is a 404. A 404 costs nothing.
Use this to filter out visitors you would never sell to, such as students, competitors and tiny sites. Route only the rest to Step 3.
Step 3: Find the buyers at that company
Search people at the domain with a title and level filter. The body is flat JSON, filters are arrays and limit runs 1 to 100.
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":["VP","C-Team"],"jobFunction":["Advertising & Marketing"],"limit":5}'Each row returned is one record. Page with meta.nextCursor for more. Enum values are exact strings, so check leadocean_list_enum_values if a filter returns nothing.
The roster is also available as GET /v1/companies/acme.com/people. It returns thin records and stops at 10,000 rows (meta.depthCapped).
Step 4: Enrich the person you picked
Enrich turns a thin search row into a full profile. Send exactly one of linkedin_url, email, phone or person_id. The person_id is in meta.source_ids.person_id on each search row.
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 3>","reveal_email":true}'reveal_email: true returns every email and phone we hold, at no extra record. It is the cheapest way to get contacts if you already enrich the person.
Since October 2026 the same call returns career history in resume_data: past roles, education and certifications. That gives your rep a first line that is not "I saw you visited our site".
Step 5: Get the current work email on its own
If you only need the address, call the v2 work-email endpoint. It takes a person_id, contact_id or linkedin_url.
curl -s "https://api.leadocean.io/v2/people/email/work?person_id=<person_id>" \
-H "x-api-key: $LEADOCEAN_API_KEY"Read status before you send. A bounced email is not refunded. A v2 contact call costs one record even when it finds nothing, so enrich first when you can.
Step 6: Add a phone number for high-intent visitors
Phones suit visitors who hit pricing or a demo page. Use the v2 phone endpoint with the same identifiers.
curl -s "https://api.leadocean.io/v2/people/phone?person_id=<person_id>" \
-H "x-api-key: $LEADOCEAN_API_KEY"If the visitor tool gave you an email or a number but no name, run /v2/people/reverse with email or phone first. It finds who holds that contact, and you continue from Step 4.
What you get
Step 1 is a real, free result. We ran the count through the leadocean_count_leads tool on 2026-10-21 with jobLevel VP, jobFunction Advertising & Marketing and country US, with facets off (trimmed).
{
"total": 49523,
"totalIsExact": true,
"totalAll": 125091,
"distinctCompanies": 24142,
"credits": 0,
"defaults": "Counted only addresses worth sending to (emailStatus: verified or catch_all_valid or catch_all)"
}That is 49,523 mailable US marketing VPs across 24,142 companies. Without the email condition the same filters match 125,091 people. This is a market count, not a count for one visitor's domain.
For one person, the enrich response shape from the API reference looks like this, with placeholder values.
{
"success": true,
"data": {
"profile_data": { "...": "name, headline, location" },
"contact_data": {
"has_email": true,
"has_phone": true,
"email_status": "verified",
"contact_emails": [{ "email": "jane.doe@acme.com", "status": "verified" }],
"contact_phones": [{ "phone": "+1 415 555 0133" }]
},
"resume_data": { "experiences": [], "educations": [] }
}
}Order matters
Run the free steps first, the cheap steps second and the contact steps last. Step 1 is free and Step 2 costs one record, so most unwanted visitors drop out before you spend more.
Search before enrich. Search returns a short roster for the price of its rows, and you choose who to enrich. Enriching everyone at the account spends records on people you will never contact.
Keep a rule for how many people you take per account. Three buyers per domain is enough for most outbound, and the cap keeps one large visitor from draining a Free plan. Log the person_id you chose so a returning visitor does not cost you the same lookup twice.
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| 401 | Missing, wrong or revoked API key | Re-copy the key from app.leadocean.io and export $LEADOCEAN_API_KEY again. |
| 429 | Above your plan's rate (5 requests a second on Free, 200 on Agency) | Wait the Retry-After seconds, then retry. Queue visitors instead of firing them at once. |
| 402 | Free plan: the 1,000 records are spent | Check GET /v1/account, then move to a paid plan. |
| Empty results | A filter value outside the catalogue, such as jobLevel: "Vice President" | Call leadocean_list_enum_values or GET /v1/enums and pass the exact string. |
| 404 on enrich | We hold nothing for that company or person | Nothing is charged. Skip the visitor or try another identifier. |
| Search stops paging | meta.depthCapped is true after 10,000 rows | Narrow the filters and run several smaller searches. |
FAQ
Does LeadOcean identify anonymous visitors?
No. LeadOcean is a data API and MCP server, plus an app with an Exports page. Your visitor tool, form or log supplies the domain or email, and LeadOcean enriches it.
How many records does one visitor cost?
About 11 on the example above for one account with five buyers listed. A single visitor you only enrich once costs 1 record. Counts, 404s and empty pages cost nothing.
Can I run this without code?
Partly. The MCP tools let an AI assistant do Steps 1 to 4 in chat. The app's Exports page builds a bulk file with a filter builder and a column picker, but it has no visitor workflow.
How fresh is the data?
The dataset is refreshed monthly. Each record also carries its own fetched_at date.
What if I need volume?
Solo is $97 a month and Agency is $497 a month, with a fair-use pace instead of credits. See pricing. For comparisons, read best lead enrichment tools, best lead enrichment tools for startups and AI lead gen tools.
Turn your next visitor into a named buyer
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →