
Website Content Crawler
scrape.ly/store/querystone/website-content-crawlerAIDeveloper tools
1 monthly user

Scrape public Google Play app reviews. Save the rating, reviewer, text, date, app version, language, and helpful votes, with filters for device, stars, keywords, and date.
Extract public reviews for any Android app on Google Play: star rating, review text, date, app version, helpful votes, and language. Just give it a package name or Play Store URL. No login, up to 20,000 reviews per run, and $0.05 per 1,000 reviews in result fees.
com.whatsapp.| Field | Key | What it does |
|---|---|---|
| App package name or URL | appIdOrUrl | Package name such as com.whatsapp, or a Play Store details URL. |
| Maximum reviews | maxReviews | Stop after this many reviews. -1 reads until the limit, up to 20,000. Default 10. |
| Sort by | sortBy | mostRelevant, newest, or rating. |
| Device type | deviceType | mobile, tablet, or chromebook. |
| Star rating / Rating filter | rating, ratingFilter | Keep one rating, or a list of ratings. |
| Languages | language | Codes such as en, de, fr. Empty means English. |
| Keywords | keywords | Keep reviews that contain any of these words. |
| End date / Recent days | endDate, recentDays | Date limits in UTC. |
| App versions | appVersion | Keep reviews written on these versions. |
| Unique reviews only | uniqueOnly | Drop duplicate review ids. Default on. |
| Start page, Pages to scrape, Reviews per page | startPage, pagesToScrape, reviewsPerPage | Pagination controls. Maximum reviews still caps the rows saved. |
| Proxy configuration | proxyConfiguration | Datacenter by default. |
{
"appIdOrUrl": "https://play.google.com/store/apps/details?id=com.whatsapp",
"maxReviews": 10,
"sortBy": "mostRelevant",
"deviceType": "mobile",
"language": ["en"],
"uniqueOnly": true,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": ["DATACENTER"]
}
}
One dataset row per review.
| Field | Description |
|---|---|
reviewId | Unique review id. |
rating | Stars from 1 to 5. |
body | Review text. |
reviewer, userImage | Reviewer display name and profile image link. |
date, timestamp | Review date and Unix time. |
appId, appVersion | App package and the version the reviewer used, when shown. |
helpfulCounts | Helpful votes. |
language, reviewedIn | Language code of the request. |
position | Position in the returned order. |
{
"reviewId": "e0a151d6-f4d7-4aa2-b069-0260ea0f20d0",
"rating": 1,
"reviewer": "Jane Doe",
"date": "2026-10-12",
"reviewedIn": "en",
"body": "hate it wish it never exist",
"userImage": "https://play-lh.googleusercontent.com/a/example",
"position": 1,
"helpfulCounts": 0,
"appId": "com.whatsapp",
"appVersion": null,
"timestamp": 1791848158,
"language": "en"
}
(Trimmed: the profile image link is shortened.)
You pay $0.000015 per review saved, which is $0.015 per 1,000 reviews in result fees. Platform usage (compute and proxy) is billed on top.
Worked example: a 10-review run costs 10 × $0.000015 = $0.00015 in result fees plus about $0.0008 of platform usage at the default 256 MB, around $0.001 in total. A 10,000-review run costs $0.15 in result fees plus about $0.01 of platform usage, around $0.16 in total.
The actor reads only public reviews. You are responsible for using the data in line with Google's terms and applicable law, especially for reviewer names.
No. A datacenter proxy is built in and used by default.
Up to 20,000 per run. Use -1 for Maximum reviews to read until the reviews run out.
The run succeeds with no rows.
Yes. List language codes in Languages. Each code is requested separately.
Yes, from the console or through the API.
appVersion can be empty.Every field below can be set in the run form, passed through the API, or saved as a task. Unset fields fall back to the defaults shown.
appIdOrUrlstringRequiredApp package name or URL
Package name such as com.whatsapp, or a Play Store details URL.
maxReviewsintegerOptionaldefault 10Maximum reviews
Stop after this many reviews. Use -1 to read until the page limit, up to 20,000 reviews.
Device, sort order, stars, language, keywords, dates, and app version.
sortByenumOptionaldefault "mostRelevant"Sort by
Order of the reviews returned by the Play Store.
deviceTypeenumOptionaldefault "mobile"Device type
Reviews written on this device.
ratingintegerOptionalStar rating
Keep reviews with this star rating only. Leave empty to keep every rating.
ratingFilterarrayOptionalRating filter
Keep reviews whose star rating is in this list. Leave empty to keep every rating. When both this list and Star rating are set, a review must match both.
languagearrayOptionalLanguages
Language codes such as en, de, or fr. Each code is requested separately. Empty means English.
keywordsarrayOptionalKeywords
Keep reviews whose text contains any of these words.
endDatestringOptionalEnd date
Keep reviews on or before this UTC date (YYYY-MM-DD).
recentDaysintegerOptionaldefault 0Recent days
Keep reviews from the last N days, counting UTC dates. 0 means no date limit.
appVersionarrayOptionalApp versions
Keep reviews written on these app versions.
uniqueOnlybooleanOptionaldefault trueUnique reviews only
Drop duplicate review ids.
How many pages to read, and how large each page is. Maximum reviews still caps the rows that are saved.
startPageintegerOptionaldefault 1Start page
Skip this many pages before saving. Page 1 is the first page.
pagesToScrapeintegerOptionaldefault 5Pages to scrape
Pages to read after the start page. -1 reads until the reviews run out, up to 100 pages.
reviewsPerPageintegerOptionaldefault 100Reviews per page
Reviews requested on each page.
proxyConfigurationobjectOptionaldefault {"useScrapelyProxy":true,"scrapelyProxyGroups":["DATACENTER…Proxy configuration
Datacenter addresses are the default. Residential is used when a datacenter exit is blocked.
Every run writes its results to a dataset. Preview it in the dashboard, then export it or read it through the API.
| Field | Type | Description |
|---|---|---|
| reviewId | string | Unique review identifier |
| rating | integer | Star rating from 1 to 5 |
| reviewer | string | Name of the reviewer |
| date | string | Review date in UTC, YYYY-MM-DD |
| reviewedIn | string | Language code requested for this review |
| body | string | Full text of the review |
| userImage | string | URL of the reviewer's profile image |
| position | integer | 1-based order of the review in this run |
| helpfulCounts | integer | Number of helpful votes |
| appId | string | App package name |
| appVersion | string | App version the reviewer was using |
| timestamp | integer | Unix timestamp of the review, in seconds |
| language | string | Language code requested for this review |
You pay for the events the actor reports, such as each result or page it produces. Platform usage is included in the event prices.
| Event | Charged when | Price |
|---|---|---|
| Review | $0.000015 |
Run this actor from your own code. Swap in your API token and the examples work as-is.
import { ScrapelyClient } from 'scrapely-client'
const client = new ScrapelyClient({ token: process.env.SCRAPELY_TOKEN })
// Start the actor and wait for the run to finish.
const run = await client.actor('querystone/google-play-reviews-scraper').call({
"appIdOrUrl": "https://play.google.com/store/apps/details?id=com.whatsapp",
"maxReviews": 10,
"sortBy": "mostRelevant",
"deviceType": "mobile",
"ratingFilter": [],
"language": [],
"keywords": [],
"endDate": "",
"recentDays": 0,
"appVersion": [],
"uniqueOnly": true,
"startPage": 1,
"pagesToScrape": 5,
"reviewsPerPage": 100,
"proxyConfiguration": {
"useScrapelyProxy": true,
"scrapelyProxyGroups": [
"DATACENTER"
]
}
})
// Read the dataset the run produced.
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)Tokens live in your account settings. Keep them server-side: a token carries the full permissions of your account.
Connect the Scrape.ly MCP server once and your agent can run this actor as a tool. Pick your tool:
Fetch scrape.ly/agents.md and run querystone/google-play-reviews-scraperPaste into Claude Code, Codex, Cursor or any AI agent. It signs you in once in the browser.
{
"mcpServers": {
"scrapely": {
"url": "https://api.scrape.ly/mcp?tools=actors,runs,storage,docs&actors=querystone/google-play-reviews-scraper"
}
}
}No key in the file: your client opens the browser to sign you in the first time it connects.
Inputs the developer prepared for common jobs. Open one to see its input, then copy it to your account to run it as-is or adjust it.
Google Play reviews filtered by star rating.
Latest reviews of an app from its store link.
Reviews written on tablet devices.
Scrape.ly gives you the infrastructure, the tooling, and the team to extract, process, and operationalize web data at any scale. Setup takes minutes. The advantage lasts forever.