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

How-to guide

How to Turn Anonymous Visitors Into Leads (6 Enrichment Calls)

Your visitor tool tells you a company or an email. Six API calls turn that into a named buyer you can contact.

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

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.
  • curl and jq, or the same calls from your own webhook handler.
  • Optional: the LeadOcean MCP server at https://api.leadocean.io/mcp for 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.

bash
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.

bash
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.

bash
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.

bash
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.

bash
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.

bash
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).

json
{
  "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.

json
{
  "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

ErrorCauseFix
401Missing, wrong or revoked API keyRe-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, then retry. Queue visitors instead of firing them at once.
402Free plan: the 1,000 records are spentCheck GET /v1/account, then move to a paid plan.
Empty resultsA 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 enrichWe hold nothing for that company or personNothing is charged. Skip the visitor or try another identifier.
Search stops pagingmeta.depthCapped is true after 10,000 rowsNarrow 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 →