# Wildberries.ru Product Scraper \[Just 💰$0.23] (`blackfalcondata/wildberries-ru-scraper`) Actor

Scrape Wildberries.ru — product search results by keyword or by search-page URL, with price and sale price in RUB, rating, review count and seller for every product. Optional detail enrichment adds full specs and photos plus the complete price history of each product.

- **URL**: https://apify.com/blackfalcondata/wildberries-ru-scraper.md
- **Developed by:** [Black Falcon Data](https://apify.com/blackfalcondata) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Features:** Limited permissions
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.23 / 1,000 results

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.ru Product Scraper do?

Wildberries.ru Product Scraper extracts structured product data from [wildberries.ru](https://wildberries.ru) — including full descriptions, prices, and seller ratings. It supports keyword search, location filters, and controllable result limits, so you can run the same query consistently over time. The actor also offers detail enrichment (full descriptions) where the source provides them.

### How to use this actor

- 👉 **Register for a free Apify account** — no credit card required.
- 🎉 Just click **[Sign up free on Apify →](https://console.apify.com/sign-up?fpr=1h3gvi)** and complete a quick signup.
- 💰 A free Apify account includes $5 in monthly credits — enough to test this actor.
- ⏳ Scrape during the free trial, with no commitment or upfront payment required.

### Key features

- **💵 Structured pricing:** structured `price`, `salePrice`, `discountPct` and `currency` on every product — numbers you can sort and compare without parsing price text.
- **📉 Price-change tracking:** `priceHistory`, `priceChange` and `priceChangePct` show how a product's price moved since the previous run.
- **📦 Stock and availability:** `inStock` and `stockQuantity` on every product, so you can track what is actually buyable.
- **🎨 Colors, sizes and variants:** `colors`, `sizes` and `color` on each product, so you can see every option it comes in.
- **⭐ Ratings and review counts:** `rating`, `reviewCount`, `reviewsCount` and `reviews` for every product that has them.
- **📅 Filing and registration dates:** `registrationDate` as separate date fields on each product.
- **🔍 Keyword search:** search wildberries.ru by keyword with the `query` input, in the place you name in `location`.
- **🔗 Paste-mode:** paste wildberries.ru URLs into `startUrls` to scrape exactly the pages you picked in the browser.
- **↕️ Sort order:** choose the result order with the `sort` input.
- **♻️ Incremental mode:** daily runs emit only listings that are new or whose price/condition changed since last run. Perfect for inventory-diff dashboards and competitive pricing alerts. Saves 80–95% on recurring monitoring.
- **🔔 Notifications:** telegram / Slack / Discord / WhatsApp / webhook alerts on each run. Combine with incremental to ping only when prices or inventory actually move.

### What data can you extract from wildberries.ru?

Each result includes Core product fields (`listingId`, `type`, `id`, `nmId`, `imtId`, `title`, `url`, and `portalUrl`, and more) and detail fields when enrichment is enabled (`description`, `detailsFetched`, and `detailFetched`). In standard mode, all fields are always present — unavailable data points are returned as `null`, never omitted. In compact mode, only core fields are returned.

Detail enrichment is on by default and adds richer fields such as full descriptions where the source provides them.

### Input

The main inputs are a search keyword, an optional location filter, and a result limit. Additional filters and options are available in the input schema.

Key parameters:

- **`query`** — Product search keywords, as you would type them on the site (Russian works best, e.g. "платье", "кроссовки nike", "iphone 15"). Use a JSON array for several searches in one run, e.g. \["платье","кроссовки"]. Required if no startUrls provided.
- **`location`** — Optional delivery-region id, which decides the prices, stock and delivery times you see. Leave empty for Moscow (-1257786). Other examples: -1123300 (Saint Petersburg), 12358499 (Kazan), -2133463 (Yekaterinburg). Use a JSON array to compare several regions in one run.
- **`maxResults`** — Maximum total results (0 = unlimited). (default: `100`)
- **`startUrls`** — Paste raw search URLs from the target site. Each URL becomes its own search task; results are merged and deduped by product ID across all URLs. When provided, startUrls REPLACE the query/location fields (each supported URL becomes one task; unsupported URLs are skipped, and if none is supported the run stops with an input error). (default: `[]`)
- **`includeDetails`** — Fetch each product's full card: description, characteristics, pack contents, image list, seller legal data and recorded price history. Turn off for a faster, search-only run (price, stock, rating, seller, rank). (default: `true`)
- **`descriptionMaxLength`** — Truncate description to N chars. 0 = no truncation. (default: `0`)
- **`compact`** — Core fields only (for AI-agent/MCP workflows). (default: `false`)
- **`descriptionFormat`** — Pick a single description representation. `all` keeps every variant; `text` / `html` / `markdown` drop the others. (default: `"all"`)
- **`excludeEmptyFields`** — Drop null, empty-string, and empty-array fields from each record before push. Smaller payloads for AI agents and dashboards. (default: `false`)
- **`mode`** — Products (default): one row per product. Reviews: one row per customer review, instead of product rows. Sellers: one row per distinct seller of the products found, instead of product rows. The product search still runs first, and Max Results still limits how many PRODUCTS are read (not how many review or seller rows come out). In Sellers mode the full product details are always loaded, because the seller data comes from them. Niche: one summary row per keyword/category (seller concentration, price spread, stock) from the search results. Monitor: where each product ranks for a keyword now and what changed since the last run (needs the same Monitor state name on every run). Resale: Wildberries Resale (second-hand) listings, optionally only for the conditions chosen below. (default: `"products"`)
- **`scrapeReviews`** — Products mode: add a reviewAggregates summary (average rating, review counts, 1-5 star distribution) and a reviews list to every product row. In Reviews mode reviews are always collected, so this switch has no effect there. Colour variants of one product share their reviews. (default: `false`)
- **`maxReviewsPerProduct`** — Applies to the reviews list on product rows and to the review rows in Reviews mode. 0 = every review the site serves for the product, which is at most its roughly 1,000 most recent ones. Newest reviews come first. Filters below are applied before this limit. (default: `20`)
- ...and 46 more parameters

### Input examples

**Basic search** — Keyword-driven search with a result cap.

→ Full payload per result — all standard fields populated where the source provides them.

```json
{
  "mode": "products",
  "query": "платье",
  "maxResults": 50
}
```

**Incremental tracking** — Only emit products that changed since the previous run with this `stateKey`.

→ First run builds the baseline state. Subsequent runs emit only records that are new or whose tracked content changed. Set `emitUnchanged: true` to include unchanged records as well.

```json
{
  "query": "платье",
  "maxResults": 200,
  "incrementalMode": true,
  "stateKey": "платье-tracker"
}
```

**Compact output for AI agents** — Return only core fields for AI-agent and MCP workflows.

→ Small payload with the most important fields — ideal for piping into LLMs without token overhead.

```json
{
  "query": "платье",
  "maxResults": 50,
  "compact": true
}
```

### Output

Each run produces a dataset of structured product records. Results can be downloaded as JSON, CSV, or Excel from the Dataset tab in Apify Console.

### Example product record

```json
{
  "listingId": "d63d31b8631f85cf9b160e095b6bf177bd2758c1d7034cb71c555861e108c4eb",
  "type": "product",
  "id": "964495677",
  "nmId": 964495677,
  "imtId": 126892091,
  "title": "Туника домашняя больших размеров короткое",
  "url": "https://www.wildberries.ru/catalog/964495677/detail.aspx",
  "portalUrl": "https://www.wildberries.ru/catalog/964495677/detail.aspx",
  "brand": "Iren Renetti",
  "brandId": 309884,
  "category": "Туники",
  "parentCategory": "Одежда",
  "subjectId": 150,
  "subjectParentId": 1,
  "price": 4000,
  "salePrice": 840,
  "discountPct": 79,
  "currency": "RUB",
  "priceHistory": [
    {
      "date": "2026-07-05",
      "priceRub": 811.14
    },
    {
      "date": "2026-07-12",
      "priceRub": 904.19
    },
    {
      "date": "2026-07-19",
      "priceRub": 921.7
    },
    {
      "date": "2026-07-26",
      "priceRub": 986.06
    },
    {
      "date": "2026-08-02",
      "priceRub": 990.1
    },
    "... 7 more items"
  ],
  "lastRecordedPriceRub": 1299.5,
  "lastRecordedPriceDate": "2026-09-20",
  "promotions": [
    1003057,
    1006715,
    1006716,
    1006726,
    1006734,
    "... 32 more items"
  ],
  "rating": 4.7,
  "starRating": 5,
  "reviewCount": 19361,
  "reviewRewardPoints": 0,
  "inStock": true,
  "stockQuantity": 52,
  "deliveryHours": 28,
  "estimatedDeliveryDate": "2026-11-07",
  "isNew": false,
  "supplier": "Iren Renetti",
  "supplierId": 52666,
  "supplierRating": 4.8,
  "sellerType": "individual",
  "sellerTrademark": "Iren Renetti",
  "sellerLegalName": "Индивидуальный предприниматель Рябова Ирена Бариковна",
  "sellerTaxId": "370264452210",
  "sellerRegistrationNumber": "304370228200134",
  "sellerIsIndividual": true,
  "sellerUrl": "https://www.wildberries.ru/seller/52666",
  "sellerRegisteredAt": "2021-06-19T00:00:00Z",
  "sellerSalesCount": 546117,
  "sellerReviewCount": 148298,
  "colors": [
    "черный",
    "белый"
  ],
  "colorName": "черный, белый",
  "variantIds": [
    844637425,
    964487849,
    851139797,
    35653972,
    157381290,
    "... 16 more items"
  ],
  "sizes": [
    {
      "name": "42",
      "origName": "42",
      "optionId": 1446168565,
      "price": 4000,
      "salePrice": 840
    },
    {
      "name": "44",
      "origName": "44",
      "optionId": 1446168566,
      "price": 4000,
      "salePrice": 840
    },
    {
      "name": "46",
      "origName": "46",
      "optionId": 1446168567,
      "price": 4000,
      "salePrice": 840
    },
    {
      "name": "48",
      "origName": "48",
      "optionId": 1446168568,
      "price": 4000,
      "salePrice": 840
    },
    {
      "name": "50",
      "origName": "50",
      "optionId": 1446168569,
      "price": 4000,
      "salePrice": 840
    },
    "... 2 more items"
  ],
  "vendorCode": "ИР-ТУН-РАД-Р.СЕТКА/Ч-БЕЛ-ЧЕР",
  "description": "Представляем Вам базовое женское спортивное платье с декоративной вставкой из сетки на рукавах, туника больших размеров от бренда Iren Renetti из качественного хлопка в спортивном стиле – универсальны...",
  "characteristics": [
    {
      "name": "Материал верха",
      "value": "хлопок"
    },
    {
      "name": "Состав",
      "value": "100% хлопок"
    },
    {
      "name": "Цвет",
      "value": "черный; белый"
    },
    {
      "name": "Пол",
      "value": "Женский"
    },
    {
      "name": "Размер на модели",
      "value": "48"
    },
    "... 13 more items"
  ],
  "characteristicGroups": [
    {
      "group": "Основная информация",
      "options": [
        {
          "name": "Состав",
          "value": "100% хлопок"
        },
        {
          "name": "Материал верха",
          "value": "хлопок"
        },
        {
          "name": "Цвет",
          "value": "черный; белый"
        },
        {
          "name": "Пол",
          "value": "Женский"
        }
      ]
    },
    {
      "group": "Дополнительная информация",
      "options": [
        {
          "name": "Размер на модели",
          "value": "48"
        },
        {
          "name": "Рост модели на фото",
          "value": "167 см"
        },
        {
          "name": "Параметры модели на фото (ОГ-ОТ-ОБ)",
          "value": "97-70-100"
        },
        {
          "name": "Покрой",
          "value": "прямой"
        },
        {
          "name": "Вид застежки",
          "value": "без застежки"
        },
        "... 9 more items"
      ]
    }
  ],
  "compositions": [
    "100% хлопок"
  ],
  "packageContents": "платье женское больших размеров 1 шт.",
  "image": "https://basket-41.wbbasket.ru/vol9644/part964495/964495677/images/c516x688/1.webp",
  "images": [
    "https://basket-41.wbbasket.ru/vol9644/part964495/964495677/images/big/1.webp",
    "https://basket-41.wbbasket.ru/vol9644/part964495/964495677/images/big/2.webp",
    "https://basket-41.wbbasket.ru/vol9644/part964495/964495677/images/big/3.webp",
    "https://basket-41.wbbasket.ru/vol9644/part964495/964495677/images/big/4.webp",
    "https://basket-41.wbbasket.ru/vol9644/part964495/964495677/images/big/5.webp",
    "... 7 more items"
  ],
  "imageCount": 12,
  "photoCount": 12,
  "listedAt": "2026-04-14T12:56:58.332474Z",
  "createdAt": "2026-04-14T12:56:58.332474Z",
  "cardUpdatedAt": "2026-11-06T12:34:16.690234Z",
  "query": "платье",
  "position": 1,
  "pageNumber": 1,
  "searchResultsTotal": 369456,
  "detailsFetched": true,
  "searchQuery": "платье",
  "contentQuality": "full",
  "detailFetched": true,
  "scrapedAt": "2026-11-06T12:45:45.907Z",
  "source": "wildberries.ru"
}
```

### Incremental fields

When incremental mode is on, each record also carries:

- `changeType` — one of `NEW`, `UPDATED`, `UNCHANGED`, `REAPPEARED`, `EXPIRED`. Default output covers `NEW` / `UPDATED` / `REAPPEARED`; set `emitUnchanged: true` or `emitExpired: true` to opt into the others.
- `isRepost`, `repostOfId`, `repostDetectedAt` — populated when a new listing matches the tracked content of a previously expired one. Set `skipReposts: true` to drop detected reposts from the output.

### How to scrape wildberries.ru

1. Go to [Wildberries.ru Product Scraper](https://apify.com/blackfalcondata/wildberries-ru-scraper?fpr=1h3gvi) in Apify Console.
2. Enter a search keyword and optional location filter.
3. Set `maxResults` to control how many results you need.
4. Keep `includeDetails` on (the default) for full descriptions, or turn it off for faster, cheaper runs.
5. Click **Start** and wait for the run to finish.
6. Export the dataset as JSON, CSV, or Excel.

### Use cases

- Extract product data from wildberries.ru for market research and competitive analysis.
- Track pricing trends across regions and categories over time.
- Monitor new and changed products on scheduled runs without processing the full dataset every time.
- Feed structured data into AI agents, MCP tools, and automated pipelines using compact mode.
- Export clean, structured data to dashboards, spreadsheets, or data warehouses.
- Benchmark seller / dealer reputation using rating fields.

### How much does it cost to scrape wildberries.ru?

Wildberries.ru Product Scraper uses [pay-per-event](https://docs.apify.com/platform/actors/paid-actors/pay-per-event) pricing. You pay a small fee when the run starts and then for each result that is actually produced.

- **Run start:** $0.01 per run
- **Per result:** $0.00022 per product record

Example costs:

- 10 results: **$0.012**
- 25 results: **$0.016**
- 100 results: **$0.033**
- 200 results: **$0.055**
- 500 results: **$0.12**

#### Example: recurring monitoring savings

These examples compare full re-scrapes with incremental runs at different churn rates. Churn is the share of products that are new or whose tracked content changed since the previous run. Actual churn depends on your query breadth, source activity, and polling frequency — the scenarios below are examples, not predictions.

Example setup: 250 products per run, daily polling (30 runs/month). Costs scale linearly with the number of products.

| Churn rate | Full re-scrape run cost | Incremental run cost | Savings vs full re-scrape | Monthly cost after baseline |
|---|---:|---:|---:|---:|
| 5% — stable niche query | $0.07 | $0.01 | $0.05 (81%) | $0.38 |
| 15% — moderate broad query | $0.07 | $0.02 | $0.05 (72%) | $0.55 |
| 30% — high-volume aggregator | $0.07 | $0.03 | $0.04 (59%) | $0.81 |

Full re-scrape monthly cost at the same cadence: $1.99. First month with incremental costs $0.44 / $0.60 / $0.85 for the 5% / 15% / 30% scenarios because the first run builds baseline state at full cost before incremental savings apply.

Platform usage is included in the per-result fee shown above.

### FAQ

#### How many results can I get from wildberries.ru?

The number of results depends on the search query and available products on wildberries.ru. Use the `maxResults` parameter to control how many results are returned per run.

#### Does Wildberries.ru Product Scraper support recurring monitoring?

Yes. Enable incremental mode to only receive new or changed products on subsequent runs. This is ideal for scheduled monitoring where you want to track changes over time without re-processing the full dataset.

#### Can I integrate Wildberries.ru Product Scraper with other apps?

Yes. Wildberries.ru Product Scraper works with Apify's [integrations](https://apify.com/integrations?fpr=1h3gvi) to connect with tools like Zapier, Make, Google Sheets, Slack, and more. You can also use webhooks to trigger actions when a run completes.

#### Can I use Wildberries.ru Product Scraper with the Apify API?

Yes. You can start runs, manage inputs, and retrieve results programmatically through the [Apify API](https://docs.apify.com/api/v2). Client libraries are available for JavaScript, Python, and other languages.

#### Can I use Wildberries.ru Product Scraper through an MCP Server?

Yes. Apify provides an [MCP Server](https://apify.com/apify/actors-mcp-server?fpr=1h3gvi) that lets AI assistants and agents call this actor directly. Use compact mode, `descriptionMaxLength`, a single `descriptionFormat`, and `excludeEmptyFields` to keep payloads manageable for LLM context windows.

#### Is it legal to scrape wildberries.ru?

This actor extracts publicly available data from wildberries.ru. Web scraping of public information is generally considered legal, but you should always review the target site's terms of service and ensure your use case complies with applicable laws and regulations, including GDPR where relevant.

#### Your feedback

If you have questions, need a feature, or found a bug, please [open an issue](https://apify.com/blackfalcondata/wildberries-ru-scraper/issues?fpr=1h3gvi) on the actor's page in Apify Console. Your feedback helps us improve.

### You might also like

- [🚗 mobile.de \[$0.59/1K💰\] Fast Scraper · Finance · Dealer GPS](https://apify.com/blackfalcondata/mobile-de-scraper?fpr=1h3gvi) — Scrape mobile.de — Germany's largest car marketplace (1.4M+ listings) at $0.6 / 1,000 results. Get.
- [1688.com Product Search Scraper](https://apify.com/blackfalcondata/1688-com-scraper?fpr=1h3gvi) — Search 1688.com wholesale products by keyword and export price, minimum order quantity and sales.
- [2dehands.be Listings Scraper Belgium](https://apify.com/blackfalcondata/2dehands-be-scraper?fpr=1h3gvi) — Scrape 2dehands.be listings by keyword, category or postcode, with car year, mileage and fuel type..
- [ALDI Scraper — Grocery Prices, 14 Countries](https://apify.com/blackfalcondata/aldi-scraper?fpr=1h3gvi) — Scrape ALDI grocery products and prices across 14 countries — the UK, Ireland, Germany, Austria,.
- [ALDI US Scraper — Grocery Prices by ZIP Code](https://apify.com/blackfalcondata/aldi-us-scraper?fpr=1h3gvi) — Scrape aldi.us grocery products with prices, sizes, brands, categories, per-unit pricing and stock..
- [Alibaba.com Product & Supplier Scraper \[Just 💰$0.63\]](https://apify.com/blackfalcondata/alibaba-com-scraper?fpr=1h3gvi) — Scrape alibaba.com — product listings by keyword or supplier country with price range, minimum.
- [Allegro.pl Scraper \[💰$0.72\] — Product Offers, Prices & Sellers](https://apify.com/blackfalcondata/allegro-pl-scraper?fpr=1h3gvi) — Scrape allegro.pl search results into structured offer rows: price, discount and delivery cost,.
- [Amazon All Countries Scraper](https://apify.com/blackfalcondata/amazon-all-countries-scraper?fpr=1h3gvi) — Scrape Amazon products from 22 marketplaces by keyword or pasted search URL, with ASIN, title,.

### Getting started with Apify

New to Apify? [Create a free account with $5 credit](https://console.apify.com/sign-up?fpr=1h3gvi) — no credit card required.

1. Sign up — $5 platform credit included
2. Open this actor and configure your input
3. Click **Start** — export results as JSON, CSV, or Excel

Need more later? [See Apify pricing](https://apify.com/pricing?fpr=1h3gvi).

### Disclaimer

This actor accesses only publicly available data on wildberries.ru. You are responsible for how you use the extracted data — in particular any personal information such as names, phone numbers, or email addresses — and for complying with Wildberries.ru Product's terms of use, applicable data-protection law (including the GDPR where it applies), and the anti-spam rules of your jurisdiction.

This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Wildberries.ru Product or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.

### Search keywords

wildberries scraper, wildberries api, apify wildberries, wildberries data extraction, wildberries.ru product scraper, wildberries.ru product api, apify wildberries.ru product, wildberries.ru product data extraction, wildberries.ru scraper, wildberries.ru data, wildberries.ru api.

# Changelog

This Actor's version history is a separate document: https://apify.com/blackfalcondata/wildberries-ru-scraper/changelog.md

# Actor input Schema

## `query` (type: `string`):

Product search keywords, as you would type them on the site (Russian works best, e.g. "платье", "кроссовки nike", "iphone 15"). Use a JSON array for several searches in one run, e.g. \["платье","кроссовки"]. Required if no startUrls provided.

## `location` (type: `string`):

Optional delivery-region id, which decides the prices, stock and delivery times you see. Leave empty for Moscow (-1257786). Other examples: -1123300 (Saint Petersburg), 12358499 (Kazan), -2133463 (Yekaterinburg). Use a JSON array to compare several regions in one run.

## `maxResults` (type: `integer`):

Maximum total results (0 = unlimited).

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

Paste raw search URLs from the target site. Each URL becomes its own search task; results are merged and deduped by product ID across all URLs. When provided, startUrls REPLACE the query/location fields (each supported URL becomes one task; unsupported URLs are skipped, and if none is supported the run stops with an input error).

## `includeDetails` (type: `boolean`):

Fetch each product's full card: description, characteristics, pack contents, image list, seller legal data and recorded price history. Turn off for a faster, search-only run (price, stock, rating, seller, rank).

## `descriptionMaxLength` (type: `integer`):

Truncate description to N chars. 0 = no truncation.

## `compact` (type: `boolean`):

Core fields only (for AI-agent/MCP workflows).

## `descriptionFormat` (type: `string`):

Pick a single description representation. `all` keeps every variant; `text` / `html` / `markdown` drop the others.

## `excludeEmptyFields` (type: `boolean`):

Drop null, empty-string, and empty-array fields from each record before push. Smaller payloads for AI agents and dashboards.

## `mode` (type: `string`):

Products (default): one row per product. Reviews: one row per customer review, instead of product rows. Sellers: one row per distinct seller of the products found, instead of product rows. The product search still runs first, and Max Results still limits how many PRODUCTS are read (not how many review or seller rows come out). In Sellers mode the full product details are always loaded, because the seller data comes from them. Niche: one summary row per keyword/category (seller concentration, price spread, stock) from the search results. Monitor: where each product ranks for a keyword now and what changed since the last run (needs the same Monitor state name on every run). Resale: Wildberries Resale (second-hand) listings, optionally only for the conditions chosen below.

## `scrapeReviews` (type: `boolean`):

Products mode: add a reviewAggregates summary (average rating, review counts, 1-5 star distribution) and a reviews list to every product row. In Reviews mode reviews are always collected, so this switch has no effect there. Colour variants of one product share their reviews.

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

Applies to the reviews list on product rows and to the review rows in Reviews mode. 0 = every review the site serves for the product, which is at most its roughly 1,000 most recent ones. Newest reviews come first. Filters below are applied before this limit.

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

Keep only reviews that have a written comment, pros or cons (skips star-only ratings).

## `reviewsWithPhotoOnly` (type: `boolean`):

Keep only reviews that include at least one customer photo.

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

Products mode: add the newest customer questions and the seller answers (questions list) plus the total number of questions the product has (questionsCount) to every product row. 0 = off (default). Colour variants of one product share their questions.

## `incrementalMode` (type: `boolean`):

Compare against previous run state. stateKey is optional — defaults to a value derived from search inputs (queries, delivery regions, startUrls) so different searches never share state.

## `stateKey` (type: `string`):

Optional. Stable identifier for the tracked search universe. Leave empty to auto-generate from search inputs.

## `skipReposts` (type: `boolean`):

When incremental, skip products whose content matches an expired product from a prior run (cross-run duplicate detection).

## `emitUnchanged` (type: `boolean`):

When incremental mode is on, also emit products whose content has not changed since the last run.

## `emitExpired` (type: `boolean`):

When incremental mode is on, also emit products that were seen before but are no longer found.

## `notifyOnlyChanges` (type: `boolean`):

When Incremental Mode is on, only send notifications for NEW and UPDATED products. Has no effect outside incremental mode.

## `notificationLimit` (type: `integer`):

Maximum number of products included in each notification message (1–20).

## `telegramToken` (type: `string`):

Telegram bot token (from @BotFather). Required for Telegram notifications.

## `telegramChatId` (type: `string`):

Telegram chat or channel ID (e.g. "-100123456789"). Required when telegramToken is set.

## `discordWebhookUrl` (type: `string`):

Discord incoming webhook URL. Server Settings → Integrations → Webhooks → New Webhook.

## `slackWebhookUrl` (type: `string`):

Slack incoming webhook URL. api.slack.com/messaging/webhooks.

## `whatsappPhoneNumberId` (type: `string`):

Your WhatsApp Business phone-number ID (numeric, from Meta dashboard). Required when whatsappAccessToken is set.

## `whatsappAccessToken` (type: `string`):

WhatsApp Cloud API permanent access token (System User token from Meta Business). Recipient must have messaged the business number within the last 24h (service-conversation window — free since Nov 2024).

## `whatsappTo` (type: `string`):

Recipient phone in E.164 format without + (e.g. "436641234567"). Recipient must have messaged your business number within last 24h.

## `webhookUrl` (type: `string`):

Receives a JSON POST with {metadata, items} after each run. Universal escape hatch for n8n / Make / Zapier / custom backends.

## `webhookHeaders` (type: `object`):

Optional JSON object of custom headers (e.g. {"Authorization":"Bearer ..."}).

## `appConnector` (type: `string`):

Optional. Pick a connected app under Settings → API & Integrations to receive your results (including any contact details). Best-effort across MCP connectors as Apify expands its catalog.

## `mcpIssueTeam` (type: `string`):

Only when the connected app is an issue tracker: the team (name or ID) the summary issue is created under, if that app requires one.

## `productIds` (type: `array`):

Wildberries article numbers (nmId) to read directly, without a search. Accepts a list, or a comma/space separated text. Ids that do not exist are skipped. Counts as input on its own: queries or start URLs are not needed.

## `sellerIds` (type: `array`):

Wildberries seller ids to read the catalogue of. A seller id that does not exist produces one row with status not_found and the run still succeeds. Counts as input on its own.

## `sort` (type: `string`):

Order of the results for searches, categories, brands, sellers and resale. Empty = the site default (popular). Monitor mode ranks follow this order.

## `lowPrice` (type: `integer`):

Keep only products at or above this sale price in roubles. Empty = no limit.

## `topPrice` (type: `integer`):

Keep only products at or below this sale price in roubles. Empty = no limit.

## `discount` (type: `integer`):

Keep only products discounted by at least this percentage. Empty = no limit.

## `inStockOnly` (type: `boolean`):

Keep only products that are in stock.

## `minRating` (type: `number`):

Products, niche, monitor, resale and sellers modes: drop products rated below this (0-5). Reviews mode: keep only reviews with at least this star rating (1-5) instead. Empty = no limit.

## `flagUnderpriced` (type: `boolean`):

Products mode: add isUnderpriced and underpricedDeviationPct to each product row. Niche mode: add underpricedCount, underpricedThresholdPrice and underpricedThresholdPct to the niche row. A listing is underpriced when its price is below the baseline x (1 - threshold / 100). Without a reference price the baseline is the median: in niche mode the median of the analysed products, in products mode the median of the first results page of each search/target (so the flag is judged against what that search shows, not the whole result set).

## `referencePrice` (type: `integer`):

Used with 'Flag underpriced listings': listings below reference price x (1 - threshold / 100) are flagged. Leave empty to compare with the median of the results instead.

## `underpriceThresholdPct` (type: `integer`):

How far below the baseline (reference price or median) a listing must be to count as underpriced. 50 = more than half price.

## `maxSellersPerSearch` (type: `integer`):

Sellers mode: how many distinct sellers to profile from each search query, category or brand page. Each seller row gets catalogue statistics (see 'Products per seller').

## `maxProductsPerSeller` (type: `integer`):

Sellers mode: how many of a seller's catalogue products to scan for the statistics (price min/max/average/median, distinct brands, average rating, total reviews, in-stock share). 100 products per request, so higher values cost more requests.

## `brand` (type: `string`):

Keep only products whose brand name contains this text (not case sensitive). Empty = all brands.

## `maxRating` (type: `integer`):

Reviews mode and review lists: keep only reviews with at most this star rating (1-5), e.g. 2 for complaints. Empty = all reviews.

## `dateFrom` (type: `string`):

Keep only reviews written on or after this date (YYYY-MM-DD). Empty = no limit.

## `dateTo` (type: `string`):

Keep only reviews written on or before this date (YYYY-MM-DD). Empty = no limit.

## `maxProductsPerNiche` (type: `integer`):

Niche mode: how many products per keyword or category are analysed (100 per page). More products give a more accurate picture and take longer.

## `nicheTopN` (type: `integer`):

Niche mode: how many of the largest sellers and brands are listed in each summary row.

## `monitorStateName` (type: `string`):

Monitor mode: name of the stored snapshot the run compares against and then updates. Use the same name on every scheduled run of one watch list, and a different name for a different one. Lowercase letters, digits and hyphens.

## `monitorOutput` (type: `string`):

Snapshot: current rank and price only. Snapshot with changes: also the previous values and what changed. Changes only: only products that moved, changed price or stock, appeared or disappeared.

## `maxRankPages` (type: `integer`):

Monitor mode: how many result pages (100 products each) are read per keyword to find the rank. A product beyond these pages is reported as missing.

## `priceChangeThresholdPct` (type: `number`):

Monitor mode: a price move smaller than this percentage is not reported as a change. Empty = any change counts.

## `targetNmIds` (type: `array`):

Monitor mode: track only these article numbers. A watched product that is not found on the scanned pages is still reported, with isMissing true. Empty = track every product found.

## `resaleConditions` (type: `array`):

Resale mode: keep only listings in these conditions (new, perfect, good). Empty = all conditions.

## Actor input object example

```json
{
  "query": "платье",
  "maxResults": 100,
  "startUrls": [],
  "includeDetails": true,
  "descriptionMaxLength": 0,
  "compact": false,
  "descriptionFormat": "all",
  "excludeEmptyFields": false,
  "mode": "products",
  "scrapeReviews": false,
  "maxReviewsPerProduct": 20,
  "reviewsWithTextOnly": false,
  "reviewsWithPhotoOnly": false,
  "maxQuestionsPerProduct": 0,
  "incrementalMode": false,
  "skipReposts": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "notifyOnlyChanges": false,
  "notificationLimit": 5,
  "productIds": [],
  "sellerIds": [],
  "inStockOnly": false,
  "flagUnderpriced": false,
  "underpriceThresholdPct": 50,
  "maxSellersPerSearch": 25,
  "maxProductsPerSeller": 200,
  "maxProductsPerNiche": 300,
  "nicheTopN": 5,
  "monitorStateName": "wb-monitor-default",
  "monitorOutput": "snapshot_with_changes",
  "maxRankPages": 5,
  "targetNmIds": [],
  "resaleConditions": []
}
```

# Actor output Schema

## `results` (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 = {
    "query": "платье",
    "maxResults": 100,
    "descriptionFormat": "all",
    "excludeEmptyFields": false,
    "mode": "products",
    "maxReviewsPerProduct": 20,
    "maxQuestionsPerProduct": 0
};

// Run the Actor and wait for it to finish
const run = await client.actor("blackfalcondata/wildberries-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 = {
    "query": "платье",
    "maxResults": 100,
    "descriptionFormat": "all",
    "excludeEmptyFields": False,
    "mode": "products",
    "maxReviewsPerProduct": 20,
    "maxQuestionsPerProduct": 0,
}

# Run the Actor and wait for it to finish
run = client.actor("blackfalcondata/wildberries-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 '{
  "query": "платье",
  "maxResults": 100,
  "descriptionFormat": "all",
  "excludeEmptyFields": false,
  "mode": "products",
  "maxReviewsPerProduct": 20,
  "maxQuestionsPerProduct": 0
}' |
apify call blackfalcondata/wildberries-ru-scraper --silent --output-dataset

```

## MCP server setup

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