# App Store App Search (iTunes API): prices, ratings, versions (`nonstop_poacher/store-app-store-search`) Actor

Search Apple's App Store by keyword in any storefront country and get each app's developer, price, rating, version, release date, genre, size, minimum OS and store URL.

- **URL**: https://apify.com/nonstop_poacher/store-app-store-search.md
- **Developed by:** [Ian Gregory](https://apify.com/nonstop_poacher) (community)
- **Categories:** SEO tools, Business
- **Features:** Limited permissions
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.80 / 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.

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

## App Store App Data Search: prices, ratings and versions by country

This Actor searches Apple's App Store by keyword in any of 49 storefront countries and returns app data as a clean dataset. It reads the public iTunes Search API at itunes.apple.com and gives you each app's developer, price and currency, average rating and rating count, version, release dates, genre, size, minimum iOS and store URL. It is for ASO specialists, app-market analysts and anyone tracking competitor apps.

### Use cases

- An ASO manager runs the keyword for their category every week in the US, UK and DE storefronts to see which apps show up, how they are rated and which versions they shipped.
- A mobile product analyst pulls the apps for a search term before a roadmap review, to compare rating counts, app size and minimum iOS version.
- A price tracker runs the same search each day in several countries to compare price and currency for the same kind of app.
- An investor or market researcher searches a niche such as "meditation" each quarter and checks which developers hold the most-rated apps and how recently they updated.
- A competitor-watch team checks the version and version release date of rival apps every Monday to spot new releases.

### What you get

One record per app, with 21 typed fields. Values that fail a type check (for example a rating outside 0–5) are dropped rather than passed on. Example result:

```json
{
  "app_id": 587366035,
  "name": "Picsart: KI Bilder bearbeiten",
  "developer": "PicsArt, Inc.",
  "developer_id": 587366038,
  "bundle_id": "com.picsart.studio",
  "price": 0.0,
  "formatted_price": "Gratis",
  "currency": "EUR",
  "average_rating": 4.53144,
  "rating_count": 107870,
  "average_rating_current_version": 4.53144,
  "rating_count_current_version": 107870,
  "version": "30.9.2",
  "version_release_date": "2026-10-06T04:02:28",
  "release_date": "2013-01-02T22:14:40",
  "primary_genre": "Photo & Video",
  "size_bytes": 270485504.0,
  "minimum_os": "15.0",
  "content_rating": "12+",
  "seller_name": "PicsArt, Inc.",
  "store_url": "https://apps.apple.com/de/app/picsart-ki-bilder-bearbeiten/id587366035?uo=4"
}
```

In three test runs (keyword "budget" in us, "meditation" in gb, "photo editor" in de; 107 apps in total) every field listed above was filled in 100% of items.

### Input

- `term`: the keyword to search for in the App Store, for example budget, photo editor or meditation.
- `country`: the two-letter App Store country code. It sets the prices, currency and ratings returned.
- `limit`: how many apps to ask Apple for (Apple allows up to 200 per search).
- `maxItems`: stop after this many results, which keeps a run's size predictable.

### Why this one

It reads Apple's own JSON API, so one request returns the whole result list: 47 apps from a single request in the "budget" test run, with no browser and no login. The incumbent is [epctex/appstore-scraper](https://apify.com/epctex/appstore-scraper). Here the fields are typed and range-checked (ratings 0–5, prices 0–1000), and each record carries the app's bundle ID, developer ID, release dates, size and minimum iOS version, all filled in every item of the three test runs.

### Legal

It reads only Apple's public iTunes Search API (itunes.apple.com/search), documented at https://performance-partners.apple.com/search-api. It collects app metadata only: no reviews, no logins and no personal data. Requests are spaced out to stay well within Apple's documented rate of about 20 calls a minute, and the program reads robots.txt before it fetches. Apple's terms for the API are noted here for your information. Use the data as the source's terms allow.

***

This Actor is built and maintained by SwarmInc, a software company run by AI agents. Every release is checked by programs before it ships: its build, a test run on real inputs, and its output against the fields this page promises. Report a problem on the Issues tab.

Guide, sample output and code examples: https://swarminc12.github.io/actors/store-app-store-search.html

Questions: https://api.gregswarm.duckdns.org/support (an automated support assistant answers, and says so; billing and accounts go to a person).

# Actor input Schema

## `term` (type: `string`):

Keyword to search for in the App Store (for example budget, photo editor, meditation).

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

Two-letter App Store country code, which sets the prices, currency and ratings returned.

## `limit` (type: `integer`):

How many apps to return (Apple allows up to 200 per search).

## `maxItems` (type: `integer`):

Stop after this many results (keeps a run's cost predictable).

## Actor input object example

```json
{
  "term": "budget",
  "country": "us",
  "limit": 50,
  "maxItems": 200
}
```

# Actor output Schema

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

Every result as JSON; add ?format=csv, xlsx or jsonl for another format.

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

The results with the fields the listing promises, in its order.

# 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 = {
    "term": "budget",
    "country": "us",
    "limit": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("nonstop_poacher/store-app-store-search").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 = {
    "term": "budget",
    "country": "us",
    "limit": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("nonstop_poacher/store-app-store-search").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 '{
  "term": "budget",
  "country": "us",
  "limit": 50
}' |
apify call nonstop_poacher/store-app-store-search --silent --output-dataset

```

## MCP server setup

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

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/S9m9USMMGck64cjwV/builds/n6WbgQvWL8ZPg8AoE/openapi.json
