# App Store & Google Play Scraper: Details, Search & Top Charts (`zahidthani/app-store-google-play-scraper`) Actor

Get App Store and Google Play app data in one run: full app details (rating, installs, price, version, size, screenshots), keyword search results and top free / paid / grossing charts for any country and category.

- **URL**: https://apify.com/zahidthani/app-store-google-play-scraper.md
- **Developed by:** [Zahid Thani](https://apify.com/zahidthani) (community)
- **Categories:** Marketing, Developer tools, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 app with full details

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 & Google Play Scraper: Details, Search & Top Charts

**Get Apple App Store and Google Play app data in one run: full app details (rating, ratings count, installs, price,
version, size, release notes, screenshots), keyword search rankings, and top free / paid / grossing charts for any
country and category. $2 per 1,000 apps with full details, $0.50 per 1,000 search or chart rows.**

### What can this app store scraper do?

- 📱 **Both stores, one input.** Type `Duolingo` and get its App Store *and* Google Play listing. Or paste store URLs,
  numeric App Store IDs or package names (`com.spotify.music`).
- 🏆 **Top charts.** Top free, top paid and top grossing, overall or for 21 categories (games, finance, health &
  fitness...). Up to **200 apps per Google Play chart** and 100 per App Store chart, per country.
- 🔎 **Keyword search ranks.** See which apps rank for `habit tracker` or `budget app`, in order, in each store and
  country. Ideal for ASO keyword tracking.
- 🧾 **Full app details** in one shared format for both stores: rating, ratings count, rating histogram (Play),
  installs (Play), price, in-app purchases, ads, genre, content rating, version, release and update dates, release
  notes (App Store), size, minimum OS, languages, description, icon, screenshots, developer and website.
- ⚡ **Fast and cheap.** Official public endpoints, no browser: a 300-app chart run takes about 10 seconds.
- 💸 **Pay only for apps you get.** Apps that aren't found and store errors are free.

### Who uses it

- **ASO specialists:** track keyword rankings and chart positions for your app and competitors every day.
- **App marketers and investors:** spot apps climbing the top grossing charts in each country.
- **Product and competitor research:** compare ratings, prices, update cadence and features across iOS and Android.
- **Agencies and lead generation:** build lists of apps in a category, with developer websites.
- **Data and AI pipelines:** feed a fresh app catalogue into dashboards, LLM analysis or a RAG knowledge base.

### How to use it

1. Click **Try for free**. The form opens with `Duolingo`, the keyword `habit tracker` and the top free chart, US.
2. Fill in any of the three inputs: **Apps** (details), **Search keywords** (rankings) or **Top charts**.
3. Pick stores, countries, a chart category and how many results you want.
4. Click **Start**. Results arrive in seconds.
5. Open the **Overview** table, or export JSON, CSV or Excel. Each row has a `type`: `app`, `searchResult` or `chartEntry`.

### Input examples

**Top 200 free apps on Google Play and top 100 on the App Store, US**

```json
{ "charts": ["top-free"], "countries": ["us"], "maxResults": 200 }
```

**Top grossing games in 3 countries, with full details for every app**

```json
{ "charts": ["top-grossing"], "category": "games", "countries": ["us", "gb", "de"], "maxResults": 50, "includeDetails": true }
```

**Keyword rank tracking (ASO)**

```json
{ "searchTerms": ["habit tracker", "budget app", "meditation"], "countries": ["us", "ca"], "maxResults": 30 }
```

**Full details for a list of apps**

```json
{ "apps": ["https://apps.apple.com/us/app/duolingo-language-lessons/id570060128", "com.spotify.music", "Notion"] }
```

| Field | What it does |
|---|---|
| `apps` | App names, App Store URLs/IDs, Google Play URLs/package names. One full-details item per store and country |
| `searchTerms` | Keywords to search. Returns the store's ranking for each keyword |
| `charts` | `top-free`, `top-paid`, `top-grossing` |
| `category` | `all` (default), `games`, `finance`, `health-fitness`, `education`, `productivity`... (21 categories) |
| `stores` | `apple`, `google` or both (default both) |
| `countries` | Two-letter codes: `us`, `gb`, `de`, `in`, `br`... |
| `maxResults` | Results per keyword or chart, per store and country (default 50, max 200) |
| `includeDetails` | Add full app details to every search and chart row (charged at the details price) |
| `language` | Language for Google Play text (`en`, `es`, `de`...) |
| `proxyConfiguration` | Off by default (direct is fastest). Turn on Apify Proxy for very large jobs |

An empty input runs a small demo (Duolingo details plus the top 10 free apps in both stores).

### Output example

Real items from a run on 12 October 2026 (long texts and lists shortened).

An app with full details (`type: "app"`):

```json
{
  "type": "app",
  "input": "Duolingo",
  "store": "apple",
  "appId": "570060128",
  "country": "us",
  "name": "Duolingo: Language Lessons",
  "bundleId": "com.duolingo.DuolingoMobile",
  "developer": "Duolingo, Inc",
  "developerWebsite": "https://www.duolingo.com",
  "rating": 4.72,
  "ratingsCount": 5501388,
  "price": 0.0,
  "currency": "USD",
  "free": true,
  "genre": "Education",
  "genres": ["Education", "Social Networking"],
  "contentRating": "4+",
  "version": "7.143.1",
  "released": "2012-11-13T08:00:00Z",
  "updated": "2026-10-09T12:12:58Z",
  "releaseNotes": "Our mascot owl, Duo, is trading in his usual diet of mice for bugs this week...",
  "sizeBytes": 515487744,
  "minOsVersion": "17.0",
  "description": "Learn a new language, chess & more with the world's most downloaded education app...",
  "icon": "https://is1-ssl.mzstatic.com/image/thumb/.../512x512bb.jpg",
  "screenshots": ["https://is1-ssl.mzstatic.com/image/thumb/.../392x696bb.jpg"],
  "url": "https://apps.apple.com/us/app/duolingo-language-lessons/id570060128"
}
```

A Google Play top grossing game with `includeDetails: true` (`type: "chartEntry"`):

```json
{
  "type": "chartEntry",
  "store": "google",
  "country": "us",
  "chart": "top-grossing",
  "category": "games",
  "rank": 1,
  "appId": "com.scopely.monopolygo",
  "name": "MONOPOLY GO!",
  "installs": "100,000,000+",
  "ratingsCount": 3229533,
  "histogram": { "1": 158769, "2": 47543, "3": 95375, "4": 333960, "5": 2593877 },
  "genre": "Board",
  "url": "https://play.google.com/store/apps/details?id=com.scopely.monopolygo"
}
```

A keyword search result without full details (`type: "searchResult"`):

```json
{
  "type": "searchResult",
  "store": "google",
  "country": "us",
  "term": "habit tracker",
  "rank": 1,
  "appId": "org.isoron.uhabits",
  "name": "Loop Habit Tracker",
  "developer": "Álinson S Xavier",
  "rating": 4.72,
  "installs": "5,000,000+",
  "price": 0,
  "free": true,
  "genre": "Productivity",
  "url": "https://play.google.com/store/apps/details?id=org.isoron.uhabits"
}
```

Fields that one store doesn't publish are `null` (for example `installs` on the App Store, or `releaseNotes` on
Google Play), so both stores fit in one spreadsheet.

### How much does it cost to scrape the App Store and Google Play?

| Event | Price | Per 1,000 |
|---|---|---|
| App with full details | $0.002 | **$2.00** |
| Search result or chart entry | $0.0005 | **$0.50** |
| Run start | $0.005 | - |

| Job | Cost |
|---|---|
| Demo run (empty input): 2 apps + 20 chart rows | about $0.02 |
| Top free charts, both stores, US (200 Google Play + 100 App Store rows) | about $0.16 |
| 10 keywords tracked in 2 stores, top 30 each (600 rows) | about $0.31 |
| Full details for 1,000 apps | about $2.01 |

Set **Maximum cost per run** and the Actor stops cleanly at your budget.

### Use it with AI agents (MCP) and the API

Connect it to Claude, ChatGPT, Cursor or any MCP client via
`https://mcp.apify.com?tools=zahidthani/app-store-google-play-scraper` and ask, for example:

> Which finance apps are in the top 20 grossing charts in the US on both iPhone and Android? Show their ratings and
> when each was last updated.

```bash
curl -X POST "https://api.apify.com/v2/acts/zahidthani~app-store-google-play-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"charts": ["top-grossing"], "category": "finance", "countries": ["us"], "maxResults": 20}'
```

Code examples in Python and JavaScript: [github.com/zahidthani/apify-data-tools-examples](https://github.com/zahidthani/apify-data-tools-examples).

### How it compares

| | This Actor | Single-store scrapers | Chart-only trackers |
|---|---|---|---|
| App Store **and** Google Play in one run | Yes | One store per Actor | Usually App Store only |
| Details + search + top charts in one Actor | Yes | Details and search, rarely charts | Charts only |
| Google Play top charts | Up to 200 per chart, 21 categories | Rare | Rare |
| One shared output format for both stores | Yes | Different per Actor | n/a |
| Price per 1,000 apps with full details | $2.00 | $1.00-$3.45 | n/a |
| Price per 1,000 chart or search rows | $0.50 | $0.10-$15 | $0.35-$4 |

### Limits and tips

- Google Play shows **at most 30 results per keyword search**; the App Store up to 200.
- App Store charts have **up to 100 apps**; Google Play charts up to 200.
- Chart and search rows without `includeDetails` contain the essentials only. Turn it on for descriptions,
  ratings counts, installs and screenshots.
- A name in `apps` uses the top search match in each store. For exact results, paste the store URL or ID.
- Prices, ratings and charts differ by country, so each country is a separate set of rows.
- Want what users say? Use our [App Store & Google Play Reviews Scraper](https://apify.com/zahidthani/app-store-google-play-reviews).

### FAQ

**How do I get the App Store top charts for a country?** Set `charts` to `["top-free"]` (or paid/grossing), add the
country code, and pick a category. You get the rank, app name, developer, price and link for every position.

**Is there a Google Play top charts API?** Google has no official public one. This Actor reads the same chart data
the Play Store shows, up to 200 apps per chart and category, and returns it as JSON, CSV or Excel.

**How do I track my app's keyword rankings (ASO)?** Put your keywords in `searchTerms`, save the input as a task and
add a daily schedule. Each row has the `rank`, so you can chart your position over time in Google Sheets.

**Can I get install counts?** Google Play publishes install ranges (`installs`, `minInstalls`) and they're included
in full details. Apple doesn't publish downloads; use `ratingsCount` as a popularity signal.

**Can I monitor competitors' updates and prices?** Yes: schedule a run with their apps. `version`, `updated`,
`releaseNotes` and `price` show every change.

**Is it legal to scrape app store data?** The Actor reads only **public** store pages and Apple's public
iTunes Search API and chart feeds that anyone can see without logging in. It returns app and business data, not
personal data.

**Something broke?** Open an issue on the **Issues** tab. The Actor is monitored daily and fixed quickly.

### Related Actors

- [App Store & Google Play Reviews Scraper + Insights](https://apify.com/zahidthani/app-store-google-play-reviews): reviews and complaint themes for any app.
- [Google Trends Scraper](https://apify.com/zahidthani/google-trends-scraper): search demand for any app, brand or topic.
- [Google Trends Trending Now Monitor](https://apify.com/zahidthani/google-trends-trending-now): every trending search per country.
- [Website Tech Stack Detector](https://apify.com/zahidthani/website-tech-stack-detector): the technologies behind any list of websites.

# Actor input Schema

## `apps` (type: `array`):

One per line: an App Store URL or numeric ID, a Google Play URL or package name (com.example.app), or just an app name (looked up in both stores). Each app found gives one full-details item per store and country.

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

Keywords to search in the stores, like 'habit tracker' or 'budget app'. Returns the apps in the order the store ranks them (keyword rank tracking for ASO). Google Play shows at most 30 results per search; the App Store up to 200.

## `charts` (type: `array`):

Top charts to download for each store and country. The App Store chart has up to 100 apps; Google Play up to 200.

## `category` (type: `string`):

Category for the top charts (the same list works for both stores). 'All apps' is the overall chart.

## `stores` (type: `array`):

Which stores to query. Pick both to compare iPhone and Android in one dataset.

## `countries` (type: `array`):

Two-letter country codes (us, gb, de, in, br...). Charts, search ranks, prices and ratings differ per country, so each country is fetched separately.

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

How many apps to return for each search keyword and each chart, per store and country. Caps: App Store charts 100, Google Play search 30.

## `includeDetails` (type: `boolean`):

Off: search and chart rows have the essentials (rank, name, developer, rating, price, icon, URL) at the cheaper listing price. On: every row also gets the full app details (description, installs, ratings count, version, size, screenshots...) and is charged as an app-details item.

## `language` (type: `string`):

Two-letter language code for Google Play text (descriptions, genres). The App Store uses the country's default language.

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

Off by default: the stores' public endpoints answer direct requests and are about 20x faster that way. Turn on Apify Proxy only if you run very large jobs and see 'kept failing' errors.

## Actor input object example

```json
{
  "apps": [
    "Duolingo"
  ],
  "searchTerms": [
    "habit tracker"
  ],
  "charts": [
    "top-free"
  ],
  "category": "all",
  "stores": [
    "apple",
    "google"
  ],
  "countries": [
    "us"
  ],
  "maxResults": 10,
  "includeDetails": false,
  "language": "en",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "apps": [
        "Duolingo"
    ],
    "searchTerms": [
        "habit tracker"
    ],
    "charts": [
        "top-free"
    ],
    "countries": [
        "us"
    ],
    "maxResults": 10,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("zahidthani/app-store-google-play-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 = {
    "apps": ["Duolingo"],
    "searchTerms": ["habit tracker"],
    "charts": ["top-free"],
    "countries": ["us"],
    "maxResults": 10,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("zahidthani/app-store-google-play-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 '{
  "apps": [
    "Duolingo"
  ],
  "searchTerms": [
    "habit tracker"
  ],
  "charts": [
    "top-free"
  ],
  "countries": [
    "us"
  ],
  "maxResults": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call zahidthani/app-store-google-play-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zahidthani/app-store-google-play-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/2cns0FO9Iil84P80h/builds/LN2dYabpXecTy1qQt/openapi.json
