The fastest way to find a founder's email is to look it up in a contact database, not to guess it. Search by company domain and seniority, enrich the person, then read the email status before you send. This guide does that against LeadOcean with curl and spends 4 records.
Examples use placeholders (Acme, acme.com, Jane Doe). Swap in your own domain.
TL;DR
- Founder emails come from three places: a database lookup, a pattern guess at the company domain, or the company's own pages. Only the first gives you a deliverability status.
- Filter on
seniority: founder, enrich withreveal_email, and send only toverifiedorcatch_all_validaddresses. - Takes about 10 minutes and spends 4 of the 1,000 free records. Sizing the audience first costs nothing.
Prerequisites
- A LeadOcean account. The free plan gives 1,000 records one-off, no card: register here.
- An API key from the app, exported as
$LEADOCEAN_API_KEY. curlandjq.
export LEADOCEAN_API_KEY="paste-your-key-here"Every request goes to https://api.leadocean.io with the header x-api-key. A free key has both scopes, search and enrich.
Step 1: Size the founder list before you pull it
Send count=true and limit=1 as query parameters and the call returns a total without spending a record. Filters go in a flat JSON body, and every filter is an array of strings.
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 '{
"seniority": ["founder"],
"salesRegion": ["EMEA"],
"emailStatus": ["verified", "catch_all_valid", "catch_all"]
}' | jq '.meta'Use seniority, not a title keyword. Founders carry titles such as Co-Founder, Founder and CEO, and Owner, and the founder band groups them. meta.total is capped at 100,000, and meta.totalIsExact tells you whether it is a floor.
Enum values are exact strings. The regions are NORAM, LATAM, EMEA and APAC. Swap salesRegion for country with an ISO code such as ["DE"] to narrow further.
Step 2: Search for the founder at one company
Add the company's domain to find its founders. Each person returned costs one record, so keep limit small.
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"],
"seniority": ["founder"],
"limit": 3
}' > founders.json
jq '.data | length' founders.jsonSearch rows are thin. They carry has_email and has_phone flags, not the address itself. A company with three co-founders returns three rows, so read the titles and pick the person who owns the problem you solve.
If the company has no founder on file, the owner may sit under another band. Add owner to the seniority array, or c_suite for a hired CEO.
Step 3: Enrich the person to get the email
Each search row carries an id at meta.source_ids.person_id. Send it back to enrich that exact person. Enrich takes exactly one of linkedin_url, email, phone or person_id.
PID=$(jq -r '.data[0].meta.source_ids.person_id' founders.json)
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\": \"$PID\", \"reveal_email\": true}" > person.jsonThis costs one record. reveal_email costs nothing extra and returns every email we hold for that person. If we hold nothing, you get a 404 and no charge. There is no lookup by name plus domain: search first, then enrich by person_id.
Step 4: Verify before you send
Read email_status and send only to addresses worth sending to. A verified or catch_all_valid status is safe to send to. A catch_all status means the domain accepts everything, so the mailbox may not exist.
jq -r '.data.contact_data.contact_emails[]
| select(.status == "verified" or .status == "catch_all_valid")
| .email' person.jsonFounders often use a personal address next to the work one. Check the type field and send business email to the work address. Bounced emails are not refunded, so treat every other status as a no-send.
The full list of statuses is verified, catch_all_valid, catch_all, risky, unknown, untested, invalid, role, disposable, spam_trap, abuse, derived and none.
Step 5: Use a pattern only when the lookup finds nothing
When a founder is not in the data, guess at the company domain, then verify the guess before you send. Four patterns cover most small-company mail setups:
first@acme.com jane@acme.com
first.last@acme.com jane.doe@acme.com
flast@acme.com jdoe@acme.com
firstl@acme.com janed@acme.comSmall teams often use the bare first name, so try first@ before the longer forms. Find the pattern from any other address you already hold at that domain, then apply it to the founder's name.
Never send to a guessed address that has not been verified by a verifier you trust. A guess at a catch-all domain always looks valid and tells you nothing. A role address such as hello@ or team@ is not a personal mailbox, so skip it.
Step 6: Pull the whole list as a CSV
For a list rather than one person, start an export. Bulk CSV export is included on Solo and Agency, not on Free. POST /v1/exports takes up to 50,000 rows a request and 500,000 a day. Each row costs one record.
curl -s -X POST "https://api.leadocean.io/v1/exports" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "founders-apac",
"filters": {
"seniority": ["founder"],
"salesRegion": ["APAC"],
"emailStatus": ["verified", "catch_all_valid"]
},
"limit": 1000,
"preset": "full"
}'Poll GET /v1/exports/{id}, then download from GET /v1/exports/{id}/download. The app's Exports page does the same with a filter builder, a column picker and the record price before you start. It needs no code.
What you get
The Step 1 count is free. The free MCP tool leadocean_count_leads ran seniority: founder, split by salesRegion, on 2026-10-21. It counts people with a verified, catch_all_valid or catch_all email by default, so these are mailable counts.
| Region | Mailable founders (2026-10-21) |
|---|---|
| Worldwide | 3,734,543 |
| NORAM | 1,640,073 |
| EMEA | 469,861 |
| APAC | 213,367 |
| LATAM | 82,169 |
The four regions sum to 2,405,470, less than the worldwide figure, because many people carry no region. Each call returned totalIsExact: true and credits: 0. These are counts of the founder seniority band and not of company stage, so a founder of a ten-year-old firm counts the same as a founder of a seed-stage startup.
A record-level response has the shape below (response shape from the API reference, placeholder values):
{
"success": true,
"data": {
"profile_data": { "name": "Jane Doe", "title": "Co-Founder", "company": "Acme" },
"contact_data": {
"has_email": true,
"email_status": "verified",
"contact_emails": [
{ "email": "jane.doe@acme.com", "type": "work", "status": "verified" }
]
}
},
"meta": { "source": "leadocean" }
}Each record carries its own fetched_at date, and the dataset refreshes monthly. Check the date on anything you plan to act on.
Troubleshooting
| Error | Cause | Fix |
|---|---|---|
| 401 | Missing or wrong x-api-key header | Re-export $LEADOCEAN_API_KEY and check the header name. Retrying will not help |
| 402 | Out of records. On Free the 1,000 are a one-off allowance | Move to Solo ($97 a month) or Agency ($497 a month), or lower limit |
| 429 | Over your plan's rate on one key (5 a second on Free, 50 on Solo, 200 on Agency), or a paid plan's fair-use window is reached | Honour the Retry-After header. GET /v1/account shows which limit applies |
Empty data | A filter value is not an exact enum string | List the allowed values with GET /v1/enums/seniority and copy one |
| 404 on enrich | We hold nothing for that person | No charge. Search again, or try the pattern route in Step 5 |
| 400 or 429 on export | Over 50,000 rows a request, or over 500,000 rows a day | Split the export into several requests, or wait for the reset |
FAQ
Where do founder emails come from?
From a contact database, from a pattern guess at the company domain, or from public pages the company publishes. Only a database lookup returns a deliverability status. Guesses and scraped addresses need verifying before you send.
How many founder emails can I get for free?
The free plan gives 1,000 records one-off with no card. One search row costs one record and one enrichment costs one more, so a verified address for one founder costs about 2 records. Sizing the audience with count=true is free.
Can I find a founder's email from their name and company?
Not in one call. Search by domain or companyName with seniority: founder, then enrich the match by person_id.
Why does a founder email bounce?
Usually the address was guessed, the person moved on, or the domain is catch-all and the mailbox never existed. Read email_status and the record's fetched_at date before you send. Bounced emails are not refunded.
Should I email a founder's personal address?
Prefer the work address for business outreach. Check the type on each address and send to the one that matches the company they run today.
Where do I go next?
The same recipe works for narrower segments: startup founders, ecommerce founders and VPs of Sales. If you outgrow the free records, Solo is $97 a month and Agency $497 a month, with a fair-use pace instead of credits: see pricing.
Find your first founder email with a free API key
Free to start. No credit card. 1,000 records to spend whenever you like.
Get your free API key →