# iTunes & Apple Media Scraper — Songs, Apps & Podcasts (`logiover/itunes-search-scraper`) Actor

Scrape Apple iTunes by keyword or ID. Extract track name, artist, price, rating, genre, release date, artwork, and description for music, podcasts, apps, movies, ebooks, and audiobooks. No API key, no login.

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

## Pricing

from $1.50 / 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/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

## iTunes & Apple Media Scraper — Songs, Podcasts, Apps & More

Scrape Apple's iTunes Search API by keyword or ID — no API key, no login required. Pull tracks, albums, podcasts, apps, movies, ebooks, and audiobooks from any Apple Store country with full metadata in one run.

### What does iTunes Search Scraper do?

iTunes Search Scraper hits the official Apple iTunes Search API (`itunes.apple.com/search`) and Lookup API (`itunes.apple.com/lookup`) — both are publicly accessible without any authentication. You give it a list of search terms or a list of iTunes IDs, pick the media entity type (music track, podcast, software, movie, etc.), and the actor returns up to 200 results per term in a structured JSON dataset.

Under the hood, the actor performs parallel requests with datacenter proxy rotation for reliability, normalises every raw API field into a clean schema (track name, artist, price, rating, genre, release date, artwork URL, description), and retries transient network errors automatically. Multiple terms run concurrently at up to 5 parallel workers, so a list of 50 artists can yield 10,000 rows in a single run. Lookup mode accepts up to 200 IDs per batch call, with automatic batching for larger ID lists.

No scraping of HTML pages is involved — the iTunes JSON API is the official data source used by Apple's own apps, making it stable and high-throughput.

### Who is it for?

- **Music researchers & analysts** who need track prices, release dates, and genre data across thousands of artists.
- **App marketers & ASO specialists** tracking competitors' app ratings and pricing on the App Store.
- **Podcast producers** extracting podcast metadata, episode counts, and average ratings for competitive analysis.
- **Developers building media apps** who need bulk iTunes catalog data for search features or recommendation engines.
- **Data journalists & analysts** studying Apple's media catalog, pricing trends, or content advisory patterns across countries.

### Use cases

- Track the discography of multiple artists at once — title, price, genre, release date, and album grouping.
- Monitor App Store rankings by scraping `software` entity results for specific keyword searches.
- Build a podcast directory by scraping `podcast` entity for 100+ topic keywords.
- Compare movie prices and ratings across different country stores (US vs GB vs JP).
- Enrich an existing dataset of iTunes IDs with full metadata using lookup mode.

### Why use iTunes Search Scraper?

- **Completely keyless**: uses Apple's official public API — no developer account, no API key, no cookies needed.
- **20+ structured fields**: wrapperType, kind, trackId, trackName, artistName, collectionName, genre, releaseDate, price, currency, rating, ratingCount, duration, artwork URL, description, advisory rating.
- **Bulk and batch-ready**: supports lists of 50+ search terms or hundreds of iTunes IDs in a single run.
- **Multi-entity**: music tracks, albums, songs, podcasts, apps, movies, ebooks, audiobooks, TV seasons — one actor for all Apple media types.
- **Multi-country**: pass any ISO 3166-1 alpha-2 country code to access localised pricing and catalog availability.
- **Export-ready**: download as CSV, JSON, Excel, or XML directly from Apify's dataset view.

### What data can you extract?

Each result row contains the following fields:

| Field | Type | Description |
|---|---|---|
| `wrapperType` | string | Top-level iTunes type: `track`, `collection`, `artist` |
| `kind` | string | Specific kind: `song`, `podcast-episode`, `software`, `feature-movie`, etc. |
| `trackId` | string | Unique iTunes numeric ID for the track or item |
| `trackName` | string | Name of the track, podcast, app, or movie |
| `artistName` | string | Artist, developer, or author name |
| `collectionName` | string | Album, show, or collection the item belongs to |
| `primaryGenreName` | string | Primary genre (e.g. `Pop`, `Business`, `Entertainment`) |
| `releaseDate` | string | ISO 8601 release date |
| `trackPrice` | string | Price of the individual track in local currency |
| `collectionPrice` | string | Price of the full album or collection |
| `currency` | string | 3-letter ISO currency code (e.g. `USD`, `GBP`) |
| `country` | string | Store country code |
| `trackViewUrl` | string | Direct iTunes/App Store URL to the item |
| `artworkUrl100` | string | 100×100 px artwork image URL |
| `description` | string | Full description (apps, podcasts, ebooks) or short description |
| `averageUserRating` | string | Average user rating (0–5 scale) |
| `userRatingCount` | string | Total number of user ratings |
| `contentAdvisoryRating` | string | Age advisory rating (e.g. `Explicit`, `4+`, `PG-13`) |
| `trackTimeMillis` | string | Duration in milliseconds (music tracks, episodes) |
| `searchTerm` | string | The search term that produced this result (search mode) |
| `entity` | string | Entity type used for this result |

**Example JSON output:**

```json
{
  "wrapperType": "track",
  "kind": "song",
  "trackId": "1440818588",
  "trackName": "Shake It Off",
  "artistName": "Taylor Swift",
  "collectionName": "1989",
  "primaryGenreName": "Pop",
  "releaseDate": "2014-08-18T07:00:00Z",
  "trackPrice": "1.29",
  "collectionPrice": "13.99",
  "currency": "USD",
  "country": "US",
  "trackViewUrl": "https://music.apple.com/us/album/shake-it-off/1440818588?i=1440818760",
  "artworkUrl100": "https://is1-ssl.mzstatic.com/image/thumb/Music124/v4/a0/4a/42/a04a42a0-7e1e-8f43-6e15-e02eba8b1e4a/source/100x100bb.jpg",
  "description": null,
  "averageUserRating": "4.5",
  "userRatingCount": "12340",
  "contentAdvisoryRating": null,
  "trackTimeMillis": "219320",
  "searchTerm": "taylor swift",
  "entity": "musicTrack"
}
````

### How to use

#### Option A — Search by keyword

1. Set **Mode** to `Search by keyword`.
2. Enter one or more **Search Terms** (e.g. `["taylor swift", "coldplay", "adele"]`).
3. Choose an **Entity** type — `musicTrack` for songs, `podcast` for podcasts, `software` for apps.
4. Set **Country Code** if you want a non-US store (e.g. `GB`, `JP`, `DE`).
5. Optionally lower **Max Results Per Term** (default 200).
6. Click **Start** and download the dataset.

**Input JSON example:**

```json
{
  "mode": "search",
  "terms": ["taylor swift", "drake", "billie eilish"],
  "entity": "musicTrack",
  "country": "US",
  "maxResults": 200
}
```

#### Option B — Lookup by iTunes ID

1. Set **Mode** to `Lookup by ID`.
2. Paste your list of **iTunes IDs** (e.g. `["1440818588", "1193701556"]`).
3. Set **Country Code** if needed.
4. Click **Start** — each ID returns one result row.

**Input JSON example:**

```json
{
  "mode": "lookup",
  "ids": ["1440818588", "1193701556", "909253"],
  "country": "US"
}
```

### Input parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `search` | `search` (by keyword) or `lookup` (by iTunes ID) |
| `terms` | array | `["taylor swift", "drake"]` | Search keywords. Each term returns up to `maxResults` rows. |
| `entity` | string | `musicTrack` | Media type: `musicTrack`, `album`, `song`, `podcast`, `software`, `movie`, `ebook`, `audiobook`, `tvSeason` |
| `country` | string | `US` | ISO 3166-1 alpha-2 country code for the Apple Store |
| `ids` | array | `[]` | iTunes numeric IDs for lookup mode |
| `maxResults` | integer | `200` | Maximum results per term (1–200) |
| `proxyConfiguration` | object | Datacenter | Apify proxy settings |

**Full input JSON:**

```json
{
  "mode": "search",
  "terms": ["machine learning", "python programming"],
  "entity": "ebook",
  "country": "US",
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["DATACENTER"]
  }
}
```

### Output example

One fully-populated result row:

```json
{
  "wrapperType": "track",
  "kind": "podcast",
  "trackId": "1200361736",
  "trackName": "How I Built This with Guy Raz",
  "artistName": "NPR",
  "collectionName": "How I Built This with Guy Raz",
  "primaryGenreName": "Business",
  "releaseDate": "2016-09-05T04:00:00Z",
  "trackPrice": "-1",
  "collectionPrice": null,
  "currency": "USD",
  "country": "US",
  "trackViewUrl": "https://podcasts.apple.com/us/podcast/how-i-built-this-with-guy-raz/id1200361736?uo=4",
  "artworkUrl100": "https://is2-ssl.mzstatic.com/image/thumb/Podcasts116/v4/de/3f/2b/de3f2b39-0f23-6ebb-7bd7-f8b8f4ba32ac/mza_2765249427272803419.jpeg/100x100bb.jpg",
  "description": "Guy Raz dives into the stories behind some of the world's best known companies...",
  "averageUserRating": "4.8",
  "userRatingCount": "43210",
  "contentAdvisoryRating": "Clean",
  "trackTimeMillis": null,
  "searchTerm": "entrepreneurship",
  "entity": "podcast"
}
```

### Tips for best results

- **Use specific terms** for music — `"taylor swift folklore"` returns more targeted results than `"taylor"`.
- **Entity matters**: searching `"python"` with `entity=software` returns apps; with `entity=ebook` returns programming books.
- **Country stores differ**: the JP store has different pricing and catalog than US. Run the same term with `country=JP` vs `country=US` to compare.
- **Lookup mode is exact**: use it when you already have iTunes IDs (from a previous search run or external source) for 100% match accuracy.
- **Batch your terms**: pass 50 terms in one run — it's faster and cheaper than 50 separate runs.
- **Max 200 per term**: the iTunes API hard-caps at 200 results per request. There is no pagination — use more specific terms if you need deeper catalog coverage.
- **Null fields are normal**: not every entity type populates every field. Apps have `averageUserRating`; music tracks typically don't.
- **Schedule weekly**: use Apify's scheduler to track pricing or rating changes over time for competitor monitoring.
- **Export to CSV** for spreadsheet work — Apify's dataset download supports CSV with proper header rows.
- **Combine with other actors**: feed `trackViewUrl` values into a link scraper, or artist names into a social media scraper for cross-platform enrichment.

### Integrations

- **Google Sheets**: use Apify's Google Sheets integration to automatically write new results to a spreadsheet after each run.
- **Slack**: get a Slack notification with the run summary and a dataset download link via Apify Webhooks.
- **Zapier / Make**: trigger downstream workflows (CRM updates, email alerts, data transforms) when the actor finishes.
- **Webhooks**: configure `POST` to your own endpoint with the dataset URL once the run succeeds.
- **Schedule**: run daily or weekly via Apify's cron scheduler to monitor catalog changes, new releases, or rating shifts.

### API usage

**cURL:**

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/logiover~itunes-search-scraper/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"mode":"search","terms":["adele","ed sheeran"],"entity":"musicTrack","country":"US","maxResults":200}'
```

**Node.js (Apify client):**

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_TOKEN' });
const run = await client.actor('logiover/itunes-search-scraper').call({
  mode: 'search',
  terms: ['adele', 'ed sheeran'],
  entity: 'musicTrack',
  country: 'US',
  maxResults: 200
});
const dataset = await client.dataset(run.defaultDatasetId).listItems();
console.log(dataset.items);
```

**Python:**

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("logiover/itunes-search-scraper").call(run_input={
    "mode": "search",
    "terms": ["adele", "ed sheeran"],
    "entity": "musicTrack",
    "country": "US",
    "maxResults": 200
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)
```

### Use with AI agents (MCP)

You can drive iTunes Search Scraper directly from AI agent workflows via Apify's MCP integration. For example, with Claude: "Use the logiover/itunes-search-scraper actor to get the top 100 pop music tracks in the UK store, then summarize the most common artists and average prices." The actor returns clean JSON that LLMs can analyze inline — no scraping or data wrangling on the AI side.

### FAQ

#### Does this require an API key or Apple developer account?

No. The iTunes Search API (`itunes.apple.com/search`) and Lookup API (`itunes.apple.com/lookup`) are fully public and keyless. You need no Apple ID, no developer account, and no authentication token.

#### What media types does it cover?

`musicTrack`, `album`, `song`, `podcast`, `software` (App Store apps), `movie`, `ebook`, `audiobook`, and `tvSeason`. These are all supported iTunes entity types.

#### How many results can I get per search term?

The iTunes API caps each request at 200 results. To get more coverage for a popular term, use more specific sub-terms (e.g. `"taylor swift folklore"`, `"taylor swift lover"`, etc.).

#### What countries are supported?

All countries where Apple operates an iTunes/App Store: US, GB, DE, FR, JP, AU, CA, BR, and 100+ more. Pass the ISO 3166-1 alpha-2 code.

#### Why are some fields null in the output?

Not every entity type populates every field. For example, `trackTimeMillis` is populated for songs and episodes but not ebooks. `averageUserRating` appears for apps and podcasts but not music tracks. This is how the Apple API works — null fields are expected.

#### How do I get results in a different currency?

Set the `country` field to the target store's country code. Pricing is always returned in the local store currency (e.g. `GBP` for `country=GB`).

#### How do I export the data?

From the Apify dataset view, click **Export** and choose CSV, JSON, Excel, or XML. You can also use the Apify API or client SDK to download programmatically.

#### How fast is it?

With 5 concurrent workers and datacenter proxies, you can process 50 search terms and push ~10,000 results in under 2 minutes.

#### Can I monitor App Store ratings over time?

Yes. Use the `software` entity, schedule the actor to run weekly with the same input terms, and compare `averageUserRating` and `userRatingCount` across runs.

#### Is the data real-time?

Yes. The iTunes API returns live catalog data including current prices and ratings.

#### Can I use lookup mode to enrich an existing dataset?

Yes — collect iTunes IDs from a search run, then pass them to a second run in `lookup` mode for fresher or more complete metadata.

#### How often should I run it?

For pricing or rating monitoring: weekly. For new release tracking: daily. For one-off catalog research: as needed.

### Is it legal?

This actor queries Apple's publicly accessible iTunes Search API, which Apple provides for developers and apps to access catalog data without authentication. The data returned is the same as what any user sees in the iTunes Store. This actor does not bypass paywalls, scrape HTML, or circumvent any access controls.

Use the data for research, analytics, and application development in accordance with Apple's terms of service (`https://www.apple.com/legal/internet-services/itunes/appstore/dev/stdeula/`) and applicable data protection laws. Do not use it to reproduce Apple's catalog commercially or to circumvent any licensing terms.

### Related scrapers

- **[Apple Podcasts Episode Scraper](https://apify.com/logiover/apple-podcasts-episode-scraper)** — Deep-dive into podcast episodes, full transcripts, and show metadata.
- **[Google Play Data API](https://apify.com/logiover/google-play-data-api)** — Android equivalent: apps, ratings, reviews, and pricing from Google Play Store.
- **[IMDb Scraper](https://apify.com/logiover/imdb-scraper)** — Movie and TV show metadata, cast, ratings, and box office data.
- **[Discogs Scraper](https://apify.com/logiover/discogs-scraper)** — Music marketplace data: vinyl, CDs, sales prices, and collector information.

# Actor input Schema

## `mode` (type: `string`):

Operation mode: 'search' to search by terms, 'lookup' to fetch by iTunes IDs.

## `terms` (type: `array`):

List of search terms (used in 'search' mode). Each term produces up to maxResults rows. Leave EMPTY to fetch a spread of popular chart-topping artists.

## `entity` (type: `string`):

Type of media to search.

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

Apple/iTunes storefront country (ISO 3166-1 alpha-2). Prices, availability and charts vary by store.

## `ids` (type: `array`):

List of iTunes IDs to look up (used in 'lookup' mode).

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

Maximum number of results per search term (1–200). Default: 200.

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

Proxy settings. Automatic Apify Proxy is recommended for the public iTunes API.

## Actor input object example

```json
{
  "mode": "search",
  "terms": [
    "taylor swift",
    "drake"
  ],
  "entity": "musicTrack",
  "country": "US",
  "ids": [],
  "maxResults": 200,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All records extracted by this run. Open the Dataset tab to browse, filter, and export as CSV, JSON, or Excel.

# 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 = {
    "terms": [
        "taylor swift",
        "drake"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logiover/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 = {
    "terms": [
        "taylor swift",
        "drake",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("logiover/itunes-search-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 '{
  "terms": [
    "taylor swift",
    "drake"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call logiover/itunes-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "iTunes & Apple Media Scraper — Songs, Apps & Podcasts",
        "description": "Scrape Apple iTunes by keyword or ID. Extract track name, artist, price, rating, genre, release date, artwork, and description for music, podcasts, apps, movies, ebooks, and audiobooks. No API key, no login.",
        "version": "1.0",
        "x-build-id": "5MWgK4SnQZKRor3eU"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/logiover~itunes-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-logiover-itunes-search-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/logiover~itunes-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-logiover-itunes-search-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/logiover~itunes-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-logiover-itunes-search-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": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "search",
                            "lookup"
                        ],
                        "type": "string",
                        "description": "Operation mode: 'search' to search by terms, 'lookup' to fetch by iTunes IDs.",
                        "default": "search"
                    },
                    "terms": {
                        "title": "Search Terms",
                        "type": "array",
                        "description": "List of search terms (used in 'search' mode). Each term produces up to maxResults rows. Leave EMPTY to fetch a spread of popular chart-topping artists.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "entity": {
                        "title": "Media Entity",
                        "enum": [
                            "musicTrack",
                            "album",
                            "song",
                            "musicArtist",
                            "podcast",
                            "podcastAuthor",
                            "software",
                            "iPadSoftware",
                            "movie",
                            "ebook",
                            "audiobook",
                            "tvSeason",
                            "musicVideo",
                            "shortFilm",
                            "mix",
                            "all"
                        ],
                        "type": "string",
                        "description": "Type of media to search.",
                        "default": "musicTrack"
                    },
                    "country": {
                        "title": "Store Country",
                        "enum": [
                            "US",
                            "GB",
                            "CA",
                            "AU",
                            "DE",
                            "FR",
                            "IT",
                            "ES",
                            "NL",
                            "SE",
                            "NO",
                            "DK",
                            "FI",
                            "IE",
                            "BE",
                            "AT",
                            "CH",
                            "PT",
                            "PL",
                            "GR",
                            "TR",
                            "RU",
                            "BR",
                            "MX",
                            "AR",
                            "CL",
                            "CO",
                            "JP",
                            "KR",
                            "CN",
                            "HK",
                            "TW",
                            "IN",
                            "ID",
                            "TH",
                            "VN",
                            "PH",
                            "MY",
                            "SG",
                            "SA",
                            "AE",
                            "IL",
                            "ZA",
                            "NZ"
                        ],
                        "type": "string",
                        "description": "Apple/iTunes storefront country (ISO 3166-1 alpha-2). Prices, availability and charts vary by store.",
                        "default": "US"
                    },
                    "ids": {
                        "title": "iTunes IDs",
                        "type": "array",
                        "description": "List of iTunes IDs to look up (used in 'lookup' mode).",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxResults": {
                        "title": "Max Results Per Term",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Maximum number of results per search term (1–200). Default: 200.",
                        "default": 200
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. Automatic Apify Proxy is recommended for the public iTunes API.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
