# Wildberries Reviews & Product Card Scraper (by URL) (`kyungminlee/wildberries-product-reviews-scraper`) Actor

Unofficial Wildberries scraper by product URL or ID, no login. Product card, specs, images, seller, rating, weekly price history, reviews with seller replies and Q\&A. No reviewer names or IDs. No search or live price/stock.

- **URL**: https://apify.com/kyungminlee/wildberries-product-reviews-scraper.md
- **Developed by:** [Kyungmin Lee](https://apify.com/kyungminlee) (community)
- **Categories:** E-commerce, Marketing, Lead generation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Wildberries Reviews & Product Card Scraper do?

**Wildberries Reviews & Product Card Scraper** collects public product data, **reviews** and **customer questions** from **Wildberries (Вайлдберриз)**, the largest online marketplace in Russia and the CIS, for the products you choose by **URL or product ID (nmId / артикул WB)**. No Wildberries account, API key, cookies or browser are needed. It is an **unofficial** tool and is not affiliated with, endorsed by or sponsored by Wildberries.

For each product you get:

- **Product card**: name, brand, category and parent category, vendor code, colour, IDs of the other colour variants, description, full **characteristics** (flat and grouped as on the site), compositions, package contents, photo count and **image URLs**, creation and update dates.
- **Rating**: average rating, number of reviews (with text, photo, video), 1–5 star distribution, and the rating of the exact variant you entered.
- **Weekly price history** in RUB, as Wildberries publishes it (one point per week).
- **Seller**: seller ID and store link, trademark, and for registered companies (ООО, АО, ТОО, LLC…) the registered name, INN and OGRN.
- **Reviews**: star rating, text, pros and cons, colour and size bought, size fit, highlight tags, photo count, video flag, helpful votes, dates and the **seller's reply**.
- **Questions & answers**: question text and date, the seller's answer and its date.

**What it does not do:** keyword or category **search**, and the **live price and stock**. Wildberries moved its search, catalog and live price/stock services behind its own anti-bot protection in 2026. This Actor does not try to get around that protection; it only reads the public product, review and question files that Wildberries serves without it. That is why you enter product URLs or IDs, and why the price data is the **weekly history as published**, not today's checkout price.

**Privacy by design:** reviewer and asker names, user IDs and avatars are **never collected**. When a seller reply or a text addresses the author by name, the name is replaced with `[name]`, and phone numbers and e-mail addresses in reviews, questions and replies are masked. Sellers that are private persons (sole proprietors / ИП, self-employed) keep only their seller ID and shop trademark: their name and tax IDs are not collected.

### Why use this Wildberries scraper?

- **Review analytics and product research** — export up to about 1,000 newest reviews per product with pros, cons, sizes and seller replies, and feed them into dashboards or AI summaries.
- **Brand and seller monitoring** — schedule a run for your own or competitors' products with "Only reviews written on or after" to get new reviews only, and watch how sellers answer questions.
- **Price trend tracking** — the weekly price history shows discounts and price moves over the last weeks.
- **Catalogue enrichment** — get characteristics, compositions and image URLs for a list of articles.
- **Stable and cheap** — no anti-bot fight means no residential proxy and fewer broken runs. Products, reviews and questions come from **one Actor and one dataset**.

### How to scrape Wildberries reviews and product cards

1. Paste **Product URLs or IDs**, e.g. `https://www.wildberries.ru/catalog/684352087/detail.aspx` or `684352087`. Links from wildberries.kz, .by, .am and global.wildberries.ru work too.
2. Keep **Include weekly price history** and **Include seller company details** on or turn them off.
3. Set **Max reviews per product** (0 = none, up to all ~1,000 available) and optional filters: minimum/maximum stars, a "written on or after" date, text-only reviews, or only the exact variant.
4. Set **Max questions per product** (0 = none).
5. Click **Start** and download the results as JSON, CSV, Excel or via the API.

The Actor makes three small requests per product (card, price history, seller), one request for its rating and all its reviews, and one per 30 questions. It paces requests with random jitter (at most about 1 request per second to the review and question services and 2–3 per second to the static product-file servers), backs off and slows down when Wildberries answers "too many requests" (HTTP 429), and never retries a refused request more than twice. Products that fail are logged in the `SUMMARY` record and **never charged**. About 100 products with 20 reviews each take 3–5 minutes.

### Input

| Field | Description |
|---|---|
| `productUrls` | Product URLs or numeric IDs (nmId). Duplicates are saved once. |
| `includePriceHistory` | Weekly price points in RUB (default on). |
| `includeSellerDetails` | Seller trademark and company details (default on). The seller ID is always included. |
| `maxReviewsPerProduct` | 0–2000 (default 20). Wildberries publishes at most about 1,000 newest reviews per product card. |
| `minReviewRating`, `maxReviewRating` | Keep only reviews with these stars (1–5). |
| `reviewsSince` | Keep only reviews created on or after this date. |
| `reviewsWithTextOnly` | Skip star-only reviews. |
| `reviewsOfThisVariantOnly` | Keep only reviews of the exact product ID, not of its other colours/sizes. |
| `maxQuestionsPerProduct` | 0–3000 (default 0). |
| `proxyConfiguration` | Off by default; not needed in most cases. |

Example:

```json
{
  "productUrls": ["https://www.wildberries.ru/catalog/684352087/detail.aspx", "524866077"],
  "maxReviewsPerProduct": 200,
  "maxReviewRating": 3,
  "reviewsSince": "2026-06-01",
  "maxQuestionsPerProduct": 30
}
```

### Output

All results go to one dataset. Every item has a `type`:

- **`product`** — one item per product you entered.
- **`review`** — one item per review, linked by `inputProductId`, `cardId`, `productName` and `productUrl`. `productId` is the variant the reviewer bought.
- **`question`** — one item per question, linked the same way.

Use the **Products**, **Reviews** and **Questions & answers** views in the Output tab, or filter on `type`. A `SUMMARY` record in the key-value store lists counts, failed inputs and request statistics.

Product example (shortened):

```json
{
  "type": "product", "productId": 684352087, "cardId": 657524618,
  "url": "https://www.wildberries.ru/catalog/684352087/detail.aspx",
  "name": "Ноутбук игровой Vector 17 HX AI A2XW", "brand": "MSI",
  "category": "Ноутбуки", "parentCategory": "Ноутбуки и компьютеры", "vendorCode": "1402828",
  "color": "серый", "variantIds": [684352087, 640504993, 524866077],
  "characteristics": {"Модель": "Vector 17 HX AI A2XW", "Гарантийный срок": "12 мес."},
  "photoCount": 12, "images": ["https://basket-33.wbbasket.ru/vol6843/part684352/684352087/images/big/1.webp"],
  "rating": 4.8, "reviewCount": 103, "ratingDistribution": {"1": 2, "2": 0, "3": 4, "4": 5, "5": 91},
  "variantRating": 4.96, "variantRatingCount": 49,
  "priceHistory": [{"weekStart": "2026-08-16", "priceRub": 211822.14}, {"weekStart": "2026-08-30", "priceRub": 227409.0}],
  "lastKnownWeeklyPriceRub": 227409.0, "lastKnownPriceWeek": "2026-08-30",
  "sellerId": 768659, "sellerTrademark": "Modern Device", "sellerIsIndividual": false,
  "sellerName": "ООО \"СОВРЕМЕННЫЕ УСТРОЙСТВА\"", "sellerInn": "9728041471"
}
```

Review example (shortened):

```json
{
  "type": "review", "reviewId": "2UqpXlHyY7QTKJF5N5Wm", "productId": 640504993, "inputProductId": 684352087,
  "rating": 5, "text": "Товар пришел хорошо упакован, коробка целая…", "pros": null, "cons": null,
  "color": "Темно-серый", "size": null, "photoCount": 4, "hasVideo": true,
  "createdAt": "2026-10-04T10:47:30.635Z",
  "sellerReply": "Здравствуйте, [name]! Благодарю вас за высокую оценку…", "sellerReplyAt": "2026-10-04T12:17:36.970Z"
}
```

### Data fields

**Product:** `productId`, `url`, `inputUrl`, `cardId` (Wildberries' card that groups colour variants), `name`, `brand`, `category`, `parentCategory`, `categoryId`, `vendorCode`, `color`, `variantIds`, `description`, `characteristics`, `characteristicGroups`, `compositions`, `packageContents`, `photoCount`, `images`, `hasVideo`, `rating`, `reviewCount`, `reviewCountWithText`, `reviewCountWithPhoto`, `reviewCountWithVideo`, `ratingDistribution`, `variantRating`, `variantRatingCount`, `sizeFit`, `priceHistory` (`weekStart`, `priceRub`), `priceHistoryWeeks`, `lastKnownWeeklyPriceRub`, `lastKnownPriceWeek`, `sellerId`, `sellerUrl`, `sellerTrademark`, `sellerIsIndividual` (sole proprietor or other private person), `sellerName`, `sellerFullName`, `sellerInn`, `sellerOgrn`, `createdAt`, `updatedAt`, `scrapedAt`.

**Review:** `reviewId`, `productId`, `inputProductId`, `cardId`, `productName`, `productUrl`, `rating`, `text`, `pros`, `cons`, `color`, `size`, `sizeFit`, `highlights`, `photoCount`, `hasVideo`, `helpfulVotes`, `unhelpfulVotes`, `excludedFromRating`, `createdAt`, `updatedAt`, `sellerReply`, `sellerReplyAt`, `scrapedAt`.

**Question:** `questionId`, `productId`, `inputProductId`, `cardId`, `productName`, `productUrl`, `text`, `createdAt`, `answer`, `answerAt`, `answerHelpfulVotes`, `answerUnhelpfulVotes`, `tags`, `scrapedAt`.

Not collected: reviewer or asker name, user ID, avatar, profile; name and tax IDs of sellers who are private persons.

### Pricing

This Actor uses **pay per event** — you pay only for items that were saved:

| Event | Proposed price | What it covers |
|---|---|---|
| `product` | **$1.00 per 1,000 products** ($0.001 each) | One product item: card, rating summary, weekly price history and seller |
| `review` | **$0.30 per 1,000 reviews** ($0.0003 each) | One review item |
| `question` | **$0.30 per 1,000 questions** ($0.0003 each) | One question item with its answer |

The prices shown on the Actor's Store page are the ones that apply. Invalid or unknown products, refused requests, duplicates and reviews removed by your filters are never charged. The run's maximum charge is checked before every batch, so the Actor stops cleanly when your limit is reached.

Example: 200 products with 100 reviews and 20 questions each = 200 × $0.001 + 20,000 × $0.0003 + 4,000 × $0.0003 = **$7.40**.

### Tips

- **New reviews only:** schedule the Actor with your product list and set "Only reviews written on or after" to the date of the last run.
- **Complaints only:** set "Maximum review rating" to 2.
- **Several colours of one product:** Wildberries shows the reviews and questions of all colour/size variants of a card together. If you enter several variants of the same card, each gets its own product item, but the card's reviews and questions are saved once, under one of those variants, normally the first one you entered (each review's `productId` still tells which variant was bought). Turn on "Only reviews of this exact variant" to get each variant's own reviews instead.
- **Rating without reviews:** set "Max reviews per product" to 0; the product item still has the rating and review counts.
- Find the product ID in the page URL (`/catalog/<ID>/detail.aspx`) or under "Артикул" on the product page.
- **Marketplace data for other countries:** [China (Taobao & Tmall)](https://apify.com/kyungminlee/taobao-catalog-scraper), [Korea (Naver Shopping)](https://apify.com/kyungminlee/naver-shopping-search-scraper), [Turkey (Trendyol)](https://apify.com/kyungminlee/trendyol-products-scraper).

### FAQ

**Is this an official Wildberries API?** No. It is an unofficial scraper of publicly visible Wildberries data and is not affiliated with Wildberries. Wildberries can change its website at any time; the Actor is maintained, but results may briefly break after such changes.

**Why is there no search or current price/stock?** Wildberries protects search, catalog listings and live price/stock with an anti-bot challenge. This Actor respects that protection and does not solve or bypass challenges. Collect product URLs or IDs elsewhere (for example from your own catalogue or a seller page in your browser) and paste them here.

**How fresh is the price history?** It is the weekly history Wildberries publishes for the product page chart, usually the last 2–3 months. The newest point can be a few weeks old, and some products have no history at all (`priceHistory` is then empty). It is not today's checkout price.

**Why at most about 1,000 reviews?** Wildberries publishes only the newest ~1,000 reviews of a product card in its public review feed, even when the product has more. `reviewCount` still shows the full total.

**Why are reviewer names missing?** On purpose. Review text is public, but this Actor does not collect who wrote it, so you can analyse feedback without handling personal data. Please do not use the text to identify or contact reviewers.

**Do I need a proxy?** Usually not. If Wildberries starts slowing your runs down, enable Apify Proxy (datacenter is enough).

# Actor input Schema

## `productUrls` (type: `array`):

Wildberries product pages (https://www.wildberries.ru/catalog/684352087/detail.aspx, also wildberries.kz/.by/.am and global.wildberries.ru links) or numeric product IDs (nmId / артикул WB, e.g. 684352087). Each product is saved once per run. Keyword search is not supported: Wildberries protects its search with an anti-bot challenge.

## `includePriceHistory` (type: `boolean`):

Add the weekly price points (RUB) that Wildberries publishes for the product, usually the last 2-3 months. This is the history as published, one point per week; it is not today's live price.

## `includeSellerDetails` (type: `boolean`):

Add the seller's trademark and, for registered companies (ООО, АО, ТОО, LLC...), the company name, INN and OGRN. For sellers who are private persons (sole proprietors / ИП, self-employed) only the seller ID and shop trademark are kept, because their name is a person's name. The seller ID is always included.

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

Reviews to save for each product, newest first. 0 = no reviews (the product's rating and review counts are still included). Wildberries publishes at most about 1,000 newest reviews per product card, so higher values return everything available. Each review is a separate dataset item and a separate review event. Reviewer names, IDs and avatars are never collected.

## `minReviewRating` (type: `integer`):

Only save reviews with at least this many stars (1-5). Skipped reviews are not charged.

## `maxReviewRating` (type: `integer`):

Only save reviews with at most this many stars (1-5), e.g. 2 to collect complaints only. Skipped reviews are not charged.

## `reviewsSince` (type: `string`):

Only save reviews created on or after this date (YYYY-MM-DD, UTC). Older reviews are skipped and not charged. Handy for scheduled monitoring runs.

## `reviewsWithTextOnly` (type: `boolean`):

Skip star-only reviews that have no text, pros or cons. Skipped reviews are not charged.

## `reviewsOfThisVariantOnly` (type: `boolean`):

Wildberries shows the reviews of all colour/size variants of a product card together, so by default a card's reviews are saved once, under one of its variants you entered (normally the first). Turn this on to keep only reviews written for the exact product ID you entered, separately for each variant.

## `maxQuestionsPerProduct` (type: `integer`):

Customer questions (with the seller's answers) to save for each product, newest first. 0 = no questions. Each question is a separate dataset item and a separate question event. Asker names and IDs are never collected.

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

Not needed in most cases: the Actor reads Wildberries' public product and review files, which work from Apify's own servers. It paces requests with random jitter and backs off when Wildberries answers "too many requests". If you enable Apify Proxy (datacenter is enough), a new proxy session is used whenever Wildberries slows the run down.

## Actor input object example

```json
{
  "productUrls": [
    "https://www.wildberries.ru/catalog/684352087/detail.aspx"
  ],
  "includePriceHistory": true,
  "includeSellerDetails": true,
  "maxReviewsPerProduct": 20,
  "reviewsWithTextOnly": false,
  "reviewsOfThisVariantOnly": false,
  "maxQuestionsPerProduct": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

No description

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

No description

## `questions` (type: `string`):

No description

## `allItems` (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 = {
    "productUrls": [
        "https://www.wildberries.ru/catalog/684352087/detail.aspx"
    ],
    "maxReviewsPerProduct": 20,
    "maxQuestionsPerProduct": 10,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("kyungminlee/wildberries-product-reviews-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 = {
    "productUrls": ["https://www.wildberries.ru/catalog/684352087/detail.aspx"],
    "maxReviewsPerProduct": 20,
    "maxQuestionsPerProduct": 10,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("kyungminlee/wildberries-product-reviews-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 '{
  "productUrls": [
    "https://www.wildberries.ru/catalog/684352087/detail.aspx"
  ],
  "maxReviewsPerProduct": 20,
  "maxQuestionsPerProduct": 10,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call kyungminlee/wildberries-product-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,kyungminlee/wildberries-product-reviews-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/HcnOulNlVQiRTMY2h/builds/adyExRvEPDlR5KjIt/openapi.json
