# Podcast Contact Finder - Owner Emails, Pay Per Contact (`hllerdgn80/podcast-contact-finder`) Actor

Owner e-mail addresses from podcast feeds, charged only when a contact is actually delivered. Search a topic or paste Apple Podcasts links; get the e-mail, category, episode count and how recently the show published.

- **URL**: https://apify.com/hllerdgn80/podcast-contact-finder.md
- **Developed by:** [Halil Erdogan](https://apify.com/hllerdgn80) (community)
- **Categories:** Lead generation, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $500.00 / 1,000 contact e-mail delivereds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Podcast Contact Finder

Owner e-mail addresses from podcast feeds. **You are charged only when a contact is actually delivered** — shows that publish none are still listed, with the reason, and cost you nothing.

Built for the two jobs people actually do with this: pitching a sponsorship, and pitching yourself as a guest.

### Why the e-mail is there

Every podcast that is listed on Apple has an RSS feed, and that feed carries an `itunes:owner` block with the address the owner registered. It is published deliberately, by the owner, for exactly this kind of contact. This Actor reads it. It does not guess addresses, does not try permutations against a mail server, and does not scrape anything behind a login.

### What you get per show

| Field | Example |
|---|---|
| `ownerEmail` | `hello@storybrand.com` |
| `podcastName` | Marketing Made Simple |
| `ownerName` | StoryBrand.com |
| `primaryCategory` | Marketing |
| `episodeCount` | 312 |
| `lastEpisode` | the date of the most recent episode |
| `website` | the show's own site |
| `applePodcastsUrl` | the Apple listing |
| `feedUrl` | the RSS feed |
| `otherEmails` | a separate booking or sponsorship inbox, when the show lists one |
| `error` | why a show produced no contact, instead of vanishing |

`lastEpisode` and `episodeCount` are there for a reason: a dead show with 400 episodes and nothing since 2021 is not a lead, and you can filter it out before you write to anyone. `minEpisodes` does the coarse version of that for you.

### Two ways to use it

**Find shows by topic.** Put terms in `searchTerms` and set the `country` storefront. Each term is expanded into shows and each feed is read.

**Check shows you already have.** Put them in `podcasts` — Apple Podcasts URLs, bare Apple ids, or direct RSS feed URLs, mixed together.

### Honest expectations

**Most shows publish a contact address.** Measured 13 September 2026 on a "marketing" search, ten shows read end to end: **eight of ten feeds carried an owner e-mail (80%)**. That is roughly three times the rate you get asking the same question about YouTube channels, because Apple asks for the address when a show is submitted.

Independent shows almost always publish one; some network-produced shows route everything through the network and list nothing useful. Feed hosts also go down and some serve malformed XML — those shows are reported as unreadable rather than quietly dropped, and they are free.

### Pricing

**$0.50 per contact delivered**, plus a $0.001 flat fee per run. A show with no contact e-mail is free. A feed that cannot be read is free.

### Notes

Addresses are matched strictly, so artwork filenames and the podcast host's own support addresses are filtered out rather than sold to you as leads.

Contact details published by a business for business contact are still personal data in some jurisdictions. Use the output in line with the rules that apply to you, including GDPR and the CAN-SPAM Act, and honour opt-outs.

# Actor input Schema

## `searchTerms` (type: `array`):

Topics to search Apple Podcasts for, e.g. "marketing" or "indie games". Each term is expanded into shows, and each show's feed is then read for a contact e-mail.

## `podcasts` (type: `array`):

Apple Podcasts URLs, bare Apple ids, or direct RSS feed URLs. Mixed formats are fine.

## `maxPerSearchTerm` (type: `integer`):

How many shows to take from each search term before moving on.

## `maxPodcasts` (type: `integer`):

A hard stop so a broad search cannot run away.

## `country` (type: `string`):

Two-letter country code for the Apple Podcasts catalogue to search, e.g. US, GB, DE, IT.

## `minEpisodes` (type: `integer`):

Skip shows with fewer episodes than this, to filter out abandoned feeds. 0 keeps everything.

## `onlyShowsWithEmail` (type: `boolean`):

Off by default so you can see which shows were checked and found to publish nothing. Either way, you are only charged for delivered contacts.

## `concurrency` (type: `integer`):

How many feeds to read at the same time. Higher is faster; lower is gentler on the hosts.

## Actor input object example

```json
{
  "searchTerms": [
    "marketing"
  ],
  "maxPerSearchTerm": 25,
  "maxPodcasts": 200,
  "country": "US",
  "minEpisodes": 0,
  "onlyShowsWithEmail": false,
  "concurrency": 6
}
```

# Actor output Schema

## `podcasts` (type: `string`):

Dataset with one item per show: podcastName, ownerEmail, ownerName, otherEmails, author, applePodcastsUrl, feedUrl, website, primaryCategory, categories, language, episodeCount, lastEpisode, explicit, description, artwork, error.

## `runStats` (type: `string`):

Key-value store record RUN\_STATS: shows requested, feeds read, with a contact, without one, failed and charged.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "marketing"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("hllerdgn80/podcast-contact-finder").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "searchTerms": ["marketing"] }

# Run the Actor and wait for it to finish
run = client.actor("hllerdgn80/podcast-contact-finder").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "marketing"
  ]
}' |
apify call hllerdgn80/podcast-contact-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,hllerdgn80/podcast-contact-finder"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/G6FqeD6IzU2YBdhKJ/builds/LaDD597HExN6aC737/openapi.json
