RuStore App Scraper & Monitor avatar

RuStore App Scraper & Monitor

Pricing

from $10.00 / 1,000 results

Go to Apify Store
RuStore App Scraper & Monitor

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

Sasha Ebashu

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

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:

FieldMeaning
packageName, name, url, descriptionApp identity
rating, ratingCountStar rating and how many ratings it has
downloadsRuStore's own downloads bucket ("40 млн +") — a rounded band, never an exact number
version, fileSizeBytes, updatedAtCurrent version, APK size, when it was last updated
price, priceCurrency, isFreePrice in ₽
developer, developerId, developerUrlPublisher and their RuStore profile
category, contentRatinge.g. SocialNetworkingApplication, 12+
sourceCategoryThe RuStore category the app was discovered in (when using Categories) — e.g. finance, games/free
verifiedRuStore'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 changeTypenew / 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 reviewappName, 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:

AppWhat 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

OptionDescription
AppsPackage names (com.vkontakte.android) or full RuStore URLs — both accepted.
CategoriesScrape 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 cataloguePull apps from RuStore's own sitemap (~69,500 apps).
Catalogue filterOnly apps whose package contains this text — yandex, sberbank, com.vk.
Max apps from catalogue / Max appsKeep a run bounded.
Include reviewsAdd the handful of reviews embedded in each app card (app mode).
Reviews modeOutput 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 changesCompare against the previous run; optionally emit only what moved.
Max concurrencyParallel page fetches (default 10).
ProxyApify 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.
  • downloads is 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.