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

How-to guide

How to Find Work Emails (in Claude)

Add one connector URL, then ask Claude for a person's current work email and read its status before you send.

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

TL;DR

  • Claude reaches LeadOcean through one custom connector URL. You ask for a person by LinkedIn URL, or by name and company domain, and Claude returns the work email we hold with its status.
  • It takes about 10 minutes. A lookup by LinkedIn URL spends 1 LeadOcean record. A lookup from a name and a domain spends up to 6.
  • Counts and filter lookups cost 0 records. A person we hold nothing for is a 404 and costs nothing.

Prerequisites

  • A LeadOcean account from app.leadocean.io. The free plan has no card and 1,000 records, one-off.
  • A Claude account that can add a custom connector. Per the Claude docs, October 2026, that covers Free, Pro, Max, Team and Enterprise, with limits on Free and on who can add one in Team and Enterprise.
  • Optional, for the REST check in Step 4: curl and a key in your shell as $LEADOCEAN_API_KEY. The chat steps need no key.
bash
export LEADOCEAN_API_KEY="paste-your-key-here"

Step 1: Add LeadOcean as a custom connector

Claude connects from Anthropic's cloud, so you add a public URL and sign in with OAuth. No key is pasted. On Pro and Max, go to Customize, then Connectors, then "+ Add", then "Add custom connector".

text
Name: LeadOcean
URL:  https://api.leadocean.io/mcp
Request headers: leave empty

Click "Continue", review the authentication settings, then "Add". Sign in on the LeadOcean page that opens and approve. Click-by-click steps, including Team and Enterprise, are on Connect LeadOcean to Claude.

In a new chat, click "+" at the lower left, then "Connectors", and switch LeadOcean on. Claude asks before it runs a tool.

Step 2: Size the audience for free

Check that people with a work email exist for your filters before you look anyone up. The example is VP-level sales leaders in Canada. Ask Claude to use the count tool and nothing else.

text
Use leadocean_count_leads with jobLevel ["VP"], jobFunction ["Sales & Business
Development"], country ["CA"], emailType ["work"]. Report the total and say which
email statuses it counted. Do not call any tool that spends records.

The count tool is free however often you call it. By default it counts people whose email status is verified, catch_all_valid or catch_all. That is a mailable count, not everyone we hold for those filters.

If Claude reports a filter value as invalid, ask it to call leadocean_list_enum_values for the exact string. Values like VP and Sales & Business Development are exact. A guess such as "Sales" returns nothing.

Step 3: Find one work email

You have two starting points. Pick the one you have.

You have a LinkedIn URL. This is the cheap path, 1 record. Claude calls leadocean_get_lead with reveal_email set to true.

text
Use leadocean_get_lead with linkedin_url https://www.linkedin.com/in/jane-doe and
reveal_email true. Give me the current work email, its status and its type in a
table. Tell me how many records this cost.

You have a name and a domain. There is no name plus domain lookup in the API. Search by domain first, then enrich by person_id.

text
Use leadocean_search_leads with q "Jane Doe", domain ["acme.com"], hasEmail true and
limit 5. Show name, job title and person_id for each row. I will tell you which one
is right. Do not call get_lead yet.

The search spends 1 record per person returned, so up to 5. Then pick the right row.

text
The right row is the second one. Use leadocean_get_lead with its person_id and
reveal_email true. Give me the work email and its status.

That is 1 more record, so 6 at most. Keep limit low. A search that returns 25 rows to find one person spends 25.

Step 4: Check the same lookup over REST

The REST route is one request to a documented endpoint. It is useful when you want the lookup in a script instead of a chat. It returns at most one address.

bash
curl -s "https://api.leadocean.io/v2/people/email/work?linkedin_url=https://www.linkedin.com/in/jane-doe" \
  -H "x-api-key: $LEADOCEAN_API_KEY"

To start from a search row, send the row's person_id instead. It is at meta.source_ids.person_id.

bash
curl -s "https://api.leadocean.io/v2/people/email/work?person_id=<person id from search>" \
  -H "x-api-key: $LEADOCEAN_API_KEY"

Each call is 1 record. That includes a call that finds nothing, because data comes back null. A 404, where we hold no record of the person at all, costs 0. Field detail is on Find a work email.

Step 5: Read the status before you send

A work email is only useful if you know how far to trust it. Ask Claude to flag anything weaker than verified.

text
For each address you found, say whether it is safe to send to. verified is safe.
catch_all_valid and catch_all can still bounce. Flag anything else. Do not guess an
address from a name pattern.

LeadOcean gives no refund for bounces, so the status is the only protection you have. The statuses to avoid are invalid, spam_trap, abuse and disposable.

What you get

The status list below is a real tool result. We called leadocean_list_enum_values for email_status on 2026-10-21. It spends 0 records. This is the list of values, trimmed to the names and labels.

json
{
  "name": "email_status",
  "total": 13,
  "values": ["verified", "catch_all_valid", "catch_all", "risky", "unknown", "untested",
             "invalid", "role", "disposable", "spam_trap", "abuse", "derived", "none"],
  "labels": {
    "verified": "Deliverable",
    "catch_all_valid": "Catch-all, mailbox confirmed",
    "catch_all": "Catch-all domain",
    "risky": "Risky",
    "invalid": "Undeliverable",
    "role": "Role address",
    "derived": "Derived, not verified",
    "none": "No email"
  }
}

On a business address, verified means our own verifier sent to the address and it accepted. untested means nobody has checked it yet. derived means it was built from the company's address pattern and never tested.

The count from Step 2 is also a real run. On 2026-10-21, leadocean_count_leads returned 4,595 people for VP, Sales & Business Development, country CA, emailType work, with a verified, catch_all_valid or catch_all email. The same filters with no email condition matched 12,318. Your number will differ as the data changes.

The lookup itself returns this shape. It is the response shape from the API reference, with placeholder values.

json
{
  "success": true,
  "data": {
    "email": "jane.doe@acme.com",
    "status": "verified",
    "verified_batch_date": "2026-09-14"
  }
}

When no address qualifies, data is null. The work endpoint returns only an address at the person's current employer that is verified, catch_all_valid or catch_all. An untested address, or one at a former employer, is left out on purpose.

Cost of the whole run: 0 for the connector and the count. 1 for a lookup by LinkedIn URL. Up to 6 for a name and a domain.

Troubleshooting

ErrorCauseFix
401Missing, wrong or revoked key on a REST callRe-copy the key from app.leadocean.io and export $LEADOCEAN_API_KEY again.
429Above your plan's rate per account (5 a second on Free, 200 on Agency)Wait the Retry-After seconds and send fewer, larger batches.
402Free plan: the 1,000 records are spentFree records do not reset. Move to Solo ($97 a month) or Agency ($497 a month). See pricing.
Count or search returns 0A filter value outside the catalogue, such as jobFunction: "Sales"Ask Claude to call leadocean_list_enum_values and use the exact string.
data: null on a lookupNo address at the current employer is verified, catch_all_valid or catch_allA retry will not change it. Try a personal email or skip the person. It still cost 1 record.
400 export_limit_rowsAn export limit above 50,000 rowsSplit the audience by country or headcount band and run several exports.

FAQ

Can Claude find a work email from just a name and a company?

Not in one call. The API has no name plus domain lookup. Claude searches the domain, you pick the right row, and Claude enriches that person_id. That is up to 6 records.

How many records does one work email cost?

One when you have a LinkedIn URL. A lookup that returns null also costs 1. A 404 costs 0. The free plan's 1,000 records cover about 1,000 lookups by LinkedIn URL. Paid plans have no per-record price: Solo is $97 a month and Agency is $497 a month, with a fair-use pace. See pricing.

Can I find emails for a whole list in Claude?

Run it per person for a handful. For a list, use the Exports page in the app at app.leadocean.io: filter builder, column picker, the record price before you start, and CSV download. Set emailType to work and emailStatus to verified. Bulk CSV export is on Solo and above, not on Free.

Is there a Claude skill that does this?

Yes. The Find Work Email skill wraps these steps. For the terminal client, see find work emails in Claude Code.

Find your first work email in Claude, free

Free to start. No credit card. 1,000 records to spend whenever you like.

Get your free API key →