Google Play Reviews Scraper
Google Play reviews scraper at $0.09 per 1,000, flat at every volume. Unlimited reviews, any country or language, star and date filters. No API key.
How it works
- 1Open it on Apify
Hit Run on Apify — it opens the tool in the cloud, no install.
- 2Set the inputs
Adjust
appIds,appUrls,country(sensible defaults are pre-filled). - 3Click Run
The tool runs on Apify’s cloud and collects the data for you.
- 4Export the results
Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.
Pricing
$0.00009 per Google Play review = $0.09 per 1,000
| You are charged for | When | Price |
|---|---|---|
| Google Play review | One successfully saved Google Play review. | $0.00009 |
| Actor Start | Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). | $0.001 |
Pay-per-event pricing: you are billed per result, not per subscription — a run that returns nothing costs nothing beyond the start fee. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-04, and they are what you are actually charged.
Inputs
| Field | What it does | Type |
|---|---|---|
appIds | Android package IDs, one per line. Google Play URLs are also accepted here. | array |
appUrls | Full play.google.com/store/apps/details URLs. IDs and URLs are merged and deduplicated. | array |
country | Two-letter Google Play country code, such as us, ca, gb, de, or jp. | string |
language | Two-letter review and store language code, such as en, fr, de, es, or ja. | string |
sort | Review order returned by Google Play. | string |
maxReviewsPerApp | Maximum successful review rows saved for each app after filters are applied. | integer |
starRating | Return all ratings or only reviews with the selected star rating. | string |
dateCutoff | Optional inclusive UTC date cutoff in YYYY-MM-DD format. Leave empty for no date filter. | string |
includeAppMetadata | Fetch one app details page per app and attach title, summary, developer, rating, installs, genre, version, icon, and price fields to every review. | boolean |
requestsPerSecond | Shared Google Play request rate. The conservative default reduces blocking without proxy costs. | integer |
What you get
A structured dataset — each result includes fields like:
appTitlescoretextuserNamedatethumbsUpreplyTextappIdreviewUrlExport every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.
Related tools in App Store Data
Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.
App Store Scraper
Scrape Apple App Store apps and reviews with no API key. Search by keyword or look up by ID for ratings, price, version, and full metadata.
App Review Triage Monitor — App Store & Google Play Alerts
Auto-triage new App Store and Google Play reviews into bugs, billing, and feature requests. Cluster themes, catch rating drops, alert Slack. No code.
Where this tool sits
- Categories
- App Store Data Reviews & Reputation Data
- Platforms
- App Store & Google Play
Google Play Reviews Scraper — unlimited reviews, no API key
Pull every public review from any Google Play app — unlimited, in any country and any language. $0.09 per 1,000 reviews ($0.00009 each), plus $0.001 each time a run starts. Flat rate — no volume tiers, no plan gates — and you are charged only for reviews actually returned.
No login, no API key, no Google quota, no setup. Filter by star rating and date, sort by newest or most helpful, and get full app metadata — rating, install count, version — in the same run.
Who uses this
- ASO teams mining review text for keywords and feature requests.
- Founders and PMs tracking competitor complaints in real time.
- AI and data teams feeding review text straight into sentiment pipelines.
- Support teams catching a bad release before the rating drops.
Why this one
| This Actor | Typical alternative | |
|---|---|---|
| Price per review | $0.00009, flat at every volume | up to $0.00299 |
| Review volume | Unlimited | Often capped |
| Countries / languages | Any | Frequently US-English only |
| App metadata included | Yes | Usually a separate call |
| API key or quota | None | Sometimes required |
Frequently asked questions
Do I need a Google API key or Play Console access? No. An app ID or Play Store URL is enough.
How many reviews can I pull? There is no built-in cap — use maxReviewsPerApp to bound a run.
Can I get reviews in other countries or languages? Yes, via country and language.
Can I filter to 1-star reviews only? Yes, with starRating, and dateCutoff limits how far back
to go.
Does it include the app's rating and install count? Yes, when includeAppMetadata is on.
What does a typical run cost? 1,000 reviews is $0.091 — the $0.001 start fee plus $0.09 of reviews.
No API key, login, cookies, or proxy are required for normal runs.
Features
- Accepts Android package IDs, Google Play app URLs, or both.
- Supports country and language localization.
- Sorts by newest, rating, or helpfulness.
- Returns up to 5,000 matching reviews per app.
- Filters by one star rating and an inclusive UTC date cutoff.
- Deduplicates review IDs across every pagination page.
- Adds useful app metadata to each review with one extra lookup per app.
- Uses conservative shared throttling and retries.
- Uses direct requests by default to avoid unnecessary proxy costs.
- Supports optional Apify or custom proxy fallback.
- Returns clear, uncharged diagnostics instead of failing the run.
- Returns one labeled, uncharged sample row when the input is empty.
Input
| Field | Type | Default | Description |
|---|---|---|---|
appIds | string array | none | Package IDs such as com.spotify.music. URLs also work here. |
appUrls | string array | none | Google Play details URLs. |
country | string | us | Two-letter Google Play storefront country. |
language | string | en | Two-letter review and store language. |
sort | enum | newest | newest, rating, or helpfulness. |
maxReviewsPerApp | integer | 100 | Maximum saved rows per app after filtering, up to 5,000. |
starRating | enum | all | all, or one value from 1 to 5. Numeric values are also accepted through the API. |
dateCutoff | string | none | Include reviews on or after this YYYY-MM-DD UTC date. |
includeAppMetadata | boolean | true | Add app summary fields to every review. |
requestsPerSecond | integer | 3 | Shared request limit from 1 to 10 requests per second. |
proxyConfiguration | object | disabled | Optional Apify or custom proxy fallback. |
At least one real app ID or URL is needed for live data. The schema intentionally has no
required fields so an empty automated test run succeeds with one _sample: true row.
Example input
{
"appIds": [
"com.spotify.music",
"https://play.google.com/store/apps/details?id=com.whatsapp"
],
"country": "us",
"language": "en",
"sort": "newest",
"maxReviewsPerApp": 500,
"starRating": 1,
"dateCutoff": "2026-01-01",
"includeAppMetadata": true,
"proxyConfiguration": {
"useApifyProxy": false
}
}
Output
Each real dataset row represents one unique review:
{
"ok": true,
"_sample": false,
"appId": "com.spotify.music",
"appUrl": "https://play.google.com/store/apps/details?id=com.spotify.music",
"appTitle": "Spotify: Music and Podcasts",
"appSummary": "Listen to songs, discover music and enjoy podcasts",
"appDeveloper": "Spotify AB",
"appScore": 4.3,
"appRatings": 33000000,
"appReviewCount": 8000000,
"appInstalls": "1,000,000,000+",
"appMinInstalls": 1000000000,
"appGenre": "Music & Audio",
"appVersion": "Varies with device",
"appUpdated": "2026-07-20T00:00:00.000Z",
"appIcon": "https://play-lh.googleusercontent.com/...",
"appPriceText": "Free",
"appContentRating": "Teen",
"reviewId": "gp:...",
"reviewUrl": "https://play.google.com/store/apps/details?id=com.spotify.music&reviewId=...",
"userName": "Reviewer",
"userImage": "https://play-lh.googleusercontent.com/...",
"date": "2026-07-24T16:10:00.000Z",
"score": 5,
"scoreText": "5",
"title": null,
"text": "The review text.",
"thumbsUp": 12,
"version": "9.0.0",
"replyDate": null,
"replyText": null,
"criterias": [],
"country": "us",
"language": "en",
"sort": "newest"
}
Google Play may omit individual fields. Missing values are returned as null, an empty
array, or an empty string where appropriate.
Filtering and pagination
maxReviewsPerApp is the number of rows saved after filters and deduplication. The actor
continues through pagination pages until it reaches that limit, Google Play has no more
pages, or a safety limit of 100 pages is reached.
With sort: "newest" and a dateCutoff, the actor stops once a page crosses the cutoff
because all later pages are older. With rating or helpfulness sorting, it keeps paginating
because later pages can still contain dates that match.
Pricing and billing
$0.09 per 1,000 reviews ($0.00009 each), plus $0.001 each time a run starts. Flat rate — no volume tiers, no plan gates — and you are charged only for reviews actually returned.
The actor writes accepted reviews in page-sized batches. Only after a batch is successfully
saved does it charge the review event for those rows. These rows are never charged:
- Empty-input sample rows.
- Invalid-input diagnostics.
- Not-found, blocked, rate-limited, network, parsing, and no-results diagnostics.
- Duplicate reviews.
- Reviews rejected by the star or date filter.
The direct-request default avoids residential proxy charges entirely. Residential bandwidth is billed to you by Apify on top of the $0.00009 result fee and can easily exceed it on a small or heavily filtered run, so keep proxy use as an explicit fallback for blocked high-volume runs.
Proxy guidance
Google Play normally works without a proxy. Start with the default direct connection and the
default request rate. If a high-volume run receives RATE_LIMITED or BLOCKED diagnostics:
1. Lower requestsPerSecond.
2. Retry after the temporary block clears.
3. Enable an Apify proxy only when direct requests remain blocked.
Country-specific data is primarily selected by the country input. A proxy can also affect
regional availability, so use a matching proxy country when strict geolocation is required.
Diagnostics
Errors and empty results exit successfully with an uncharged dataset row where ok is
false. Check errorCode, error, and details.
| Code | Meaning |
|---|---|
BAD_INPUT | An app ID, URL, locale, filter, limit, or proxy setting is invalid. |
NOT_FOUND | The app is unavailable in the selected country. |
RATE_LIMITED | Google Play returned a rate limit after retries. |
BLOCKED | Google Play returned a captcha, consent wall, or access block. |
PARSE_ERROR | The Google Play response format changed unexpectedly. |
NETWORK | The request could not complete. |
NO_RESULTS | No reviews matched the app, locale, and filters. |
One app failure does not stop the remaining app IDs. If a later pagination page fails, the
actor keeps earlier successful rows and adds an uncharged diagnostic with partial: true.
Data source
This actor uses the actively maintained @mradex77/google-play-scraper package, which
provides typed errors, retries, throttling, pagination, and daily live contract tests against
Google Play. Google Play has no official public API for review data, so public page and internal
endpoint formats can still change.
This actor is not affiliated with Google. Use public data responsibly and comply with applicable terms and laws.
Billing
Two charges apply: a $0.001 run-start fee each time a run begins, and the per-result fee for results actually delivered. Samples, diagnostics, duplicates, blocked look-ups and no-result runs never incur the per-result fee — a run that returns nothing costs only the $0.001 start fee.