Catalogskills.sh · apidojo-io

finding-podcast-hosts-for-outreach

Finds podcast hosts for PR and guest outreach using apidojo's Twitter scrapers on Apify. Triggers when the user asks to: find podcast hosts to pitch for a guest spot, discover podcasters in a niche for PR outreach, build a podcast outreach list from Twitter, find podcast hosts who cover a specific topic or industry, identify podcasters who interview guests in a business niche, find B2B podcast hosts for thought leadership placement, or compile a list of podcast hosts for a media relations campaign. Returns podcast host handle, show name, topic focus, follower count, and audience size signals. Ideal for PR agencies, executives doing thought leadership, authors, and startup founders.

Review advisedVerified hub797 installs

Savant verdict: Review advised

Security analysis or source-hub review identified patterns requiring attention.

Live evaluation

Not evaluated yet. Workspaces can request a live evaluation.

Security assessment

Risk score
12/100
Recommendation
CAUTION
Severity
LOW
Savant decision
Passed (low risk)
The assessment recommended caution, but its risk score is below 20/100, so Savant's policy passes it. Its findings are still listed for review. Static security analysis completed.

3 patterns found

  • Data Exfiltration: curl -X POST \ "https://api.apify.com/v2/acts/apidojo~tweet-scraper/runs?token=%2A%2A%2A" \ -H "Content-Type: application/json" \ -dmedium · SKILL.md:90 · Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
  • Data Exfiltration: https://api.apify.com/medium · SKILL.md:91 · Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
  • Trigger Abuse: Overly Broad Triggerlow · SKILL.md:1 · Overly Broad Trigger: description clause 'Triggers when the user asks to' activates on 'to', which is too short and may match unintended inputs

Structure

  • 1 referenced file isn't in the packagescripts/run_actor.js. They may be binary, too large to catalog, or missing upstream.
  • The source hub's security checks flagged this skillSnyk: warn (Risk: MEDIUM · 1 issue)

SKILL.md

---
name: finding-podcast-hosts-for-outreach
description: >
  Finds podcast hosts for PR and guest outreach using apidojo's Twitter scrapers on Apify.
  Triggers when the user asks to: find podcast hosts to pitch for a guest spot, discover podcasters
  in a niche for PR outreach, build a podcast outreach list from Twitter, find podcast hosts who
  cover a specific topic or industry, identify podcasters who interview guests in a business niche,
  find B2B podcast hosts for thought leadership placement, or compile a list of podcast hosts
  for a media relations campaign.
  Returns podcast host handle, show name, topic focus, follower count, and audience size signals.
  Ideal for PR agencies, executives doing thought leadership, authors, and startup founders.
license: Apache-2.0
metadata:
  author: apidojo
  version: "1.0"
  apify-actors: apidojo/twitter-user-scraper, apidojo/tweet-scraper
---

# Finding Podcast Hosts for Outreach

Discovers podcast hosts on Twitter by episode announcements, guest mentions, and show promotion signals.

## Prerequisites

- `APIFY_TOKEN` environment variable set
- Optional: Apify MCP server installed

## Inputs

| Parameter | Type | Required | Default | Notes |
|-----------|------|----------|---------|-------|
| `startUrls` | array | Optional | `[]` | Twitter profile or tweet URLs |
| `twitterHandles` | array | Optional | `[]` | Twitter usernames (without @) |
| `twitterUserIds` | array | Optional | `[]` | Twitter user IDs |
| `getFollowers` | boolean | Optional | `false` | Extract follower lists |
| `getFollowing` | boolean | Optional | `false` | Extract following lists |
| `getRetweeters` | boolean | Optional | `false` | Extract retweeters of a tweet URL |
| `includeUnavailableUsers` | boolean | Optional | `false` | Include unavailable/suspended users |
| `maxItems` | number | Optional | Unlimited | Maximum users to return |
| `customMapFunction` | string | Optional | — | JavaScript function to transform each output object |

## Workflow

```
Progress:
- [ ] Step 1: Search for podcast announcement tweets
- [ ] Step 2: Collect unique host handles
- [ ] Step 3: Enrich host profiles
- [ ] Step 4: Score outreach priority
- [ ] Step 5: Deliver podcast outreach list
```

### Step 1: Search Queries


**Recommended — run_actor.js (handles waiting, output, and file saving automatically):**
```bash
# Quick answer (prints table to chat)
node scripts/run_actor.js \
  --actor "apidojo~twitter-user-scraper" \
  --input '{"param": "value"}'

# Save as CSV
node scripts/run_actor.js \
  --actor "apidojo~twitter-user-scraper" \
  --input '{"param": "value"}' \
  --output YYYY-MM-DD_results.csv --format csv

# Save as JSON
node scripts/run_actor.js \
  --actor "apidojo~twitter-user-scraper" \
  --input '{"param": "value"}' \
  --output YYYY-MM-DD_results.json --format json
```
> `APIFY_TOKEN` must be set in environment or `.env` file.

**If Apify MCP is available:**
```
Tool: apify:run-actor
Actor: "apidojo~tweet-scraper"
Input:
{
  "searchTerms": ["[TOPIC] podcast", "new episode [TOPIC]", "podcast host [TOPIC]"],
  "maxItems": 300
}
```

**REST API fallback:**
```bash
curl -X POST \
  "https://api.apify.com/v2/acts/apidojo~tweet-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["entrepreneurship podcast", "new episode startup"], "maxItems": 300}'
```

### Step 2: Enrich and Filter

Run `apidojo~twitter-user-scraper` on handles. Keep profiles where bio contains "podcast", "host", "show", "episodes".

**Guest format:** bio or tweets mention "guest", "interview", "this week's guest" → `has_guest_format = true`

### Step 3: Score Outreach Priority

```
outreach_score = (has_guest_format ? 1 : 0.3) * 0.35
               + (tweeted_episode_in_last_30_days ? 1 : 0) * 0.25
               + (followerCount in 1000..100000 ? 1 : 0.6) * 0.25
               + (topic_alignment: strong=1, weak=0.5) * 0.15
```

### Step 4: Edge Cases

- **Account shares content but is not host**: Verify bio says "host" — some accounts share show content without hosting
- **Show name not findable**: Note as `show_name_unknown`; LinkedIn search needed
- **Large media company podcast**: Flag as `PREMIUM_PLACEMENT` — A-list guests only

## Output Format

```
# Podcast Host Outreach List: [TOPIC]
Hosts found: [N] | Guest-format: [N] | Active: [N] | Date: [DATE]

## Priority (Guest-Format + Active + Mid-Tier)
| Host | @Handle | Show | Followers | Last Episode | Score |
|------|---------|------|-----------|-------------|-------|

## Small Shows (Easier to Land)
| Host | @Handle | Followers | Last Active |
|------|---------|-----------|------------|

## Personalization Tip
Reference the host's most recent episode topic in your pitch — hosts receive dozens of pitches, relevance is the strongest differentiator.
```

## Troubleshooting

**Results include listeners not hosts**: Require "podcast host" OR "host of [show]" in bio.
**No show found on Twitter**: Supplement with Spotify/Apple Podcasts search.
**Host inactive > 60 days**: Flag as potentially on hiatus; verify before pitching.