RuStore App Scraper & Monitor
Pricing
from $10.00 / 1,000 results
RuStore App Scraper & Monitor
Scrape apps from RuStore (Russia's Android app store): ratings, review counts, versions, sizes, prices, developers — and track what changes between runs.
Pricing
from $10.00 / 1,000 results
Rating
0.0
(0)
Developer
Sasha Ebashu
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
11 days ago
Last modified
Categories
Share
Scrape apps from RuStore — Russia's Android app store (VK), preinstalled on every phone sold in the country — and track what changes between runs.
Ratings, review counts, downloads, versions, sizes, prices, developers. ~69,500 apps.
What you get
One row per app:
| Field | Meaning |
|---|---|
packageName, name, url, description | App identity |
rating, ratingCount | Star rating and how many ratings it has |
downloads | RuStore's own downloads bucket ("40 млн +") — a rounded band, never an exact number |
version, fileSizeBytes, updatedAt | Current version, APK size, when it was last updated |
price, priceCurrency, isFree | Price in ₽ |
developer, developerId, developerUrl | Publisher and their RuStore profile |
category, contentRating | e.g. SocialNetworkingApplication, 12+ |
sourceCategory | The RuStore category the app was discovered in (when using Categories) — e.g. finance, games/free |
verified | RuStore's data-safety moderation badge |
icon, screenshots[] | Media |
reviews[] | Optional — the handful of reviews RuStore embeds in the app card (author, rating, date, text) |
In Monitor mode every row also gets changeType — new / rating_up / rating_down / reviews_change / version_change / price_up / price_down / delisted / relisted / unchanged — plus previousRating, previousRatingCount, previousVersion, previousPrice, firstSeenAt, lastConfirmedAt and a 30-day rating band.
Delisted apps are reported, not dropped. If an app is pulled from RuStore (its page starts returning 404) you still get a row — delisted: true, changeType: "delisted" — carrying its last known name and rating. An app leaving the store is a signal, not missing data. It is reported once, then stays unchanged until it returns (relisted).
Reviews mode
Turn on Reviews mode and the output becomes one row per review — appName, packageName, author, rating, datePublished, text, plus the app's appRating / totalReviews for context.
The honest limit: RuStore renders exactly the 30 most recent reviews per app and offers no way to get more — no pagination, no "show more", and scrolling loads nothing. So:
| App | What 30 reviews covers |
|---|---|
| Yandex Cloud (19 reviews total) | its complete history — 2023 → 2026 |
| Толока (57 total) | the last 1.5 years |
| 2ГИС (7,571 total) | the last 4 days |
| ВКонтакте (34,800 total) | the last ~15 minutes |
For most of the catalogue's long tail, 30 is everything there is. For busy apps it is a rolling window — so run Reviews mode with Monitor mode on a schedule: each run emits only reviews it has not seen before, and the dataset accumulates the review stream. (Verified: a second run 60 seconds later returned exactly 1 row — the single new review that had appeared.)
Use it for
- Review mining — collect reviews per app on a schedule (see Reviews mode).
- ASO / competitor tracking — watch a rival's rating, review count and release cadence (
updatedAt+version_change). - Market research — pull a whole RuStore category (
finance,games…) and compare ratings, prices and publishers side by side. - Release monitoring — get notified when an app ships a new version, changes price, or disappears.
Input
| Option | Description |
|---|---|
| Apps | Package names (com.vkontakte.android) or full RuStore URLs — both accepted. |
| Categories | Scrape whole RuStore categories — finance, games, health… Accepts a slug, a slug with a price filter (finance/free, tools/paid — every category except games and tv), or a full category URL including topic pages like /catalog/all/tag-anime-5. Every row is tagged with sourceCategory. |
| Crawl the catalogue | Pull apps from RuStore's own sitemap (~69,500 apps). |
| Catalogue filter | Only apps whose package contains this text — yandex, sberbank, com.vk. |
| Max apps from catalogue / Max apps | Keep a run bounded. |
| Include reviews | Add the handful of reviews embedded in each app card (app mode). |
| Reviews mode | Output one row per review instead of per app — 30 most recent per app. With Monitor mode, only reviews not seen before. |
| Monitor mode / Only output changes | Compare against the previous run; optionally emit only what moved. |
| Max concurrency | Parallel page fetches (default 10). |
| Proxy | Apify datacenter proxy (the default) — cheap, no residential needed. |
Example
{"crawlSitemap": true,"appFilter": "yandex","maxAppsFromSitemap": 100,"monitorMode": true,"onlyChanges": true}
Schedule that and each run's dataset is a clean list of every Yandex app whose rating, version or price moved.
Notes & limits
- A proxy is required. RuStore's antibot (
kittenx) challenges some networks — a plain unproxied request can get bounced to a challenge page. The Apify datacenter proxy sails through and is the cheapest option; it is the default. downloadsis a bucket, not a count. RuStore only ever publishes rounded bands ("40 млн +"). It is reported verbatim rather than turned into a fake precise number.- Unrated apps return
rating: null— that is real (nobody has rated them), not a scrape failure. - Reviews are capped at the 30 most recent per app — that is RuStore's limit, not the Actor's. There is no pagination to work around it. Apps with ≤30 reviews yield their full history.
- RuStore's antibot throttles in waves. When it does, some app pages cannot be fetched even after 9 retries. The run never hides this: it warns with the exact count and percentage, names the affected packages, and stores the full list in the run's key-value store under
FAILED_APPS— so you can re-run just those later. - If you see losses, LOWER "Max concurrency", don't raise it. Measured: concurrency 30 was only ~13% faster than 15 but lost 33 apps instead of 1. The default of 10 is the sweet spot; heavy parallelism makes the antibot throttle harder.
- Runs stop cleanly before the platform timeout and honour the run's maximum-cost limit, committing what they have.