Apple Podcasts Chart Scraper avatar

Apple Podcasts Chart Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Apple Podcasts Chart Scraper

Apple Podcasts Chart Scraper

Track public Apple Podcasts chart positions and emit one source-linked movement report when a saved monitor detects new, changed, or dropped positions.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

naoki anzai

naoki anzai

Maintained by Community

Actor stats

0

Bookmarked

7

Total users

3

Monthly active users

3 days ago

Last modified

Share

Podcast growth teams, agencies, networks, and research teams provide public Apple Podcasts storefront codes and an optional genre/depth filter. The actor returns source-linked chart_rank rows, or one change report when a saved monitor detects new, changed, or dropped positions. Raw chart delivery remains the default for existing schedules.

Run the next report

Store Quickstart

The default path is a low-cost raw chart snapshot. Use one country and a small limit first. For recurring rank movement, set a stable monitorKey and generateMovementReport to true; the first baseline_only run stores state without dataset rows or charges.

1. Raw chart snapshot

{
"countries": ["us"],
"limit": 25,
"delivery": "dataset",
"dryRun": false
}

2. Free baseline for a recurring monitor

{
"countries": ["us", "gb"],
"genreId": "1321",
"limit": 50,
"monitorKey": "weekly-news-us-gb",
"generateMovementReport": true,
"initialRunMode": "baseline_only",
"maxChargeUsd": 3,
"dryRun": false
}

3. Movement report or webhook delivery

{
"countries": ["us"],
"limit": 25,
"monitorKey": "weekly-news-us-gb",
"generateMovementReport": true,
"initialRunMode": "emit_backfill",
"delivery": "webhook",
"webhookUrl": "https://example.com/podcast-chart-hook",
"maxChargeUsd": 3,
"dryRun": false
}

countries accepts at most 20 unique two-letter codes. Each country is fetched with a timeout and bounded retry. limit is capped at 200.

Output

The actor output contains chartEntries, movementReports, and deliveryRows. Raw rows keep legacy aliases (name, artist, and collectionId) and add the stable fields used by integrations.

Raw chart output

{
"actorName": "apple-podcast-chart-tracker",
"rowType": "chart_rank",
"billingEventName": "apify-default-dataset-item",
"country": "us",
"rank": 12,
"showId": "123456",
"showName": "Example Podcast",
"artistName": "Example Network",
"sourceUrl": "https://podcasts.apple.com/us/podcast/id123456",
"fetchedAt": "2026-08-01T00:00:00.000Z",
"collectionId": "123456",
"name": "Example Podcast",
"artist": "Example Network"
}

Movement report output

{
"actorName": "apple-podcast-chart-tracker",
"rowType": "podcast_chart_movement_report",
"billingEventName": "podcast-chart-movement-report",
"monitorKey": "weekly-news-us-gb",
"initialRun": false,
"fetchedAt": "2026-08-01T00:00:00.000Z",
"changedCount": 1,
"newCount": 1,
"droppedCount": 0,
"changes": [
{
"changeType": "changed",
"country": "us",
"showId": "123456",
"showName": "Example Podcast",
"previousRank": 18,
"currentRank": 12,
"rankDelta": 6,
"sourceUrl": "https://podcasts.apple.com/us/podcast/id123456"
}
]
}

A baseline run emits zero deliveryRows. A later unchanged poll emits zero rows and zero charges. A later poll emits at most one movement report row for all observed changes. A failed source is not treated as a mass drop.

Output fields

  • Raw: actorName, rowType, billingEventName, country, rank, showId, showName, artistName, sourceUrl, fetchedAt, plus legacy aliases.
  • Movement report: monitorKey, changedCount, newCount, droppedCount, changes, and source limitations.
  • Envelope: chartEntries, movementReports, deliveryRows, meta, and delivery/state status in the final output file.

Pricing and delivery

The existing raw path is unchanged: the default dataset event is used for each raw chart row. The movement event is named podcast-chart-movement-report and is sent through Actor.pushData(row, eventName) when the Apify SDK is available. The local test path never charges.

maxChargeUsd defaults to $3. The local safety estimate is $0.003 per raw row and $2.50 per movement report row; delivery stops before any row is sent when the estimate exceeds the cap.

delivery=dataset writes billable rows to the Apify default dataset. delivery=webhook sends the same output payload to the supplied HTTP(S) webhook first, then writes the billable rows to the default dataset. A non-2xx webhook response or dataset/PPE failure fails the run and prevents state commit. Webhook delivery does not replace dataset delivery.

State and no-change behavior

State is isolated by monitorKey. State is saved only after webhook and dataset/PPE delivery succeeds. A state load or save failure fails closed; it never silently treats a missing state as a new baseline after a remote storage error.

  • baseline_only: save the first successful snapshot with 0 rows and 0 charges.
  • emit_backfill: emit one initial movement report for the current positions.
  • Subsequent runs: emit only new, changed, or dropped positions; unchanged polls emit 0 rows and 0 charges.
  • Set emitRawRows=true only when a monitor also needs the legacy raw rows; the charge cap still applies.

Compliance guardrails

  • Uses public Apple Podcasts/iTunes chart JSON only.
  • No Apple logo, endorsement, private dashboard, or authenticated data is claimed.
  • Rank movement is descriptive evidence, not a forecast, audience estimate, advertising guarantee, or provider approval.
  • Unsupported storefronts produce a warning and are never interpreted as a mass drop from the saved baseline.

See also