# RuStore App Scraper: Парсер RuStore for Ratings, Reviews & ASO (`getascraper/rustore-scraper`) Actor

Scrapes RuStore (Russia's dominant Android app store) apps by package name or URL: ratings, full review text, developer info, download counts, and similar-app data, all from one request per app, парсер RuStore для ASO. Bonus developer rollup dataset. 5-state monitor mode. From $0.0088 per app.

- **URL**: https://apify.com/getascraper/rustore-scraper.md
- **Developed by:** [GetAScraper](https://apify.com/getascraper) (community)
- **Categories:** SEO tools, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.60 / 1,000 app profiles

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## RuStore App Scraper: Парсер RuStore for Ratings, Reviews & ASO

<table width="100%" style="width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed;margin-bottom:16px">
<tbody style="display:table;width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed">
<tr style="width:100%">
  <td colspan="1" style="background:#0B1F3A;padding:20px 24px;border-radius:10px">
    <strong style="color:#FFFFFF;font-size:18px">Every RuStore app's rating, reviews, and price, tracked automatically.</strong><br/>
    <span style="color:#C9D6EA;font-size:14px">Get full app profiles, complete review text, and developer rosters from RuStore, Russia's dominant Android app store, without touching a login screen.</span>
  </td>
</tr>
</tbody>
</table>

RuStore became Russia's most-used Android app store after the 2022 Google Play restrictions there, and it now carries over 110,000 apps. **RuStore App Scraper** (a парсер RuStore for ASO and app-intelligence teams) pulls a complete profile for any app you name: name, developer, category, rating, price, size, version, download counts, full review text, and the apps RuStore itself recommends alongside it. Give it a package name or a RuStore URL and get structured JSON, CSV, or Excel back. Schedule it and it tells you exactly what changed since last time.

### 🎯 Why use RuStore Scraper?

**"I need to see how our app stacks up against the top RuStore apps in our category, every week, without hand-copying ratings into a spreadsheet."**
An ASO or competitive-intelligence analyst points this Actor at a watchlist of competitor package names, runs it on a schedule, and gets a clean table of ratings, review counts, and pricing every time, ready to chart.

**"I'm tracking which categories are pulling ahead in the Russian mobile market, and I need real numbers, not screenshots."**
An ad-spend or market analyst uses the Developers dataset to see how many apps a publisher has live on RuStore, and the download-count fields to gauge real traction, not guesswork.

**"I want RuStore data flowing into my own pipeline, structured and joinable, not a one-off export."**
A developer building an app-intelligence tool schedules this Actor via the Apify API, feeds the output straight into a warehouse, and joins it against other app-store data by package name.

<table width="100%" style="width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed;margin:20px 0">
<tbody style="display:table;width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed">
<tr style="width:100%">
  <td width="25%" style="width:25%;background:#EAF2F8;padding:16px;border-radius:8px;vertical-align:top">
    <strong style="color:#0B1F3A">📱 Full app profiles</strong><br/>
    <span style="color:#33475B;font-size:13px">Rating, price, size, version, category, and download counts for any app, in one request.</span>
  </td>
  <td width="25%" style="width:25%;background:#EAF2F8;padding:16px;border-radius:8px;vertical-align:top">
    <strong style="color:#0B1F3A">💬 Real reviews, included</strong><br/>
    <span style="color:#33475B;font-size:13px">Every review's full text, star rating, date, and like count, no extra fetch and no extra charge.</span>
  </td>
  <td width="25%" style="width:25%;background:#EAF2F8;padding:16px;border-radius:8px;vertical-align:top">
    <strong style="color:#0B1F3A">👨‍💻 Developer directory, built in</strong><br/>
    <span style="color:#33475B;font-size:13px">See every developer's app count for the apps you scraped, aggregated automatically.</span>
  </td>
  <td width="25%" style="width:25%;background:#EAF2F8;padding:16px;border-radius:8px;vertical-align:top">
    <strong style="color:#0B1F3A">🔔 Track what changes</strong><br/>
    <span style="color:#33475B;font-size:13px">Get only the apps whose rating, price, or version moved since your last run.</span>
  </td>
</tr>
</tbody>
</table>

### 🛠️ How to use RuStore Scraper

<table width="100%" style="width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed;margin:16px 0">
<tbody style="display:table;width:100%;min-width:100%;border-collapse:collapse;table-layout:fixed">
<tr style="width:100%">
  <td width="33%" style="width:33.333%;padding:14px;vertical-align:top">
    <strong style="color:#0B1F3A">1. Name your apps</strong><br/>
    <span style="color:#33475B;font-size:13px">Paste package names (like <code>com.avito.android</code>) or full RuStore URLs. Or turn on sitemap discovery to find apps automatically.</span>
  </td>
  <td width="33%" style="width:33.333%;padding:14px;vertical-align:top">
    <strong style="color:#0B1F3A">2. Run the Actor</strong><br/>
    <span style="color:#33475B;font-size:13px">It fetches every app's full profile, its reviews, and its developer's info in the same pass.</span>
  </td>
  <td width="33%" style="width:33.333%;padding:14px;vertical-align:top">
    <strong style="color:#0B1F3A">3. Schedule it</strong><br/>
    <span style="color:#33475B;font-size:13px">Turn on monitor mode and every future run returns only what's new or changed.</span>
  </td>
</tr>
</tbody>
</table>

### 📥 Input

| Field | Type | Required | Description |
|---|---|---|---|
| App package names | array of strings | No | RuStore app package IDs, e.g. `com.avito.android`. The fast path: individual app pages handle high request volume without issue. |
| App URLs | array of URLs | No | Full RuStore app URLs, for copy-pasting straight from the site. |
| Discover apps via sitemap | boolean | No | Bulk-discover additional apps by walking RuStore's own sitemap. Off by default; use sparingly (see Max sitemaps to follow). |
| Max apps | integer | No | Maximum number of apps to fetch in this run. |
| Max sitemaps to follow | integer | No | Only used with sitemap discovery. Keep this low, RuStore paces bulk discovery requests. |
| Proxy configuration | proxy object | No | Datacenter proxy is the default and is all this Actor needs. |
| Only output changed apps | boolean | No | Monitor mode: only push apps that are new or have a detected change since the last run. |
| Monitor state name | string | No | Name this run's saved state, so you can track multiple independent app lists in parallel. |
| Reset monitor state | boolean | No | Clears the saved state for the given name, so every app is treated as new again. |

### 📤 Output

Every run gives you two switchable views right on the Output tab, plus a bonus dataset:

- **📱 Apps** (default): one row per app, full profile, rating, price, developer, download counts, similar apps, and, with monitor mode on, what changed. Each row also carries its full reviews, nested.
- **💬 Reviews**: the same data, flattened to one row per individual review: reviewer, star rating, full text, date, likes, and dislikes. Switch to it from the view dropdown at the top of the Output tab, right next to Apps.
- **👨‍💻 Developers** (bonus, Storage tab): one row per unique developer seen in the run, with their app count.

Download any view as JSON, CSV, Excel, or connect it straight to your own pipeline via the Apify API.

#### Sample Apps record

```json
{
  "packageName": "com.avito.android",
  "name": "Авито – путешествия, работа, услуги, авто",
  "developerName": "ООО \"КЕХ еКоммерц\"",
  "developerId": "589be38f",
  "category": "UtilitiesApplication",
  "ratingValue": 4.6,
  "ratingCount": 1685629,
  "price": 0,
  "currency": "RUB",
  "version": "233.1",
  "fileSize": 232291822,
  "downloadsTotal": "60 млн +",
  "reviewCount": 5,
  "reviews": [
    { "reviewerName": "Наталья", "rating": 5, "text": "👍🏼", "date": "14 сен 2026", "likesCount": 0, "dislikesCount": 0 }
  ],
  "similarApps": ["ru.ozon.app.android", "ru.sberbankmobile", "com.wildberries.ru"],
  "url": "https://www.rustore.ru/catalog/app/com.avito.android"
}
```

### 🗂️ Data table

| Field | Type | Description |
|---|---|---|
| packageName | string | The app's RuStore package ID. |
| name | string | App display name. |
| developerName | string | Developer's display name. |
| developerId | string | Developer's RuStore ID. |
| category | string | Primary app category. |
| ratingValue | number | Average rating (out of 5). |
| ratingCount | integer | Number of ratings. |
| price | number | Price in the app's listed currency. |
| version | string | Current published version. |
| fileSize | integer | App size in bytes. |
| downloadsMonthly | string | Downloads reported for the current month, when RuStore shows it. |
| downloadsTotal | string | Total downloads, when RuStore shows it. |
| reviewCount | integer | Number of reviews returned for this app in this run. |
| reviews | array | Full review objects (reviewer, rating, text, date, likes, dislikes). Switch to the Reviews view to see these flattened, one row per review. |
| similarApps | array | Package names RuStore lists as similar. |
| changeType | string | With monitor mode on: new, updated, reappeared, unchanged, or expired. |

### 💰 Pricing

RuStore Scraper is pay per result. You are charged only for the apps actually returned, an empty run costs nothing, and there is no subscription. Reviews and developer data are included at no extra charge, since they come from the same request as the app profile.

### ⭐ Enjoying RuStore Scraper?

If this Actor is saving you time, a quick review helps other buyers find it and tells us what to build next. [Leave a review](https://apify.com/getascraper/rustore-scraper) right from the Actor's Store page.

### 💡 Tips

- Start with a short watchlist of package names before turning on sitemap discovery, it's the fastest way to confirm the fields you need are present for your target apps.
- Use monitor mode with a scheduled run to build a rating/price history over time instead of re-downloading full data every run.
- Give each watchlist its own monitor state name if you track more than one competitor set, so their change history never mixes.

### ❓ FAQ

**Does this need a RuStore account or login?**
No. Every field comes from RuStore's own public app pages. No login, password, or API key is ever required.

**Как найти пакетное имя приложения в RuStore?**
Package name (пакетное имя) is the last part of the app's RuStore URL, right after `/catalog/app/`. For Avito, that's `com.avito.android`.

**Does it get all reviews, or just the most recent ones?**
It returns the reviews RuStore's own app page displays for that app. For apps with very large review counts, that's the most recent, most visible set, not a full historical archive.

**What happens if a package name doesn't exist on RuStore?**
It's skipped with a logged warning rather than failing the whole run, so one bad package name in a long list never stops the rest.

### 🔗 Other actors

- [Auto.ru Scraper: Парсер Авто.ру](https://apify.com/getascraper/autoru-scraper) ↗ - Used-car listings from Russia's largest car marketplace.
- [Avito Auto Scraper: Парсер Авито Авто](https://apify.com/getascraper/avito-auto-scraper) ↗ - Vehicle listings from Avito, Russia's largest classifieds site.
- [Avito Seller Profile Scraper: Профили продавцов Авито](https://apify.com/getascraper/avito-seller-profile-scraper) ↗ - Seller profiles and listing history from Avito.
- [HH.ru Jobs Scraper: Парсер вакансий HH.ru](https://apify.com/getascraper/hh-ru-jobs-scraper) ↗ - Job postings from Russia's largest job board.
- [Habr Career Scraper: Вакансии Хабр Карьера](https://apify.com/getascraper/habr-career-scraper) ↗ - IT vacancies and salary data from Habr Career.

# Actor input Schema

## `packageNames` (type: `array`):

RuStore app package IDs, e.g. "com.avito.android". This is the fast, safe path - individual app pages are edge-cached and tolerate high request volume.

## `appUrls` (type: `array`):

Full RuStore app URLs, e.g. "https://www.rustore.ru/catalog/app/com.avito.android", for copy-pasting from the site.

## `proxyConfiguration` (type: `object`):

RuStore's app-detail pages are edge-cached and were confirmed reachable with no proxy at all. Datacenter is the safe default; residential is not required.

## `maxItems` (type: `integer`):

Maximum number of apps to fetch in this run.

## `discoverViaSitemap` (type: `boolean`):

Bulk-discover additional apps by walking RuStore's own robots.txt-declared sitemap index. This path is rate-limit sensitive, so it defaults off and is paced by 'Max sitemaps to follow' below. Leave it off unless you specifically want broad discovery beyond named apps.

## `maxSitemapsToFollow` (type: `integer`):

Only used when 'Discover apps via sitemap' is on. Caps how many sitemap-index/leaf files are fetched in this run - the two top-level seeds are themselves indexes, so reaching real app URLs costs at least 2 requests before any leaf file is read. Keep this low - RuStore's rate limiter was confirmed to trip after roughly 15-20 rapid sitemap-file requests even with a warmed session cookie.

## `onlyChangedApps` (type: `boolean`):

When enabled, only apps that are new or have a detected change (rating, price, version, or review count moved) since the last run for this state name are pushed to the dataset.

## `stateName` (type: `string`):

Name for this run's persisted monitor state, so you can track multiple independent app sets across scheduled runs.

## `resetState` (type: `boolean`):

Clears the stored monitor state for the given state name before this run, so every app is treated as new again.

## Actor input object example

```json
{
  "packageNames": [
    "com.avito.android"
  ],
  "appUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxItems": 10,
  "discoverViaSitemap": false,
  "maxSitemapsToFollow": 5,
  "onlyChangedApps": false,
  "stateName": "default",
  "resetState": false
}
```

# Actor output Schema

## `apps` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "packageNames": [
        "com.avito.android"
    ],
    "appUrls": [],
    "proxyConfiguration": {
        "useApifyProxy": true
    },
    "maxItems": 10,
    "discoverViaSitemap": false,
    "maxSitemapsToFollow": 5,
    "onlyChangedApps": false,
    "stateName": "default",
    "resetState": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("getascraper/rustore-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "packageNames": ["com.avito.android"],
    "appUrls": [],
    "proxyConfiguration": { "useApifyProxy": True },
    "maxItems": 10,
    "discoverViaSitemap": False,
    "maxSitemapsToFollow": 5,
    "onlyChangedApps": False,
    "stateName": "default",
    "resetState": False,
}

# Run the Actor and wait for it to finish
run = client.actor("getascraper/rustore-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "packageNames": [
    "com.avito.android"
  ],
  "appUrls": [],
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxItems": 10,
  "discoverViaSitemap": false,
  "maxSitemapsToFollow": 5,
  "onlyChangedApps": false,
  "stateName": "default",
  "resetState": false
}' |
apify call getascraper/rustore-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,getascraper/rustore-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/ijgyRziWK0cumQd8c/builds/wZusej4RvXebokGx7/openapi.json
