# iTunes Search Scraper — Apps, Music, Podcasts & Books (`thirdwatch/itunes-search-scraper`) Actor

Search Apple's iTunes/App Store catalog via the official public Search API — apps, music, podcasts, books and movies with prices, ratings, genres and artwork. No key needed. Built for ASO research, catalog building and pricing data.

- **URL**: https://apify.com/thirdwatch/itunes-search-scraper.md
- **Developed by:** [Thirdwatch](https://apify.com/thirdwatch) (community)
- **Categories:** Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## iTunes Search Scraper - Apps, Music, Podcasts & Books

> **Thirdwatch portfolio:** 8,800+ users across 140+ public Actors, 2M+ records delivered, >95% run success. [Explore all Thirdwatch Actors](https://apify.com/thirdwatch).

> Search Apple's catalog (App Store apps, music, podcasts, books and movies) in any storefront and export prices, ratings, genres, versions and artwork as clean JSON.

### What you get

One row per catalog item that matches your search terms. For apps you get the name, developer, bundle ID, price, average rating, rating count, age rating, genres, current version, release date, a description excerpt and the App Store link. Podcasts, music, books and movies come back in the same shape, with the fields Apple publishes for that media type.

Pick a storefront (US, GB, IN, DE, JP and so on) to see the local catalog, prices and currency.

### Why use this iTunes Search scraper

- **Seven catalogs, one schema.** Apps, songs, albums, artists, podcasts, e-books and movies share the same output fields.
- **Any storefront.** Set a two-letter country code to compare local prices, currencies and availability.
- **App Store research fields.** Bundle ID, version, rating, rating count and age rating for every app.
- **No account or key.** Paste search terms and run.
- **Works with empty input.** Run it with no settings and you get a small sample search, so you can see the output before configuring anything.

### Scrape iTunes data in minutes

1. Add one or more search terms.
2. Choose the media type and storefront.
3. Set **Max results per query** and click **Start**. Download the results as JSON, CSV or Excel, or read them through the Apify API.

Top meditation apps in the UK App Store:

```json
{
  "queries": ["meditation", "sleep sounds"],
  "media": "apps",
  "country": "GB",
  "maxResults": 50
}
```

Podcasts about a topic in the US store:

```json
{
  "queries": ["product management"],
  "media": "podcasts",
  "country": "US",
  "maxResults": 25
}
```

### Input parameters

| Parameter | Required | Description |
|---|---:|---|
| `queries` | Yes | Free-text search terms, e.g. app names, artists, podcast topics. |
| `media` | No | `apps`, `music`, `podcasts`, `books`, `movies`, `albums` or `artists`. Default: `apps`. |
| `country` | No | Two-letter storefront code such as `US`, `GB`, `IN`, `DE`. Default: `US`. |
| `maxResults` | No | Results per search term, 1 to 200. Default: `25`. |

### Output fields

| Field | Description |
|---|---|
| `type` | Apple's record type: `software`, `track`, `collection` or `artist`. Empty for e-books. |
| `kind` | Specific kind, e.g. `software`, `podcast`, `song`, `ebook`, `feature-movie`. |
| `trackId` | Apple catalog ID (the number in the App Store / Apple Podcasts URL). |
| `name` | App, track, album, book or show name. |
| `seller` | Developer, publisher or artist. |
| `bundleId` | iOS bundle identifier (apps only). |
| `price`, `currency` | Price in the storefront's currency. `0.0` means free. |
| `rating`, `ratingCount` | Average user rating (1 to 5) and number of ratings, where Apple publishes them. |
| `contentAdvisory` | Age rating (apps) or content advisory (`Clean`, `Explicit`). |
| `genres` | Genre list. |
| `releaseDate` | Original release date, or latest episode date for podcasts. |
| `version` | Current app version. |
| `description` | First 600 characters of the store description (apps and e-books). |
| `url` | App Store, Apple Music, Apple Podcasts or Apple Books link. |
| `artwork` | 100x100 artwork URL. |
| `query` | The search term that returned this row. |

#### Example result

```json
{
  "type": "software",
  "kind": "software",
  "trackId": 1232780281,
  "name": "Notion: Notes, Tasks, AI",
  "seller": "Notion Labs, Incorporated",
  "bundleId": "notion.id",
  "price": 0.0,
  "currency": "USD",
  "rating": 4.77482,
  "ratingCount": 90575,
  "contentAdvisory": "4+",
  "genres": ["Productivity", "Business"],
  "releaseDate": "2017-09-14T19:07:31Z",
  "version": "1.7.350",
  "description": "Notion is an AI-powered all-in-one workspace that helps individuals and teams write notes, manage tasks, organize projects, and collaborate in one place...",
  "url": "https://apps.apple.com/us/app/notion-notes-tasks-ai/id1232780281?uo=4",
  "artwork": "https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/17/a6/b9/17a6b901-c46f-ef67-c7b5-288195b768b8/AppIconProd-0-0-1x_U007epad-0-0-0-1-0-0-85-220.png/100x100bb.jpg",
  "query": "notion"
}
```

### Common use cases

- **App Store optimization (ASO):** see which apps rank for a keyword in each storefront, with ratings and rating counts.
- **Competitor tracking:** schedule a daily run to record competitors' versions, prices and rating counts over time.
- **Price comparison:** compare app, book and movie prices across storefronts.
- **Podcast research:** build a list of shows on a topic with publisher, genres and latest episode date.
- **Catalog enrichment:** map product or artist names to Apple IDs and store links.

### Compared to alternatives

- **vs other App Store scrapers on the Store:** one Actor covers apps, music, podcasts, books and movies, and pay-per-result billing means a search with no matches costs nothing.
- **vs building your own:** no request pacing, retries or field mapping to maintain; paste search terms and consume the dataset.

### Limitations

- Apple returns at most 200 results per search term, ranked by its own relevance order. Use more specific or additional terms to go deeper.
- `rating` and `ratingCount` are published for apps and e-books; podcasts and music leave them empty.
- `description` is trimmed to 600 characters and is empty for podcasts, songs, albums and artists.
- Results show the catalog of the chosen storefront. Items not sold in that country do not appear.
- Reviews and in-app purchase lists are not included.

### FAQ

**Do I need an Apple account or API key?**

No. The Actor reads Apple's public catalog search. There is nothing to configure.

**How do I search a different country's App Store?**

Set `country` to its two-letter code, for example `IN` for India or `JP` for Japan. Prices come back in that storefront's currency.

**Can I track rating changes over time?**

Yes. Save your input as a task and attach a daily schedule; each run records the current rating and rating count.

**What happens when a search returns nothing?**

The run finishes with no rows for that term. You are not charged for empty results.

### Related Actors

- [App Store Metadata Scraper (Apple + Google Play)](https://apify.com/thirdwatch/app-store-metadata-scraper) — Thirdwatch
- [Spotify Scraper](https://apify.com/thirdwatch/spotify-scraper) — Thirdwatch

Last verified: 2026-11

More scrapers at [thirdwatch.dev](https://thirdwatch.dev).

# Actor input Schema

## `queries` (type: `array`):

Free-text catalog searches.

## `media` (type: `string`):

Catalog to search.

## `country` (type: `string`):

Two-letter storefront code (US, GB, IN…).

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

Upper bound per query.

## Actor input object example

```json
{
  "queries": [
    "spotify"
  ],
  "media": "apps",
  "country": "US",
  "maxResults": 25
}
```

# Actor output Schema

## `results` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("thirdwatch/itunes-search-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("thirdwatch/itunes-search-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call thirdwatch/itunes-search-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,thirdwatch/itunes-search-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/NEUBOJe5hkYrof0ns/builds/BUBWGNhH6vgtT2HFJ/openapi.json
