# Google Play Scraper (`curious_coder/google-play-scraper`) Actor

Scrape google play store to get apps, details, developers, categories and reviews.
If you are looking for a reliable google play reviews scraper you should give this tool a try

- **URL**: https://apify.com/curious\_coder/google-play-scraper.md
- **Developed by:** [Curious Coder](https://apify.com/curious_coder) (community)
- **Categories:** Automation
- **Stats:** 2,367 total users, 63 monthly users, 99.1% runs succeeded, 55 bookmarks
- **User rating**: 4.65 out of 5 stars

## Pricing

$0.30 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

### 👾 What is Google Play Scraper?

The Google Play Scraper is designed to **scrape Google Play Store apps, reviews, and developer data** based on your search query or URL.

🔭 Extract Google Play data **by keywords, specific URLs or App IDs**

🧚‍♀️ Extract **official app details, popularity, user reviews, and developer information** in one go

👽 **Extract app data** from various categories on Google Play Store including Games, Apps, and Kids section

☄️ Get **more than 3,000 results for free**

⬇️ **Download Google Play data** in Excel, CSV, JSON, and other formats

### 🕹 Why scrape data from Google Play Store?

Google Play has millions of apps and is a great source of data for market research. Here are some interesting uses for it:

- Track app performance and reviews
- Monitor competitors and their updates
- Identify market trends and user preferences
- Analyze developer activity and app features
- Research user sentiment and feedback

### 📱 What app data can Google Play Scraper extract?

Google Play Scraper extracts details from apps and app reviews such as:

<table>
    <tr>
        <td>📱 App title and app ID</td>
        <td>📝 App description</td>
        <td>⭐ App score</td>
    </tr>
    <tr>
        <td>📈 App ratings and star histogram</td>
        <td>⬇️ Number of installs </td>
        <td>🔗 App URL</td>
          </tr>
    <tr>
    <td>💵 Pricing details</td>
    <td>📸 Screenshot and video URLs</td>
    <td>🐲 Game genre and categories</td>
    </tr>
      <tr>
        <td>🌐 Developer website</td>
        <td>📍 Developer address</td>
        <td>📧 Developer email</td>
       </tr>
    <tr>
        <td>📅 Release date</td>
        <td>🆕 Recent changes</td>
       <td>🔐 Privacy policy</td>
    </tr>
    <tr>
    <td>👤 Reviewer's user name and image</td>
		<td>⭐ Review score</td>
    <td>🗓️ Review date</td>
    </tr>
        <tr>
        <td>🔗 Review URL</td>
        <td>📝 Review text</td>
        <td>📦 App version</td>
    </tr>
    <tr>
        <td>👍 Number of votes</td>
        <td>🎮 Criteria ratings</td>
        <td>💬 Reply text and date</td>
    </tr>
</table>


### 🔧 How to scrape app data from Google Play Store?

You can scrape details on all apps that match your query or a given URL. Just follow these steps to get your data in a few minutes.

1. Find [Google Play Scraper](https://apify.com/curious_coder/google-play-scraper) on Apify Store and click **Try for free** button.
2. Enter your search query and specify the number of apps want to scrape. 
3. Click "Start" and wait for the app or reviews data to be extracted.
4. Preview and download your dataset in JSON, XML, CSV, Excel, or HTML, or export it via API.

### ⭐️ How to scrape reviews data from Google Play Store?

You can scrape all reviews that match the app ID. Just follow these steps to get your data in a few minutes.

1. Find [Google Play Scraper](https://apify.com/curious_coder/google-play-scraper) on Apify Store and click **Try for free** button.
2. Enter app IDs and specify the number of reviews you want to scrape. 
3. If you don't have app IDs ready, first extract them using the same [Google Play Scraper](https://apify.com/curious_coder/google-play-scraper), then use appIDs in the output as the new input for reviews.
4. Click "Start" and wait for the app or reviews data to be extracted.
5. Preview and download your dataset in JSON, XML, CSV, Excel, or HTML, or export it via API.

### 💸 Is this Google Play Store API free?

Yes. Apify provides you with $5 free usage credits every month on the [Apify Free plan](https://apify.com/pricing), so with Google Play Scraper you can **scrape thousands of results for free** within those limits. The range of free results depends on the complexity of your input: URLs, reviews or keywords.

### ⬇️ Input

To scrape app details, the input for this Google Play Scraper should be **search keywords or app URLs**. To scrape app reviews, the input for this Google Play Scraper should be **Google Play app IDs and number of reviews to scrape.**

[![Google Play API input](https://github.com/apify-projects/actor-readme-images/blob/master/Google%20Play%20API%20input.png?raw=true)](https://console.apify.com/actors/LC7ZgFxSr2us77QPC)

You can input data by filling out fields, using JSON, or programmatically via an API. For a full explanation of input in JSON, see the [input tab](https://apify.com/curious_coder/google-play-scraper/input-schema).

### ⬆️ Output sample

The results will be wrapped into a dataset which you can find in the **Output** tab. Here's an example from the Google Play dataset from the input above:

[![Google Play Store API dataset](https://github.com/apify-projects/actor-readme-images/blob/master/Google%20Play%20Store%20API%20dataset.png?raw=true)](https://console.apify.com/actors/LC7ZgFxSr2us77QPC)

You can preview all the fields in the **Storage** tab and choose the format in which to export the   Google Play Store data you've extracted: JSON, CSV, Excel, or HTML table. Here below are two sample datasets in JSON:

#### 📲 App details

```json
{
	"title": "Coolmath Games Fun Mini Games",
	"description": "Your favorite casual games and mini games from the web are now on mobile! Coolmath Games is full of fun casual games, mini games, trivia & brain-training puzzles for everyone. Play fun logic, math and thinking games today!\n\nIf you love the Coolmath Games website, you’ll love the official app with hundreds of our favorite math, logic, casual, trivia, thinking and strategy mini games made especially for mobile phones and tablets! Play all sorts of fun mini games, trivia and educational games for hours – Coolmath Games has a fun mini game for you!\n\nWith new casual mini games added every week, you’ll never run out of new gaming challenges. Coolmath Games is kid-friendly because there is never violence, empty action, or inappropriate language – just a wide range of fun casual games and strategy puzzles! Fun starts with mini games!\n\nPlay our most popular logic, casual games, math and strategy mini games including:\n\n* Bob the Robber: Play this fun classic game and use logic to help Bob expose the real crook!\n* Block the Pig: The fun casual strategy game where you place walls to prevent the little snorter from escaping!\n* IQ Ball: Use your brain to solve climbing and grabbing puzzles in as few moves as possible. \n* Checkers: A strategy classic! Play against the computer or challenge other players to an online multiplayer game!\n* Parking Fury: Solve fun parking puzzles as you drive and play with realistic steering and pedal controls.  \n* 2048: Match and multiply your way through this fun logic puzzle to 2048.\n* Toy Defense: A classic tower defense game. Find the best strategy to protect your base!\n\nWith game categories like Fun Physics, Path Planning, Quick Reaction, Drawing and Match 3, Coolmath Games lets you train your brain in all sorts of ways. Recently named one of the internet’s all-time favorite websites by Popular Mechanics, Coolmath Games brings your favorite educational mini games, logic, math and learning games to your mobile devices.\n\nCoolmath Games has mini games, casual games and trivia for hours of fun and learning!",
	"descriptionHTML": "Your favorite casual games and mini games from the web are now on mobile! Coolmath Games is full of fun casual games, mini games, trivia &amp; brain-training puzzles for everyone. Play fun logic, math and thinking games today!<br><br>If you love the Coolmath Games website, you’ll love the official app with hundreds of our favorite math, logic, casual, trivia, thinking and strategy mini games made especially for mobile phones and tablets! Play all sorts of fun mini games, trivia and educational games for hours – Coolmath Games has a fun mini game for you!<br><br>With new casual mini games added every week, you’ll never run out of new gaming challenges. Coolmath Games is kid-friendly because there is never violence, empty action, or inappropriate language – just a wide range of fun casual games and strategy puzzles! Fun starts with mini games!<br><br>Play our most popular logic, casual games, math and strategy mini games including:<br><br>* Bob the Robber: Play this fun classic game and use logic to help Bob expose the real crook!<br>* Block the Pig: The fun casual strategy game where you place walls to prevent the little snorter from escaping!<br>* IQ Ball: Use your brain to solve climbing and grabbing puzzles in as few moves as possible. <br>* Checkers: A strategy classic! Play against the computer or challenge other players to an online multiplayer game!<br>* Parking Fury: Solve fun parking puzzles as you drive and play with realistic steering and pedal controls.  <br>* 2048: Match and multiply your way through this fun logic puzzle to 2048.<br>* Toy Defense: A classic tower defense game. Find the best strategy to protect your base!<br><br>With game categories like Fun Physics, Path Planning, Quick Reaction, Drawing and Match 3, Coolmath Games lets you train your brain in all sorts of ways. Recently named one of the internet’s all-time favorite websites by Popular Mechanics, Coolmath Games brings your favorite educational mini games, logic, math and learning games to your mobile devices.<br><br>Coolmath Games has mini games, casual games and trivia for hours of fun and learning!",
	"summary": "Play strategy, logic &amp; learning games for a fun mental workout!",
	"installs": "1,000,000+",
	"minInstalls": 1000000,
	"maxInstalls": 1369210,
	"score": 3.576,
	"scoreText": "3.6",
	"ratings": 5015,
	"reviews": 1477,
	"histogram": {
		"1": 1256,
		"2": 279,
		"3": 400,
		"4": 466,
		"5": 2606
	},
	"price": 0,
	"free": true,
	"currency": "USD",
	"priceText": "Free",
	"available": true,
	"offersIAP": false,
	"androidVersion": "5.0",
	"androidVersionText": "5.0",
	"androidMaxVersion": "VARY",
	"developer": "CoolmathGames.com",
	"developerId": "7876604119083871959",
	"developerEmail": "mobile@coolmath.com",
	"developerWebsite": "https://coolmathgames.com",
	"developerAddress": "122 East 42nd Street\nSuite 1611\nNew York, NY 10168",
	"privacyPolicy": "https://www.coolmathgames.com/app-privacy-policy",
	"developerInternalID": "7876604119083871959",
	"genre": "Arcade",
	"genreId": "GAME_ARCADE",
	"categories": [
		{
			"name": "Casual",
			"id": "GAME_CASUAL"
		},
		{
			"name": "Minigames",
			"id": null
		},
		{
			"name": "Multiplayer",
			"id": null
		},
		{
			"name": "Competitive multiplayer",
			"id": null
		},
		{
			"name": "Single player",
			"id": null
		},
		{
			"name": "Stylized",
			"id": null
		},
		{
			"name": "Offline",
			"id": null
		}
	],
	"icon": "https://play-lh.googleusercontent.com/GOSj_Oh_taPXIomBMiiTRNM1Mg3LP9qKJ4gRIuCRV2jQ0oa9VUIC2SHAiY8GL09j6ts",
	"headerImage": "https://play-lh.googleusercontent.com/iPKMWbRxgfaUTqYSezs2FgBQKRlJaSyCIR3aCkxHh2t6o28Z7zQOsn5v2CIsm11yoGU",
	"screenshots": [
		"https://play-lh.googleusercontent.com/ZzFGj_MgQ2_LoXc0XleZzTiKLTktYve5IxgLUcmLJIXdFBRRojMVTH052SNfkVI1dJA8",
		"https://play-lh.googleusercontent.com/OkJFfEddiKGa8mbgvcqNCIYpZQKwlhDgFs4KTZaykFdZz7Z0yUdVjNmAtM9Gmxy1ubZf",
		"https://play-lh.googleusercontent.com/OIZTR-_YD-P1Z2pW4draBCIg7nbHrw7pUEMszM892Er_u2UpBu7H-7028hGXg_ndyTXB",
		"https://play-lh.googleusercontent.com/hjRM__CGvcsuzzKzaz9SXwzHmpF6Yb6tR16350M8RD21iIbTihKR4YfZ333MGvAOVKfA",
		"https://play-lh.googleusercontent.com/wkKOflrpH835tjgDWyn3KApglNSJiCbRTMkK9AEasLRJfG33HnaaegD3kKQRU5Dheg",
		"https://play-lh.googleusercontent.com/Bq56xjAcMbBd8VFvVfmnO52wkGJs1FpwTBEw6L-8WjNBmkQ0CxVZ3LUpmhMPjz-ksBY",
		"https://play-lh.googleusercontent.com/rZjjdGivAnBWcEylFadbB_0vJ8B1zQJqfNdFEnQlE33ERWnXpoOPRu72H8SGUF5b-r0",
		"https://play-lh.googleusercontent.com/wteh08ZsZI6FqUN3E6yYV4b-22yqlKFynLmP3EzFUpw6O5GNmwjQZMi4y88mHqZCNmw",
		"https://play-lh.googleusercontent.com/lJ0DkN9QW3c9Xn7-XimJsGHC7K7Cl-VWd0fCIuN1r3k2oSBrx9fze9LCUAgYT0LRJ5b3",
		"https://play-lh.googleusercontent.com/2J8AJqZADwSbkcPlmUqMO5RAlX2WEZ16wcqlGoVqWPmyYUQ_f4pmMYnW0dau0AsU5i0",
		"https://play-lh.googleusercontent.com/6r9DmlE6ZNxe6BiPzWj8sZSk0ZBbLvOgIZLXz37YiInWpGBP2WVeA-AM4TIhxHi33A",
		"https://play-lh.googleusercontent.com/fZVMzsmiFjbPimBm6kFhJC5CvKkN_FpyGUa3CbCJqZiw_culyVNYYMef5wTMtK4OZsE",
		"https://play-lh.googleusercontent.com/g40qsYIcIkgDoZWJwqk-VfkvFY2kGt2-LzxogzWQrQVOQC0CYLal5TTjIREr564fzaA",
		"https://play-lh.googleusercontent.com/9MN3Ui-lcNt9DFvyA4huzG2HEQr1bSnGyshDAdcMLRIdfI0I4hvlc0qcx8P4e1tAbWk",
		"https://play-lh.googleusercontent.com/L3Vu-CIWuWhYCrxmRkMwSw1_yHGU0WfB3uJCHw9SQFFaQ5lwOiLKaJuR8Lvno9ERdwYX",
		"https://play-lh.googleusercontent.com/q5hJFrDC6_kQlsscXNG8S8MlLBcy5zd7oT3AzolXm-FR7fZYiUq-s-7pOTwvwF3cnMDU",
		"https://play-lh.googleusercontent.com/-v9zOOaOlCbuPOhgwX_lnbjZAkY7_Vjm7hRyDhLcy2M6v4pXsjKIg3epL0pauUYPS58",
		"https://play-lh.googleusercontent.com/lrXfhIS4uvxeLaIbi_cRt-HXZ16qYb9ukGSSQiaFPkDIKb6sW1NBUSagO_Q1ewjk4TuR",
		"https://play-lh.googleusercontent.com/-lWEH7KWcTzZZ9AkCK3ZPkj8e1tw55-pXHu0rU9kyElXLTHEcw1piqY0_Ny2TrSCde0",
		"https://play-lh.googleusercontent.com/eqMTHwdlDauIuFVqDeuLRaz88BPhUtxww87Od1v6FXneifijs-KQ-ebSq15xasc1uhU",
		"https://play-lh.googleusercontent.com/J9wreRc-4B_u4ZVV_JzQaX4y-DP3XT1FdogWOyMORN74RCuodiEZ0LOkyAcD9IX9",
		"https://play-lh.googleusercontent.com/n6QpslWQX3F9T41ijaN-m6_nrxxzgxUg2j6a_dvBnvDzg6IdEO1HNVGAGN8XXQktHg",
		"https://play-lh.googleusercontent.com/GxFWf_Dtc2qZBib6sUFRLnq0giEiHlz2UHAeteH5tXaR6axEAQoCh9IRXFSQY4AZ0Z4",
		"https://play-lh.googleusercontent.com/pEGVCsAmhqnYiZov5vQpxzRRCBzdh_ATOlx9m_wXweOzskRTz2w9P_cpMAVhqA5QcQ"
	],
	"video": "https://www.youtube.com/embed/sHdqJFdEbzg?ps=play&vq=large&rel=0&autohide=1&showinfo=0",
	"videoImage": "https://play-lh.googleusercontent.com/iPKMWbRxgfaUTqYSezs2FgBQKRlJaSyCIR3aCkxHh2t6o28Z7zQOsn5v2CIsm11yoGU",
	"previewVideo": "https://play-games.googleusercontent.com/vp/mp4/1280x720/sHdqJFdEbzg.mp4",
	"contentRating": "Everyone",
	"contentRatingDescription": "Mild Fantasy Violence",
	"adSupported": false,
	"released": "Sep 23, 2019",
	"updated": 1709126357000,
	"version": "1.4.3",
	"recentChanges": "Bug Fixes and Improvements.",
	"comments": [
		null
	],
	"preregister": false,
	"earlyAccessEnabled": false,
	"isAvailableInPlayPass": false,
	"appId": "com.coolmath_games.coolmath",
	"url": "https://play.google.com/store/apps/details?id=com.coolmath_games.coolmath&hl=en&gl=us"
}

````

#### ⭐️ App review

```json
{
	"id": "0e5ec468-f8a3-4d3d-8b1f-24b1cbb5b309",
	"userName": "Logan Landman",
	"userImage": "https://play-lh.googleusercontent.com/a-/AD_cMMQLM0vtsmrJyz4OzNBTa55rUPIX66-XZ0p0ljkhdBBD2Ic",
	"date": "2023-07-03T20:58:35.428Z",
	"score": 5,
	"scoreText": "5",
	"url": "https://play.google.com/store/apps/details?id=com.rockstargames.gtasa&reviewId=0e5ec468-f8a3-4d3d-8b1f-24b1cbb5b309",
	"title": null,
	"text": "Legitametly great port for what it is. Many people complain about the downgrades, and yes these ports do somewhat have a reputation with the Definitive Editions, but the downgrades are minor and are honestly not much of a problem and really should've been expected. This port is great and perfect for on-the-go, controls can be a bit weird and frustrating but once you get used to them it's not much of a problem. Highly recommended.",
	"replyDate": null,
	"replyText": null,
	"version": "2.11.32",
	"thumbsUp": 132,
	"criterias": [
		{
			"criteria": "vaf_games_genre_shooting",
			"rating": 1
		},
		{
			"criteria": "vaf_games_massively_multi_player",
			"rating": 2
		},
		{
			"criteria": "vaf_games_subject_bmx",
			"rating": 3
		}
	]
}
```

### 📱 Related App Store Scrapers

For comprehensive app store data extraction across multiple platforms, check out these related scrapers. To scrape Apple App Store apps, reviews, and developer data, use the [Apple Store Scraper](https://apify.com/supreme_scraper/apple-store-scraper) which provides similar functionality for iOS apps.

### ❓FAQ

#### Does Google Play Store have API?

No, Google Play doesn't have an official API for retrieving data on games, reviews and devs. While there's ([Google Play Developer API](https://developers.google.com/android-publisher)) neither of these APIs provide access to the app data .

This is why alternative solutions like Google Play Scraper exist. A scraper is essentially an API of its own if it allows exporting scraped data via an API.

#### Can I scrape Google Play app reviews if I don't have app IDs?

Yes. Just use Google Play Scraper in two runs. First, scrape app details using search or URL input. Your output from this run will contain App IDs. Then, filter out App IDs from the output and use them as an input for the second run. Done!

#### Can I integrate Google Play Scraper with other apps?

Yes. This Google Play Scraper can be connected with almost any cloud service or web app thanks to integrations on the Apify platform. You can **integrate your Google Play data with Zapier, Slack, Make, Airbyte, GitHub, Google Drive, LangChain** [and more](https://docs.apify.com/integrations).

You can also use [webhooks](https://docs.apify.com/integrations/webhooks) to carry out an action whenever an event occurs, e.g., get a notification whenever Play Store Scraper successfully finishes a run.

#### Can I use Google Play Scraper as its Google Play Store API?

Yes, you can use the Apify API to access Google Play Scraper programmatically. The API allows you to manage, schedule, and run Apify Actors, access datasets, monitor performance, get results, create and update Actor versions, and more.

To access the API using Node.js or Python, you can use the `apify-client` in [NPM package](https://apify.com/curious_coder/google-play-scraper/api/client/nodejs) or [PyPI package](https://apify.com/curious_coder/google-play-scraper/api/client/python). There are also [API endpoints](https://apify.com/curious_coder/google-play-scraper/api/endpoints) available for extracting Google Play data without a client. For detailed information and code examples, see the [API tab](https://apify.com/curious_coder/google-play-scraper/api/endpoints) or refer to the [Apify API documentation](https://docs.apify.com/api/v2).

#### Is it legal to scrape data from Google Play?

Note that personal data such as names  is protected by GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers. We also recommend that you read our blog post: [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

#### Your feedback

We’re always working on improving the performance of our Actors. So if you’ve got any technical feedback for Google Play Scraper or simply found a bug, please create an issue on the Actor’s [Issues tab](https://apify.com/curious_coder/google-play-scraper/issues/open).

# Actor input Schema

## `action` (type: `string`):

Actor will decide what kind of data it needs to scrape and from where it should scrape it based on selected action

## `scrapeReviews.appId` (type: `string`):

The Google Play id of the application (the ?id= parameter on the url).

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

The country code to scrape reviews from. Eg: us, in, de

## `scrapeAppSearch.keywords` (type: `array`):

No description

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

The country code to scrape apps from. Eg: us, in, de

## `scrapeAppUrls.urls` (type: `array`):

No description

## `scrapeSimilarApps.urls` (type: `array`):

No description

## `count` (type: `integer`):

Leave this field empty if you want to scrape all items.

## `cursor` (type: `string`):

Use this field if you want to resume scraping from where the scraper stopped last time. You can find this value in default storage of scraper runs under **lastCursor** key

## Actor input object example

```json
{
  "action": "scrapeReviews",
  "scrapeReviews.appId": "com.rockstargames.gtasa",
  "scrapeAppSearch.keywords": [
    "trading",
    "market",
    "stocks",
    "investing",
    "crypto"
  ],
  "scrapeAppUrls.urls": [
    "https://play.google.com/store/apps/details?id=com.tradingview.tradingviewapp"
  ],
  "scrapeSimilarApps.urls": [
    "https://play.google.com/store/apps/details?id=com.tradingview.tradingviewapp"
  ],
  "count": 1000,
  "cursor": ""
}
```

# 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 = {
    "action": "scrapeReviews",
    "scrapeReviews.appId": "com.rockstargames.gtasa",
    "scrapeAppSearch.keywords": [
        "trading",
        "market",
        "stocks",
        "investing",
        "crypto"
    ],
    "scrapeAppUrls.urls": [
        "https://play.google.com/store/apps/details?id=com.tradingview.tradingviewapp"
    ],
    "scrapeSimilarApps.urls": [
        "https://play.google.com/store/apps/details?id=com.tradingview.tradingviewapp"
    ],
    "count": 1000
};

// Run the Actor and wait for it to finish
const run = await client.actor("curious_coder/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 = {
    "action": "scrapeReviews",
    "scrapeReviews.appId": "com.rockstargames.gtasa",
    "scrapeAppSearch.keywords": [
        "trading",
        "market",
        "stocks",
        "investing",
        "crypto",
    ],
    "scrapeAppUrls.urls": ["https://play.google.com/store/apps/details?id=com.tradingview.tradingviewapp"],
    "scrapeSimilarApps.urls": ["https://play.google.com/store/apps/details?id=com.tradingview.tradingviewapp"],
    "count": 1000,
}

# Run the Actor and wait for it to finish
run = client.actor("curious_coder/google-play-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "action": "scrapeReviews",
  "scrapeReviews.appId": "com.rockstargames.gtasa",
  "scrapeAppSearch.keywords": [
    "trading",
    "market",
    "stocks",
    "investing",
    "crypto"
  ],
  "scrapeAppUrls.urls": [
    "https://play.google.com/store/apps/details?id=com.tradingview.tradingviewapp"
  ],
  "scrapeSimilarApps.urls": [
    "https://play.google.com/store/apps/details?id=com.tradingview.tradingviewapp"
  ],
  "count": 1000
}' |
apify call curious_coder/google-play-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=curious_coder/google-play-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Google Play Scraper",
        "description": "Scrape google play store to get apps, details, developers, categories and reviews. \nIf you are looking for a reliable google play reviews scraper you should give this tool a try",
        "version": "1.0",
        "x-build-id": "aB4GptpX1gpkjNaBL"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/curious_coder~google-play-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-curious_coder-google-play-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/curious_coder~google-play-scraper/runs": {
            "post": {
                "operationId": "runs-sync-curious_coder-google-play-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/curious_coder~google-play-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-curious_coder-google-play-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "action"
                ],
                "properties": {
                    "action": {
                        "title": "Select action to perform",
                        "enum": [
                            "scrapeReviews",
                            "scrapeAppSearch",
                            "scrapeAppUrls",
                            "scrapeSimilarApps"
                        ],
                        "type": "string",
                        "description": "Actor will decide what kind of data it needs to scrape and from where it should scrape it based on selected action",
                        "default": "scrapeReviews"
                    },
                    "scrapeReviews.appId": {
                        "title": "App ID",
                        "type": "string",
                        "description": "The Google Play id of the application (the ?id= parameter on the url)."
                    },
                    "scrapeReviews.country": {
                        "title": "Country",
                        "type": "string",
                        "description": "The country code to scrape reviews from. Eg: us, in, de"
                    },
                    "scrapeAppSearch.keywords": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "",
                        "items": {
                            "type": "string"
                        }
                    },
                    "scrapeAppSearch.country": {
                        "title": "Country",
                        "type": "string",
                        "description": "The country code to scrape apps from. Eg: us, in, de"
                    },
                    "scrapeAppUrls.urls": {
                        "title": "App URLs",
                        "type": "array",
                        "description": "",
                        "items": {
                            "type": "string"
                        }
                    },
                    "scrapeSimilarApps.urls": {
                        "title": "App URLs",
                        "type": "array",
                        "description": "",
                        "items": {
                            "type": "string"
                        }
                    },
                    "count": {
                        "title": "#️⃣ Total number of records required",
                        "type": "integer",
                        "description": "Leave this field empty if you want to scrape all items."
                    },
                    "cursor": {
                        "title": "Start from cursor",
                        "type": "string",
                        "description": "Use this field if you want to resume scraping from where the scraper stopped last time. You can find this value in default storage of scraper runs under **lastCursor** key",
                        "default": ""
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
