# Wildberries (Вайлдберриз) Scraper - Prices, Sellers & Reviews (`lanternlab318/wildberries`) Actor

- **URL**: https://apify.com/lanternlab318/wildberries.md
- **Developed by:** [Lantern Lab](https://apify.com/lanternlab318) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.99 / 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

## Wildberries (Вайлдберриз) Scraper — Prices, Sellers & Reviews

A Lantern Lab Actor. Give it Wildberries search terms or product links and get back each product's **price and sale price in roubles, rating, review count, brand and seller**, and — if you switch reviews on — its **written customer reviews with star rating, text, pros, cons and post date**. No Wildberries login, no cookies of your own, no account.

**Price:** you pay per product row and per review row. Search terms that find nothing, dead links, status rows and the run summary are free, and there is no run-start fee.

### What you get

- **Products** from a keyword search (in result order, 100 per page, as many pages as you ask for) or from product links / article numbers.
- **Price** (list price) and **salePrice** (the price shown now) in RUB, `null` — never 0 — when the product is out of stock.
- **rating**, **feedbacks** (review count), **brand**, **seller** with seller ID and seller page link, stock, and the product URL.
- **Reviews** (optional): rating, text, pros, cons, `publishedAt`, the variant reviewed, helpful votes and the seller's public reply. Newest first, up to your limit per product.
- **Clear status for every input.** A search term with no result, an article number Wildberries does not have, and an input cut short by a limit are three different, labelled records — never confused.
- **No duplicates.** A product found by several terms (or by a term and a link) is written and charged once; so is a review.
- **A hard request ceiling.** `maxUpstreamRequests` caps the run; leave it empty and the Actor derives one from your input.

### Input example

```json
{
  "searchQueries": ["азофоска", "удобрение для томатов"],
  "productUrls": ["https://www.wildberries.ru/catalog/169684889/detail.aspx"],
  "maxProducts": 100,
  "includeReviews": true,
  "maxReviewsPerProduct": 10
}
```

| Field | Default | Meaning |
| --- | --- | --- |
| `searchQueries` | — | One search term per line. Russian works best. |
| `productUrls` | — | Product links or bare article numbers. Use this, `searchQueries`, or both. |
| `maxProducts` | `100` | Results to take per search term, from the top. |
| `includeReviews` | `false` | Also return written reviews, one row each. |
| `maxReviewsPerProduct` | `20` | Newest written reviews per product. |
| `maxUpstreamRequests` | derived | Hard ceiling on requests to Wildberries for the whole run. |
| `proxyConfiguration` | Apify Proxy | Datacenter is the default and what the Actor is measured on. |

### Output example

A product row (`recordType: "product"`):

```json
{
  "recordType": "product",
  "nmId": 513697311,
  "imtId": 518619145,
  "name": "Удобрение Азофоска 2.5кг",
  "brand": "Fertika",
  "seller": "AgroMakHaus",
  "sellerId": 1201586,
  "sellerUrl": "https://www.wildberries.ru/seller/1201586",
  "price": 835,
  "salePrice": 379,
  "currency": "RUB",
  "priceStatus": "ok",
  "rating": 5,
  "feedbacks": 2009,
  "inStock": true,
  "url": "https://www.wildberries.ru/catalog/513697311/detail.aspx",
  "source": "search",
  "query": "азофоска",
  "rank": 1,
  "partial": false,
  "partialReason": null,
  "collectedAt": "2026-10-23T16:25:27.375Z"
}
```

A review row (`recordType: "review"`):

```json
{
  "recordType": "review",
  "reviewId": "ELZfR8L0cBwLM232EXoH",
  "productNmId": 513697311,
  "nmId": 516938844,
  "rating": 5,
  "text": "Дошло отлично, пока не знаю, как будет работать…",
  "pros": null,
  "cons": null,
  "publishedAt": "2026-10-19T12:24:47.086Z",
  "reviewerCountry": "ru",
  "sellerReply": null,
  "collectedAt": "2026-10-23T16:26:42.486Z"
}
```

### Limits

- **Prices are regional.** Wildberries prices depend on the delivery region it picks for the visitor; the Actor reports what the site shows its proxy exit. Expect small differences from what you see in your own region.
- **Written reviews only.** Reviews that are only a star rating carry no text and are not returned; they still count in `rating` and `feedbacks`. Colour/size variants of one product share one review list, returned once.
- **Reviewer names are not collected** — only the country Wildberries shows.
- **Speed.** Wildberries checks every visitor's browser before it shows a page, so the Actor uses a real browser for search and product pages: expect about 20–30 seconds for each search term or product link opened, plus a few seconds per further page of 100 results. When a browser session is refused, the page is tried once more in a fresh one. Reviews are fetched directly, 8 at a time, and are fast.
- No seller catalogue crawling, no category browsing, no product descriptions or specifications, no images.
- No scheduling or monitoring built in; use Apify schedules.

### Other rows in the dataset

Every input gets a free status row so you can tell an empty result from a failed one:

- `query_status` — per search term: `productsReturned`, `duplicatesSkipped`, `totalAvailable` (Wildberries' own count), `matchedQuery` (what Wildberries actually searched for when it rewrote your term), `partial` and `partialReason`.
- `product_status` — per product link: `status` is `ok`, `not_found`, `invalid_input` or `duplicate`, or the row is `partial` with a reason.
- `reviews_status` — only for a product whose reviews could not be read in full.
- `RUN_SUMMARY` — the last row (also in the key-value store): totals, requests used against the ceiling, and why the run stopped if it stopped early.

`partialReason` is one of `upstream_request_cap` (your or the derived request ceiling), `charge_limit_reached` (the maximum charge you set), `blocked` (Wildberries refused twice, in two fresh browser sessions), `upstream_error`, or `not_collected` (the run stopped before reaching this input). A partial input never means "nothing there".

### Data and privacy

Only what Wildberries shows any visitor on its public pages. No login, no account, no cookies supplied by you or anyone else. Reviewer names and account identifiers are dropped before anything is written.

# Actor input Schema

## `searchQueries` (type: `array`):

One Wildberries search term per line, in any language the site understands - Russian works best, for example "удобрение для томатов" or "кроссовки nike". Every term is searched separately and its products are labelled with it and with their position in the results. A product that several terms find is returned once and charged once.

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

Wildberries product links such as https://www.wildberries.ru/catalog/169684889/detail.aspx, or just the article number (169684889). Each one gets a status row saying whether it was collected, does not exist, or is not a product link at all. Use this, search terms, or both.

## `maxProducts` (type: `integer`):

How many results of each search term to take, from the top. Wildberries loads 100 per page, so 100, 200, 300 and so on use the pages fully.

## `includeReviews` (type: `boolean`):

Also return each product's written customer reviews - star rating, text, pros, cons, post date - one row per review, newest first. Reviews are charged per review row. A review that is only a star rating with no text is not returned; it is still counted in the product's rating and review count.

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

Newest written reviews to return per product when reviews are on. Colour and size variants of one product share one review list, so a list is returned once, for the first variant the run collects.

## `maxUpstreamRequests` (type: `integer`):

Hard ceiling on the requests this run sends to Wildberries: page loads, result pages, review lists and retries together. At the ceiling collection stops - the inputs not reached are written with partialReason "upstream_request_cap" and the run then ends normally. Leave empty and the Actor works a ceiling out from your input, so a run is never unbounded.

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

The proxy the requests to Wildberries go through. The default (Apify Proxy, datacenter) is what this Actor is measured on; prices are the ones Wildberries shows that exit's region.

## Actor input object example

```json
{
  "searchQueries": [
    "азофоска"
  ],
  "maxProducts": 100,
  "includeReviews": false,
  "maxReviewsPerProduct": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `runSummary` (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 = {
    "searchQueries": [
        "азофоска"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("lanternlab318/wildberries").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 = { "searchQueries": ["азофоска"] }

# Run the Actor and wait for it to finish
run = client.actor("lanternlab318/wildberries").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 '{
  "searchQueries": [
    "азофоска"
  ]
}' |
apify call lanternlab318/wildberries --silent --output-dataset

```

## MCP server setup

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

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/7v1Tps859uGINyirU/builds/Pf7MJvaAWpalMUaAq/openapi.json
