# Google Play Store Scraper  Reviews, Details, Search & Emails (`reviewly/google-play-scraper`) Actor

Scrape Google Play reviews, full app details (developer email, phone, address, price, installs, permissions, Data safety), ranked search results, similar apps and developer portfolios across countries \u2014 plus contact emails found on developers' websites. No login or API key needed.

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

## Pricing

from $1.00 / 1,000 result rows

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

## Google Play Scraper: Reviews, App Data & Developer Leads

**Export Google Play reviews, full app details and developer contact emails to Excel, CSV or JSON in minutes. No login, no API key, no code.**

- ⭐ **Every review you need**: thousands per minute, filtered by stars, date, language and country
- 📧 **Developer leads**: support email, website, phone, legal name and address on every app, plus extra emails found on the developer's own website
- 🔎 **ASO data**: ranked search results, similar apps and full developer portfolios
- 🌍 **Many countries, one run**: prices, ratings, rankings and reviews for every market you pick

***

### 📌 What This Actor Does

This **Apify actor** is a **Google Play scraper** for app reviews, app details and developer leads. It reads the public Google Play Store (play.google.com) and turns it into clean, structured data you can open in a spreadsheet or plug into your tools.

Give it an app, a search term or a developer, choose what you want, and press **Start**. You get one tidy row per review, app or search result, ready to download.

#### Who it's for

| You are | You use it to |
|---|---|
| **App developer / product manager** | Read what users say about your app and your competitors, and catch bugs and feature requests early |
| **ASO specialist / app marketer** | Track keyword rankings, compare competitors' ratings, installs and screenshots across countries |
| **Agency / sales team** | Build lead lists of app publishers with contact emails, websites and phone numbers |
| **Market researcher / analyst** | Export app catalogs, prices and ratings by category and market |
| **Data scientist** | Build labelled sentiment datasets from real star ratings and review text |
| **Privacy & compliance team** | Audit Data safety disclosures and Android permissions across many apps |

***

### ✨ Key Features

- **Five tools in one actor**: app reviews, app details, search results, similar apps and a developer's full app list.
- **Fast review scraping**: 100 reviews per request, with no browser to slow it down. A single app can yield tens of thousands of reviews.
- **Smart review filters**: sort by newest, most relevant or rating. Keep only 1-star (or 5-star) reviews. Skip anything older than a date.
- **Incremental runs**: with *Newest* order and a target date, a daily run fetches only what's new and stops.
- **50+ fields per app**: title, description, score, star histogram, installs, price, in-app purchases, ads, content rating, version, release and update dates, screenshots, video, categories.
- **Lead generation built in**: developer email, website, phone, legal company name and postal address, straight from the store listing.
- **Website email finder**: optionally visits each developer's website and finds more contact emails (press, partnerships, marketing), ranked best-first.
- **Multi-country**: list `us`, `gb`, `in`… and every input runs once per market, so you see local prices, currencies and rankings side by side.
- **Privacy data**: the full Data safety section (data shared, data collected, purposes, security practices) and every declared Android permission.
- **Export anywhere**: JSON, CSV, Excel, XML, HTML, or through the Apify API, webhooks and integrations (Google Sheets, Zapier, Make, Slack…).

***

### 🧠 Why This Actor Is Different

- **No login, no API key, no browser.** It reads Google Play's public web data over plain HTTP, so runs start instantly and cost less.
- **Built for scale.** Reviews come 100 at a time with automatic retries on Google's occasional server timeouts, and runs keep going instead of failing halfway. One app was walked to more than 10,000 reviews in under 3 minutes in testing.
- **Lead data you can act on.** Most Google Play scrapers stop at the listing email. This one also returns the developer's legal email, phone and address, and can find extra business addresses on their website. It skips the traps that pollute other email finders, such as open-source license pages full of strangers' addresses, image file names, placeholders and no-reply addresses.
- **Honest data.** Fields Google doesn't publish come back as `null`, never a guess. Dates are ISO 8601. Prices are real numbers with their currency.
- **Fair pay-per-result pricing.** You pay per row delivered, and extras only when they return data. Email lookups that find nothing are free, and the actor stops cleanly at your spending limit.
- **Correct by country and language.** Google Play keeps separate review lists per language and separate prices per country. The actor exposes both, so you never mix markets by accident.

***

### ⚙️ Input Configuration

Pick **what to scrape** first; the other fields depend on it.

#### What to scrape (`action`)

| Action | You get | You provide |
|---|---|---|
| **Reviews** (`reviews`, default) | One row per review | App URLs or package names |
| **App details** (`appDetails`) | One row per app with 50+ fields | App URLs or package names |
| **Similar apps** (`similar`) | Google Play's "Similar apps" list, ranked | App URLs or package names |
| **Search results** (`search`) | Ranked results per keyword (ASO rank) | Search terms |
| **Developer's apps** (`developer`) | Every app a developer publishes | Developer URLs, names or IDs |

If you forget to switch the action, the actor notices. For example, filling in only search terms runs a search.

#### Main fields

| Field | What it does | Default |
|---|---|---|
| **App URLs** (`startUrls`) | Links such as `https://play.google.com/store/apps/details?id=com.spotify.music` | Shopee Indonesia |
| **Package names** (`appIds`) | The `id=` part of a Play link, e.g. `com.spotify.music`. One per line. | `com.spotify.music` |
| **Search terms** (`searchQueries`) | Keywords, one per line, e.g. `habit tracker` | — |
| **Developers** (`developerIds`) | `Spotify AB`, a developer page URL, or a numeric ID like `4772240228547998649` | — |
| **Countries** (`countries`) | Two-letter codes (`us`, `gb`, `de`, `in`…). Every input runs once per country. | `us` |
| **Language** (`language`) | `en`, `fr`, `pt-BR`… Sets the text language and, for reviews, which reviews you get. | `en` |

#### Review options

| Field | What it does | Default |
|---|---|---|
| **Max reviews per app** (`maxReviews`) | Per app and country. `0` = all of them. | `100` |
| **Sort reviews by** (`sortBy`) | `newest`, `mostRelevant`, `rating` | `newest` |
| **Star rating** (`filterByRating`) | `all`, or only `1`–`5` stars | `all` |
| **Target date** (`targetDate`) | Skip reviews older than this. With *Newest*, the run stops there. | — |
| **Add an app row** (`includeAppInfo`) | Adds one row with the app's full details before its reviews | on |

#### App details options

| Field | What it does | Default |
|---|---|---|
| **Include permissions** (`includePermissions`) | Every declared Android permission, by group | off |
| **Include Data safety** (`includeDataSafety`) | Data shared, data collected, purposes, security practices | off |
| **Include similar apps** (`includeSimilar`) | A `similarApps` list on each app row | off |

#### List and lead options

| Field | What it does | Default |
|---|---|---|
| **Results limit** (`resultsLimit`) | Max results per search term, app or developer. `0` = all. | `50` |
| **Full details for every listed app** (`includeFullDetails`) | Adds all 50+ app fields, including developer contacts, to search, similar and developer results | off |
| **Find contact emails on developer websites** (`enrichEmails`) | Visits each developer's website for more contact emails | off |

#### Run options

| Field | What it does | Default |
|---|---|---|
| **Max rows** (`maxItems`) | Hard cap on total rows. `0` = no cap. | `0` |
| **Max concurrency** (`maxConcurrency`) | How many inputs run in parallel | `5` |
| **Proxy configuration** | Optional. Spreads load on big runs. | Apify Proxy |

#### Example inputs

**Last month's 1-star reviews of two apps, in the US and UK**

```json
{
    "action": "reviews",
    "appIds": ["com.spotify.music", "com.whatsapp"],
    "countries": ["us", "gb"],
    "sortBy": "newest",
    "filterByRating": "1",
    "targetDate": "2026-09-23",
    "maxReviews": 0
}
```

**A lead list: every result for a keyword, with contacts and website emails**

```json
{
    "action": "search",
    "searchQueries": ["habit tracker", "budget planner"],
    "includeFullDetails": true,
    "enrichEmails": true
}
```

**A privacy audit of a developer's portfolio**

```json
{
    "action": "developer",
    "developerIds": ["Spotify AB"],
    "resultsLimit": 0,
    "includeFullDetails": true
}
```

#### 💡 Tips for best results

- **Reviews depend on language.** Google Play stores reviews per language: `en` returns English reviews, `fr` French ones. To cover a global app, run once per language you care about.
- **Use *Newest* + Target date for monitoring.** It's the only date-sorted order, so the run stops as soon as it reaches old reviews. That makes it the cheapest way to run daily or weekly.
- **Turn on Full details for leads.** Search, similar and developer results are short cards. The developer's email, website and phone come with *Full details*.
- **Start small.** Try `maxReviews: 100` or `resultsLimit: 10` first, check the output, then scale up.

***

### 📤 Output Format

Every row is one item, so exports to CSV and Excel stay flat and clean. Each row has:

- `rowType`: `review`, `app`, `searchResult`, `similarApp` or `developerApp`
- `country` and `language`: the market it was scraped for
- `scrapedAt`: when it was scraped

The dataset has three ready-made views: **Reviews**, **Apps**, and **Search, similar & developer apps**.

#### Review rows

```json
{
    "rowType": "review",
    "appId": "com.shopee.id",
    "appTitle": "Shopee Indonesia",
    "reviewId": "2f326895-ec43-4d79-b1eb-c82c19d2b2b6",
    "reviewUrl": "https://play.google.com/store/apps/details?id=com.shopee.id&reviewId=2f326895-ec43-4d79-b1eb-c82c19d2b2b6",
    "userName": "Beni Nugraha",
    "userImage": "https://play-lh.googleusercontent.com/a/…",
    "rating": 1,
    "text": "ga bisa ngasih tip ke driver, aplikasi kek pasar malem rame banget, UI UX jelek parah",
    "postedAt": "2026-10-22T12:46:46.000Z",
    "thumbsUpCount": 0,
    "appVersion": null,
    "criteria": [],
    "replyText": "Hai kak Beni Nugraha, maaf ya untuk kendala yang kaka alami…",
    "replyAuthor": "Shopee Indonesia",
    "repliedAt": "2026-10-22T13:27:01.000Z",
    "country": "us",
    "language": "en",
    "scrapedAt": "2026-10-23T14:06:13.748Z"
}
```

| Field | Meaning |
|---|---|
| `reviewId`, `reviewUrl` | Stable review ID and a direct link to it |
| `userName`, `userImage` | The reviewer's public display name and avatar |
| `rating` | Stars, 1–5 |
| `text` | The full review text |
| `postedAt` | When the review was posted (ISO 8601) |
| `thumbsUpCount` | How many people marked it helpful |
| `appVersion` | App version the reviewer used, when known |
| `criteria` | Optional aspect ratings the reviewer gave (ads, performance…) |
| `replyText`, `replyAuthor`, `repliedAt` | The developer's public reply, if any |

#### App rows

```json
{
    "rowType": "app",
    "appId": "com.mojang.minecraftpe",
    "url": "https://play.google.com/store/apps/details?id=com.mojang.minecraftpe",
    "title": "Minecraft: Dream it, Build it!",
    "developer": "Mojang",
    "developerEmail": "help@minecraft.net",
    "developerWebsite": "http://help.mojang.com",
    "developerPhone": "+1 800-642-7676",
    "developerLegalName": "Microsoft Corporation",
    "developerLegalEmail": "contactmojang@minecraft.net",
    "developerAddress": "1 Microsoft Way\nRedmond, WA 98052\nUnited States",
    "genre": "Arcade",
    "score": 4.3032355,
    "ratings": 5866526,
    "histogram": { "1": 628637, "2": 178842, "3": 270704, "4": 495072, "5": 4293255 },
    "installs": "50,000,000+",
    "price": 6.99,
    "currency": "USD",
    "priceText": "$6.99",
    "free": false,
    "offersIAP": true,
    "inAppProductPrice": "$0.99 - $49.99 per item",
    "contentRating": "Everyone 10+",
    "version": "1.26.52.3",
    "androidVersion": "8.0",
    "releasedAt": "2011-08-16T06:17:21.000Z",
    "updatedAt": "2026-09-25T17:26:28.000Z",
    "country": "us",
    "language": "en",
    "scrapedAt": "2026-10-23T14:06:26.112Z"
}
```

*(Shortened. The full row has 50+ fields.)*

| Group | Fields |
|---|---|
| **App** | `appId`, `url`, `title`, `summary`, `description`, `descriptionHtml`, `genre`, `genreId`, `categories` |
| **Developer & leads** | `developer`, `developerId`, `developerUrl`, `developerEmail`, `developerWebsite`, `developerPhone`, `developerLegalName`, `developerLegalEmail`, `developerAddress`, `privacyPolicy` |
| **Ratings** | `score`, `scoreText`, `ratings`, `reviewsCount`, `histogram` (count per star) |
| **Installs** | `installs` (as shown), `minInstalls`, `maxInstalls` |
| **Price** | `price`, `currency`, `priceText`, `free`, `offersIAP`, `inAppProductPrice`, `containsAds` |
| **Content** | `contentRating`, `contentRatingDescription`, `interactiveElements` |
| **Versions** | `version`, `androidVersion`, `released`, `releasedAt`, `updatedAt`, `recentChanges` |
| **Media** | `icon`, `headerImage`, `screenshots`, `video`, `videoImage` |
| **Privacy** | `dataSafetySummary` (always); `dataSafety` and `permissions` (with their options) |
| **Similar** | `similarApps` (with *Include similar apps*) |
| **Website emails** | `contactEmail`, `emailEnrichment` (with *Find contact emails*) |

#### Search, similar and developer rows

Each row has `rank` (1 = top position), `appId`, `url`, `title`, `developer`, `icon`, `score`, `genre`, `installs`, `price`, `priceText`, `free`, `contentRating` and a short `summary` or `description`. It also carries `query` (search), `sourceAppId` (similar) or `developerId` (developer). With *Full details*, every app field above is added.

#### Website email results

```json
"contactEmail": "press@vsco.co",
"emailEnrichment": {
    "status": "found",
    "website": "https://vsco.co",
    "websiteSource": "listing",
    "isNew": true,
    "emails": [
        { "email": "press@vsco.co", "source": "https://www.vsco.co/about", "onPlayListing": false },
        { "email": "brands@vsco.co", "source": "https://www.vsco.co/about", "onPlayListing": false }
    ]
}
```

| Field | Meaning |
|---|---|
| `contactEmail` | The best address found. Business addresses on the developer's own domain (partnerships, press, marketing) rank first, then general ones (hello, info), then support. Legal and privacy addresses come last. |
| `emails` | Every address found, with the page it was on and whether it already appears on the Play listing |
| `isNew` | `true` when at least one address is not already on the Play listing |
| `website`, `websiteSource` | The site that was checked, and whether it came from the listing or from the domain of the listing email |
| `status` | `found`, `no-email-on-website`, `website-unreachable`, `website-not-crawlable` (a store or social page), `no-website`, or `skipped-spending-limit` |

***

### ▶️ How to Use

1. **Open the actor** and click **Try for free**. You can test it with Apify's free plan.
2. **Choose what to scrape** in *What to scrape*: Reviews, App details, Similar apps, Search results or Developer's apps.
3. **Add your input**: paste Google Play links or package names, search terms, or developers.
4. **Pick countries and a language.** Leave the default `us` / `en` if you're not sure.
5. **Set limits** (for example 500 reviews per app) and turn on any extras you need.
6. **Click Start.** Rows appear in the *Output* tab while the run is still going.
7. **Download** as Excel, CSV or JSON, or connect the dataset to Google Sheets, Zapier, Make or your own app through the API.

#### Common workflows

- **Weekly review report**: Reviews + *Newest* + a target date, scheduled weekly, sent to Google Sheets.
- **Competitor benchmark**: App details for your app and 5 competitors across 3 countries, compared in one spreadsheet.
- **Lead list**: Search results for your niche keywords + *Full details* + *Find contact emails*, exported to your CRM.
- **Keyword rank tracking**: Search results for your keywords, scheduled daily. `rank` is your position.

***

### 📈 Use Cases

#### 1. Customer feedback and bug detection

Pull every 1- and 2-star review since your last release, grouped by `appVersion`, and spot regressions before your rating drops.

#### 2. Lead generation for app marketing agencies

Search a category (for example "fitness tracker") with full details and website emails. You get a list of publishers with company name, email, website, phone and address: a qualified lead list in minutes instead of hours of copy-pasting.

#### 3. App Store Optimization (ASO)

Track where you and your competitors rank for each keyword in each country. Compare titles, short descriptions, screenshots and ratings of the apps that beat you.

#### 4. Market research

Export every app of a developer or every result for a category, with installs, ratings, prices and release dates, to size a market or find gaps.

#### 5. Privacy and compliance audits

Collect Data safety disclosures and Android permissions for a whole portfolio, and flag apps that collect location, contacts or financial data.

***

### 🛠️ Advanced Tips

- **Concurrency:** *Max concurrency* (default 5) controls how many apps, keywords or developers run at once. Raise it for big lists, or lower it if you see retries in the log.
- **Proxy:** Google Play doesn't block these requests, so a proxy is optional. For very large or frequent runs, Apify Proxy spreads the load. The country is set in the request itself, not by the proxy location.
- **Limits that save money:** combine *Max reviews*, *Results limit* and *Max rows* to cap a run's size, and *Target date* to fetch only new reviews.
- **Very large review jobs:** run one app per run, or schedule runs by country and language, so each finishes quickly and is easy to retry.
- **API and automation:** start runs from the Apify API, a schedule, or tools like Make and Zapier, and get results through webhooks.

***

### ❓ FAQ / Troubleshooting

**Do I need a Google account or an API key?**
No. The actor reads Google Play's public pages, just like a visitor's browser.

**Why do I get different reviews when I change the language?**
Google Play keeps a separate review list per language. Set `language` to the language of the reviews you want, and run once per language for global coverage.

**Why are prices or rankings different between countries?**
Google Play is localized: prices, currencies, availability and search rankings differ by market. That's exactly what the *Countries* field captures.

**I got fewer reviews than the app shows.**
Google Play shows the total number of ratings, but only part of them include written text, and they're split by language. Try another `language`, set `maxReviews` to `0`, and make sure *Star rating* is set to *All*.

**An app was skipped with "not available".**
The app doesn't exist, was removed, or isn't sold in that country. Check the package name, or try another country.

**How many search results can I get?**
Google Play's web search returns about 30 results per keyword. Use more specific keywords, or Similar apps, to go wider.

**Some search, similar or developer rows have no installs or price.**
Results beyond the first page of a list come in a shorter format. Turn on *Full details for every listed app* to fill in every field.

**Why is there no email for some apps?**
`developerEmail` comes from the store listing, and almost every app has one. Website emails need a website that shows an address in its HTML. Sites built entirely with JavaScript, or that only offer a contact form, return none, and those lookups are free.

**Can I get reviewers' emails or phone numbers?**
No. Google Play doesn't publish any contact details for reviewers, only a display name and avatar. Contact data in this actor is about developers and companies.

**Is this legal?**
The actor collects publicly available data. You're responsible for using it in line with Google Play's terms and data-protection laws such as GDPR and CCPA. Reviewer names and developer contact details are personal data: handle them responsibly, and give people a way to opt out before marketing to them.

**Is this an official Google product?**
No. It's an independent tool, not affiliated with or endorsed by Google.

***

### 📞 Support

- **Questions or bugs:** open an issue on the actor's **Issues** tab. Include your run ID and input, and we'll take a look.
- **Email:** <me@ahmedhrid.com>
- **Custom work:** need another field, a different export format, or a custom scraper? Get in touch by email.

***

*Keywords: Google Play scraper, Google Play reviews scraper, Play Store scraper, app reviews scraper, Android app data, ASO tool, app store optimization, leads scraping, developer email scraper, web scraping, Apify actor.*

# Actor input Schema

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

Reviews, app details, similar apps and developer apps use the apps you list. Search uses the search terms. If the chosen action's input is empty but another input is filled, the actor runs the matching action instead.

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

Google Play app URLs, e.g. https://play.google.com/store/apps/details?id=com.shopee.id. Used by Reviews, App details and Similar apps.

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

Android package names, one per line, e.g. com.spotify.music (the id= value in a Play Store URL). Use instead of App URLs, or alongside them — an app listed in both is only scraped once.

## `searchQueries` (type: `array`):

Keywords to search on Google Play, one per line. Results keep Play's ranked order, so `rank` is the app's position (ASO rank) for that term. Used by Search results.

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

Developer page URLs or ids, one per line, e.g. https://play.google.com/store/apps/developer?id=Spotify+AB, Spotify AB, or a numeric id such as 4772240228547998649. Used by Developer's apps.

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

Two-letter country codes (gl), e.g. us, gb, in. Every input runs once per country, so prices, ratings, availability, rankings and reviews are collected per market.

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

Language code (hl), e.g. en, id, fr, pt-BR. It sets the language of texts, and for reviews it picks which reviews you get: Google Play keeps a separate review list per language.

## `maxReviews` (type: `integer`):

Reviews only. Maximum number of reviews per app and country. 0 means no limit. Play serves 100 reviews per request.

## `sortBy` (type: `string`):

Reviews only. 'Newest' is the only date-sorted option and the only one where the target date cuts the run short.

## `filterByRating` (type: `string`):

Reviews only. Only collect reviews with this star rating.

## `targetDate` (type: `string`):

Reviews only. Skip reviews posted before this date (ISO 8601, e.g. 2026-01-01). With 'Newest' this also stops early, which makes it useful for incremental runs — set it to the date of your last run.

## `includeAppInfo` (type: `boolean`):

Reviews only. Before each app's reviews, push one row with the app's full details (charged as one result row). It also adds the app title to every review row.

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

App details only. Attach every declared Android permission, grouped by type. Charged as one detail enrichment when the app declares any.

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

App details only. Attach the full Data safety section: data shared, data collected, purposes and security practices. One extra request per app, charged as one detail enrichment when it returns data. A short summary (dataSafetySummary) is always included for free.

## `includeSimilar` (type: `boolean`):

App details only. Attach a similarApps list (up to the results limit). Charged as one detail enrichment when Play lists any similar apps.

## `resultsLimit` (type: `integer`):

Search, similar apps and developer apps: maximum results per search term, app or developer (per country). 0 means everything Play returns. Web search returns about 30 results per term.

## `includeFullDetails` (type: `boolean`):

Search, similar apps and developer apps: fetch each result's app page and add every app-details field to its row. One extra request per result, charged as one detail enrichment.

## `enrichEmails` (type: `boolean`):

Crawl each developer's website (homepage plus up to 4 contact/about/imprint pages) for contact emails, ranked so that business addresses on the developer's own domain come first. Adds contactEmail and emailEnrichment to every app row. Applies to rows with full app details: App details, the Reviews app row, and Search / Similar / Developer rows with 'Full details' on. Charged once per row when at least one email is found; lookups that find nothing are free.

## `maxItems` (type: `integer`):

Hard cap on total dataset rows across all inputs and countries. 0 means no cap.

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

How many inputs (input × country) are processed at the same time.

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

Optional. Google Play serves these endpoints without a bot wall; a proxy only spreads load on long or repeated runs. Country is set in the request, not by the proxy location.

## Actor input object example

```json
{
  "action": "reviews",
  "startUrls": [
    {
      "url": "https://play.google.com/store/apps/details?id=com.shopee.id"
    }
  ],
  "appIds": [
    "com.spotify.music"
  ],
  "countries": [
    "us"
  ],
  "language": "en",
  "maxReviews": 100,
  "sortBy": "newest",
  "filterByRating": "all",
  "includeAppInfo": true,
  "includePermissions": false,
  "includeDataSafety": false,
  "includeSimilar": false,
  "resultsLimit": 50,
  "includeFullDetails": false,
  "enrichEmails": false,
  "maxItems": 0,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Every row of the run, in the order it was scraped.

## `reviews` (type: `string`):

Review rows in the Reviews view.

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

App rows in the Apps view.

## `lists` (type: `string`):

Ranked list rows in the Lists view.

# 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 = {
    "startUrls": [
        {
            "url": "https://play.google.com/store/apps/details?id=com.shopee.id"
        }
    ],
    "appIds": [
        "com.spotify.music"
    ],
    "countries": [
        "us"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("reviewly/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 = {
    "startUrls": [{ "url": "https://play.google.com/store/apps/details?id=com.shopee.id" }],
    "appIds": ["com.spotify.music"],
    "countries": ["us"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("reviewly/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 '{
  "startUrls": [
    {
      "url": "https://play.google.com/store/apps/details?id=com.shopee.id"
    }
  ],
  "appIds": [
    "com.spotify.music"
  ],
  "countries": [
    "us"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call reviewly/google-play-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,reviewly/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/3Bb59XMaHRzfHTKww/builds/WRz0a3P7OHxqBWDhM/openapi.json
