# Google Play Scraper: Apps, Reviews & Charts (`scrapingmonkey/google-play-scraper-apps-reviews-charts`) Actor

Scrape Google Play apps, 63-field details, reviews, top charts, developer portfolios, similar apps, Data Safety, permissions, and search suggestions. Export clean JSON for any country or language—no login, API key, browser, or proxy setup.

- **URL**: https://apify.com/scrapingmonkey/google-play-scraper-apps-reviews-charts.md
- **Developed by:** [ScrapingMonkey](https://apify.com/scrapingmonkey) (community)
- **Categories:** Developer tools, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.15 / 1,000 search app 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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Google Play Data Scraper - Search, App Details, Reviews, Charts and ASO API

Extract Google Play search results, complete 63-field app profiles, reviews, top charts, developer portfolios, similar apps, and autocomplete keywords. This all-in-one Apify Actor requires no Google account, API key, browser, or proxy configuration.

- Seven modes in one Actor: `search`, `details`, `reviews`, `charts`, `developer`, `similar`, and `suggest`
- Full app profiles with Data Safety declarations, permissions, developer contacts, ratings, installs, pricing, media, and technical metadata
- Review pagination with newest, rating, and relevance sorting
- Optional review filtering by a single star rating from 1 to 5
- Top free, top paid, and top-grossing charts by Google Play category
- Developer portfolio and related-app pagination
- Search autocomplete for ASO keyword research
- Country and language localization
- Automatic managed request routing
- Batch input for multiple keywords or application IDs
- Automatic retries, result deduplication, and partial-failure handling
- Export results to JSON, CSV, Excel, XML, or access them through the Apify API

### What can you do with this Actor?

| Mode | Input | Output | Best for |
| --- | --- | --- | --- |
| `search` | One or more keywords | Ranked lightweight app records | ASO research, keyword tracking, competitor discovery |
| `details` | One or more package IDs | One complete app profile per ID | Market research, app monitoring, developer research |
| `reviews` | One or more package IDs | One dataset row per review | Sentiment analysis, issue discovery, customer feedback monitoring |
| `charts` | Chart type and category | Ranked chart app records | Market rankings, category monitoring, app discovery |
| `developer` | One or more developer IDs or names | Apps published by each developer | Portfolio mapping, publisher research |
| `similar` | One or more package IDs | Apps related by Google Play | Competitor discovery, recommendation research |
| `suggest` | One or more keyword prefixes | Google Play autocomplete phrases | ASO ideation, keyword expansion |

Each run uses one mode. Search results contain package IDs that can be passed directly to a later `details` or `reviews` run.

### Quick start

1. Open the Actor and click **Try for free**.
2. Select one of the seven modes under **Mode**.
3. Enter the relevant search terms, package IDs, developer IDs, or chart settings.
4. Choose the country, language, and result limit.
5. Click **Start**.
6. Preview the dataset or download it in your preferred format.

The default input is a working search for `fitness tracker`, so a first test run requires no configuration.

### Input examples

#### Search Google Play by keyword

```json
{
  "mode": "search",
  "searchTerms": ["fitness tracker", "workout app"],
  "maxResults": 20,
  "country": "us",
  "language": "en"
}
```

`maxResults` applies independently to every search term. Each result also contains the originating `searchTerm`.

#### Get complete app details

```json
{
  "mode": "details",
  "appIds": [
    "com.whatsapp",
    "org.telegram.messenger",
    "org.thoughtcrime.securesms"
  ],
  "country": "us",
  "language": "en"
}
```

The Actor saves one full metadata record for every available app.

#### Collect only one-star Spotify reviews

```json
{
  "mode": "reviews",
  "appIds": ["com.spotify.music"],
  "maxResults": 100,
  "reviewSort": "newest",
  "reviewScore": 1,
  "country": "us",
  "language": "en"
}
```

Omit `reviewScore` to collect reviews with all star ratings. When a score filter is selected, the Actor continues through Google Play pagination until it collects the requested number of matching reviews or no more reviews are available.

#### Get a top chart

```json
{
  "mode": "charts",
  "chartCollection": "topFree",
  "category": "APPLICATION",
  "maxResults": 100,
  "country": "us",
  "language": "en"
}
```

Use `topFree`, `topPaid`, or `topGrossing`. Category IDs include `APPLICATION`, `GAME`, `BUSINESS`, `EDUCATION`, `FINANCE`, `HEALTH_AND_FITNESS`, `MUSIC_AND_AUDIO`, `PHOTOGRAPHY`, `PRODUCTIVITY`, `SOCIAL`, and other Google Play category IDs.

#### Get every app by a developer

```json
{
  "mode": "developer",
  "developerIds": ["5700313618786177705", "Google LLC"],
  "maxResults": 100,
  "country": "us",
  "language": "en"
}
```

Numeric IDs use Google Play `/dev` pages; text publisher names use `/developer` pages. Pagination is handled automatically.

#### Find similar apps

```json
{
  "mode": "similar",
  "appIds": ["com.whatsapp", "com.spotify.music"],
  "maxResults": 50,
  "country": "us",
  "language": "en"
}
```

#### Collect Google Play search suggestions

```json
{
  "mode": "suggest",
  "searchTerms": ["fitness", "photo editor"],
  "maxResults": 10,
  "country": "us",
  "language": "en"
}
```

### Output examples

Every top-level output field emitted by each mode is shown below. Long text and array values use compact representative content, but no fields are omitted. Live ratings, counts, text, media URLs, and review content change over time.

#### Search result from the initial Google Play page - 14 top-level fields

```json
{
  "title": "Google Fit: Activity Tracking",
  "appId": "com.google.android.apps.fitness",
  "url": "https://play.google.com/store/apps/details?id=com.google.android.apps.fitness",
  "icon": "https://play-lh.googleusercontent.com/example-icon",
  "developer": "Google LLC",
  "developerId": "Google LLC",
  "currency": "USD",
  "price": 0,
  "free": true,
  "summary": "Localized application summary returned by Google Play",
  "scoreText": "3.4",
  "score": 3.4386387,
  "recordType": "search",
  "searchTerm": "fitness tracker"
}
```

#### Search result from a continuation page - 15 top-level fields

Google Play uses a slightly different internal structure for continuation pages. Those rows contain the complete field set below, including `priceText`.

```json
{
  "title": "Example Fitness App",
  "appId": "com.example.fitness",
  "url": "https://play.google.com/store/apps/details?id=com.example.fitness",
  "icon": "https://play-lh.googleusercontent.com/example-icon",
  "developer": "Example Developer",
  "developerId": "Example Developer",
  "priceText": "FREE",
  "currency": "USD",
  "price": 0,
  "free": true,
  "summary": "Localized application summary returned by Google Play",
  "scoreText": "3.4",
  "score": 3.4,
  "recordType": "search",
  "searchTerm": "fitness tracker"
}
```

#### Top-chart result - 20 top-level fields

```json
{
  "recordType": "chart",
  "chartCollection": "topFree",
  "category": "APPLICATION",
  "rank": 1,
  "title": "Example App",
  "appId": "com.example.app",
  "url": "https://play.google.com/store/apps/details?id=com.example.app",
  "icon": "https://play-lh.googleusercontent.com/example-icon",
  "screenshots": ["https://play-lh.googleusercontent.com/example-screenshot"],
  "developer": "Example Developer",
  "developerId": "Example Developer",
  "genre": "Productivity",
  "installs": "10,000,000+",
  "currency": "USD",
  "price": 0,
  "priceText": "Free",
  "free": true,
  "summary": "Localized application summary returned by Google Play",
  "scoreText": "4.6",
  "score": 4.6
}
```

#### Developer app - 16 top-level fields

```json
{
  "recordType": "developer",
  "sourceDeveloperId": "5700313618786177705",
  "rank": 1,
  "title": "Example App",
  "appId": "com.example.app",
  "url": "https://play.google.com/store/apps/details?id=com.example.app",
  "icon": "https://play-lh.googleusercontent.com/example-icon",
  "developer": "Example Developer",
  "developerId": "Example Developer",
  "currency": "USD",
  "price": 0,
  "priceText": "Free",
  "free": true,
  "summary": "Localized application summary returned by Google Play",
  "scoreText": "4.6",
  "score": 4.6
}
```

#### Similar app - 16 top-level fields

```json
{
  "recordType": "similar",
  "sourceAppId": "com.whatsapp",
  "rank": 1,
  "title": "Example Messenger",
  "appId": "com.example.messenger",
  "url": "https://play.google.com/store/apps/details?id=com.example.messenger",
  "icon": "https://play-lh.googleusercontent.com/example-icon",
  "developer": "Example Developer",
  "developerId": "Example Developer",
  "currency": "USD",
  "price": 0,
  "priceText": "Free",
  "free": true,
  "summary": "Localized application summary returned by Google Play",
  "scoreText": "4.4",
  "score": 4.4
}
```

#### Search suggestion - 4 top-level fields

```json
{
  "recordType": "suggestion",
  "searchTerm": "fitness",
  "suggestion": "fitness tracker",
  "rank": 1
}
```

#### App details - 63 top-level fields

Details mode returns the following complete field set, including `recordType`. Optional fields remain present with `null`, `false`, or an empty array when Google Play does not publish a value.

```json
{
  "title": "WhatsApp Messenger",
  "description": "Full localized app description returned by Google Play",
  "descriptionHTML": "<p>Full localized app description returned by Google Play</p>",
  "summary": "Simple. Reliable. Private.",
  "installs": "10,000,000,000+",
  "minInstalls": 10000000000,
  "maxInstalls": 12181635330,
  "score": 4.6330023,
  "scoreText": "4.6",
  "ratings": 240541353,
  "reviews": 1955490,
  "histogram": {
    "1": 10130214,
    "2": 3136737,
    "3": 8388241,
    "4": 21570400,
    "5": 197315683
  },
  "price": 0,
  "originalPrice": null,
  "discountEndDate": null,
  "free": true,
  "currency": "USD",
  "priceText": "Free",
  "available": true,
  "offersIAP": true,
  "IAPRange": "$0.40 - $199.99 per item",
  "androidVersion": "VARY",
  "androidVersionText": "Varies with device",
  "androidMaxVersion": "VARY",
  "minAndroidApi": null,
  "maxAndroidApi": 34,
  "appBundle": "com.whatsapp",
  "permissions": [
    {
      "permission": "take pictures and videos",
      "type": "Camera"
    }
  ],
  "dataSafety": {
    "sharedData": [
      {
        "data": "App interactions",
        "optional": false,
        "purpose": ["Analytics"],
        "type": "App activity"
      }
    ],
    "collectedData": [
      {
        "data": "Phone number",
        "optional": false,
        "purpose": ["App functionality"],
        "type": "Personal info"
      }
    ],
    "securityPractices": [
      {
        "practice": "Data is encrypted in transit",
        "description": "Your data is transferred over a secure connection"
      }
    ],
    "privacyPolicyUrl": "https://www.whatsapp.com/legal/privacy-policy"
  },
  "developer": "WhatsApp LLC",
  "developerId": "WhatsApp LLC",
  "developerEmail": "android@support.whatsapp.com",
  "developerWebsite": "http://www.whatsapp.com/",
  "developerAddress": null,
  "developerLegalName": "Meta Platforms, Inc.",
  "developerLegalEmail": "android@support.whatsapp.com",
  "developerLegalAddress": "1 Meta Way, Menlo Park, CA 94025-1444, United States",
  "developerLegalPhoneNumber": "+1 650-853-1300",
  "privacyPolicy": "https://www.whatsapp.com/legal/privacy-policy",
  "developerInternalID": "WhatsApp LLC",
  "genre": "Communication",
  "genreId": "COMMUNICATION",
  "categories": [
    {
      "name": "Communication",
      "id": "COMMUNICATION"
    }
  ],
  "icon": "https://play-lh.googleusercontent.com/example-icon",
  "headerImage": "https://play-lh.googleusercontent.com/example-header",
  "screenshots": [
    "https://play-lh.googleusercontent.com/example-screenshot"
  ],
  "video": null,
  "videoImage": null,
  "previewVideo": null,
  "contentRating": "Everyone",
  "contentRatingDescription": null,
  "adSupported": false,
  "released": "Oct 18, 2010",
  "updated": 1785885538000,
  "version": "VARY",
  "recentChanges": "Localized release notes returned by Google Play",
  "comments": [
    "Public review excerpt included on the app page"
  ],
  "preregister": false,
  "earlyAccessEnabled": false,
  "isAvailableInPlayPass": false,
  "appId": "com.whatsapp",
  "url": "https://play.google.com/store/apps/details?id=com.whatsapp&hl=en&gl=us",
  "recordType": "details"
}
```

The sample uses one representative entry inside list fields such as `categories`, `screenshots`, and `comments`. The Actor returns every available list entry; only the list length is compacted in the documentation, not the output schema or field list.

#### Review - 16 top-level fields

```json
{
  "recordType": "review",
  "id": "review-identifier",
  "appId": "com.spotify.music",
  "userName": "Google Play user",
  "userImage": "https://play-lh.googleusercontent.com/example",
  "score": 1,
  "scoreText": "1",
  "title": null,
  "text": "The latest update causes playback problems.",
  "date": "2026-08-01T10:30:00.000Z",
  "replyText": null,
  "replyDate": null,
  "thumbsUp": 3,
  "version": "9.0.0",
  "criterias": [
    {
      "criteria": "stability",
      "rating": 4
    }
  ],
  "url": "https://play.google.com/store/apps/details?id=com.spotify.music&reviewId=review-identifier"
}
```

Google Play does not provide a separate headline for most reviews, so `title` is normally `null`.

### What app data can you extract?

Not every app publishes every optional field. Detail records can include:

| Category | Fields |
| --- | --- |
| Identity | `appId`, `url`, `title`, `summary`, `genre`, `genreId`, `categories`, `contentRating`, `contentRatingDescription` |
| Developer | `developer`, `developerId`, `developerInternalID`, `developerEmail`, `developerWebsite`, `developerAddress`, `developerLegalName`, `developerLegalEmail`, `developerLegalAddress`, `developerLegalPhoneNumber` |
| Ratings | `score`, `scoreText`, `ratings`, `reviews`, `histogram`, `comments` |
| Popularity | `installs`, `minInstalls`, `maxInstalls` |
| Pricing | `price`, `priceText`, `originalPrice`, `discountEndDate`, `currency`, `free`, `offersIAP`, `IAPRange` |
| Technical | `androidVersion`, `androidVersionText`, `androidMaxVersion`, `minAndroidApi`, `maxAndroidApi`, `appBundle`, `version`, `updated`, `released` |
| Media | `icon`, `headerImage`, `screenshots`, `video`, `videoImage`, `previewVideo` |
| Content | `description`, `descriptionHTML`, `recentChanges`, `privacyPolicy` |
| Privacy and access | `permissions`, `dataSafety.sharedData`, `dataSafety.collectedData`, `dataSafety.securityPractices`, `dataSafety.privacyPolicyUrl` |
| Availability and flags | `available`, `adSupported`, `preregister`, `earlyAccessEnabled`, `isAvailableInPlayPass` |

### What review data can you extract?

Each review is stored as a separate dataset row and can include:

| Field | Description |
| --- | --- |
| `id` | Unique Google Play review identifier |
| `appId` | Package ID of the reviewed app |
| `userName` | Reviewer's public display name |
| `userImage` | Reviewer profile image URL |
| `score`, `scoreText` | Star rating from 1 to 5 |
| `title`, `text` | Optional headline and full review body |
| `date` | Review time in ISO 8601 format |
| `replyText`, `replyDate` | Developer reply and reply time, when available |
| `thumbsUp` | Helpful-vote count |
| `version` | App version installed by the reviewer |
| `criterias` | Structured subcriteria ratings |
| `url` | Direct Google Play URL containing the review ID |

### Input parameters

| Parameter | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `mode` | string | Yes | `search` | `search`, `details`, `reviews`, `charts`, `developer`, `similar`, or `suggest` |
| `searchTerms` | string\[] | Search/suggest | - | Search keywords or autocomplete prefixes |
| `appIds` | string\[] | Details/reviews/similar | - | Google Play package IDs |
| `developerIds` | string\[] | Developer | - | Numeric developer IDs or exact developer names |
| `maxResults` | integer | No | `50` | Maximum per term, app, developer, or chart, from 1 to 500; ignored by details mode |
| `maxConcurrency` | integer | No | `5` | Independent terms, app IDs, or developer IDs processed concurrently, from 1 to 20 |
| `country` | string | No | `us` | ISO 3166-1 alpha-2 storefront country code |
| `language` | string | No | `en` | ISO 639-1 interface and content language code |
| `reviewSort` | string | No | `newest` | Review order: `newest`, `rating`, or `relevant` |
| `reviewScore` | integer | No | All ratings | Optional review filter from 1 to 5 |
| `chartCollection` | string | No | `topFree` | `topFree`, `topPaid`, or `topGrossing` in charts mode |
| `category` | string | No | `APPLICATION` | Google Play category ID in charts mode |
| `includeDataSafety` | boolean | No | `true` | Include the complete Data Safety object in details mode |
| `includePermissions` | boolean | No | `true` | Include the complete public permissions list in details mode |

Country and language values are case-insensitive and normalized to lowercase.

### Use cases

#### App Store Optimization and keyword research

- Discover apps ranking for target Google Play keywords
- Compare titles, summaries, ratings, categories, and screenshots
- Schedule repeated searches to monitor ranking changes

#### Competitor and market intelligence

- Compare install ranges, pricing, ratings, and release activity
- Monitor competitors across different country storefronts
- Build structured app catalogs for dashboards and spreadsheets

#### Review and sentiment analysis

- Collect recent negative reviews for issue discovery
- Separate one-star and five-star feedback
- Analyze review text, helpful votes, versions, and developer replies

#### Developer research

- Collect public developer emails, websites, addresses, and legal information
- Map applications to publishers using package and developer identifiers

#### Automated monitoring

- Run the Actor on an Apify schedule
- Trigger workflows through webhooks
- Export recurring results to Google Sheets, data warehouses, or analytics tools

### Performance and cost

The Actor uses lightweight HTTP requests instead of launching a browser. Request routing is managed automatically, keeping browser-related startup time and memory use low without requiring additional user configuration. Independent terms, app IDs, and developer IDs run concurrently up to `maxConcurrency`; pagination for one target remains sequential because each page depends on the previous continuation token.

The Actor uses pay-per-event billing. Each successfully stored dataset row is charged using the event associated with its mode:

| Mode | Billing event | Charge unit |
| --- | --- | --- |
| Search | `search-result` | One returned search result |
| Details | `app-detail` | One returned app-detail record |
| Reviews | `review` | One returned review |
| Charts | `chart-result` | One returned ranked chart app |
| Developer | `developer-app` | One returned developer app |
| Similar | `similar-app` | One returned related app |
| Suggest | `suggestion` | One returned autocomplete phrase |

The exact event prices and plan discounts are shown in the Actor's **Pricing** tab. Failed requests that do not produce a dataset row do not trigger a result event. The Actor also respects the run's maximum charge limit and stops saving additional results when the limit is reached.

For a first run, start with 5 to 10 results, verify the dataset shape and price estimate, and then increase the limit.

Reviews may require multiple Google Play requests when a star filter is active because non-matching reviews are inspected but not saved.

### API usage

Every Actor can be started through the Apify API. Replace `YOUR_USERNAME` and `APIFY_TOKEN` in this example:

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/YOUR_USERNAME~google-play-scraper-python/runs?token=APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "mode": "details",
    "appIds": ["com.whatsapp", "com.spotify.music"],
    "country": "us",
    "language": "en"
  }'
```

After the run finishes, results are available in its default dataset. You can also connect the Actor to Make, Zapier, n8n, Google Sheets, webhooks, or any application that can call a REST API.

The Output tab uses one unified **Results** view with all 79 top-level fields across Search, Details, Reviews, Charts, Developer, Similar, and Suggest records. Fields that do not apply to a row's `recordType` remain empty, so users never need to switch mode-specific tabs or open the automatic All fields view.

### Limits and good to know

- One mode is executed per run.
- Search, reviews, charts, developer, and similar modes return up to 500 applicable records per input item.
- Google Play may expose fewer search results than requested.
- `details` and `reviews` currently accept package IDs such as `com.spotify.music`, not full Play Store URLs.
- Search, chart, developer, and similar output is intentionally lighter than details output. Use the returned `appId` in details mode for the complete 63-field profile.
- Details fetches Data Safety and permissions by default. Disable either enrichment only when you explicitly need fewer requests.
- Review score filtering is performed during pagination and can make filtered runs take longer.
- Region-restricted apps may be unavailable for the selected country.
- Some optional fields are absent for particular apps or reviews.
- The Actor accesses public Google Play data only. It does not download APK files or access account-protected information.
- If one package ID fails in a batch, the Actor logs the failure and continues with the remaining IDs.

### Frequently asked questions

#### Do I need a Google Play account or API key?

No. The Actor handles its network configuration automatically.

#### Can I scrape several apps or search terms in one run?

Yes. Pass multiple values in `appIds` or `searchTerms`. The result limit applies independently to each applicable input.

#### Can I filter reviews by star rating?

Yes. Set `reviewScore` to an integer from 1 to 5. Leave it empty to collect every rating.

#### What is the difference between `newest`, `rating`, and `relevant`?

- `newest` prioritizes recent reviews.
- `rating` uses Google Play's rating ordering.
- `relevant` uses Google Play's relevance or helpfulness ordering.

#### Why did search return fewer results than requested?

`maxResults` is an upper limit. Google Play controls how many results and continuation pages are available for a particular query, country, and language.

#### Why are some output values empty?

Google Play does not publish every field for every app. For example, an app may not have a promo video, developer reply, legal address, discount, or fixed Android version.

#### Can I schedule recurring runs?

Yes. Use Apify schedules for recurring searches, app snapshots, or review monitoring, and webhooks to notify another system when a run completes.

### Responsible use

This Actor extracts publicly available Google Play information. Users are responsible for complying with applicable laws, privacy regulations, and Google Play's terms. Public developer contact information and reviewer profile data should be processed responsibly and only for legitimate purposes.

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Google LLC.

### Support

If you find a missing field, parsing problem, or unexpected empty result, create an issue in the Actor's **Issues** tab. Include the run ID, mode, country, and a non-sensitive example input so the problem can be reproduced.

### Local development

```powershell
pip install -r requirements.txt
$env:APIFY_INPUT_PATH = "storage/key_value_stores/default/INPUT.json"
python -m my_actor
```

# Actor input Schema

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

Choose one of seven Google Play scraping modes.

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

Keywords to search for. Required in search and suggest modes.

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

Google Play package IDs. Required in details, reviews, and similar modes.

## `developerIds` (type: `array`):

Numeric Google Play developer IDs or developer names. Required in developer mode.

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

Maximum results per search term, app, developer, or chart.

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

Number of independent search terms, app IDs, or developer IDs processed concurrently. Pagination for one target remains sequential.

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

ISO 3166-1 alpha-2 country code.

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

ISO 639-1 language code.

## `reviewSort` (type: `string`):

Order used in reviews mode.

## `reviewScore` (type: `integer`):

Optional star rating filter from 1 to 5. Leave empty to return all ratings.

## `chartCollection` (type: `string`):

Ranking to collect in charts mode.

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

Google Play category ID for charts, for example APPLICATION, GAME, BUSINESS, or PRODUCTIVITY.

## `includeDataSafety` (type: `boolean`):

Fetch complete collected/shared data and security practices in details mode.

## `includePermissions` (type: `boolean`):

Fetch the complete public Android permissions list in details mode.

## Actor input object example

```json
{
  "mode": "search",
  "searchTerms": [
    "fitness tracker"
  ],
  "appIds": [],
  "developerIds": [],
  "maxResults": 50,
  "maxConcurrency": 5,
  "country": "us",
  "language": "en",
  "reviewSort": "newest",
  "chartCollection": "topFree",
  "category": "APPLICATION",
  "includeDataSafety": true,
  "includePermissions": true
}
```

# Actor output Schema

## `dataset` (type: `string`):

Results from search, details, reviews, charts, developer, similar, or suggest mode.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapingmonkey/google-play-scraper-apps-reviews-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("scrapingmonkey/google-play-scraper-apps-reviews-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 '{}' |
apify call scrapingmonkey/google-play-scraper-apps-reviews-charts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapingmonkey/google-play-scraper-apps-reviews-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/tWqqQ0P4i17jNy13A/builds/dQdMDXw0gIxGWvnae/openapi.json
