Apple Podcast Reviews Scraper — Ratings & Listener Feedback avatar

Apple Podcast Reviews Scraper — Ratings & Listener Feedback

Pricing

from $3.00 / 1,000 apify-default-dataset-items

Go to Apify Store
Apple Podcast Reviews Scraper — Ratings & Listener Feedback

Apple Podcast Reviews Scraper — Ratings & Listener Feedback

Scrape Apple Podcasts listener reviews & ratings via iTunes RSS. Export CSV/JSON. Try Input: 1 show × 1 page ≈ ≤$0.15 · From $3/1k.

Pricing

from $3.00 / 1,000 apify-default-dataset-items

Rating

0.0

(0)

Developer

naoki anzai

naoki anzai

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

0

Monthly active users

a day ago

Last modified

Categories

Share

What you get: Public Apple Podcasts listener reviews and ratings via iTunes Customer Reviews RSS. Export CSV/JSON.

CTA: Store → Try for free → Input → leave prefill (1 show × 1 page, report OFF) → Start. First paid proof ≈ ≤$0.15; cost cap $0.50. From $3/1k.

{"podcastIds":["https://podcasts.apple.com/us/podcast/id1535809341"],"countries":["us"],"maxPagesPerPair":1,"generateReport":false,"maxChargeUsd":0.5,"delivery":"dataset","dryRun":false}

Sibling next steps: Apple Podcasts Scraper (discovery) · Chart Tracker (ranks).

Podcast networks, reputation teams, agencies, and research teams provide Apple Podcasts collection IDs (or show URLs) and storefronts. This actor returns public review rows and, optionally, one source-linked rating summary report. Input a collection ID or Apple Podcasts URL, country codes, and a bounded page count. The output contains the existing review fields plus source, fetch, row-type, and billing metadata.

Run the next report

Use the review report as a proven signal, then choose a higher-value follow-on:

Store Quickstart

Paste an Apple Podcasts URL or numeric collection ID into podcastIds (prefill included). Need discovery first: Apple Podcasts Scraper / APS.

Low-cost raw review check

First run may return ≤50 reviews (~≤$0.15 at $0.003/row). Set maxChargeUsd=0.5 to cap. Keep generateReport false (the $1.50 summary report lives under the Paid report section — leave it OFF until you need it).

The raw path keeps the existing review behavior and a small page cap:

{
"podcastIds": ["https://podcasts.apple.com/us/podcast/id1535809341"],
"countries": ["us"],
"maxPagesPerPair": 1,
"generateReport": false,
"maxChargeUsd": 0.5,
"delivery": "dataset",
"dryRun": false
}

High-value review report

Set generateReport to true when you need one aggregate podcast_review_report row. This report is the handoff to sponsor evidence or media buyer shortlist work above.

{
"podcastIds": ["https://podcasts.apple.com/us/podcast/id1535809341", "1641234567"],
"countries": ["us", "gb"],
"maxPagesPerPair": 1,
"generateReport": true,
"reportMode": "summary",
"maxChargeUsd": 2,
"dryRun": false
}

See docs/value-path-sample.json for the raw-to-report input pair and follow-on routes.

Scheduled delta monitor with free unchanged polls

Use a stable monitorKey on every scheduled run. The first baseline_only run stores the current feed with zero dataset rows and zero charge. Later runs emit only new or changed reviews; an unchanged poll remains zero rows and zero charge.

{
"mode": "monitor",
"monitorKey": "network-show-1535809341-us",
"initialRunMode": "baseline_only",
"emitUnchanged": false,
"podcastIds": ["https://podcasts.apple.com/us/podcast/id1535809341"],
"countries": ["us"],
"maxPagesPerPair": 1,
"generateReport": true,
"maxChargeUsd": 2,
"dryRun": false
}

Use with Apify MCP

Exact actor: taroyamada/apple-podcast-reviews-monitor

Sample input JSON:

{
"podcastIds": [
"https://podcasts.apple.com/us/podcast/id1535809341"
],
"countries": [
"us"
],
"maxPagesPerPair": 1,
"generateReport": false,
"maxChargeUsd": 0.5,
"delivery": "dataset"
}

Input examples

Existing raw review workflow

{
"podcastIds": ["https://podcasts.apple.com/us/podcast/id1535809341"],
"countries": ["us"],
"maxPagesPerPair": 1,
"generateReport": false,
"maxChargeUsd": 0.5,
"dryRun": false
}

Review summary report

{
"podcastIds": ["https://podcasts.apple.com/us/podcast/id1535809341", "1641234567"],
"countries": ["us", "gb"],
"maxPagesPerPair": 1,
"generateReport": true,
"reportMode": "summary",
"maxChargeUsd": 2,
"dryRun": false
}

Webhook plus canonical dataset delivery

{
"podcastIds": ["https://podcasts.apple.com/us/podcast/id1535809341"],
"countries": ["us"],
"maxPagesPerPair": 1,
"generateReport": true,
"reportMode": "summary",
"maxChargeUsd": 2,
"delivery": "webhook",
"webhookUrl": "https://example.invalid/review-hook",
"dryRun": false
}

Output

The runtime envelope contains meta, the backward-compatible raw reviews array, optional report, canonical delivery rows, delivery, and deliveryAudit. When generateReport=false, rows is the existing raw review array. When generateReport=true, rows contains exactly one report row; raw reviews remain in reviews and are not sent to the dataset.

mode=snapshot remains the default and preserves the existing one-shot behavior. In mode=monitor, reviews contains the current fetched snapshot for diagnostics while rows contains only the new or changed delivery. State is advanced only after canonical PPE delivery succeeds; partial source failures do not advance it.

Raw rows preserve the existing fields (podcastId, country, page, reviewerName, rating, title, content, version, voteCount, updated, and reviewId) and add:

  • actorName: apple-podcast-reviews-monitor
  • rowType: podcast_review
  • sourceUrl: the official iTunes Customer Reviews RSS URL used for the row
  • fetchedAt: UTC run timestamp
  • billingEventName: apify-default-dataset-item

When requested, the single report row contains:

  • showCountrySummaries: review count, average rating, five-point rating distribution, and latest review date for every show/country pair
  • totalReviewCount
  • lowRatingSourceLinkedSamples: up to ten rating-1 or rating-2 samples with their source URLs
  • sourceUrls, generatedAt, and fetchedAt
  • billingEventName: podcast-review-report

Example row shapes. In raw mode the first shape is delivered; in report mode only the second shape is delivered while the raw shape remains in the runtime reviews array:

{
"actorName": "apple-podcast-reviews-monitor",
"rowType": "podcast_review",
"billingEventName": "apify-default-dataset-item",
"podcastId": "https://podcasts.apple.com/us/podcast/id1535809341",
"country": "us",
"page": 1,
"reviewerName": "public-reviewer",
"rating": 1,
"title": "A critical review",
"content": "Public review text.",
"version": "1.0",
"voteCount": 0,
"updated": "2026-07-31T00:00:00Z",
"reviewId": "review-1",
"sourceUrl": "https://itunes.apple.com/us/rss/customerreviews/id=1535809341/sortby=mostrecent/json",
"fetchedAt": "2026-08-01T00:00:00.000Z"
}
{
"actorName": "apple-podcast-reviews-monitor",
"rowType": "podcast_review_report",
"billingEventName": "podcast-review-report",
"reportMode": "summary",
"showCountrySummaries": [
{
"podcastId": "https://podcasts.apple.com/us/podcast/id1535809341",
"country": "us",
"reviewCount": 2,
"averageRating": 3,
"ratingDistribution": { "1": 1, "2": 0, "3": 0, "4": 0, "5": 1 },
"latestReviewDate": "2026-07-31T00:00:00Z"
}
],
"totalReviewCount": 2,
"lowRatingThreshold": 2,
"lowRatingSourceLinkedSamples": [
{
"podcastId": "https://podcasts.apple.com/us/podcast/id1535809341",
"country": "us",
"reviewId": "review-1",
"rating": 1,
"title": "A critical review",
"content": "Public review text.",
"updated": "2026-07-31T00:00:00Z",
"sourceUrl": "https://itunes.apple.com/us/rss/customerreviews/id=1535809341/sortby=mostrecent/json"
}
],
"sourceUrls": ["https://itunes.apple.com/us/rss/customerreviews/id=1535809341/sortby=mostrecent/json"],
"generatedAt": "2026-08-01T00:00:00.000Z",
"fetchedAt": "2026-08-01T00:00:00.000Z"
}

Limits and failure behavior

  • Up to 25 unique podcast IDs, 10 unique country codes, and 10 pages per show/country pair are accepted. Over-limit input fails instead of being silently truncated.
  • Each source request has a timeout and bounded retry for network and server errors. A failed pair is reported in meta.warnings; successful pairs remain available.
  • maxChargeUsd defaults to 2. For report runs, the actor fails closed before dataset write when fetched raw rows plus the report price contract would exceed the cap.
  • Empty output does not issue a dataset POST. A non-2xx dataset response or dataset network failure throws and fails the actor run; partial success is not reported as success.

Pricing and delivery

The existing raw event remains apify-default-dataset-item. The report row is delivered with Actor.pushData(report, "podcast-review-report"), so the platform must return chargedCount >= 1 or the actor fails closed. This change does not modify Cloud pricing; the custom event must already be configured in Apify for a report run to succeed. maxChargeUsd is checked against the rows actually delivered: raw rows in default mode, or the single report row in report mode.

delivery=dataset sends non-empty rows through Actor.pushData; delivery=webhook sends the complete runtime envelope to the supplied webhook and still sends only the canonical rows through Actor.pushData. dryRun=true performs no external write. deliveryAudit is written to output/phase89-delivery-audit.json and, in Apify, to PHASE89_DELIVERY_AUDIT and PHASE87_DELIVERY_AUDIT when available.

Compliance guardrails

  • Uses public Apple/iTunes Customer Reviews RSS JSON only.
  • Does not claim Apple endorsement or infer private reviewer identity.
  • Review text is public source material; use it for reputation and market research.
  • Do not use the output to target individual reviewers.
  • No login, cookie, API key, CAPTCHA bypass, or private endpoint is used.

See also