The fastest way to find a podcast host's email is to look it up by job title in a contact database. Many hosts run the show alone or inside a small company, so a company-domain search often misses them. This guide uses LeadOcean with curl and spends 2 records.
Examples use placeholders (Acme, acme.com, Jane Doe). Swap in your own filters.
TL;DR
- Podcast host emails come from three places: a database lookup, the show's own website contact page, or a pattern guess at the host's domain. Only a database lookup returns a deliverability status.
- Filter by the title "Podcast Host", enrich with
reveal_email, and send only toverifiedorcatch_all_validaddresses. - Takes about 10 minutes and spends 2 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, at 5 requests a second.
Step 1: Size the podcast host 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 '{
"title": ["Podcast Host"],
"salesRegion": ["NORAM"]
}' | jq '.meta'There is no "podcast host" job level or function, so the title keyword does the work. Titles vary: "Host", "Co-Host", "Podcaster", "Host and Producer". Run the count with each wording and compare.
meta.total is capped at 100,000, and meta.totalIsExact tells you whether it is a floor. Enum values such as NORAM are exact strings.
Step 2: Search for the hosts you want
Each person returned costs one record, so keep limit small until you trust the filter.
curl -s -X POST "https://api.leadocean.io/v1/people/search" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": ["Podcast Host"],
"country": ["US"],
"keywords": ["marketing"],
"limit": 1
}' > hosts.json
jq '.data | length' hosts.jsonSearch rows are thin: they carry has_email and has_phone flags, not the address. The keywords filter matches the host's own profile text, so it narrows by the show's topic. Read the row before you spend a record on enrichment.
To find the host of one known show, search by the show's company name or domain if the show has its own site. Add "companyName": ["Acme Podcast"]. If that returns nothing, the host is probably listed under a different employer.
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' hosts.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. 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.jsonBounced emails are not refunded, so treat every other status as a no-send. Some hosts use a personal address. Enrich returns it with type: personal, and you can ask for it directly with GET /v2/people/email/personal.
Step 5: Use a pattern only when the lookup finds nothing
When the host is not in the data, guess at the show's domain, then verify the guess before you send. Hosts with their own site often use a short form:
first@acmepodcast.com jane@acmepodcast.com
hello@acmepodcast.com a shared inbox, not the host
first.last@acme.com jane.doe@acme.comCheck the show's website contact page first. Never send to a guessed address that has not been verified. A shared inbox such as hello@ carries the role status and often reaches a producer, not the host.
Keep the first email to four lines. Name the episode you heard, make one specific offer, and ask one question.
Step 6: Pull the whole list as a CSV
For a list rather than one person, start an export. POST /v1/exports takes up to 50,000 rows a request and 500,000 a day. Each row costs one record. Bulk CSV export is not on the Free plan: it starts on Solo at $97 a month.
curl -s -X POST "https://api.leadocean.io/v1/exports" \
-H "x-api-key: $LEADOCEAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": "podcast-hosts-noram",
"filters": {
"title": ["Podcast Host"],
"salesRegion": ["NORAM"]
},
"limit": 500,
"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 title "Podcast Host", 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 Podcast Hosts (2026-10-21) | All matches, any email state |
|---|---|---|
| Worldwide | 2,486 | 10,252 |
| NORAM | 1,680 | 6,272 |
| EMEA | 507 | 2,583 |
| APAC | 185 | 861 |
| LATAM | 31 | 204 |
The four regions sum to 2,403, less than the worldwide figure, because some people carry no region. Each call returned totalIsExact: true and credits: 0. The 2,486 mailable hosts work at 2,092 distinct employers.
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": "Podcast Host", "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 at $97 a month, or lower limit. A 402 costs nothing |
| 429 | Over the plan's rate limit: 5 requests a second on Free, 200 on Agency | Honour the Retry-After header and back off |
Empty data | A filter value is not an exact enum string, or the title wording differs | List allowed values with GET /v1/enums and try a variant such as "Podcaster" |
| 404 on enrich | We hold nothing for that person | No charge. Search again, or try the pattern route in Step 5 |
| Export refused | Over 50,000 rows a request or 500,000 rows a day, or the key is on Free | Split the export, wait for the reset, or move to a paid plan |
FAQ
Where do podcast host emails come from?
From a contact database, from the show's own website, or from a pattern guess. Only a database lookup returns a deliverability status. Everything else needs verifying before you send.
How many podcast host 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 host costs about 2 records. Sizing the audience with count=true is free.
Can I find a podcast host's email from the show name?
Not in one call. Search by companyName or domain if the show has a site, then enrich the match by person_id. Many hosts are listed under another employer, so a title search is more reliable.
Why does a podcast host email bounce?
Usually the address was guessed, the host 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.
Where do I go next?
The same recipe works for other roles: VP of Sales, VP of Marketing and VP of Engineering. Plans start free and Solo is $97 a month: see pricing. More guides are in the blog.
Find your first podcast host 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 →