# App Store Search, Lookup & Reviews Scraper (`nimbryxo-studio/app-store-search-lookup-and-reviews-scraper`) Actor

Search the Apple App Store by keyword or look up apps by ID or URL, with pricing, ratings, screenshots, developer info, and optional customer reviews across any App Store country.

- **URL**: https://apify.com/nimbryxo-studio/app-store-search-lookup-and-reviews-scraper.md
- **Developed by:** [Nimbryxo-studio](https://apify.com/nimbryxo-studio) (community)
- **Categories:** Automation, Developer tools, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## App Store Search, Lookup & Reviews Scraper

Search the Apple App Store by keyword, or look up specific apps by App Store ID or URL, and get back structured app records — pricing, ratings, developer details, screenshots, supported languages — for any App Store country. Optionally add each app's most recent customer reviews.

### What this actor does

- Searches the App Store by keyword, or looks up apps directly by numeric App Store ID or App Store URL
- Returns app metadata: pricing, ratings, current version and its release notes, content rating, file size, and more
- Fetches developer details including the developer's App Store page and external website
- Optionally pulls an app's most recent customer reviews, several pages deep
- Targets any App Store country/region, affecting pricing, availability, and review language
- Every field below is always present on each app record; values Apple didn't return come back as an empty string, an empty array, or `0` (for price and rating fields) rather than being left out

### Output per app

- `appId` — unique Apple App Store ID
- `name` — app name
- `url` — direct App Store URL
- `developer`, `developerId`, `developerUrl`, `developerWebsite` — developer name, Apple artist ID, App Store page, and external site
- `price`, `formattedPrice`, `currency` — numeric price, human-readable price (e.g. `"Free"`, `"$4.99"`), and currency code for the chosen country
- `rating`, `ratingCount` — average rating (rounded to 2 decimals) and rating count across all versions; `0` when the app has no ratings
- `currentVersionRating`, `currentVersionRatingCount` — rating and count for the current version only; `0` when unavailable
- `description` — full app description
- `releaseNotes` — latest version's release notes
- `version` — current version number
- `releaseDate`, `lastUpdated` — original release date and latest update date (ISO 8601)
- `category` — primary genre
- `genres` — array of all genres/categories
- `contentRating` — age advisory (e.g. `"4+"`, `"17+"`)
- `bundleId` — app bundle identifier
- `minimumOs` — minimum required iOS/iPadOS version
- `fileSize` — file size in bytes, as a string
- `icon` — app icon URL
- `screenshots`, `ipadScreenshots` — arrays of iPhone and iPad screenshot URLs
- `languages` — array of supported language codes
- `reviews` — array of recent customer reviews from the chosen country's store, newest first, populated only when `includeReviews` is enabled (otherwise an empty array); each review has `id`, `author`, `rating`, `title`, `text`, `version`
- `scrapedAt` — ISO 8601 collection timestamp

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `searchTerms` | array of strings | – | Keywords to search for on the App Store |
| `appIds` | array of strings | – | Specific App Store app IDs to look up (e.g. `544007664` for YouTube) |
| `startUrls` | array | – | Direct App Store URLs; the app ID is extracted automatically. The store region still comes from `country`, not from the URL |
| `country` | string | `us` | Two-letter ISO country code for the App Store region, affects pricing, availability, and review language |
| `maxResults` | integer | `50` | Maximum total apps to return for the whole run, across all search terms, app IDs, and URLs combined (1–200). Search terms are processed first, so IDs and URLs are only looked up while there is room left |
| `includeReviews` | boolean | `false` | Fetch customer reviews for each app |
| `reviewPages` | integer | `1` | Review pages to fetch per app when `includeReviews` is on (50 reviews per page, up to 10 pages) |

At least one of `searchTerms`, `appIds`, or `startUrls` must be provided.

#### Example: keyword search

```json
{
  "searchTerms": ["photo editor", "fitness tracker"],
  "country": "us",
  "maxResults": 50
}
```

#### Example: direct app lookup with reviews

```json
{
  "appIds": ["544007664"],
  "includeReviews": true,
  "reviewPages": 3
}
```

#### Example: App Store URLs in another region

```json
{
  "startUrls": [
    { "url": "https://apps.apple.com/gb/app/youtube/id544007664" }
  ],
  "country": "gb"
}
```

### Use cases

- **Competitor monitoring** — track rivals' ratings, pricing, and update cadence over time
- **ASO research** — compare keyword search results to see which apps rank where
- **Market analysis** — survey a category's pricing and rating distribution
- **Reputation tracking** — pull recent reviews to spot recurring complaints or praise
- **Localization research** — compare the same app's pricing and availability across App Store countries

### FAQ

**Do I need an Apple developer account or API key?**
No. The actor reads Apple's public App Store listings and review feeds, with no login or key required.

**Where do I find an app's App Store ID?**
Open the app at `apps.apple.com` in a browser — the numeric ID sits at the end of the URL, e.g. `https://apps.apple.com/us/app/youtube/id544007664` → `544007664`.

**How many results can one run return?**
Up to 200 apps total per run (`maxResults`), shared across every search term, app ID, and URL in that run — not 200 per term. Search terms fill the quota first. Split large jobs across multiple runs for more coverage. If nothing at all is found, the run ends as failed with the message "No apps found".

**Can I get customer reviews?**
Yes — enable `includeReviews` and set `reviewPages` to fetch up to 500 reviews per app (50 per page, up to 10 pages), sorted by most recent.

**Why are some fields empty?**
Fields like `developerWebsite` or `releaseNotes` are only filled when the developer has actually provided them; otherwise they are empty strings. A `rating` of `0` means the app has no ratings yet in that country.

**Does the country setting change the results?**
Yes. `country` changes currency and pricing, which apps are available, and the language of any fetched reviews.

**Are duplicate apps removed?**
Yes. When the same app appears across multiple search terms or lookup methods, it is only included once.

**Is this affiliated with Apple?**
No. This is an independent, third-party actor that reads Apple's public App Store pages; it isn't affiliated with or endorsed by Apple Inc.

# Actor input Schema

## `searchTerms` (type: `array`):

List of keywords to search for on the App Store. Each term will return matching apps.

## `appIds` (type: `array`):

Specific Apple App Store app IDs to look up (e.g., '544007664' for YouTube).

## `startUrls` (type: `array`):

Direct App Store URLs (e.g., https://apps.apple.com/us/app/youtube/id544007664). The app ID is extracted automatically.

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

Two-letter ISO country code for the App Store region (e.g., 'us', 'gb', 'de', 'jp'). Affects pricing, availability, and reviews language.

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

Maximum number of apps to return per search term (up to 200).

## `includeReviews` (type: `boolean`):

Fetch customer reviews for each app. Up to 50 reviews per page, controlled by Review Pages setting.

## `reviewPages` (type: `integer`):

Number of review pages to fetch per app (50 reviews per page, max 10 pages = 500 reviews). Only used when Include Reviews is enabled.

## Actor input object example

```json
{
  "searchTerms": [
    "calculator"
  ],
  "country": "us",
  "maxResults": 5,
  "includeReviews": false,
  "reviewPages": 1
}
```

# Actor output Schema

## `apps` (type: `string`):

Dataset containing all scraped App Store apps.

# 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 = {
    "searchTerms": [
        "calculator"
    ],
    "maxResults": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("nimbryxo-studio/app-store-search-lookup-and-reviews-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["calculator"],
    "maxResults": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("nimbryxo-studio/app-store-search-lookup-and-reviews-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 '{
  "searchTerms": [
    "calculator"
  ],
  "maxResults": 5
}' |
apify call nimbryxo-studio/app-store-search-lookup-and-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nimbryxo-studio/app-store-search-lookup-and-reviews-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/JQPGqizffRzaBsE3E/builds/YWh9ynRhujmeTTsto/openapi.json
