Google Play ASO Keyword Rank Tracker & Reviews Scraper
Pricing
from $4.00 / 1,000 app data results
Google Play ASO Keyword Rank Tracker & Reviews Scraper
Keyword rank tracker + reviews scraper for Google Play, with ASO popularity/difficulty/opportunity scores, app details + ratings histogram, top charts, similar-apps competitor maps, permission audits, install & revenue estimates. Multi-country batching, no login/proxies/browser.
Pricing
from $4.00 / 1,000 app data results
Rating
0.0
(0)
Developer
Nomad.Dev
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
15 days ago
Last modified
Categories
Share
Track where you and your competitors rank for any Google Play keyword — with ASO popularity / difficulty / opportunity scores on every result — plus full app details with ratings histogram and install / revenue estimates, paginated reviews with sort / star / date-range filters, top charts per category and country, similar-apps competitor mapping, and app permission risk audits — all optionally batched across multiple store countries in one run. No login, no proxies, no browser.
What Google Play data does this scraper extract?
Six modes, one Actor. Every item carries type and appId, so you can mix runs in one pipeline.
| Mode | What you get |
|---|---|
app-details | Full metadata per app: title, developer, score, ratings count, installs, price, IAP, content rating, release/update dates, description, category — plus the ratings histogram (1–5 star counts and percentages) and install / revenue estimates (installsEstimate, revenueEstimate) |
reviews | Reviews with automatic pagination: text, score, thumbs-up count, app version, date, developer reply. Sort by newest / rating / relevance, filter to a single star rating and/or a reviewsNewerThan date cutoff |
search | Ranked search results per keyword — track where you and competitors rank, and get ASO keyword scores on every result: popularityScore, difficultyScore, opportunityScore (0–100), plus resultsCount and avgScore |
top-charts | Top free / top paid / top grossing for any category (APPLICATION, GAME, FINANCE, HEALTH_AND_FITNESS, …) and country |
similar-apps | Apps the Play Store shows next to a given app — instant competitor map, with "similar" vs "more by developer" relation |
permissions | Every Android permission an app requests, grouped by category (Location, Camera, Contacts, …), with group and total counts |
Input
| Field | Type | Notes |
|---|---|---|
mode | select | app-details (default), reviews, search, top-charts, similar-apps, permissions |
appIds | list | Package names (com.spotify.music) or full Play Store URLs — for details / reviews / similar / permissions |
searchQueries | list | Keywords for search mode |
language | string | Store locale (hl), default en |
country | string | Store country (gl), default us. Ignored if countries (below) is a non-empty list |
countries | list | Run the selected mode once per store country in one run (e.g. ["us", "gb", "de"]). Non-empty countries takes precedence over the singular country. Every output record gets a country field either way, so downstream consumers see one consistent field regardless of which one you used. Multiplies cost roughly N× |
reviewsSort | select | newest (default), rating, relevance. Forced to newest whenever reviewsNewerThan is set |
reviewsFilterScore | 0–5 | Only reviews with this star rating; 0 = all |
reviewsNewerThan | date (YYYY-MM-DD) | Only reviews posted on/after this date (reviews mode). Reviews are fetched newest-first and fetching stops as soon as an older review is seen — composes with maxReviewsPerApp below: whichever limit is hit first wins. Empty = no date filter |
maxReviewsPerApp | int | Default 200; pagination is automatic. Stops at whichever limit is hit first: this count, or the reviewsNewerThan cutoff |
topChartsCollection | select | TOP_FREE, TOP_PAID, GROSSING |
topChartsCategory | string | APPLICATION, GAME, or a specific category id |
maxResults | int | Per query / chart / similar lookup (search max 30, charts max 500) |
fullDetail | bool | Enrich search / chart / similar items with the full app record |
maxItems | int | Hard cap on total output across the whole run (all countries combined). Default 100. Items are billed per event type — see Pricing below. 0 = no cap (use with caution) |
concurrency | int (Advanced) | Parallel app-page fetches, default 4, max 8. Leave at default unless you have a reason to change it |
How to scrape Google Play reviews and rankings with this Actor
- Pick a mode and fill in
appIdsorsearchQueries. - Set
country/languagefor the store front you care about. - Run and export JSON, CSV or Excel — or call it over the API:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("nomad-agent/google-play-aso-scraper").call(run_input={"mode": "reviews","appIds": ["com.spotify.music"],"reviewsFilterScore": 1,"reviewsNewerThan": "2026-06-15", # e.g. your last release date"maxReviewsPerApp": 500,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["score"], "|", item["at"], "|", item["content"][:80])
curl -X POST \"https://api.apify.com/v2/acts/nomad-agent~google-play-aso-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \-H "Content-Type: application/json" \-d '{"mode": "app-details", "appIds": ["com.spotify.music", "com.duolingo"]}'
Output example
Every item, in every mode, carries a country field — the store front it was fetched from. In a single-country run that's just your country input echoed back; in a countries batch run it tells you which of the N countries produced that record.
app-details item:
{"type": "app","appId": "com.spotify.music","country": "us","title": "Spotify: Music and Podcasts","developer": "Spotify AB","score": 4.33,"ratings": 35851935,"installs": "1,000,000,000+","realInstalls": 2143548419,"free": true,"genre": "Music & Audio","contentRating": "Teen","ratingsHistogram": {"1": 3719223, "2": 1084262, "3": 1329664, "4": 3060904, "5": 26657859},"ratingsHistogramPct": {"1": 10.37, "2": 3.02, "3": 3.71, "4": 8.54, "5": 74.35},"installsEstimate": 2143548419,"revenueEstimate": null,"url": "https://play.google.com/store/apps/details?id=com.spotify.music"}
search item (keyword rankings with ASO scores — popularityScore / difficultyScore / opportunityScore repeat on every result of the same query, so any single row tells you the keyword's ASO profile):
{"type": "search-result","appId": "com.spotlightsix.zentimerlite2","country": "us","query": "meditation","rank": 1,"title": "Insight Timer - Meditation App","score": 4.71,"installs": "10,000,000+","popularityScore": 63,"difficultyScore": 71,"opportunityScore": 18,"resultsCount": 20,"avgScore": 4.62}
reviews item:
{"type": "review","appId": "com.spotify.music","country": "us","reviewId": "8b4f6a...","userName": "Jane D.","content": "Shuffle keeps playing the same 20 songs...","score": 2,"thumbsUpCount": 341,"reviewCreatedVersion": "9.0.42","at": "2026-06-29T14:03:11","replyContent": null}
similar-apps item:
{"type": "similar-app","sourceAppId": "com.spotify.music","country": "us","appId": "com.aspiro.tidal","relation": "similar","rank": 7,"url": "https://play.google.com/store/apps/details?id=com.aspiro.tidal"}
permissions item:
{"type": "permissions","appId": "com.duolingo","country": "us","permissions": {"Camera": ["take pictures and videos"],"Microphone": ["record audio"],"Storage": ["read the contents of your USB storage"],"Other": ["view network connections", "full network access"]},"permissionGroups": 4,"permissionCount": 5}
Permission risk audit
No other Google Play scraper on Apify extracts app permissions. permissions mode turns any list of package names into a privacy / risk report: every Android permission each app requests, grouped by category (Location, Camera, Contacts, SMS, …), with per-group and total counts. Run it over your competitor set to benchmark how permission-hungry your app looks next to theirs, screen SDK vendors before embedding them, or feed compliance / app-vetting pipelines — each app is one row at the cheapest per-item rate.
Pricing
Pay per event — each row is billed for what it's worth, not a flat rate:
| Event | Price | Covers |
|---|---|---|
| Actor start | $0.005 | once per run |
| Keyword search result | $0.004 | search mode rows — rank + ASO popularity / difficulty / opportunity scores |
| Full app details | $0.002 | app-details rows, and chart / similar rows enriched via fullDetail |
| Review / chart / similar / permission row | $0.0005 | everything else |
This per-row schedule is rolling out during July 2026 — the Pricing tab always shows the exact rates you'll be charged, and rows not yet listed there are currently delivered free.
500 reviews ≈ $0.26. 60 keyword-ranking rows with ASO scores ≈ $0.25. Full details for 100 apps ≈ $0.21. No subscription — pay only for what you fetch.
maxItems defaults to 100 so a zero-config run stays cheap. Using countries with N countries runs the mode N times, so cost scales roughly N× — set maxItems accordingly.
Try it free
Apify's free plan includes $5 of platform credit every month — no card required. At these prices that covers roughly 10,000 review rows, 1,200 keyword-ranking rows with ASO scores, or 2,500 full app-detail records per month. Enough to track a keyword set daily or monitor reviews across your whole competitor list before paying anything.
Use cases
- Review intelligence — 1-star reviews after every release. Set
mode: "reviews",reviewsFilterScore: 1andreviewsNewerThanto your release date; the Actor fetches reviews newest-first and stops the moment it reaches a review older than that date, so you get exactly "1-star reviews since I shipped X" — feed them to an LLM, ship fixes before ratings sink - ASO keyword research & tracking — daily rank of your app vs competitors for your target keywords, per country (use
countriesto track multiple store fronts in one run). Every result carriespopularityScore/difficultyScore/opportunityScore(0–100), so you can prioritise high-traffic, low-competition keywords without a separate ASO tool - Competitor mapping —
similar-apps+fullDetailgives you every rival's score, installs and pricing in one run - Market & revenue sizing —
installsEstimateandrevenueEstimateon app-details (and onfullDetail-enriched chart/search rows) turn Google's fuzzy "1,000,000+" bucket into a numeric estimate you can sum and chart - Market research — top-charts snapshots per category and country over time
- Permission / privacy audits —
permissionsmode lists every Android permission a competitor's app requests, grouped by category - Ratings monitoring — histogram deltas catch review-bombing early
FAQ
Is it legal to scrape Google Play? The Actor reads the same public, unauthenticated pages and endpoints any visitor's browser loads. No login, no private API. Review Google's terms for your use case.
Do I need an API key, login or proxies? No. Plain HTTP against public store pages. For very large review pulls across many apps, spread runs over time.
How many reviews can I fetch?
Pagination is automatic; maxReviewsPerApp and reviewsNewerThan are the two limits, whichever is hit first. Tens of thousands per app are possible — set maxItems as a cost guard.
Which countries and languages are supported?
Any store front Google Play serves — set country (gl) and language (hl), or pass several at once with countries to batch multiple store fronts in a single run. Charts and rankings are country-specific.
Can I filter reviews to a date range?
Yes — set reviewsNewerThan (YYYY-MM-DD). It composes with reviewsFilterScore and maxReviewsPerApp: you get reviews at that star rating, posted on/after that date, capped at that count — whichever limit is hit first.
What's the difference from plain review scrapers? One actor covers the full ASO loop: details + histogram + install/revenue estimates, reviews (with date-range + star filters), keyword rankings with ASO popularity/difficulty/opportunity scores, top charts, competitor discovery and app permissions — with a uniform, typed output schema.
How are the ASO keyword scores calculated?
They are deterministic, transparent metrics computed only from the search results the Actor already collects — no black-box model. popularityScore reflects the install mass concentrated at the top of the keyword's results (a demand proxy); difficultyScore reflects the overall strength of the top field (install authority + rating quality); opportunityScore combines them (high demand against low competition). All are 0–100 and repeat on every result row of the same query.
Something broken or missing? Open an issue on the Actor's Issues tab — it is monitored and fixes ship fast.
Integrations
Export results as JSON, CSV or Excel straight from the Console, connect the dataset to Make/Zapier/n8n, pull items with run-sync-get-dataset-items from any backend, or call the Actor as a tool from AI agents via the Apify MCP server.
Related Actors
Feedback
If this Actor saves you time, please leave a review on the Reviews tab — it's the main way other ASO folks find it, and it directly shapes the roadmap. Hit a problem or missing field? Open an issue on the Issues tab and it'll get fixed fast.
Credits
Built on the MIT-licensed google-play-scraper (Python) by JoMingyu; top-charts and similar-apps request formats ported from google-play-scraper (Node.js) by Facundo Olano. See LICENSE for full notices.