# Podcast Outreach Leads: Host Emails, No API Key (`maniginam/podcast-outreach-leads`) Actor

Find podcasts to pitch for guest spots or sponsorships.  Search Apple Podcasts by topic and get each show's contact email, host, website, category, episode count, and last episode date from its public RSS feed.  No API key needed.

- **URL**: https://apify.com/maniginam/podcast-outreach-leads.md
- **Developed by:** [ManiGinaM](https://apify.com/maniginam) (community)
- **Categories:** Lead generation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 podcast leads

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

Find **podcasts to pitch** for guest spots, interviews, and sponsorships, with each show's **contact email**.  Search Apple Podcasts by topic, such as marketing, small business, or health, and get one clean lead per show with the contact email, host, website, genre, language, episode count, latest episode date, and links, read from the show's own public RSS feed.

**No API key, account, or login is needed.**  Filter by genre, language, recent activity, and episode count, and turn on **new podcasts only** so a weekly schedule builds a growing outreach list and pays only for shows you have not received before.

### Who is it for?

- **Founders, authors, and experts** booking themselves as podcast guests.
- **PR agencies and podcast booking services** building pitch lists for clients.
- **Brands and media buyers** looking for shows to sponsor in their niche.
- **Podcast networks and growth agencies** finding shows to sign or offer services to.
- **Marketers and researchers** mapping the active shows in a topic.

No API key is needed, so you can start right away on the free Apify plan.

### What data does it return?

One row per podcast that matches your filters:

- Podcast name, host or author, and the contact name and email published in the show's feed
- Where the email came from: the feed's owner email, its managing editor, or its description
- Website, Apple Podcasts link, RSS feed link, and cover art
- Genre, categories, language, and store country
- Episode count, latest episode date, and latest episode title
- Explicit flag, a short description, and the search term that found the show

Emails come only from what podcasters publish in their public feeds for listeners and directories.  The Actor never guesses or verifies addresses.

### How to use

1. Open the Actor and go to the **Input** tab.
2. Enter one or more **Search terms**, such as marketing or small business.
3. Pick the **Country** store to search, for example US or GB.
4. Optionally add **Genres** and **Languages**, and set **Active within days** and **Minimum episodes** to skip inactive or tiny shows.
5. Leave **Only shows with a contact email** on to get only shows you can email.
6. Click **Start**, then open the **Output** tab to view, filter, or download the leads as CSV, Excel, JSON, or HTML.
7. To grow a list over time, turn on **New podcasts only**, give it a **Monitor name**, and add a weekly schedule under **Schedules**.

No API key or account with Apple or any podcast service is needed.

### Input

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `searchTerms` | array | marketing | Topics to search Apple Podcasts for, up to 20.  A show found by two terms is delivered once. |
| `country` | string | us | Two-letter Apple Podcasts store code, such as us, gb, ca, or au. |
| `genres` | array | all | Keep only shows whose genre contains one of these words, such as business or health. |
| `languages` | array | all | Keep only shows in these two-letter language codes, such as en or es. |
| `activeWithinDays` | integer | 90 | Keep only shows with an episode in this many days.  0 keeps every show. |
| `minEpisodes` | integer | 0 | Keep only shows with at least this many episodes. |
| `requireEmail` | boolean | true | Deliver only shows whose feed lists a contact email. |
| `includeExplicit` | boolean | true | Turn off to leave out shows marked explicit. |
| `onlyNewPodcasts` | boolean | false | Skip shows that an earlier run with the same monitor name already delivered, free of charge. |
| `monitorName` | string | default | Keeps a separate memory of delivered shows per name. |
| `maxPodcastsPerTerm` | integer | 100 | Apple Podcasts results to check per term, up to 200. |
| `maxResults` | integer | 200 | Stop after this many podcast leads, up to 10,000. |

Example input for a weekly list of active English business and marketing shows with at least 20 episodes:

```json
{
  "searchTerms": ["marketing", "entrepreneurship", "small business"],
  "country": "us",
  "genres": ["business", "marketing"],
  "languages": ["en"],
  "activeWithinDays": 30,
  "minEpisodes": 20,
  "onlyNewPodcasts": true,
  "monitorName": "business-guest-pitches",
  "maxResults": 500
}
```

### Output

Each lead looks like this (a fictional example):

```json
{
  "podcastName": "Brightleaf Growth Show",
  "hostName": "Brightleaf Media",
  "contactName": "Brightleaf Media",
  "contactEmail": "hello@brightleaf.example",
  "emailSource": "itunes:owner",
  "website": "https://brightleaf.example/podcast",
  "applePodcastsUrl": "https://podcasts.apple.com/us/podcast/brightleaf-growth-show/id900000001",
  "feedUrl": "https://feeds.brightleaf.example/show.xml",
  "applePodcastId": "900000001",
  "primaryGenre": "Marketing",
  "categories": ["Marketing", "Business", "Education"],
  "language": "en-us",
  "country": "USA",
  "episodeCount": 120,
  "latestEpisodeDate": "2026-11-02",
  "latestEpisodeTitle": "Episode 120: Pricing your first product",
  "explicit": false,
  "description": "Weekly interviews with founders about marketing.",
  "artworkUrl": "https://images.brightleaf.example/cover-600.jpg",
  "searchTerm": "marketing",
  "checkedAt": "2026-11-03T14:05:12Z",
  "note": null
}
```

Fields a feed does not publish are null.  When a run finds nothing to deliver, for example because every show was already delivered or none matched, it adds one free row with only `checkedAt` and a `note` explaining why.

Every run also saves a free `RUN_SUMMARY` record in the default key-value store with the terms searched, shows listed and filtered, feeds read and any that failed with a sample reason, shows skipped as already delivered, leads published per term, and why the run ended.

### New podcasts only

With **New podcasts only** on, the Actor remembers every show it delivers in a named key-value store called `podcast-outreach-leads-monitor`, under the monitor name you choose.  Later runs with the same monitor name skip those shows before reading their feeds and do not charge for them, so a weekly schedule only adds new shows to your list.  A show that failed a filter is not remembered, so it can still be delivered once it qualifies.

### How it works

The Actor searches the public Apple Podcasts directory for each term, applies the genre, activity, episode, and explicit filters, and then reads each remaining show's public RSS feed a few at a time to get the contact email, website, language, and latest episode.  Only the start of each feed is read, where the show details live, so long feeds stay quick.  Searches are spaced to respect Apple's rate limit, and every request identifies the Actor with a contact address.  A feed that cannot be read is counted in the summary while the other shows still deliver.

### Pricing

This Actor uses pay per event pricing: **$1.50 per 1,000 podcast leads**, charged as the `podcast-lead` event for each lead delivered, plus a tiny Actor start fee.  Run notes, the summary, shows that fail a filter, and shows skipped by **New podcasts only** are free.  Set **Max podcast leads** to cap what a run can cost.

### API and integrations

You can start the Actor and read its results from your own code with the [Apify API](https://docs.apify.com/api/v2), the Apify Python and JavaScript clients, or the Apify CLI.  Copy ready-made calls from the **API** tab on the Actor page.

Send new leads to a CRM, Google Sheets, HubSpot, Slack, Zapier, Make, or a webhook from the **Integrations** tab, for example to add every new show in your niche to an outreach sequence.

### Related Actors

- [Website Contact Enrichment](https://apify.com/maniginam/website-contact-enrichment): more emails, phones, and social links from each show's website.
- [News Brand Mention Monitor](https://apify.com/maniginam/news-brand-mention-monitor): news articles that mention your brand or topic.
- [SEC Form D Funding Leads](https://apify.com/maniginam/sec-form-d-funding-leads): companies that just raised money, from new SEC filings.
- [Career Site Job Search](https://apify.com/maniginam/career-site-job-search): open jobs from company career sites.

### Is it legal to collect podcast contact details?

The Actor reads only public data: the Apple Podcasts search results and the RSS feeds that podcasters publish so listeners and directories can find them, including the contact email they choose to list.  It does not log in, bypass any limit, or guess addresses.  You are responsible for how you use the leads, including following anti-spam and privacy laws such as CAN-SPAM in the US and the GDPR in the EU and UK.  Send relevant, personal pitches, say who you are, and honor opt-out requests.  This Actor is not affiliated with or endorsed by Apple.

### FAQ

**Do I need an API key?**  No.  The Actor uses public data only, so there is nothing to sign up for beyond Apify.

**Why do some shows have no email?**  Not every podcaster lists one in the feed.  With **Only shows with a contact email** on, those shows are skipped for free.  Turn it off to get them with their website, then try [Website Contact Enrichment](https://apify.com/maniginam/website-contact-enrichment).

**Why did a run return fewer leads than I asked for?**  Apple returns at most 200 shows per search term, and filters such as the contact email and recent activity remove some.  Add more search terms or loosen filters to get more.  The `RUN_SUMMARY` record shows how many shows each filter removed.

**Is the email the host's personal address?**  It is whatever address the podcaster published in the feed, often a booking or business address.  Use it for relevant outreach only.

**Can I search other directories or add fields?**  Yes, see below.

### Feedback and custom requests

Found a bug or a feed the Actor reads wrongly?  Open an issue on the **Issues tab** and it will be fixed quickly.  For another directory, extra fields, or a custom request such as a different filter or output, open an issue as well.

# Changelog

This Actor's version history is a separate document: https://apify.com/maniginam/podcast-outreach-leads/changelog.md

# Actor input Schema

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

Topics or keywords to search Apple Podcasts for, such as marketing, small business, or true crime.  Each term is one search, and a show found by two terms is delivered once.

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

The two-letter code of the Apple Podcasts store to search, such as US, GB, CA, or AU.  It shapes which shows rank first.

## `genres` (type: `array`):

Keep only shows whose Apple Podcasts genre contains one of these words, such as business, marketing, or health.  Case does not matter.  Leave empty for every genre.

## `languages` (type: `array`):

Keep only shows whose feed language is one of these two-letter codes, such as en or es.  Leave empty for every language.

## `activeWithinDays` (type: `integer`):

Keep only shows that released an episode within this many days.  Set 0 to keep shows however long ago they last released.

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

Keep only shows with at least this many episodes.  Set 0 for no minimum.

## `requireEmail` (type: `boolean`):

Leave on to deliver only shows whose feed lists a contact email.  Turn off to also get shows without one, with the website for reaching them.

## `includeExplicit` (type: `boolean`):

Turn off to leave out shows marked explicit.

## `onlyNewPodcasts` (type: `boolean`):

Turn on to deliver, and pay for, only shows this monitor has not delivered before.  Schedule the Actor weekly to build a growing list with no repeats.

## `monitorName` (type: `string`):

Name of the history used by new podcasts only.  Use a different name for each separate list you build.

## `maxPodcastsPerTerm` (type: `integer`):

How many Apple Podcasts results to check for each search term, up to 200, Apple's limit.  Shows that fail a filter are checked but not delivered.

## `maxResults` (type: `integer`):

Stop after delivering this many podcast leads in one run.

## Actor input object example

```json
{
  "searchTerms": [
    "marketing",
    "small business"
  ],
  "country": "us",
  "genres": [],
  "languages": [],
  "activeWithinDays": 90,
  "minEpisodes": 0,
  "requireEmail": true,
  "includeExplicit": true,
  "onlyNewPodcasts": false,
  "monitorName": "default",
  "maxPodcastsPerTerm": 25,
  "maxResults": 20
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# 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",
        "small business"
    ],
    "country": "us",
    "activeWithinDays": 90,
    "maxPodcastsPerTerm": 25,
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("maniginam/podcast-outreach-leads").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",
        "small business",
    ],
    "country": "us",
    "activeWithinDays": 90,
    "maxPodcastsPerTerm": 25,
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("maniginam/podcast-outreach-leads").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",
    "small business"
  ],
  "country": "us",
  "activeWithinDays": 90,
  "maxPodcastsPerTerm": 25,
  "maxResults": 20
}' |
apify call maniginam/podcast-outreach-leads --silent --output-dataset

```

## MCP server setup

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

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/i4PRx3uOhDf2SrCX8/builds/7rfpzunGSaPLs4OQU/openapi.json
