Google Play Monitor — Competitor Android App Tracking avatar

Google Play Monitor — Competitor Android App Tracking

Pricing

from $10.00 / 1,000 app change detecteds

Go to Apify Store
Google Play Monitor — Competitor Android App Tracking

Google Play Monitor — Competitor Android App Tracking

Track any Android app across storefronts and get only what changed: new releases with notes, price moves, rating shifts, install-tier jumps and delistings.

Pricing

from $10.00 / 1,000 app change detecteds

Rating

0.0

(0)

Developer

Mohanad Alshaka

Mohanad Alshaka

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Watch any Android app and get only what changed since your last run: new releases with their notes, price moves, rating shifts, install-tier jumps, and delistings.

Point it at your competitors, schedule it daily, and each run returns a short list of what moved instead of a fresh dump of the same records.

Pairs with App Store Monitor if you track both platforms.

Honest note on reliability

Apple publishes a JSON API. Google does not. Play store data lives inside AF_initDataCallback blobs in the page, and every field is reached by a positional index path into an undocumented nested array. Those indices move when Google reshuffles the page.

A naive extractor handles that badly: the path silently starts returning nothing, rows come back full of nulls, and nothing distinguishes "this app genuinely has no version" from "the parser broke three weeks ago."

So every field here is validated against the shape it must have:

  • A rating must be a number between 0 and 5. 97 is rejected, not reported.
  • A title must be a non-empty string.
  • A price must be a non-negative number of micros.

A field that is missing-but-required, or present-but-wrong-shaped, marks the extraction unhealthy. Unhealthy records are reported in the run log and in RUN_SUMMARY, and excluded from the saved baseline so a broken parse cannot corrupt future comparisons and produce a storm of false changes on the next run.

That is the difference between an Actor that breaks loudly and one that lies quietly.

What a change row looks like

{
"country": "us",
"changeType": "new_version",
"reasons": ["new_version", "rating_fell"],
"title": "Spotify: Music and Podcasts",
"developer": "Spotify AB",
"previousVersion": "9.0.10.100",
"version": "9.0.12.100",
"releaseNotes": "We are always making changes and improvements.",
"previousScore": 4.39,
"score": 4.34,
"scoreMove": -0.05,
"newRatingsSinceLastRun": 18422,
"installsText": "1,000,000,000+",
"installsApprox": 1000000000,
"price": 0,
"currency": "USD",
"url": "https://play.google.com/store/apps/details?id=com.spotify.music"
}

Change types: new_version, app_updated, price_drop, price_rise, became_paid, became_free, rating_fell, rating_rose, installs_tier_change, title_change, developer_change, delisted, new_app, first_seen.

Three details that matter in practice

Not every app has a version. Apps shipping per-device builds show "Varies with device" and carry no version at all. Instagram, WhatsApp and Telegram are all like this. That is a legitimate null, not a broken parse, and it is treated as such. Apps that do publish one, such as Firefox or Edge, are tracked normally.

Rating noise is filtered. An app with 31 million ratings drifts every day. A move must clear scoreDelta (0.05 by default) before it counts, so real movement is not buried under decimal drift.

Storefronts differ. Price, currency and rating are per country, so each storefront is tracked against its own baseline.

Every row carries the same fields, including delisted rows, so CSV exports stay rectangular.

Input

FieldWhat it does
appsPackage names or Play Store URLs. Both work and can be mixed.
countriesTwo-letter storefront codes, each tracked separately.
languageLanguage for titles and release notes.
modechanges returns only what moved. snapshot returns everything each time.
stateKeyNames the saved baseline. One key per watchlist.
scoreDeltaHow far the rating must move to count. Default 0.05.

Daily competitor watch

{
"apps": [
"com.spotify.music",
"com.instagram.android",
"https://play.google.com/store/apps/details?id=com.whatsapp"
],
"countries": ["us", "gb", "sa"],
"mode": "changes",
"stateKey": "competitors"
}

The first run records the baseline. Every run after returns just the moves.

Notes and limits

  • Public store pages only. No developer account, no Play Console credentials, nothing behind a login.
  • One request is made per app per storefront, so a large watchlist across many countries takes proportionally longer. requestDelayMs controls the pacing.
  • An app returning 404 on a storefront is treated as unavailable there, and reported as delisted if you were explicitly tracking it.
  • changes mode keeps its baseline in a named key-value store. Deleting that store resets it and the next run reports first_seen again.

Development

npm install
npm test
node src/main.js