# App Store & Google Play Scraper - App Rankings & Charts (`datatrail/app-store-google-play-charts`) Actor

One Actor for both stores: Apple's official top charts by category and country (free, paid, grossing, new), keyword search on the App Store and Google Play, and full app details (rating, ratings count, installs, price, category, version, dates). Same output format for both stores.

- **URL**: https://apify.com/datatrail/app-store-google-play-charts.md
- **Developed by:** [Datatrail](https://apify.com/datatrail) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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 - App Rankings & Charts

One Actor, both stores, one output format:

- **Apple's official top charts** for any country and category: top free, top paid, top grossing (iPhone and iPad), new apps.
- **Keyword search** on the App Store and Google Play, keeping each store's order, so you can track where an app ranks for a keyword.
- **App details** from a URL or ID: rating, ratings count, installs (Google Play), price and currency, category, developer, version, release and update dates, icon, screenshots, website.

No reviews and no personal data: the Actor returns store listings only.

### Output

| Field | App Store | Google Play |
|---|---|---|
| `store`, `appId`, `bundleId`, `title`, `developer`, `developerId`, `category`, `categoryId` | ✓ | ✓ |
| `rating`, `ratingsCount` | ✓ | ✓ |
| `reviewsCount`, `installs`, `minInstalls`, `inAppPurchases`, `containsAds`, `summary` | | ✓ |
| `price`, `currency`, `isFree`, `contentRating`, `releaseDate`, `updatedAt`, `version` | ✓ | ✓ |
| `sizeBytes`, `minimumOsVersion`, `languages` | ✓ | |
| `iconUrl`, `screenshots`, `url`, `website` | ✓ | ✓ |
| `description`, `releaseNotes` (optional) | ✓ | ✓ (description) |
| `source` (`chart` / `search` / `app`), `chart`, `chartGenre`, `chartRank`, `searchTerm`, `searchRank`, `country` | ✓ | ✓ |

Example rows from a real run (US):

```json
{"store": "googlePlay", "source": "search", "searchTerm": "habit tracker", "searchRank": 1, "title": "Loop Habit Tracker", "rating": 4.73, "ratingsCount": 63514, "installs": "5,000,000+", "price": 0.0, "currency": "USD"}
{"store": "appStore", "source": "search", "searchTerm": "habit tracker", "searchRank": 1, "title": "Habit Tracker", "developer": "InnerGrow", "rating": 4.79, "ratingsCount": 148007, "price": 0.0, "currency": "USD"}
```

### Who uses it

- **App marketers and ASO specialists**: track keyword positions and chart ranks for your app and competitors, in every country, on a schedule.
- **Developers and studios**: find gaps in a category by reading its top 100.
- **Investors and analysts**: monitor chart movements across markets.

### How to use it

Fill any combination of: Apple charts (+ categories), search terms, and specific apps. Add several countries to compare markets. Schedule it daily to build a ranking history.

### Pricing

Pay per result: **one charge per app row**. Apps that are not found are not charged. Set a maximum cost per run and the Actor stops cleanly when it is reached.

### Notes

- Apple data comes from Apple's own public Search API and RSS feeds. Google Play data comes from its public store pages.
- Google Play charts are not included yet; Apple charts are.

### Schedule it, use the API or connect it to your tools

- **Schedule** daily or weekly runs in Apify to follow app rankings and new entries in the top charts.
- Call it from your code with the **Apify API** (Python, JavaScript or plain HTTP) and get the results as JSON, CSV or Excel.
- Send results to **Google Sheets, Slack, Zapier, Make or a webhook** with Apify integrations.

### Troubleshooting

- **No Google Play rows**: Google Play results come from keyword search. Add search keywords and include Google Play in the stores to search.
- **Fewer than 100 apps in a chart**: some country and category charts are shorter.

### FAQ

**Which App Store charts?** Apple's top free, top paid, top grossing and new apps, by category and country.

**Is the output the same for both stores?** Yes: rank, title, developer, rating, ratings count, price, category, version and dates use the same fields.

**Can I track rankings over time?** Schedule it and compare runs.

### Feedback

Need a field or a chart? Open an issue on this Actor.

# Actor input Schema

## `appleCharts` (type: `array`):

Official App Store charts to read (up to 100 apps each).

## `appleGenres` (type: `array`):

Category IDs. Leave empty for all apps. Common: 6014 Games, 6015 Finance, 6013 Health & Fitness, 6007 Productivity, 6017 Education, 6012 Lifestyle, 6016 Entertainment, 6008 Photo & Video, 6005 Social Networking, 6024 Shopping, 6003 Travel, 6000 Business, 6002 Utilities, 6023 Food & Drink, 6011 Music, 6004 Sports, 6009 News, 6020 Medical.

## `chartLimit` (type: `integer`):

How many apps to read from each chart (Apple serves up to 100).

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

Keywords to search, e.g. "habit tracker". Results keep the store's order (searchRank).

## `searchStores` (type: `array`):

Which stores the search terms are run on.

## `searchLimit` (type: `integer`):

How many results to keep for each search term, in store order.

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

App Store or Google Play URLs, Apple numeric IDs or Android package names.

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

Two-letter store countries, e.g. us, gb, de, br. Each country is a separate set of results.

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

Language code for the results, e.g. en, en-US, de, es.

## `includeDescription` (type: `boolean`):

Adds the long text fields. Off keeps the output small.

## `maxConcurrency` (type: `integer`):

How many pages to fetch in parallel. Lower it if you see blocks.

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

Proxy used for the requests. The default works for most runs.

## Actor input object example

```json
{
  "appleCharts": [
    "top-free"
  ],
  "chartLimit": 100,
  "searchStores": [
    "appStore",
    "googlePlay"
  ],
  "searchLimit": 30,
  "countries": [
    "us"
  ],
  "language": "en",
  "includeDescription": false,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One row per app from charts, searches or the apps you listed.

# 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 = {
    "appleCharts": [
        "top-free"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("datatrail/app-store-google-play-charts").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 = {
    "appleCharts": ["top-free"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("datatrail/app-store-google-play-charts").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 '{
  "appleCharts": [
    "top-free"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call datatrail/app-store-google-play-charts --silent --output-dataset

```

## MCP server setup

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

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/tKFe5g7p3PeBBfVhW/builds/USKP7mdqgz4V3XbIY/openapi.json
