# Podcast Prospect Finder (`arched_friend/podcast-prospect-finder`) Actor

Find podcasts to pitch for guest spots and sponsorship. Search any topic, get the host contact email, the last episode date and the show size, then filter down to shows that are still publishing.

- **URL**: https://apify.com/arched\_friend/podcast-prospect-finder.md
- **Developed by:** [Peach O](https://apify.com/arched_friend) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.00 / 1,000 podcast founds

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 Prospect Finder: Shows To Pitch, With The Host Email

**Find podcasts that take guests in your niche, and get the address to pitch them.**

Search any topic and get back a list of shows with the host contact email, the website, the genre, how many episodes they have published and how long ago the last one went out. Filter down to shows that are still active so you never pitch a podcast that quietly died two years ago.

Built for founders chasing guest spots, PR and booking agencies, and marketers buying podcast sponsorship.

### How it works

```mermaid
flowchart LR
    A[Your topics] --> B[Search Apple Podcasts]
    B --> C[Merge and de-duplicate shows]
    C --> D[Read each show feed]
    D --> E[Host email, website,<br/>last episode date]
    E --> F{Filters<br/>active, email, size, genre}
    F -->|keep| G[(Your prospect list)]
    F -->|drop| H[Skipped]
```

The contact email is the part that matters. Podcast feeds publish an owner address so listeners and advertisers can reach the show, and that is the address a booking pitch should go to. Around eight in ten shows publish one.

### What you get

One row per show. A real row from a `b2b marketing` search:

```json
{
  "podcastName": "The B2B Marketing Gap Podcast",
  "publisher": "B2B Jade",
  "contactEmail": "jade@tambinimarketing.co.uk",
  "website": "https://www.b2bjade.com",
  "primaryGenre": "Marketing",
  "genres": ["Marketing", "Business"],
  "episodeCount": 67,
  "lastEpisodeAt": "2026-07-09T13:51:03.000Z",
  "daysSinceLastEpisode": 57,
  "activity": "active",
  "matchedTerms": ["b2b marketing"],
  "language": "en",
  "itunesUrl": "https://podcasts.apple.com/us/podcast/id1234567890",
  "feedUrl": "https://feeds.example.com/b2b-gap"
}
```

`matchedTerms` shows which of your topics surfaced the podcast, so a show that comes up under three of your topics is easy to spot as a strong fit.

### Finding shows worth your time

Most podcast lists are full of shows that stopped publishing. These two filters fix that:

| Setting | What it does |
| --- | --- |
| `activeOnly` | Drops shows with no episode inside your window |
| `activeWithinDays` | How recent counts as active, 90 days by default |
| `requireEmail` | Drops shows that publish no contact address |
| `minEpisodes` | Skips launches that gave up after three episodes |

A UK property search with those filters on cut ten shows to the three that were genuinely worth an email:

```
Property Investing for Women        reshmi@investorwomen.com.au    15 episodes    8 days ago
Efficiency & Property Investing     podcast@progressiveproperty.co.uk    75 episodes    1 day ago
Property Investing Insights         kate@rightpropertygroup.com.au    182 episodes    8 days ago
```

### Example input

```json
{
  "topics": ["b2b marketing", "bootstrapped saas", "demand generation"],
  "country": "us",
  "maxPerTopic": 100,
  "lookUpContactDetails": true,
  "activeOnly": true,
  "activeWithinDays": 90,
  "requireEmail": true,
  "minEpisodes": 20
}
```

### Run it from the command line

```bash
curl -X POST "https://api.apify.com/v2/acts/arched_friend~podcast-prospect-finder/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"topics":["b2b marketing"],"country":"us","activeOnly":true,"requireEmail":true}'
```

Fetch the results:

```bash
curl "https://api.apify.com/v2/acts/arched_friend~podcast-prospect-finder/runs/last/dataset/items?token=YOUR_TOKEN"
```

### Watching for new shows

Turn on `onlyNewShows` and schedule the Actor. It remembers every show it has already reported and returns only the ones that appeared since the last run, so a weekly schedule becomes a feed of new pitch targets rather than the same list every time.

### Pricing

Pay per show found. Runs that find nothing cost nothing.

| | Podcast Prospect Finder | Podcast booking agency | Manual research |
| --- | --- | --- | --- |
| Cost for 100 shows | $0.40 | $1,000 and up per month | Around 6 hours |
| Host contact email | Included | Included | Found by hand |
| Activity check | Included | Sometimes | Rarely |
| Runs on a schedule | Yes | No | No |

Free tier included, so you can size a niche before spending anything.

### Country stores

Set `country` to any two letter code. The store you search changes which shows rank, so a UK campaign should search `gb` rather than `us`.

### Notes and limits

- Apple returns at most 200 shows per topic. Use several narrow topics rather than one broad one to reach further.
- Roughly two in ten shows publish no contact address. Set `requireEmail` to drop them, or leave it off and use the website instead.
- `episodeCount` comes from Apple. `feedEpisodeCount` counts what was read from the feed and will be lower for very large shows, which is expected.

### Related products

- **Brand Mention Monitor** to catch every time your brand comes up in the news after an episode airs.
- **Website Lead Extractor** to pull emails, phones and social profiles from the show websites you collect here.
- **Email List Cleaner** to validate the pitch addresses before you send.

# Actor input Schema

## `topics` (type: `array`):

Topics your ideal show covers, one per line, for example b2b marketing or bootstrapped saas. Each topic is searched separately and the results are merged.

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

Two letter country code for the Apple Podcasts store to search, for example us or gb.

## `maxPerTopic` (type: `integer`):

How many shows to pull for each topic before filtering. Apple returns at most 200.

## `lookUpContactDetails` (type: `boolean`):

Read each show's feed to recover the host contact email, website and last episode date. Turn this off for a faster run that returns listing data only.

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

Drop shows whose feed publishes no contact address. Needs the contact lookup turned on.

## `activeOnly` (type: `boolean`):

Drop shows that have not released an episode recently, so you do not pitch a dead podcast. Needs the contact lookup turned on.

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

How recently a show must have published to count as active.

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

Drop shows with fewer episodes than this. A useful way to skip abandoned launches.

## `genre` (type: `string`):

Keep only shows whose genre contains this word, for example business or health.

## `excludeTerms` (type: `array`):

Drop any show whose name, publisher or description contains one of these words, one per line.

## `onlyNewShows` (type: `boolean`):

Remember every show returned across runs and report only the ones that appeared since last time. Turn this on for scheduled prospecting.

## `proxyConfiguration` (type: `object`):

Recommended when reading many feeds in one run.

## Actor input object example

```json
{
  "topics": [
    "b2b marketing"
  ],
  "country": "us",
  "maxPerTopic": 50,
  "lookUpContactDetails": true,
  "requireEmail": false,
  "activeOnly": false,
  "activeWithinDays": 90,
  "minEpisodes": 0,
  "onlyNewShows": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One row per show, with the host contact email, website, genre, episode count and how recently it published.

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

How many shows were found per topic, how many carry a contact email, and the genre breakdown.

# 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 = {
    "topics": [
        "b2b marketing"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("arched_friend/podcast-prospect-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 = { "topics": ["b2b marketing"] }

# Run the Actor and wait for it to finish
run = client.actor("arched_friend/podcast-prospect-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 '{
  "topics": [
    "b2b marketing"
  ]
}' |
apify call arched_friend/podcast-prospect-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,arched_friend/podcast-prospect-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/oFs4JKXOlMNvjKqka/builds/GS6D3PxKj9mZBRnmT/openapi.json
