# Apple Podcasts Category Benchmark (`taroyamada/podcast-category-network-benchmark-report`) Actor

Benchmark podcast categories, publishers, and show groups from Apple Podcasts metadata and public RSS. Deliver media-planning signals, reports, and exports.

- **URL**: https://apify.com/taroyamada/podcast-category-network-benchmark-report.md
- **Developed by:** [naoki anzai](https://apify.com/taroyamada) (community)
- **Categories:** Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $8.00 / 1,000 podcast show benchmarkeds

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/platform/actors/running/actors-in-store#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

## Apple Podcasts Category Benchmark

Podcast networks, agencies, and portfolio teams use this actor to compare public podcast categories, publishers, and show groups.
Input public RSS feeds, show URLs, Apple search terms, target keywords, and an optional portfolio monitor key.
Output source-linked benchmark rows, fit evidence, category reports, and portfolio exports.

The default `initialRunMode: "baseline_only"` stores the first portfolio baseline with zero rows and zero charge. Later unchanged runs emit zero rows and zero charge. Use `emit_backfill` only when you explicitly want current benchmark rows, a category report, and an export delivered.

### Start with a low-cost paid trial

Use this capped input to verify the source and buyer-facing output before buying a full report. It disables the report and export events and caps the run at **$0.50**. It delivers both a source row (`podcast-show-benchmarked`, $0.008) and a buyer-facing signal (`podcast-network-signal`, $0.08) when the starter evidence matches. A zero-row run has zero event charge.

```json
{
  "rssFeedUrls": [
    "https://feeds.npr.org/510289/podcast.xml"
  ],
  "showUrls": [],
  "searchTerms": [],
  "targetKeywords": [
    "economics",
    "business",
    "money"
  ],
  "maxEpisodesPerFeed": 3,
  "initialRunMode": "emit_backfill",
  "monitorKey": "starter-podcast-category-benchmark",
  "generateReport": false,
  "emitRawRows": true,
  "emitShortlistExport": false,
  "emitUnchanged": false,
  "maxChargeUsd": 0.5,
  "dryRun": false
}
```

When the result fits your workflow, use the separate state key below to generate the full `podcast-category-benchmark-report` output (**$2.50**) and `podcast-benchmark-export` export (**$2.00**). The cap covers the selected report/export path; unchanged monitoring runs still produce zero rows and zero event charge.

```json
{
  "rssFeedUrls": [
    "https://feeds.npr.org/510289/podcast.xml"
  ],
  "showUrls": [],
  "searchTerms": [],
  "targetKeywords": [
    "economics",
    "business",
    "money"
  ],
  "maxEpisodesPerFeed": 3,
  "initialRunMode": "emit_backfill",
  "monitorKey": "starter-podcast-category-benchmark-full-report-v1",
  "generateReport": true,
  "emitRawRows": false,
  "emitShortlistExport": true,
  "emitUnchanged": false,
  "maxChargeUsd": 4.84,
  "dryRun": false
}
```

### Store Quickstart

1. Start with the first input example below using `dryRun=false` and `initialRunMode: "emit_backfill"` when you want a paid trial result.
2. Keep `emitUnchanged=false` so repeated no-change runs emit zero rows and zero charges.
3. Set `generateReport=true` and `emitShortlistExport=true` when you need the report/export path.
4. Review `billingEventName` before scheduling recurring runs.

```json
{
  "rssFeedUrls": ["https://feeds.npr.org/510289/podcast.xml"],
  "targetKeywords": ["economics", "business", "money"],
  "maxEpisodesPerFeed": 3,
  "initialRunMode": "emit_backfill",
  "monitorKey": "store-quickstart-category-benchmark",
  "generateReport": true,
  "emitRawRows": false,
  "emitShortlistExport": true,
  "emitUnchanged": false,
  "maxChargeUsd": 5,
  "dryRun": false
}
```

### Run the next report

- Use [Apple Podcasts Scraper](https://apify.com/taroyamada/apple-podcast-scraper) first when you only need broad Apple Podcasts show metadata.
- Add source-linked public evidence with [Podcast Sponsor Evidence Report Scraper](https://apify.com/taroyamada/podcast-sponsor-evidence-report-scraper).
- Build a ranked candidate export with [Podcast Media Buyer Shortlist Scraper](https://apify.com/taroyamada/podcast-media-buyer-shortlist-scraper).

### Input Examples

```json
{
  "rssFeedUrls": [
    "https://feeds.npr.org/510289/podcast.xml"
  ],
  "showUrls": [],
  "searchTerms": [
    "business podcast advertising"
  ],
  "targetKeywords": [
    "business",
    "marketing",
    "startup",
    "saas"
  ],
  "maxEpisodesPerFeed": 8,
  "initialRunMode": "emit_backfill",
  "generateReport": true,
  "emitRawRows": false,
  "emitShortlistExport": true,
  "emitUnchanged": false,
  "dryRun": false
}
```

```json
{
  "rssFeedUrls": [],
  "showUrls": [],
  "searchTerms": [
    "fintech podcast",
    "ecommerce podcast"
  ],
  "targetKeywords": [
    "fintech",
    "payments",
    "commerce"
  ],
  "maxEpisodesPerFeed": 12,
  "emitShortlistExport": true,
  "emitUnchanged": false,
  "dryRun": false
}
```

```json
{
  "rssFeedUrls": [
    "https://feeds.npr.org/510289/podcast.xml"
  ],
  "showUrls": [],
  "searchTerms": [],
  "targetKeywords": [
    "founder",
    "growth",
    "analytics"
  ],
  "maxEpisodesPerFeed": 6,
  "emitShortlistExport": false,
  "emitUnchanged": false,
  "dryRun": false
}
```

### Sample Output

The report/export path emits value rows like these. The values are illustrative examples, not performance claims.

```json
[
  {
    "rowType": "podcast_shortlist_export",
    "billingEventName": "podcast-category-benchmark-report",
    "sourceName": "apple-podcasts-public-metadata-and-rss",
    "sourceUrl": "https://feeds.npr.org/510289/podcast.xml",
    "candidateCount": 1,
    "shows": ["Example Business Growth Podcast"],
    "authorizationBasis": "public_rss_or_show_page"
  },
  {
    "rowType": "podcast_benchmark_export",
    "billingEventName": "podcast-benchmark-export",
    "sourceName": "apple-podcasts-public-metadata-and-rss",
    "sourceUrl": "https://feeds.npr.org/510289/podcast.xml",
    "candidateCount": 1,
    "benchmarks": [
      {
        "showTitle": "Example Business Growth Podcast",
        "publisher": "Example Network",
        "score": 72,
        "sourceUrl": "https://feeds.example.org/example.xml"
      }
    ],
    "authorizationBasis": "public_rss_or_show_page"
  }
]
```

See `docs/sample-output.json` for the complete row set.

### Output Fields

Every row includes:

- `billingEventName` for PAY\_PER\_EVENT charging
- `sourceName`, `sourceUrl`, `retrievedAt`, and `sourceMethod`
- `showTitle`, `publisher`, `matchedKeywords`, and `mediaBuyerFitScore` when available
- `authorizationBasis`
- `limitations` and `prohibitedInterpretations`

### Pricing

This actor uses PAY\_PER\_EVENT pricing. You are charged only when candidate, fit evidence, or shortlist export rows are emitted:

- `podcast-show-benchmarked`: $0.008 per benchmarked show row
- `podcast-network-signal`: $0.08 per source-linked network signal
- `podcast-category-benchmark-report`: $2.50 per generated benchmark report row
- `podcast-benchmark-export`: $2.00 per generated export row

No-change runs must emit zero default dataset rows and zero billable events by default.

`maxChargeUsd` is an optional positive per-run cap. The actor estimates every output row from the configured PAY\_PER\_EVENT unit prices before calling `pushData`; if the estimate exceeds the cap, it fails before charging. `0` preserves the existing no-explicit-cap behavior. Delivery journal entries record pending, charged, failed, and uncertain attempts so a partial retry can deduplicate confirmed charges and refuses to retry an uncertain charge.

### Compliance Guardrails

- Use public RSS, public show pages, and public podcast search surfaces.
- Use shortlist rows only for source-linked media planning research and human review.
- Do not imply endorsement by Apple, publishers, or podcast networks.
- A score is a source-linked research signal, not a prediction of campaign performance or publisher acceptance.

### See Also

- [Apple Podcasts Scraper](https://apify.com/taroyamada/apple-podcast-scraper) for Apple Podcasts show metadata.
- The linked sponsor evidence and media buyer shortlist workflows cover the next evidence and ranked-export steps.

# Actor input Schema

## `rssFeedUrls` (type: `array`):

Public podcast RSS feed URLs to score for shortlist fit.

## `showUrls` (type: `array`):

Public podcast show or publisher pages to include as fit evidence surfaces.

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

Apple iTunes Search API terms for public feed discovery.

## `targetKeywords` (type: `array`):

Campaign, audience, category, or topic keywords used to score candidate shows.

## `maxEpisodesPerFeed` (type: `integer`):

Maximum RSS episode items to inspect per feed.

## `emitShortlistExport` (type: `boolean`):

Generate benchmark export for this run.

## `emitUnchanged` (type: `boolean`):

When false, previously seen candidate rows are suppressed.

## `dryRun` (type: `boolean`):

When true, emit sample rows locally without external live calls or billing.

## `watchlists` (type: `array`):

Named portfolio watch definitions.

## `monitorKey` (type: `string`):

Monitor key for this run.

## `initialRunMode` (type: `string`):

Initial run mode for this run.

## `generateReport` (type: `boolean`):

Generate report for this run.

## `emitRawRows` (type: `boolean`):

Emit raw rows for this run.

## `maxChargeUsd` (type: `number`):

Maximum charge (USD) for this run.

## Actor input object example

```json
{
  "rssFeedUrls": [
    "https://feeds.npr.org/510289/podcast.xml"
  ],
  "showUrls": [],
  "searchTerms": [],
  "targetKeywords": [
    "economics",
    "business",
    "money"
  ],
  "maxEpisodesPerFeed": 3,
  "emitShortlistExport": false,
  "emitUnchanged": false,
  "dryRun": false,
  "watchlists": [],
  "monitorKey": "",
  "initialRunMode": "emit_backfill",
  "generateReport": false,
  "emitRawRows": true,
  "maxChargeUsd": 0.5
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("taroyamada/podcast-category-network-benchmark-report").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("taroyamada/podcast-category-network-benchmark-report").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{}' |
apify call taroyamada/podcast-category-network-benchmark-report --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=taroyamada/podcast-category-network-benchmark-report",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

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