Google Play App Scraper API — Version, Rating & Installs avatar

Google Play App Scraper API — Version, Rating & Installs

Pricing

from $1.40 / 1,000 app checkeds

Go to Apify Store
Google Play App Scraper API — Version, Rating & Installs

Google Play App Scraper API — Version, Rating & Installs

Google Play scraper for your own list of apps: title, developer, category, rating, installs band, price, ads, in-app purchases, version and last update per package ID. Watch mode reports only what changed since the last run. No reviews, no developer contact data.

Pricing

from $1.40 / 1,000 app checkeds

Rating

0.0

(0)

Developer

Kittiwake Data

Kittiwake Data

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

A Google Play scraper for the apps you care about. Give it a list of package IDs and get back one clean row per app: title, developer, category, star rating, ratings count, installs band, price, ads, in-app purchases, current version and last-update date. Run it on a schedule in watch mode and it becomes an app store API for ASO competitor monitoring: a row only when a competitor ships a new version, moves a rating, crosses an installs band or changes its price.

Built by kittiwake. Metadata only — no reviews, no developer contact data (see below).

What it is for

  • ASO agencies and app studios — watch a set of competitor apps weekly and see who shipped, whose rating slipped and who crossed 10M installs, without opening forty store pages.
  • Product and market research — a table of an app category's price points, ad and IAP models and update cadence, from a list of package IDs you already have.
  • Portfolio owners — a daily check that your own listings show the version, price and content rating you expect in each storefront.

Quick start

Scan three apps in the US store:

{
"appIds": ["com.spotify.music", "com.duolingo", "org.telegram.messenger"]
}

Weekly watch, German storefront, only what changed:

{
"appIds": ["com.duolingo", "com.spotify.music", "de.danoeh.antennapod"],
"country": "de",
"language": "de",
"mode": "watch"
}

The first run of a list records a baseline: every app gets a row tagged baseline, and nothing is reported as a change, because there is nothing earlier to compare with. From the second run on, changeType says what moved.

Input

fieldtypedefaultwhat it does
appIdsstring[]requiredPackage IDs such as com.spotify.music, or full Play details URLs. Duplicates read once; invalid entries skipped and listed in RUN_SUMMARY
countrystringusStorefront (two letters). Price, currency and content rating depend on it
languagestringenPage language, e.g. en, de, pt-BR
modescan | watchscanscan: a row per app every run. watch: a row only for apps that changed (plus the first-run baseline)
stateStoreNamestringgoogle-play-app-scraper-stateNamed key-value store for last snapshots. One name per watchlist
requestDelayMsinteger2000Pause between page requests. Minimum 1500

Output

One row per app:

{
"appId": "com.mojang.minecraftpe",
"title": "Minecraft: Dream it, Build it!",
"developerName": "Mojang",
"genre": "Arcade",
"genreId": "GAME_ARCADE",
"scoreAvg": 4.3072,
"ratingsCount": 5842806,
"installsBand": "50,000,000+",
"minInstalls": 50000000,
"free": false,
"price": 6.99,
"currency": "USD",
"containsAds": false,
"offersIAP": true,
"version": "1.26.52.3",
"updatedAt": "2026-09-25T17:26:28.000Z",
"released": "2011-08-16T06:17:21.000Z",
"contentRating": "Everyone 10+",
"country": "us",
"language": "en",
"url": "https://play.google.com/store/apps/details?id=com.mojang.minecraftpe&hl=en&gl=us",
"status": "ok",
"changeType": ["version-changed", "updated"],
"previous": { "version": "1.26.40.1", "updatedAt": "2026-09-01T00:00:00.000Z" },
"checkedAt": "2026-09-26T12:00:00.000Z"
}
  • changeType: baseline (first sight), version-changed, updated, score-changed (a move of 0.1 stars or more), installs-band-changed, price-changed. previous holds the old values.
  • version is "Varies with device" when the store shows that instead of a number — common for large apps. updatedAt still tells you when a new build shipped.
  • status: ok, not-found (Google Play has no page for that ID in that storefront) or parse-failed (the page loaded but could not be read). Only ok rows are charged.
  • Dates are ISO 8601 in UTC, so a release late in the US evening can show the next calendar day.
  • A run summary (checked, changes, not found, parse failures, invalid IDs) is saved as RUN_SUMMARY in the run's key-value store.

What you pay for

eventpricewhen
App checked$0.002one app read, compared and its state saved — only when all three succeed
App change detected$0.01the app changed since the last run. Once per app per run, however many things changed; never on the baseline run

Apify Store discounts apply by subscription plan: the prices above are the Free-plan prices; Starter pays 10% less, Scale 20% less and Business 30% less on every event.

Nothing is charged for an invalid package ID, a not-found app, a parse-failed page or a failed request. The run stops at the spending limit you set; rows already saved are yours. 1,000 apps checked costs $2.

What this Actor deliberately does not collect

  • No developer contact data. Individual developers on Google Play publish their personal name, email and home address. This Actor never reads the developer's email, postal address, website, phone, legal name or privacy-policy link — only the display name shown under the app title. A test fails the build if any of those fields, or any email address, reaches a row.
  • No reviews and no reviewer names. Reviews are personal data about the people who wrote them.
  • No search, no top charts, no data-safety pages. Google Play's robots.txt disallows /store/search, /store/apps/datasafety* and /store/apps/collection/p3_details_*. This Actor reads only /store/apps/details?id=… pages, which robots.txt allows, and it re-reads robots.txt at the start of every run and stops if that ever changes. So you bring the package IDs; it does not discover apps for you.
  • No evasion. One identifying User-Agent, a pause between requests, no proxies or header rotation. If Google Play refuses a request (HTTP 429 or 403), the run fails and says so.

FAQ

Where do I find an app's package ID? In its Play Store URL, after id= — for https://play.google.com/store/apps/details?id=com.duolingo it is com.duolingo. You can paste the whole URL.

How do I get only the changes? Set mode to watch and schedule the Actor. Unchanged apps write no row (they are still checked and charged app-checked).

Can I track several countries? Run once per country. State is kept per app, country and language, so each storefront has its own baseline.

Why did a run return parse-failed? Google changes its page format from time to time. Those rows are not charged; if every app in a run fails to parse, the run fails outright so a schedule alerts you. Open an issue with the run ID.

Can I export to CSV or Excel? Yes — JSON, CSV, Excel or XML, or read it over the Apify API.

Source

Data is read from the public Google Play app details pages at play.google.com. This Actor is not affiliated with or endorsed by Google. Google Play is a trademark of Google LLC.

Support

Use the Issues tab on this Actor. Include the run ID and the input you used.