# Wildberries Scraper - Prices & Sellers | Парсер Вайлдберриз (`dami_studio/wildberries-products-scraper`) Actor

Wildberries scraper (парсер Вайлдберриз): one row per product for a Wildberries.ru keyword search, with price, old price, discount, rating, reviews, seller, sizes and photos, in the site's order or sorted by price, rating or newest, inside a price range. Up to 100 products per keyword.

- **URL**: https://apify.com/dami_studio/wildberries-products-scraper.md
- **Developed by:** [Dami's Studio](https://apify.com/dami_studio) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.70 / 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 (парсер Вайлдберриз) for Wildberries.ru keyword searches, one row per product**: name, brand,
price in roubles, the price before discount, the discount, rating, review count, seller, sizes, colours, photos and
the link. Type the words you would type into the Wildberries search box.

The awkward part first. A search word returns at most its top 100 products, the first page of results. For more, split
the search: several price ranges, or the same word sorted by price both ways.

| | |
|---|---|
| **Input** | Search words in Russian or English, plus an optional sort order and price range |
| **Output** | One row per product: name, brand, price, old price, discount, rating, reviews, seller, sizes, colours, photos and link |
| **Ceiling** | 100 products per search word, 50 search words per run |
| **Speed** | Runs of 5 to 1,000 products finished in 8 to 64 seconds |
| **Account needed** | None |
| **Price** | $1.70 per 1,000 products, the same on every plan. The free plan's $5 a month covers about 2,900 |

| Using an AI agent? | |
|---|---|
| Actor | `dami_studio/wildberries-products-scraper` |
| Set one field | `keywords`, labelled "Search words" in the Console |
| Cap the bill | `maxTotalChargeUsd` on the run, for example `0.10`: it never charges past that |
| MCP, one link | `https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/wildberries-products-scraper` |
| How often | Daily, to follow prices and discounts on a search |

### 🔍 What Wildberries Scraper does

You give it search words. For each one it reads Wildberries' search results the way a visitor sees them, in the
site's own order or sorted by price, rating or newest, and returns the top products as rows. A price range narrows the
search on Wildberries' side first, and any product still outside it is left out and not charged.

Each row keeps the search word and the product's position, so a run doubles as a rank check: where does a product sit
for "наушники" today, and at what price.

### 📋 What data you get from each Wildberries product

| What you want | Fields |
|---|---|
| The product | `productId`, `name`, `url`, `categoryId`, `isNew` |
| Brand and seller | `brand`, `brandId`, `seller`, `sellerId`, `sellerRating` |
| Price | `price`, `priceBeforeDiscount`, `discountPercent`, `currency`, `sizes` (each size with its own price) |
| Ratings | `rating`, `reviewsCount` |
| Stock | `stock` (read the note on it below) |
| Photos | `imageUrl`, `imageUrls` (up to 10), `imageCount`, `colors` |
| Where it was found | `keyword`, `position`, `matchedQuery`, `scrapedAt` |

### ▶️ How to scrape Wildberries products

1. Open Wildberries Scraper on Apify and click **Try for free**.
2. In **Search words**, add one search per line, for example `кроссовки` or `iphone 15 чехол`.
3. Set **Products per search word**, up to 100.
4. Optionally pick **Sort by** and a price range in roubles.
5. Click **Start**, then open the **Output** tab or export to CSV, Excel or JSON.

### 💰 How much does it cost to scrape Wildberries products?

$1.70 per 1,000 products, the same on every plan, so 100 products cost $0.17. The free plan's $5 a month covers about
2,900 products.

Not charged: products outside your price range, and the note rows that say a search found nothing, was not served or
stopped early.

### 📥 What you give it

| Field | What it does | Default |
|---|---|---|
| `keywords` | Search words, one search each, up to 50 a run | required |
| `maxItemsPerKeyword` | Products per search word, 1 to 100 | `100` |
| `sort` | `popular`, `rate`, `priceup`, `pricedown` or `newly` | `popular` |
| `minPrice` | Minimum price in roubles | none |
| `maxPrice` | Maximum price in roubles | none |

```json
{
  "keywords": ["кроссовки", "наушники"],
  "maxItemsPerKeyword": 50,
  "sort": "popular",
  "minPrice": 1000,
  "maxPrice": 5000
}
```

### 📤 What you get back

![Real run output](https://api.apify.com/v2/key-value-stores/BTBHU3DdiuoF4JOsK/records/wildberries-products-scraper-output.png)

A real row, trimmed:

```json
{
  "keyword": "кроссовки",
  "position": 1,
  "productId": 592995559,
  "url": "https://www.wildberries.ru/catalog/592995559/detail.aspx",
  "name": "Кроссовки летние спортивные серые",
  "brand": "JOYCITY",
  "seller": "JOYCITY",
  "sellerId": 1418867,
  "sellerRating": 4.8,
  "price": 1879,
  "priceBeforeDiscount": 2500,
  "discountPercent": 25,
  "currency": "RUB",
  "rating": 4.8,
  "reviewsCount": 2739,
  "stock": 46,
  "sizes": [{ "name": "35", "label": "длина стопы 22,5см", "price": 2104 }],
  "colors": ["серый"],
  "categoryId": 105,
  "imageCount": 18,
  "imageUrl": "https://basket-30.wbcontent.net/vol5929/part592995/592995559/images/big/1.webp",
  "matchedQuery": "кроссовки",
  "scrapedAt": "2026-10-28T15:28:11.652Z"
}
```

| Field | How to read it |
|---|---|
| `price` | The smallest of the size prices, in roubles, as shown without a Wildberries wallet discount |
| `sizes` | Every size with its own price; `name` is the size, `label` the site's longer text |
| `stock` | The count the search shows. It is exact when stock is low and stops at a ceiling above that (46 or 61 on most products in our runs), so read a high number as "plenty" |
| `brand` | Empty on products listed without one |
| `matchedQuery` | The search Wildberries actually ran, when it corrected your spelling |

### 🧾 Reading the output

Product rows have no `ok` field. Note rows carry `_diagnostic: true`, `ok: false` and a `status`, and are never
charged:

| `status` | Meaning |
|---|---|
| `NOT_SERVED` | That search was not served this run. Re-run it later |
| `NO_RESULTS` | Nothing found, or your price range left out every one of the first 100 |
| `TIME_LIMIT` | The run stopped before its time limit with words left, listed in `keywordsNotSearched` |
| `COST_LIMIT` | The run reached the maximum cost you set |
| `BAD_INPUT` | Something in the input could not be used, said in plain words |

To keep only products, filter out rows where `ok` is `false`.

### 💡 What people use it for

- **Sellers watching a niche**: the top 100 for their own search words every morning, to see who sells the same thing
  cheaper and by how much.
- **Price research before listing a product**: sort by price both ways and read where the real prices sit.
- **Brand checks**: which sellers carry a brand, at what discount, with what rating.
- **Rank tracking**: `position` for the same words day after day.

A simple recipe: run it daily on your words with a schedule, export to Google Sheets, then compare `price` and
`position` by `productId` against the day before.

### 🚧 What it does not do

- **100 products per search word at most.** Split a big search by price range or sort order.
- **No product descriptions or full specifications.** Rows carry what the search results show.
- **No review texts.** Only the rating and the number of reviews.
- **Stock is not exact for well-stocked products**, as described above.
- **Prices are for the site's default delivery region**, as a visitor without an account sees them.
- **No seller contact details.** The seller's name, id and rating only.
- It is not an official Wildberries tool. Dami's Studio is independent and is not affiliated with or endorsed by Wildberries, or by any other company named on this page.

### 🧭 Which Russian-market scraper do you need?

| If you want | Use |
|---|---|
| Products for a search word on Wildberries | This one |
| Products for a search word on Ozon | [Ozon Product Scraper](https://apify.com/dami_studio/ozon-products-scraper) |
| Products and prices on Yandex Market | [Yandex Market Scraper](https://apify.com/dami_studio/yandex-market-scraper) |
| Classified ads on Avito | [Avito Scraper](https://apify.com/dami_studio/avito-listings-scraper) |

### ❓ Questions people ask

#### Do I need a Wildberries account?

No. You don't need a Wildberries account or cookies.

#### Why is the price different from what I see in the app?

The app can show a lower price with the Wildberries wallet or a personal discount, and prices depend on the delivery
region. Open the product link in a private browser window to see what a visitor without an account sees.

#### How do I get more than 100 products for one word?

Run the same word with several price ranges, or once with `priceup` and once with `pricedown`, in the same run.

#### Can I call it from code or connect it to an AI assistant?

The [API tab](https://apify.com/dami_studio/wildberries-products-scraper/api/python) has code for Python, JavaScript
and the CLI. MCP clients like Claude and ChatGPT use
`https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/wildberries-products-scraper`. Both bill your Apify
account at the same price.

```python
## pip install apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("dami_studio/wildberries-products-scraper").call(
    run_input={
        "keywords": ["кроссовки"],
        "maxItemsPerKeyword": 20,
    },
    max_total_charge_usd=0.10,  # the most this run may spend
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    if row.get("ok") is False:  # free note rows, not results
        continue
    print(row.get("price"), (row.get("name") or "")[:80])
```

#### Is scraping Wildberries legal?

These are public product listings, read the way a visitor without an account sees them. Some sellers trade under
their own name, which GDPR and similar laws treat as personal data, so keep only what you need. Wildberries' own terms
still apply to what you do with the data. Apify's write-up on
[the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) is a good starting point, and we are not
lawyers.

### 🆘 If something breaks

Open the **Issues** tab on the actor page. Send the search words you used and the run ID; the `status` on a note row
usually names the problem on its own.

# Actor input Schema

## `keywords` (type: `array`):

What you would type into the Wildberries search box, one search per line, in Russian or English: `кроссовки`, `наушники`, `iphone 15 чехол`. Up to 50 a run.

## `maxItemsPerKeyword` (type: `integer`):

How many products to return for each search word, from the top of its results. 100 is the most one search returns. You pay per product.

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

The order Wildberries sorts the results in before the top ones are taken.

## `minPrice` (type: `integer`):

Only products at this price or above, in roubles. Empty means no lower limit.

## `maxPrice` (type: `integer`):

Only products at this price or below, in roubles. Products outside your range are left out and not charged.

## Actor input object example

```json
{
  "keywords": [
    "кроссовки"
  ],
  "maxItemsPerKeyword": 20,
  "sort": "popular"
}
```

# Actor output Schema

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

One row per product per search word. Free note rows (`_diagnostic: true`) say when a search was not served, found nothing, or the run stopped early.

# 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 = {
    "keywords": [
        "кроссовки"
    ],
    "maxItemsPerKeyword": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("dami_studio/wildberries-products-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 = {
    "keywords": ["кроссовки"],
    "maxItemsPerKeyword": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("dami_studio/wildberries-products-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 '{
  "keywords": [
    "кроссовки"
  ],
  "maxItemsPerKeyword": 20
}' |
apify call dami_studio/wildberries-products-scraper --silent --output-dataset

```

## MCP server setup

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