# iRecommend Reviews Scraper (`solidcode/irecommend-ru-scraper`) Actor

\[💰 $0.50/1K reviews + $4/1K products] Extract product reviews from iRecommend.ru, Russia's largest consumer review site. Get full review text, star ratings, recommend flags, author profiles, photos, dates, comment counts, plus product summaries with average rating and total review count.

- **URL**: https://apify.com/solidcode/irecommend-ru-scraper.md
- **Developed by:** [SolidCode](https://apify.com/solidcode) (community)
- **Categories:** E-commerce, Social media, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 products

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

## iRecommend Reviews Scraper

Pull consumer product reviews from iRecommend.ru — Russia's largest review site (иРекомендую) — with full review bodies, the рекомендует / не рекомендует recommend verdict, star ratings, structured pros and cons, author profiles, photos, and a per-product summary that rolls up the average rating and total review count. Built for brand researchers, e-commerce sellers, and sentiment analysts who need Russian-market consumer opinion data without copy-pasting reviews page by page.

### Why This Scraper?

- **Full review body text, not teaser excerpts** — every review is opened to its own page so you get the complete write-up (often 5,000+ characters of Russian prose), while cheaper tools stop at the short list-page preview.
- **рекомендует / не рекомендует verdict on every review** — iRecommend's defining signal, captured as a clean `recommends` true/false flag, so you can measure recommendation rate directly instead of inferring it from stars.
- **Structured pros and cons** — the reviewer's own достоинства and недостатки are pulled out as separate `positiveNotes` and `negativeNotes` arrays, ready to feed straight into theme tagging.
- **Product summary row for every URL** — `productName`, category breadcrumb, `averageRating`, total `reviewCount`, and a computed `recommendPercent` (from the like/dislike split), so you get the headline verdict without averaging reviews yourself.
- **Products and reviews as separate rows** — one summary row per product and one row per review, each carrying a `productId` back-reference, so a flagship's thousands of reviews never get crammed into a single cell.
- **Author profile on every review** — reviewer name, profile URL, and avatar, so you can trace prolific or influential reviewers across products and spot repeat voices.
- **Photo counts and full-resolution galleries** — `photosCount` plus every attached image URL, deduplicated across the site's thumbnail size variants so you keep one clean link per photo.
- **Native Cyrillic content, UTF-8 clean** — titles, bodies, categories, and author names preserved exactly as written, with no mojibake or encoding damage.
- **Per-product review cap** — `maxReviewsPerProduct` lets you pull a quick 20-review sentiment sample or the full history of a flagship product carrying 10,000+ reviews, up to a 5,000-per-product ceiling.

### Use Cases

**Brand & Market Research**

- Measure how Russian consumers really feel about your product or a competitor's
- Track recommendation rate over time using the рекомендует / не рекомендует verdict
- Surface the most-praised and most-criticized features from structured pros and cons
- Benchmark average rating and review volume across a category

**Competitive Intelligence**

- Compare recommend percentages side by side across rival products
- Watch a competitor's flagship product for a sudden wave of negative reviews
- Map which product categories draw the most engaged reviewers

**Product Sentiment Analysis**

- Feed full review bodies into sentiment or topic models — teasers are too short to score reliably
- Build labelled datasets using the built-in recommend flag as ground truth
- Separate praise from complaints instantly via `positiveNotes` / `negativeNotes`

**Marketing & Content**

- Pull authentic Russian-language testimonials for localized campaigns
- Identify power reviewers and photo-rich reviews for influencer outreach
- Source real customer quotes to answer objections in product copy

**E-commerce & Product Teams**

- Prioritize the product fixes customers complain about most
- Monitor reviews after a launch or price change
- Enrich a product catalogue with live rating and review-count figures

### Getting Started

#### Scrape One Product

The simplest run — paste a product page and collect its first 100 reviews plus the product summary:

```json
{
    "startUrls": ["https://irecommend.ru/content/sait-prilozhenie-dostavki-produktov-samokat"],
    "maxReviewsPerProduct": 100
}
```

#### Quick Sentiment Sample

Grab a small, representative slice of a high-volume product for a fast read on overall sentiment:

```json
{
    "startUrls": ["https://irecommend.ru/content/sait-prilozhenie-dostavki-produktov-samokat"],
    "maxReviewsPerProduct": 20
}
```

#### Batch Several Products, All Reviews

Compare multiple products in one run and collect every available review (up to the 5,000-per-product safety ceiling):

```json
{
    "startUrls": [
        "https://irecommend.ru/content/sait-prilozhenie-dostavki-produktov-samokat",
        "https://irecommend.ru/content/krem-dlya-litsa-nivea",
        "https://irecommend.ru/content/smartfon-samsung-galaxy"
    ],
    "maxReviewsPerProduct": 0
}
```

### Input Reference

#### What to Scrape

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `startUrls` | string\[] | Example URL (prefilled) | One or more iRecommend.ru product review page URLs (e.g. `https://irecommend.ru/content/<name>`). Each URL is scraped for its product summary and its reviews. Paste as many as you like. |

#### Options

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `maxReviewsPerProduct` | integer | `100` | Maximum reviews to collect per product. Set to `0` for all available reviews, up to a 5,000-per-product safety limit. A lower number keeps runs fast and affordable on popular products. |

### Output

Every row carries a `recordType` field — `product` or `review` — so you can filter the two cleanly downstream. The run also mirrors each type into its own **Products** and **Reviews** view for one-click access.

#### Product (`recordType: "product"`)

One summary row per URL.

```json
{
    "recordType": "product",
    "productId": "5814124",
    "productName": "Приложение доставки продуктов Самокат",
    "productUrl": "https://irecommend.ru/content/sait-prilozhenie-dostavki-produktov-samokat",
    "category": "Техника → Компьютеры → Компьютерные программы → Мобильное приложение",
    "averageRating": 2.7,
    "reviewCount": 851,
    "recommendPercent": 44,
    "likeCount": 375,
    "dislikeCount": 476,
    "image": "https://irecommend.ru/sites/default/files/product-images/669262/U2rWvsFwCoIcYt6JANdbDQ.png",
    "reviewsCollected": 100,
    "scrapedAt": "2026-07-24T14:30:00Z"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `"product"` |
| `productId` | string | iRecommend internal product ID |
| `productName` | string | Product name (Cyrillic) |
| `productUrl` | string | Canonical product review page URL |
| `category` | string | Category breadcrumb, joined with → (Cyrillic) |
| `brand` | string | Brand or manufacturer, when the page lists one |
| `averageRating` | number | Average star rating, 0–5 |
| `reviewCount` | integer | Total rated reviews the site shows for this product |
| `recommendPercent` | integer | Percentage of reviewers who recommend it |
| `likeCount` | integer | Reviewers who recommend |
| `dislikeCount` | integer | Reviewers who do not recommend |
| `image` | string | Product image URL |
| `reviewsCollected` | integer | How many review rows this run produced for the product |
| `scrapedAt` | string | ISO 8601 extraction timestamp |

#### Review (`recordType: "review"`)

One row per review, linked back to its product.

```json
{
    "recordType": "review",
    "reviewId": "10582612",
    "productId": "5814124",
    "productName": "Приложение доставки продуктов Самокат",
    "productUrl": "https://irecommend.ru/content/sait-prilozhenie-dostavki-produktov-samokat",
    "reviewUrl": "https://irecommend.ru/content/minus-500-tysyach-i-plyus-10-kg-za-god-somnitelnye-podarki-ot-kurerov-i-kak-za-neskolko-let",
    "title": "Минус 500 тысяч и плюс 10 кг за год. Сомнительные подарки от курьеров.",
    "text": "Добрый день! Знакомство с сервисом случилось в 2021 году, когда Самокат только-только появился в моем родном Ярославле и мы с супругом как раз переехали...",
    "teaser": "Добрый день! Знакомство с сервисом случилось в…",
    "rating": 5,
    "recommends": true,
    "author": {
        "name": "Zguglagolom",
        "url": "https://irecommend.ru/users/zguglagolom",
        "avatar": "https://cdn-irec.r-99.com/sites/default/files/imagecache/60i/pictures/31/picture-3175184-OjZolky0.jpg"
    },
    "created": "2025-03-19T15:15:11+01:00",
    "commentsCount": 36,
    "photosCount": 17,
    "images": [
        "https://cdn-irec.r-99.com/sites/default/files/imagecache/copyright/user-images/3175184/P5Cu79fjARXIeEaZsYg.jpg"
    ],
    "positiveNotes": ["Акции и скидки", "Бесплатная доставка", "Удобство приложения"],
    "negativeNotes": ["Иногда приезжает просрочка", "Выбор разнообразный, но еще маленький"],
    "scrapedAt": "2026-07-24T14:30:00Z"
}
```

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `"review"` |
| `reviewId` | string | iRecommend review ID |
| `productId` | string | Parent product ID (back-reference) |
| `productName` | string | Parent product name (Cyrillic) |
| `productUrl` | string | Parent product review page URL |
| `reviewUrl` | string | Direct URL to this review |
| `title` | string | Review headline (Cyrillic) |
| `text` | string | Full review body text (Cyrillic) |
| `teaser` | string | Short list-page excerpt |
| `rating` | integer | Star rating, 1–5 |
| `recommends` | boolean | `true` for рекомендует, `false` for не рекомендует |
| `author` | object | `{ name, url, avatar }` for the reviewer (Cyrillic name) |
| `created` | string | Publication date (ISO 8601) |
| `commentsCount` | integer | Comments left on the review |
| `photosCount` | integer | Photos attached to the review |
| `images` | string\[] | Full-resolution photo URLs, size-variant deduplicated |
| `positiveNotes` | string\[] | The reviewer's listed pros (достоинства) |
| `negativeNotes` | string\[] | The reviewer's listed cons (недостатки) |
| `scrapedAt` | string | ISO 8601 extraction timestamp |

### Tips for Best Results

- **Sample before you commit.** On a high-volume product, run `maxReviewsPerProduct: 20` first to gauge overall sentiment, then raise the cap only if you need the full set — flagship products can carry well over 10,000 reviews.
- **Set the cap to 0 only when you mean it.** `0` collects everything up to the 5,000-per-product ceiling; on a popular product that is a large run, so reserve it for products where you truly need full coverage.
- **Batch related products in one run.** Paste several competing products together to build a like-for-like comparison set in a single pass.
- **Use `recommends` as your sentiment ground truth.** It is the reviewer's own explicit verdict — cleaner and more decisive than trying to threshold the star rating.
- **Read `positiveNotes` and `negativeNotes` first.** These reviewer-authored pros and cons are the fastest route to recurring themes before you parse the full `text`.
- **Split your dataset by `recordType`.** Keep `product` rows for headline metrics and `review` rows for detail; join them on `productId` when you need both.
- **Point at the exact product page.** Use the `/content/<name>` review page for a product, not a category or brand landing page, so the summary and reviews line up.

### Pricing

**From $0.50 per 1,000 reviews + $4.00 per 1,000 products** — you pay for each product summary collected and each review collected, nothing else. Reviews are the high-volume item and priced low so large sentiment pulls stay affordable.

| Charged per | Gold price | Per row |
|-------------|-----------|---------|
| Product summary | $4.00 per 1,000 products | $0.004 |
| Review | $0.50 per 1,000 reviews | $0.0005 |

Estimate a run by adding the two together. Typical mixes at the Gold rate:

| Example run | Products | Reviews | Estimated cost |
|-------------|----------|---------|----------------|
| 10 products × 50 reviews | 10 | 500 | $0.29 |
| 1 flagship × 5,000 reviews | 1 | 5,000 | $2.50 |
| 100 products × 100 reviews | 100 | 10,000 | $5.40 |
| 1,000 products × 100 reviews | 1,000 | 100,000 | $54.00 |

Bronze, Silver, and Gold loyalty subscribers pay progressively less, applied automatically in the Console — the table above shows the lowest (Gold) tier. **No compute or time-based charges — you pay per result (product + review), plus a small fixed per-run start fee.** See the Pricing tab for the current rate at your discount tier.

### Integrations

Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:

- **Zapier** / **Make** / **n8n** — Workflow automation
- **Google Sheets** — Direct spreadsheet export
- **Slack** / **Email** — Notifications on new results
- **Webhooks** — Trigger custom APIs on run completion
- **Apify API** — Full programmatic access

### Legal & Ethical Use

This actor is designed for legitimate market research, brand monitoring, sentiment analysis, and competitive intelligence. Users are responsible for complying with applicable laws and iRecommend.ru's terms of service, and for handling any personal data (such as reviewer names) in line with relevant privacy regulations. Do not use extracted data for spam, harassment, or any illegal purpose.

# Actor input Schema

## `startUrls` (type: `array`):

Paste one or more iRecommend.ru product review page URLs, for example https://irecommend.ru/content/sait-prilozhenie-dostavki-produktov-samokat . Each URL is scraped for its product summary and all of its reviews.

## `maxReviewsPerProduct` (type: `integer`):

Maximum number of reviews to collect for each product. Set to 0 to collect all available reviews, up to a safety limit of 5,000 per product. Popular products can have thousands of reviews — a limit keeps runs fast and affordable.

## Actor input object example

```json
{
  "startUrls": [
    "https://irecommend.ru/content/sait-prilozhenie-dostavki-produktov-samokat"
  ],
  "maxReviewsPerProduct": 100
}
```

# Actor output Schema

## `overview` (type: `string`):

Every record from the run in one place — products and reviews — distinguished by `recordType`.

## `products` (type: `string`):

Product summaries only: name, category, average rating, and total review count.

## `reviews` (type: `string`):

Reviews only, each linking back to its parent product, with full review text, rating, recommend flag, author, and photos.

# 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 = {
    "startUrls": [
        "https://irecommend.ru/content/sait-prilozhenie-dostavki-produktov-samokat"
    ],
    "maxReviewsPerProduct": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("solidcode/irecommend-ru-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 = {
    "startUrls": ["https://irecommend.ru/content/sait-prilozhenie-dostavki-produktov-samokat"],
    "maxReviewsPerProduct": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("solidcode/irecommend-ru-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 '{
  "startUrls": [
    "https://irecommend.ru/content/sait-prilozhenie-dostavki-produktov-samokat"
  ],
  "maxReviewsPerProduct": 100
}' |
apify call solidcode/irecommend-ru-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,solidcode/irecommend-ru-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/9NKotTyW7z8LgHLsf/builds/ynr5QwyuuvuniL3JD/openapi.json
