# Apple Podcasts Scraper (`shahidirfan/apple-podcasts-scraper`) Actor

Extract comprehensive podcast data from Apple Podcasts. Scrape episodes, metadata, ratings, reviews, and show details instantly. Ideal for podcasters, researchers, and data analysts. Get structured podcast intelligence for your projects.

- **URL**: https://apify.com/shahidirfan/apple-podcasts-scraper.md
- **Developed by:** [Shahid Irfan](https://apify.com/shahidirfan) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## 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.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.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/platform/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 Scraper

Extract podcast chart and search data from Apple Podcasts in a clean, ready-to-use dataset. Collect top ranked podcasts from chart URLs or discover podcasts by keyword with controllable result size and pagination limits. Built for research, tracking, analysis, and monitoring workflows.

### Features

- **Chart URL mode** - Collect ranked podcasts from Apple Podcasts chart URLs.
- **Keyword mode** - Search podcasts by keyword and collect matching records.
- **Country and genre aware** - Reads storefront and genre context from input URL.
- **Clean output** - Removes empty values so dataset records stay compact.
- **Configurable result size** - Control total results and pagination depth.

### Use Cases

#### Podcast Market Research
Track top podcast names, publishers, categories, and ranking positions for a specific country or genre.

#### Competitor Monitoring
Monitor how often target podcast brands appear in chart or keyword results across recurring runs.

#### Content Discovery
Find trending podcasts around a topic keyword and export structured data for editorial planning.

#### Dataset Enrichment
Use podcast IDs, URLs, and feed links to enrich existing content intelligence pipelines.

---

### Input Parameters

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `url` | String | No | `https://podcasts.apple.com/us/charts?genre=1489` | Apple Podcasts chart URL for chart mode. |
| `keyword` | String | No | `news` | Keyword for search mode. If set, keyword mode is used. |
| `results_wanted` | Integer | No | `20` | Maximum number of records to return. |
| `max_pages` | Integer | No | `5` | Maximum pages to read in keyword mode. |
| `proxyConfiguration` | Object | No | `{ "useApifyProxy": false }` | Optional proxy settings. |

At least one of `url` or `keyword` should be provided.

---

### Output Data

Each dataset item can include:

| Field | Type | Description |
|---|---|---|
| `sourceType` | String | `chart` or `keyword` |
| `rank` | Integer | Rank position in the returned set |
| `name` | String | Podcast name (chart mode) |
| `collectionName` | String | Podcast name (keyword mode) |
| `artistName` | String | Publisher/creator name |
| `category` | String | Category label (chart mode) |
| `primaryGenreName` | String | Primary genre (keyword mode) |
| `podcastId` | String | Apple podcast ID |
| `collectionId` | Integer | Collection ID in keyword mode |
| `podcastUrl` | String | Podcast page URL |
| `collectionViewUrl` | String | Collection URL in keyword mode |
| `feedUrl` | String | Feed URL when available |
| `country` | String | Storefront country code |
| `genreId` | String | Genre ID parsed from chart URL |

---

### Usage Examples

#### Top Podcasts from News Chart URL

```json
{
    "url": "https://podcasts.apple.com/us/charts?genre=1489",
    "results_wanted": 30
}
````

#### Keyword Search for Tech Podcasts

```json
{
    "keyword": "technology",
    "results_wanted": 50,
    "max_pages": 3
}
```

#### Country-Specific Chart with Proxy

```json
{
    "url": "https://podcasts.apple.com/gb/charts?genre=1489",
    "results_wanted": 40,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
}
```

***

### Sample Output

```json
{
    "sourceType": "chart",
    "sourceUrl": "https://podcasts.apple.com/us/charts?genre=1489",
    "country": "us",
    "genreId": "1489",
    "rank": 1,
    "podcastId": "1200361736",
    "name": "The Daily",
    "artistName": "The New York Times",
    "category": "News",
    "podcastUrl": "https://podcasts.apple.com/us/podcast/the-daily/id1200361736",
    "releaseDate": "2026-05-22T07:00:00-07:00",
    "image170": "https://is1-ssl.mzstatic.com/image/thumb/Podcasts221/v4/ab/64/66/ab6466a9-9a7d-e20e-7a3d-bc5be37d29ce/mza_15084852813176276273.jpg/170x170bb.webp"
}
```

***

### Tips for Best Results

#### Choose the Right Mode

- Use `url` for chart tracking workflows.
- Use `keyword` when you need discovery by topic.

#### Keep QA Runs Fast

- Start with `results_wanted: 20` for quick checks.
- Increase gradually for production jobs.

#### Scale Reliably

- Enable proxy configuration for large or frequent runs.
- Use scheduled runs for daily or hourly monitoring.

***

### Integrations

Connect the dataset with:

- **Google Sheets** - Lightweight trend reporting.
- **Airtable** - Searchable podcast tracking base.
- **Looker Studio** - Dashboard and rank movement visuals.
- **Make** - No-code automations.
- **Zapier** - Trigger downstream actions.
- **Webhooks** - Push data into internal services.

#### Export Formats

- **JSON** - Programmatic processing.
- **CSV** - Spreadsheet analysis.
- **Excel** - Business reporting.
- **XML** - Legacy integrations.

***

### Frequently Asked Questions

#### Can I use both `url` and `keyword`?

Yes. If `keyword` is provided, keyword mode is used.

#### What happens if some fields are missing?

Only available values are returned, so empty fields are automatically excluded.

#### Can I collect more than 20 results?

Yes. Increase `results_wanted` as needed.

#### Does it support different countries?

Yes. Country is inferred from the chart URL path.

#### Is proxy required?

No. Proxy is optional but recommended for heavier usage.

***

### Support

For issues or feature requests, use the Apify Console issue channels.

#### Resources

- [Apify Documentation](https://docs.apify.com/)
- [Apify API Reference](https://docs.apify.com/api/v2)
- [Scheduling Runs](https://docs.apify.com/platform/schedules)

***

### Legal Notice

This actor is designed for lawful data collection and analysis. You are responsible for complying with Apple terms, local laws, and any applicable usage policies.

# Actor input Schema

## `url` (type: `string`):

Example: https://podcasts.apple.com/us/charts?genre=1489

## `keyword` (type: `string`):

Use keyword search mode instead of URL mode.

## `results_wanted` (type: `integer`):

Maximum number of podcasts to return.

## `max_pages` (type: `integer`):

Maximum pages for keyword mode pagination.

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

Apify proxy settings for request routing.

## Actor input object example

```json
{
  "url": "https://podcasts.apple.com/us/charts?genre=1489",
  "keyword": "news",
  "results_wanted": 20,
  "max_pages": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# 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 = {
    "url": "https://podcasts.apple.com/us/charts?genre=1489",
    "keyword": "news",
    "results_wanted": 20,
    "max_pages": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("shahidirfan/apple-podcasts-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 = {
    "url": "https://podcasts.apple.com/us/charts?genre=1489",
    "keyword": "news",
    "results_wanted": 20,
    "max_pages": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("shahidirfan/apple-podcasts-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 '{
  "url": "https://podcasts.apple.com/us/charts?genre=1489",
  "keyword": "news",
  "results_wanted": 20,
  "max_pages": 5
}' |
apify call shahidirfan/apple-podcasts-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Apple Podcasts Scraper",
        "description": "Extract comprehensive podcast data from Apple Podcasts. Scrape episodes, metadata, ratings, reviews, and show details instantly. Ideal for podcasters, researchers, and data analysts. Get structured podcast intelligence for your projects.",
        "version": "0.0",
        "x-build-id": "q2Kjerg1q95XIydF5"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/shahidirfan~apple-podcasts-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-shahidirfan-apple-podcasts-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/shahidirfan~apple-podcasts-scraper/runs": {
            "post": {
                "operationId": "runs-sync-shahidirfan-apple-podcasts-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/shahidirfan~apple-podcasts-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-shahidirfan-apple-podcasts-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": {
                    "url": {
                        "title": "Apple Podcasts chart URL",
                        "type": "string",
                        "description": "Example: https://podcasts.apple.com/us/charts?genre=1489"
                    },
                    "keyword": {
                        "title": "Keyword",
                        "type": "string",
                        "description": "Use keyword search mode instead of URL mode."
                    },
                    "results_wanted": {
                        "title": "Results wanted",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum number of podcasts to return.",
                        "default": 20
                    },
                    "max_pages": {
                        "title": "Max pages",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Maximum pages for keyword mode pagination.",
                        "default": 5
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify proxy settings for request routing.",
                        "default": {
                            "useApifyProxy": false
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
