# Ozon Scraper — Russia Marketplace Products, Prices & Reviews (`khadinakbar/ozon-scraper`) Actor

Scrape Ozon.ru products by keyword, category URL, or product URL — title, price, rating, reviews, seller, brand, SKU. MCP-ready.

- **URL**: https://apify.com/khadinakbar/ozon-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** E-commerce, Automation, MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 product scrapeds

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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

## Ozon Scraper — Russia's #1 Marketplace Product, Price & Review Data

**Scrape Ozon.ru — Russia's largest e-commerce marketplace — by keyword, category URL, or direct product URL.** Returns clean JSON with product title, price, discount %, rating, review count, seller, brand, SKU, image, breadcrumbs, stock state. Built MCP-ready, residential-proxied, and cost-capped per run.

[Ozon.ru](https://www.ozon.ru) is the Amazon of Russia — 50M+ active buyers, 250M+ SKUs, 1.5B+ orders/year. This actor lets you pull live product data without a Russian SIM card, without manual cookie capture, and without writing a single line of scraping code.

Pricing: **$0.005 per product scraped + $0.00005 start fee**. Both **Pay-Per-Event AND Pay-Per-Usage** are enabled — pick whichever fits your run profile. No setup fee.

### What does Ozon Scraper do?

- **Keyword search**: pass `["iphone 15", "наушники беспроводные"]` — gets the first N matching products with all listing-card fields.
- **Category / seller / brand URLs**: paste a `https://www.ozon.ru/category/...` URL, the actor paginates and pulls every product on that page until the cap.
- **Product URLs**: paste one or more `https://www.ozon.ru/product/...-1234567/` URLs and get full per-product detail (JSON-LD brand, SKU, rating, full image gallery, breadcrumbs, stock).
- **Deep-enrich toggle**: turn `enrichProducts` on to fan out from every listing tile into its product page for the full detail set.
- **Auto-mode**: paste any Ozon URL and the actor classifies it (`product` / `category` / `search` / `seller`) automatically — no separate mode flag.

### Why use Ozon Scraper?

- **Price tracking & dynamic re-pricing** — feed Ozon SKU prices into your repricer or BI dashboard.
- **Competitive intelligence** — track competitor brand assortment, discounts, and stock state across Russia.
- **Market research** — quantify category breadth, average rating, review velocity.
- **Brand monitoring** — find every listing of your brand on Ozon, including grey-market resellers.
- **Affiliate / dropshipping** — discover top-rated SKUs in any niche.
- **MCP / agent integration** — built so Claude, ChatGPT, and other AI agents can call this actor with a single keyword and get back structured product JSON.

### How to use Ozon Scraper

1. Click **Try for free** above this page (Apify account needed — free tier covers your first runs).
2. In the **Input** tab, put your search terms in **Search keywords** OR paste Ozon URLs into **Start URLs**.
3. Set **Max products** (default 100 — at $0.005/product that is $0.50 max per run).
4. Leave **Proxy country** as `RU` (Ozon hard-blocks non-Russian IPs).
5. Hit **Save & Start**. Results stream into the **Storage → Dataset** tab as products are found.
6. Export the dataset as **JSON / CSV / Excel / HTML** from the Storage tab, or fetch it via the Apify API.

### Input

| Field | Type | Notes |
|---|---|---|
| `keywords` | string\[] | Russian or English search terms (e.g. `["iphone 15"]`). |
| `startUrls` | url\[] | Direct Ozon URLs (product / category / seller / search). |
| `maxResults` | integer | Hard cap on products scraped/charged. Default 100. |
| `enrichProducts` | boolean | Open every listing tile's product page for full detail. Default false. |
| `sort` | enum | `relevance` / `price` / `price_desc` / `rating` / `new`. Applies to keyword searches only. |
| `countryCode` | string | Proxy country ISO code. Keep `RU`. |
| `proxyConfiguration` | object | Advanced override. Default Apify Residential RU. |

At least one of `keywords` or `startUrls` is required.

### Output (one record per product)

```json
{
  "sku": "1234567",
  "url": "https://www.ozon.ru/product/iphone-15-pro-128gb-1234567/",
  "title": "Смартфон Apple iPhone 15 Pro 128GB",
  "brand": "Apple",
  "price": 89990,
  "oldPrice": 119990,
  "discountPercent": 25,
  "currency": "RUB",
  "rating": 4.8,
  "reviewsCount": 1432,
  "sellerName": "Apple Official",
  "image": "https://cdn1.ozone.ru/.../wc1000/1234567.jpg",
  "images": ["https://cdn1.ozone.ru/...", "..."],
  "breadcrumbs": ["Электроника", "Смартфоны", "Apple"],
  "inStock": true,
  "mode": "product",
  "keyword": null,
  "scrapedAt": "2026-06-27T07:00:00.000Z"
}
```

You can download the dataset in **JSON, HTML, CSV, or Excel** from the Storage tab, or stream it via the Apify Dataset API.

### Data table

| Field | Description |
|---|---|
| `sku` | Ozon product SKU (digits from the product URL). |
| `url` | Canonical product URL. |
| `title` | Product title. |
| `brand` | Brand name (detail-page enrichment). |
| `price` / `oldPrice` | Current and original price in RUB. |
| `discountPercent` | Discount % derived from price vs oldPrice. |
| `currency` | Always `RUB`. |
| `rating` | Average rating 0–5. |
| `reviewsCount` | Number of reviews. |
| `sellerName` | Seller / merchant (detail mode). |
| `image` / `images` | Primary + full gallery. |
| `breadcrumbs` | Category trail (detail mode). |
| `inStock` | Stock state (detail mode). |
| `mode` | `search` / `category` / `product`. |
| `keyword` | Originating keyword (search mode). |
| `scrapedAt` | ISO-8601 UTC timestamp. |

### How much does it cost to scrape Ozon?

Two monetization models are active — buyers self-select per run:

**Pay-Per-Event (default for predictable cost):**

- `apify-actor-start` — $0.00005 per run (RAM-scaled).
- `product-found` — $0.005 per scraped product.

Examples:

- 50 products → ~$0.25
- 500 products → ~$2.50
- 5,000 products → ~$25

**Pay-Per-Usage (active for heavy / multi-million-product runs):**

- Compute units + residential proxy bandwidth at standard Apify rates.

The actor stops charging the moment `maxResults` is hit — no runaway bills. The expected max cost is printed in the run log + status message at start.

### Tips and advanced options

- **Be precise with `maxResults`.** It is a hard cost cap. Cheaper to run twice than to overshoot.
- **Use category URLs over keywords when you can.** Ozon's category pages give cleaner, denser data than search.
- **`enrichProducts` is expensive.** It opens N additional browser navigations per N tiles. Use it only when you need the JSON-LD-only fields (brand, full gallery, breadcrumbs).
- **Keep proxy as RU residential.** Datacenter IPs and non-RU residentials get walled within seconds.
- **Pagination cap.** The actor walks up to 10 result pages per start URL. Past 800–1000 results for a single very broad search, results get repetitive; tighten the query instead.

### FAQ, disclaimers, and support

- **Legality.** This actor only collects data that Ozon serves publicly to any logged-out visitor — no login, no personal data, no Russian PII. Use the data in accordance with applicable laws and Ozon's [Terms of Use](https://www.ozon.ru/info/terms-of-use/). You are responsible for your use of the data.
- **Anti-bot reality.** Ozon runs a sophisticated WAF + bot challenge. The actor uses Camoufox (stealth Firefox) + RU residential rotation + session retire-on-block. Expect ~95–99% success on healthy days; intermittent blocks happen.
- **No per-product user reviews yet.** Review collection is not in v0.1 — let us know via the Issues tab if you need them.
- **Have an issue?** Open a ticket on the actor's **Issues** tab — every report is read.
- **Need a custom version?** Contact us through the Apify Store contact form on this actor's page.

### Other actors in this portfolio

- [amazon-product-search-scraper](https://apify.com/khadinakbar/amazon-product-search-scraper) — same shape for Amazon.
- [aliexpress-product-search-scraper](https://apify.com/khadinakbar/aliexpress-product-search-scraper) — AliExpress.
- [walmart-data-extractor](https://apify.com/khadinakbar/walmart-data-extractor) — Walmart.
- [jumia-product-scraper](https://apify.com/khadinakbar/jumia-product-scraper) — Jumia (Africa).
- [tokopedia-scraper](https://apify.com/khadinakbar/tokopedia-scraper) — Tokopedia (Indonesia).

# Actor input Schema

## `dataimpulseProxyUrl` (type: `string`):

REQUIRED. Your DataImpulse Russian residential proxy URL: http://<user>\_\_cr.ru:<password>@gw.dataimpulse.com:823 — replace <user> and <password> with your DataImpulse credentials. This actor uses a FOSS unlocker stack (patchright Chromium + humanized warmup + session rotation) that only works with a real Russian residential proxy. DataImpulse residential is ~$1.50/GB; each Ozon page uses ~1MB → ~$0.0015/page in proxy cost. Sign up at dataimpulse.com. Mobile plan will NOT work (wrong geo).

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

Free-text search terms run against Ozon.ru (Russia's largest marketplace). One row per term — Russian or English (e.g. 'iphone 15', 'наушники беспроводные'). Defaults to \['iphone 15']. NOT product URLs — use 'Start URLs' for direct URLs to a product, category, or seller page.

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

Direct Ozon.ru URLs to scrape: product page (ozon.ru/product/...), category page (ozon.ru/category/...), seller page (ozon.ru/seller/...), or search URL (ozon.ru/search/?text=...). Mode auto-detected per URL. Defaults to \[]. Use this OR 'keywords' — at least one must be set.

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

Hard cap on total products scraped across all keywords/URLs (charged at $0.005 each). Defaults to 100, max 10000. Cost-capped: the actor stops charging once it hits this limit.

## `enrichProducts` (type: `boolean`):

If true, every product found on a search/category page is opened individually for full detail (description, full image gallery, breadcrumbs, JSON-LD brand/SKU/rating). Slower + uses more proxy bandwidth. Defaults to false.

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

Sort applied to keyword search results. Defaults to 'relevance'. Ignored for startUrls.

## `maxPagesPerStart` (type: `integer`):

Hard cap on how many result pages the actor walks per start keyword or category URL. Defaults to 5. Each page fetches ~1MB of proxy bandwidth.

## Actor input object example

```json
{
  "keywords": [
    "iphone 15"
  ],
  "startUrls": [],
  "maxResults": 30,
  "enrichProducts": false,
  "sort": "relevance",
  "maxPagesPerStart": 5
}
```

# Actor output Schema

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

No description

## `preview` (type: `string`):

No description

## `priceFeed` (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 = {
    "keywords": [
        "iphone 15"
    ],
    "startUrls": [],
    "maxResults": 30
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/ozon-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": ["iphone 15"],
    "startUrls": [],
    "maxResults": 30,
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/ozon-scraper").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 '{
  "keywords": [
    "iphone 15"
  ],
  "startUrls": [],
  "maxResults": 30
}' |
apify call khadinakbar/ozon-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/jAuFAzNEpHAXLYjof/builds/TjqdpZKF1AvGIykAg/openapi.json
