# Marketplace Seller Lead-gen (Wildberries+Ozon+Yandex+Kaspi) (`isolovyev/marketplace-seller-leads`) Actor

B2B lead list of marketplace SELLERS (not products). Search Wildberries, Ozon, Yandex Market and Kaspi.kz by keywords and collect unique sellers with a dossier: store, seller id, legal entity, INN/OGRN, product reach, rating, total reviews, categories. Monitor mode alerts on new competitors.

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

## Pricing

from $5.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## 🛒 Marketplace Seller Lead-gen - Wildberries + Ozon + Yandex Market + Kaspi

<table width="100%">
<tr>
<td style="padding:24px 28px;background:#EEF2FF;border:1px solid #C7D2FE;border-top:4px solid #4F46E5;border-radius:12px">
<span style="font-size:23px;font-weight:800;color:#1E1B4B;line-height:1.3">Marketplace sellers as B2B leads - with INN, OGRN and legal entity, not just store names.</span><br>
<span style="font-size:15px;color:#4B5563;line-height:1.6">Point it at a niche and get a deduplicated list of the sellers who rank for it, each resolved to a contactable legal entity across Wildberries, Ozon, Yandex Market (RU) and Kaspi.kz (KZ). One row per seller, not a product dump.</span>
</td>
</tr>
</table>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #E0E7FF;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#4338CA">🏢 Legal dossier</span><br>
<span style="font-size:12px;color:#57534E">INN / OGRN, legal entity and address, resolved per seller</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #E0E7FF;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#4338CA">🛒 4 marketplaces</span><br>
<span style="font-size:12px;color:#57534E">Wildberries, Ozon, Yandex Market and Kaspi.kz in one run</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #E0E7FF;border-left:none;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#4338CA">🔁 Monitor mode</span><br>
<span style="font-size:12px;color:#57534E">Webhook alert when a new competitor enters your niche</span>
</td>
<td style="padding:14px 12px;width:25%;background:#FFFFFF;border:1px solid #E0E7FF;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:15px;font-weight:800;color:#4338CA">📇 One row per seller</span><br>
<span style="font-size:12px;color:#57534E">Deduplicated and enriched, ready for outreach</span>
</td>
</tr>
</table>

Built for suppliers, agencies and market analysts who need to **find and qualify sellers** - not track
prices. One row per seller.

### 🚀 How to use

<table width="100%">
<tr>
<td style="padding:16px 14px;width:33%;background:#EEF2FF;border:1px solid #C7D2FE;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#4F46E5;letter-spacing:1px">STEP 1</span><br>
<span style="font-size:14px;font-weight:700;color:#1E1B4B">Add your niche keywords</span><br>
<span style="font-size:12px;color:#4B5563">e.g. наушники, детская одежда, then pick the platforms.</span>
</td>
<td style="padding:16px 14px;width:33%;background:#EEF2FF;border:1px solid #C7D2FE;border-left:none;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#4F46E5;letter-spacing:1px">STEP 2</span><br>
<span style="font-size:14px;font-weight:700;color:#1E1B4B">Run once or schedule monitor</span><br>
<span style="font-size:12px;color:#4B5563">A one-off pull, or a daily diff that flags new sellers.</span>
</td>
<td style="padding:16px 14px;width:34%;background:#EEF2FF;border:1px solid #C7D2FE;border-left:none;border-radius:0 10px 10px 0;vertical-align:top">
<span style="font-size:12px;font-weight:800;color:#4F46E5;letter-spacing:1px">STEP 3</span><br>
<span style="font-size:14px;font-weight:700;color:#1E1B4B">Export the leads</span><br>
<span style="font-size:12px;color:#4B5563">Excel, CSV, JSON or POST a webhook to n8n / Telegram / Slack.</span>
</td>
</tr>
</table>

### ✨ Why this over single-marketplace seller scrapers

- **Multi-marketplace** - Wildberries, Ozon and Yandex Market (RU) plus Kaspi.kz (KZ) in one run,
  unified seller schema.
- **Legal dossier** - the actor resolves each seller's registered entity: `ИП …` / `ООО …`, **OGRN /
  OGRNIP**, and, where the platform discloses it, **INN**, KPP, trademark and legal address. That turns
  a store name into a contactable B2B lead.
- **Monitor mode** - schedule it and get alerted (webhook → n8n/Telegram/Slack) when a **new competitor**
  appears in your niche.

### ⚙️ Input

| Field | Description |
|---|---|
| `mode` | `search` (collect sellers now) or `monitor` (diff vs last run, flag new/gone). |
| `searchQueries` | Keywords; each is expanded into the sellers who rank for it. |
| `platforms` | `wildberries`, `ozon`, `yandexmarket` and/or `kaspi`. |
| `maxPagesPerQuery` | How many result pages to scan per query, per platform. |
| `maxSellersPerPlatform` | Cap on unique sellers kept (sorted by reach in results). |
| `fetchDossier` | Fetch legal entity / registration numbers per seller (one extra request each). |
| `cities`, `kaspiOfferDepth` | Kaspi: cities to query and how many products to expand into merchant offers. |
| `alertOnly`, `notifyWebhookUrl` | Monitor mode: emit only new/gone sellers and POST a summary webhook. |
| `proxyConfiguration` | Apify Proxy (residential RU) - required for Ozon/Yandex Market, optional for WB/Kaspi. |

### 📤 Output (one row per seller)

`platform, sellerId, name, legalName, legalFullName, legalAddress, inn, ogrn, kpp, trademark, storeUrl,
productCount, avgRating, totalReviews, categories[], foundByQuery[], scrapedAt` (+ `changeType`,
`firstSeenAt` in monitor mode).

Sellers with neither a store name nor registration data are skipped, not emitted as blank rows.

### 🗺️ Coverage by platform

Which dossier fields each marketplace makes available per seller:

- **Wildberries** - store name, legal entity, INN, OGRN/OGRNIP, KPP, trademark and legal full name.
- **Ozon** - store name, legal entity, legal address and OGRN/OGRNIP. INN is not disclosed by the platform.
- **Yandex Market** - store name, legal entity, INN, OGRN/OGRNIP and legal address. Some cross-border
  stores disclose a legal name and address but no Russian INN/OGRN.
- **Kaspi.kz** - store name, rating and review count. Legal entity details are not disclosed by the platform.

### 📝 Notes

- `productCount` = the seller's cards **matched by your queries in this run** (reach in results), not
  their full catalogue.
- **Proxy** - Required on Apify: set `proxyConfiguration` to Apify Residential proxy with country RU.
  All sources require a Russian IP. The `proxyConfiguration` field also accepts custom proxy URLs if you
  prefer to bring your own residential RU proxy.

### ▶️ Quick start

**Search mode** - sellers ranking for a niche, with legal dossier:

```json
{
  "mode": "search",
  "searchQueries": ["наушники", "детская одежда"],
  "platforms": ["wildberries", "ozon", "yandexmarket", "kaspi"],
  "maxPagesPerQuery": 5,
  "maxSellersPerPlatform": 30,
  "fetchDossier": true,
  "cities": ["750000000"]
}
````

**Monitor mode** - alert when a new competitor shows up in your niche:

```json
{
  "mode": "monitor",
  "searchQueries": ["наушники"],
  "platforms": ["wildberries"],
  "alertOnly": true,
  "notifyWebhookUrl": "https://example.com/hooks/new-seller-alerts"
}
```

Set a schedule under **Schedules** in the Apify Console to run `monitor` mode periodically. State
carries over between runs via the Key-Value Store.

### 💰 Pricing

**$0.005 per lead** ($5.00 per 1,000), pay-per-event: you are charged for each seller row returned,
plus Apify platform usage. Turn `fetchDossier` off for a faster, name-only run with lower platform
usage when you don't need the legal entity yet (the per-lead price is the same either way).

### 🇷🇺 RU / На русском

**B2B lead-gen: находит продавцов Wildberries, Ozon, Яндекс.Маркета и Kaspi.kz по нише и обогащает
досье юрлица (ИНН, ОГРН, наименование, адрес) через официальные данные площадок. На выходе не список
ников, а сделко-пригодный лид с реквизитами.**

- **Поиск продавцов по запросу** - «наушники», «детская одежда», «кофе» и т.п. раскрываются в список
  продавцов, которые ранжируются по этому запросу, с дедупликацией.
- **Досье с реквизитами** - актор резолвит юрлицо продавца (ИП/ООО), ОГРН/ОГРНИП и, где площадка это
  публикует, ИНН, адрес, КПП и товарный знак - превращая название магазина в контактный B2B-лид. ИНН
  надёжно доступен у Wildberries и Яндекс.Маркета; Ozon публикует юрлицо/адрес/ОГРН, но не ИНН ни у
  одного продавца; у Kaspi реквизиты юрлица не публикуются в принципе.
- **Monitor** - вебхук-алерт, когда в нише появляется новый конкурент.
- Целевая аудитория: SaaS для селлеров, фулфилмент-компании, финтех, агентства, дистрибьюторы -
  все, кому нужен не мониторинг цен, а квалифицированный список продавцов для аутрича.

Тариф - **$0.005/лид** ($5 за 1000), оплата за событие: списывается за каждую строку продавца на
выходе, плюс platform usage Apify. `productCount` - это охват продавца в результатах ваших запросов за
этот прогон, а не весь его каталог.

### 🔗 Все наши акторы для данных по России, Казахстану и СНГ

<span style="font-size:14px;color:#4B5563">Одна линейка для маркетплейсов, госзакупок и проверки контрагентов - соседний актор открывается одним кликом по карточке.</span>

<table width="100%">
<tr>
<td style="padding:14px 12px;width:20%;background:#EEF2FF;border:1px solid #C7D2FE;border-top:3px solid #4F46E5;border-radius:10px 0 0 10px;vertical-align:top">
<span style="font-size:13px;font-weight:800;color:#1E1B4B">🛍️ Лиды продавцов маркетплейсов</span><br>
<span style="font-size:11px;color:#57534E">продавцы WB / Ozon / Яндекс.Маркет / Kaspi с ИНН и ОГРН</span><br>
<span style="font-size:10px;font-weight:800;color:#4F46E5;letter-spacing:0.5px">● ВЫ ЗДЕСЬ</span>
</td>
<td style="padding:0;width:20%;background:#FFFFFF;border:1px solid #E0E7FF;border-left:none;border-top:3px solid #4F46E5;vertical-align:top">
<a href="https://apify.com/isolovyev/zakupki-tender-monitor" style="display:block;padding:14px 12px;text-decoration:none">
<span style="font-size:13px;font-weight:800;color:#4338CA">📄 Тендеры 44-ФЗ / 223-ФЗ</span><br>
<span style="font-size:11px;color:#57534E">госзакупки, нацрежим, реестр российского ПО</span>
</a>
</td>
<td style="padding:0;width:20%;background:#FFFFFF;border:1px solid #E0E7FF;border-left:none;border-top:3px solid #4F46E5;vertical-align:top">
<a href="https://apify.com/isolovyev/ru-counterparty-check" style="display:block;padding:14px 12px;text-decoration:none">
<span style="font-size:13px;font-weight:800;color:#4338CA">🔍 Проверка контрагента по ИНН</span><br>
<span style="font-size:11px;color:#57534E">5 источников, скоринг риска</span>
</a>
</td>
<td style="padding:0;width:20%;background:#FFFFFF;border:1px solid #E0E7FF;border-left:none;border-top:3px solid #4F46E5;vertical-align:top">
<a href="https://apify.com/isolovyev/ru-marketplaces-price-monitor" style="display:block;padding:14px 12px;text-decoration:none">
<span style="font-size:13px;font-weight:800;color:#4338CA">📈 Цены на маркетплейсах</span><br>
<span style="font-size:11px;color:#57534E">WB / Ozon / Яндекс.Маркет / Avito, трекинг цены</span>
</a>
</td>
<td style="padding:0;width:20%;background:#FFFFFF;border:1px solid #E0E7FF;border-left:none;border-top:3px solid #4F46E5;border-radius:0 10px 10px 0;vertical-align:top">
<a href="https://apify.com/isolovyev/kaspi-price-monitor" style="display:block;padding:14px 12px;text-decoration:none">
<span style="font-size:13px;font-weight:800;color:#4338CA">🇰🇿 Цены и позиции на Kaspi.kz</span><br>
<span style="font-size:11px;color:#57534E">Казахстан, позиция в выдаче и цена</span>
</a>
</td>
</tr>
</table>

### 💬 Вопросы и поддержка

Нашли ошибку или есть вопрос? Откройте тикет на вкладке **Issues** этого актора.

# Actor input Schema

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

search = collect sellers now. monitor = compare sellers vs the previous run (needs a schedule) and flag new competitors, with optional webhook alerts.

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

Keywords to search, e.g. 'наушники', 'детская одежда', 'кофе'. Each query is expanded into sellers who rank for it.

## `platforms` (type: `array`):

Which marketplaces to scan. wildberries and yandexmarket return INN when the seller discloses it; ozon returns legal name and OGRN; kaspi rating only.

## `maxPagesPerQuery` (type: `integer`):

How many result pages to scan per query (Ozon collects its sellers from page 1 only). Higher = more sellers discovered, more cost.

## `maxSellersPerPlatform` (type: `integer`):

Hard cap on unique sellers kept per platform (sorted by reach in results). Dossier is fetched only for kept sellers.

## `fetchDossier` (type: `boolean`):

Fetch legal entity and registration numbers per seller (one extra request per seller; on Yandex Market it also fills in the store name). Turn off for a faster, name-only run.

## `cities` (type: `array`):

Kaspi city IDs (merchants/offers vary by city). 750000000 Almaty, 710000000 Astana, 591010000 Shymkent. WB ignores this.

## `kaspiOfferDepth` (type: `integer`):

Kaspi only: how many top products per query/city to expand into merchant offers (cost control). More = more merchants found.

## `alertOnly` (type: `boolean`):

Monitor mode only: emit just new/gone sellers instead of the full set.

## `notifyWebhookUrl` (type: `string`):

Monitor mode: POST the run summary (counts, per-platform, degraded, changes) to this URL - wire it to n8n/Zapier/Make for Telegram/Slack alerts on new competitors.

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

Required on Apify: set proxyConfiguration to Apify Residential proxy with country RU. All sources require a Russian IP.

## Actor input object example

```json
{
  "mode": "search",
  "searchQueries": [
    "наушники"
  ],
  "platforms": [
    "wildberries"
  ],
  "maxPagesPerQuery": 2,
  "maxSellersPerPlatform": 30,
  "fetchDossier": true,
  "cities": [
    "750000000"
  ],
  "kaspiOfferDepth": 8,
  "alertOnly": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "RU"
  }
}
```

# 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": [
        "наушники"
    ],
    "platforms": [
        "wildberries"
    ],
    "maxSellersPerPlatform": 30,
    "cities": [
        "750000000"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "RU"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("isolovyev/marketplace-seller-leads").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": ["наушники"],
    "platforms": ["wildberries"],
    "maxSellersPerPlatform": 30,
    "cities": ["750000000"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "RU",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("isolovyev/marketplace-seller-leads").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "наушники"
  ],
  "platforms": [
    "wildberries"
  ],
  "maxSellersPerPlatform": 30,
  "cities": [
    "750000000"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "RU"
  }
}' |
apify call isolovyev/marketplace-seller-leads --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=isolovyev/marketplace-seller-leads",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Marketplace Seller Lead-gen (Wildberries+Ozon+Yandex+Kaspi)",
        "description": "B2B lead list of marketplace SELLERS (not products). Search Wildberries, Ozon, Yandex Market and Kaspi.kz by keywords and collect unique sellers with a dossier: store, seller id, legal entity, INN/OGRN, product reach, rating, total reviews, categories. Monitor mode alerts on new competitors.",
        "version": "0.1",
        "x-build-id": "MUTcbaGe6tDOT88bZ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/isolovyev~marketplace-seller-leads/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-isolovyev-marketplace-seller-leads",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/isolovyev~marketplace-seller-leads/runs": {
            "post": {
                "operationId": "runs-sync-isolovyev-marketplace-seller-leads",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/isolovyev~marketplace-seller-leads/run-sync": {
            "post": {
                "operationId": "run-sync-isolovyev-marketplace-seller-leads",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "searchQueries"
                ],
                "properties": {
                    "mode": {
                        "title": "Mode",
                        "enum": [
                            "search",
                            "monitor"
                        ],
                        "type": "string",
                        "description": "search = collect sellers now. monitor = compare sellers vs the previous run (needs a schedule) and flag new competitors, with optional webhook alerts.",
                        "default": "search"
                    },
                    "searchQueries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "Keywords to search, e.g. 'наушники', 'детская одежда', 'кофе'. Each query is expanded into sellers who rank for it.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "platforms": {
                        "title": "Platforms",
                        "type": "array",
                        "description": "Which marketplaces to scan. wildberries and yandexmarket return INN when the seller discloses it; ozon returns legal name and OGRN; kaspi rating only.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "wildberries",
                                "ozon",
                                "yandexmarket",
                                "kaspi"
                            ],
                            "enumTitles": [
                                "Wildberries (RU)",
                                "Ozon (RU)",
                                "Yandex Market (RU)",
                                "Kaspi.kz (KZ)"
                            ]
                        },
                        "default": [
                            "wildberries"
                        ]
                    },
                    "maxPagesPerQuery": {
                        "title": "Max pages per query",
                        "minimum": 1,
                        "maximum": 15,
                        "type": "integer",
                        "description": "How many result pages to scan per query (Ozon collects its sellers from page 1 only). Higher = more sellers discovered, more cost.",
                        "default": 2
                    },
                    "maxSellersPerPlatform": {
                        "title": "Max sellers per platform",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Hard cap on unique sellers kept per platform (sorted by reach in results). Dossier is fetched only for kept sellers.",
                        "default": 30
                    },
                    "fetchDossier": {
                        "title": "Fetch dossier (legal entity / INN / OGRN)",
                        "type": "boolean",
                        "description": "Fetch legal entity and registration numbers per seller (one extra request per seller; on Yandex Market it also fills in the store name). Turn off for a faster, name-only run.",
                        "default": true
                    },
                    "cities": {
                        "title": "Kaspi cities",
                        "type": "array",
                        "description": "Kaspi city IDs (merchants/offers vary by city). 750000000 Almaty, 710000000 Astana, 591010000 Shymkent. WB ignores this.",
                        "default": [
                            "750000000"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "kaspiOfferDepth": {
                        "title": "Kaspi offer depth",
                        "minimum": 1,
                        "maximum": 40,
                        "type": "integer",
                        "description": "Kaspi only: how many top products per query/city to expand into merchant offers (cost control). More = more merchants found.",
                        "default": 8
                    },
                    "alertOnly": {
                        "title": "Monitor: alert only on changes",
                        "type": "boolean",
                        "description": "Monitor mode only: emit just new/gone sellers instead of the full set.",
                        "default": false
                    },
                    "notifyWebhookUrl": {
                        "title": "Monitor: notify webhook URL",
                        "type": "string",
                        "description": "Monitor mode: POST the run summary (counts, per-platform, degraded, changes) to this URL - wire it to n8n/Zapier/Make for Telegram/Slack alerts on new competitors."
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Required on Apify: set proxyConfiguration to Apify Residential proxy with country RU. All sources require a Russian IP.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "RU"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
