Apple Podcasts Chart Scraper
Pricing
from $3.00 / 1,000 results
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
Maintained by CommunityActor 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
- Build a media buyer shortlist from a focused chart result.
- Generate a podcast category benchmark when rank context should be compared across categories or networks.
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=trueonly 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
- Apple Podcasts Scraper for broad public show discovery.
- Podcast Media Buyer Shortlist Scraper for the next report-oriented workflow.