# Apple Podcasts Reviews Scraper (`straightforward_hydra/apple-podcasts-reviews-scraper`) Actor

Scrape ratings and reviews for any Apple Podcasts show, by podcast ID or name, across storefronts. Official Apple RSS, no key needed.

- **URL**: https://apify.com/straightforward\_hydra/apple-podcasts-reviews-scraper.md
- **Developed by:** [Dev D](https://apify.com/straightforward_hydra) (community)
- **Categories:** Social media, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 reviews

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 a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js/docs.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/integrations/mcp.md).

If your project is in a different language, use 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 Reviews Scraper 🎙️⭐

**Scrape ratings and reviews for any Apple Podcasts show — by podcast ID or name, across storefronts. Official Apple RSS, no key required.**

This Actor pulls listener reviews for one or more podcasts straight from Apple's public reviews feed, with filters for storefront (country), sort order and star rating, and returns clean structured records — star rating, title, full text, author and date. Perfect for podcasters, networks and market researchers tracking audience sentiment.

> Uses Apple's official public reviews RSS — no key, no login, no browser.

---

### What you can do with it

- 🎙️ **Track your show's reviews** — monitor sentiment, catch complaints, measure episodes.
- 🕵️ **Competitor analysis** — see what listeners love and hate about other podcasts.
- 🌍 **Multi-country** — pull reviews from several Apple storefronts at once.
- ⭐ **Filter by rating** — isolate 1-star complaints or 5-star praise.
- 🔔 **Review alerts** — run on a schedule and push new negative reviews to Slack.

### Features

- ✅ **No API key** — official Apple endpoint, works out of the box.
- ✅ **By podcast ID or name** — pass IDs, or let it resolve names.
- ✅ **Multi-storefront** — reviews per country (us, gb, ca, au, de, …).
- ✅ **Filters** — sort by recent / helpful, min/max star rating.
- ✅ **Resilient** — automatically works around Apple's flaky review feed.

---

### Finding a podcast's ID

The **podcast ID** is the number in the Apple Podcasts URL:
`podcasts.apple.com/us/podcast/the-daily/id`**`1200361736`** → ID is `1200361736`.
Or just pass the podcast **name** and the Actor resolves it.

### Input

| Field | Description |
|---|---|
| **Podcast IDs** | Apple collection IDs, e.g. `1200361736`. |
| **Podcast names** | Names to resolve automatically, e.g. `The Daily`. |
| **Storefronts** | Country codes, e.g. `us`, `gb`, `ca`. |
| **Sort by** | Most recent / most helpful. |
| **Min / Max rating** | Keep reviews in a star range (1–5). |
| **Max reviews per podcast** | Cap per podcast per storefront (Apple exposes ~500). |
| **Max results** | Overall cap. |

#### Example — recent 1–2 star reviews across two stores

```json
{
  "podcastNames": ["The Joe Rogan Experience"],
  "countries": ["us", "gb"],
  "sortBy": "mostRecent",
  "maxRating": 2
}
````

### Output

Each row is one review:

```json
{
  "podcast_id": "1200361736",
  "podcast_name": "The Daily",
  "country": "us",
  "review_id": "10863…",
  "rating": 5,
  "title": "Essential listening",
  "content": "Best daily news podcast out there…",
  "author": "listener_jane",
  "author_url": "https://itunes.apple.com/us/reviews/id…",
  "vote_sum": 3,
  "vote_count": 4,
  "updated": "2026-07-15T09:12:00-07:00"
}
```

### Run it on a schedule

Schedule the Actor to pull new reviews daily, and connect a **Slack / email / webhook / Google Sheets** integration to route negative reviews to your team.

### Notes & limitations

- Uses Apple's official public reviews RSS — no key needed.
- Apple exposes up to ~500 reviews per podcast **per storefront** — pull multiple countries for more coverage.
- Ratings are 1–5 stars. Reviews are public listener data.
- Apple's review feed is occasionally flaky; this Actor retries across equivalent endpoints to get complete results.

***

#### Keywords

Apple Podcasts reviews, podcast reviews, podcast review scraper, podcast ratings, Apple Podcasts scraper, podcast data, podcast analytics, podcast sentiment, listener reviews, podcast market research, podcast monitoring, review scraper, Apple Podcasts API, podcast feedback, podcast intelligence, iTunes podcast reviews, podcast star ratings, podcast audience, voice of listener, podcast reputation.

# Actor input Schema

## `podcastIds` (type: `array`):

Apple Podcasts collection IDs, e.g. 1200361736 (The Daily). Find it in the URL: podcasts.apple.com/us/podcast/.../id<ID>.

## `podcastNames` (type: `array`):

Podcast names to look up instead of IDs, e.g. "The Joe Rogan Experience". The top match is used. Merged with the IDs above.

## `countries` (type: `array`):

Two-letter storefront codes to pull reviews from, e.g. us, gb, ca, au, de. Reviews are per-storefront.

## `sortBy` (type: `string`):

Order reviews by most recent or most helpful.

## `minRating` (type: `integer`):

Only keep reviews with at least this star rating (1-5). Leave empty for all.

## `maxRating` (type: `integer`):

Only keep reviews with at most this star rating (1-5). Leave empty for all.

## `maxReviewsPerPodcast` (type: `integer`):

Cap reviews per podcast per storefront. Apple exposes up to ~500. Leave empty for all available.

## `maxResults` (type: `integer`):

Stop after this many reviews in total. Leave empty for no limit.

## `proxyConfiguration` (type: `object`):

Apple returns no review data from datacenter IPs, so a residential proxy is required. Defaults to Apify Residential proxy.

## Actor input object example

```json
{
  "podcastIds": [
    "1200361736"
  ],
  "countries": [
    "us"
  ],
  "sortBy": "mostRecent",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "podcastIds": [
        "1200361736"
    ],
    "countries": [
        "us"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("straightforward_hydra/apple-podcasts-reviews-scraper").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 = {
    "podcastIds": ["1200361736"],
    "countries": ["us"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("straightforward_hydra/apple-podcasts-reviews-scraper").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 '{
  "podcastIds": [
    "1200361736"
  ],
  "countries": [
    "us"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call straightforward_hydra/apple-podcasts-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=straightforward_hydra/apple-podcasts-reviews-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Apple Podcasts Reviews Scraper",
        "description": "Scrape ratings and reviews for any Apple Podcasts show, by podcast ID or name, across storefronts. Official Apple RSS, no key needed.",
        "version": "0.1",
        "x-build-id": "emIBMbJpMLH1S1cqP"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/straightforward_hydra~apple-podcasts-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-straightforward_hydra-apple-podcasts-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/straightforward_hydra~apple-podcasts-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-straightforward_hydra-apple-podcasts-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/straightforward_hydra~apple-podcasts-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-straightforward_hydra-apple-podcasts-reviews-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "podcastIds": {
                        "title": "Podcast IDs",
                        "type": "array",
                        "description": "Apple Podcasts collection IDs, e.g. 1200361736 (The Daily). Find it in the URL: podcasts.apple.com/us/podcast/.../id<ID>.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "podcastNames": {
                        "title": "Podcast names (resolved automatically)",
                        "type": "array",
                        "description": "Podcast names to look up instead of IDs, e.g. \"The Joe Rogan Experience\". The top match is used. Merged with the IDs above.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "countries": {
                        "title": "Storefronts (country codes)",
                        "type": "array",
                        "description": "Two-letter storefront codes to pull reviews from, e.g. us, gb, ca, au, de. Reviews are per-storefront.",
                        "default": [
                            "us"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "sortBy": {
                        "title": "Sort by",
                        "enum": [
                            "mostRecent",
                            "mostHelpful"
                        ],
                        "type": "string",
                        "description": "Order reviews by most recent or most helpful.",
                        "default": "mostRecent"
                    },
                    "minRating": {
                        "title": "Minimum rating",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Only keep reviews with at least this star rating (1-5). Leave empty for all."
                    },
                    "maxRating": {
                        "title": "Maximum rating",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "Only keep reviews with at most this star rating (1-5). Leave empty for all."
                    },
                    "maxReviewsPerPodcast": {
                        "title": "Max reviews per podcast (per storefront)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Cap reviews per podcast per storefront. Apple exposes up to ~500. Leave empty for all available."
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Stop after this many reviews in total. Leave empty for no limit."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy",
                        "type": "object",
                        "description": "Apple returns no review data from datacenter IPs, so a residential proxy is required. Defaults to Apify Residential proxy.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
