# Ozon Scraper: Products, Prices & Discounts (`themineworks/ozon-product-search`) Actor

Scrape Ozon product listings by keyword: title, current and original price, discount, rating, image and product URL. Russia's largest marketplace. No login, no API key.

- **URL**: https://apify.com/themineworks/ozon-product-search.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 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?

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: Products, Prices & Discounts

🏆 Part of The Mine Works' 149-actor portfolio · 40,000+ runs · 200,000+ results delivered across our full distribution stack · 99.9%+ success rate

[Browse all Actors](https://apify.com/themineworks)

💰 $2.50 / 1,000 results.

⚡ Reads Ozon's own JSON search endpoint instead of parsing HTML, so price and discount come back as clean numbers rather than scraped strings. No login, no API key.

Scrape product listings from Ozon, Russia's largest online marketplace, by keyword. No login, no API key, no browser.

✅ Title and price on 100% of records · ✅ Original price and discount where a product is on sale · ✅ Rating and review count · ✅ Five sort orders · ✅ Empty runs never billed

### Search Ozon by keyword

```json
{
  "queries": ["ноутбук"],
  "sort": "score",
  "maxItems": 200
}
```

Search in Russian for far better coverage. `ноутбук` returns vastly more than `laptop`.

### Track prices on a category

Sort by price and cap the run to watch the cheap end of a category over time.

```json
{
  "queries": ["наушники", "беспроводные наушники"],
  "sort": "price",
  "maxItems": 300,
  "monitorMode": true
}
```

| Sort | Behaviour |
| --- | --- |
| `score` | Ozon's own relevance ranking (default) |
| `price` | Cheapest first |
| `price_desc` | Most expensive first |
| `new` | Newest listings |
| `rating` | Best rated first |

### What you get for each product

```json
{
  "product_id": "3890785230",
  "title": "Ноутбук 15.6\", Intel Pentium Gold 6500Y, RAM 16 ГБ, SSD 512 ГБ, Windows Home",
  "price_rub": 30889,
  "original_price_rub": 69990,
  "discount": "−55%",
  "rating": 4.9,
  "review_count": 51,
  "image": "https://ir-20.ozone.ru/s3/...",
  "product_url": "https://www.ozon.ru/product/noutbuk-15-6-...-3890785230/"
}
```

| Field | Description |
| --- | --- |
| 🏷️ `title` | Full product title as listed |
| 💰 `price_rub`, `price_text` | Current price as a number you can sort, plus the original formatted string |
| 🔻 `original_price_rub`, `discount` | Pre-discount price and the discount badge, on products that are on sale |
| ⭐ `rating`, `review_count` | Star rating and number of reviews |
| 🖼️ `image` | Product image URL |
| 🔗 `product_url` | Clean product link with tracking parameters stripped |

**On coverage:** rating and review count appear on roughly half of results, because a large share of marketplace listings are new or low-volume and genuinely have no reviews yet. Discount fields appear only on products actually discounted. Title, price, image and URL are present on every record.

### How this actor reads Ozon

Ozon's search page renders products into generated class names (`tile-root`, `gp1_21`, `j8h_21`) that change without notice, which makes HTML scraping brittle. This actor instead calls **the same JSON endpoint Ozon's own website uses**, so the fields come back structured rather than scraped out of markup.

It also needs Apify's **Unblocker** proxy. This is not an optimisation: datacenter and residential proxies both fail on Ozon, and the JSON endpoint returns an empty response on datacenter. A run without unblocker access returns nothing rather than partial data.

### Common use cases

**Competitive price monitoring** on the largest Russian marketplace.

**Discount and promotion tracking**, using the original price and discount badge to spot genuine markdowns.

**Catalogue and assortment research** across a category before entering the market.

**Reseller and arbitrage sourcing**, sorted by price with ratings alongside.

### Run it on a schedule

1. Run once with the input you want repeated, then click **Save as a task**.
2. Turn on **Monitor mode** so later runs return only newly listed products.
3. In the Apify Console go to **Schedules** and add the saved task.

Nothing is charged just for a schedule existing.

### Pricing

| Event | Price | You pay when |
| --- | --- | --- |
| Product | $0.0025 | An Ozon product record is delivered to your dataset |
| Actor Start | $0.005 | Once per run start, scaling with memory (one event per GB, minimum one) |

Flat rate, not tiered by Apify plan. A run that returns no products is never
charged the product event.

### FAQ

**Do I need an Ozon account?**
No. Everything comes from public search results.

**Why is rating empty on some products?**
Because those products genuinely have no reviews on Ozon yet. The field is left null rather than filled with a placeholder.

**Are prices in roubles?**
Yes. `price_rub` is a plain number for sorting and arithmetic; `price_text` keeps Ozon's own formatting.

**Is this GDPR compliant?**
It collects public product listings, not personal data.

**Do I need to search in Russian?**
Not required, but strongly recommended. Russian queries return far more of Ozon's catalogue than the English equivalent.

**Does it work without a proxy?**
No. It needs Apify's Unblocker proxy. Datacenter and residential proxies both fail on Ozon, and the JSON endpoint returns an empty response on datacenter.

**Can I get only newly listed products on repeat runs?**
Yes. Turn on Monitor mode and later runs return only products not delivered before.

### Use from Claude, ChatGPT and any MCP agent

Hosted MCP endpoint, no install, OAuth on first connect:

```
https://mcp.apify.com/?tools=themineworks/ozon-product-search
```

Claude Desktop / Cursor config (token auth):

```json
{
  "mcpServers": {
    "ozon-search": {
      "url": "https://mcp.apify.com/?tools=themineworks/ozon-product-search",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}
```

Ask your agent: *"Find the 20 cheapest wireless earbuds on Ozon with a rating above 4.5."*

Or call it directly from code:

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('themineworks/ozon-product-search').call({
    queries: ['ноутбук'],
    sort: 'score',
    maxItems: 200,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Part of the Russia and CIS local business suite

Pair this with [Yandex Maps](https://apify.com/themineworks/yandex-maps-search)
and [2GIS](https://apify.com/themineworks/2gis-places-search) to find local
retailers and distributors in a city, then check how the same category is
priced on Ozon. For marketplace comparisons outside Russia, see
[eBay](https://apify.com/themineworks/ebay-search-scraper) and
[Etsy](https://apify.com/themineworks/etsy-search-scraper).

Keywords: Ozon scraper, Ozon price monitoring, Russia marketplace API, Ozon product search, ecommerce price tracking Russia, reseller sourcing Ozon, discount tracking Ozon marketplace

# Actor input Schema

## `queries` (type: `array`):

Product keywords. Russian returns far more results, e.g. "ноутбук" rather than "laptop".

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

How Ozon should order the results.

## `maxItems` (type: `integer`):

Maximum products to return across all queries. Default 50, maximum 1000.

## `monitorMode` (type: `boolean`):

Run on a schedule and get ONLY products not delivered in a previous run. Keep the input the same across runs.

## Actor input object example

```json
{
  "queries": [
    "ноутбук"
  ],
  "sort": "score",
  "maxItems": 50,
  "monitorMode": false
}
```

# 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 = {
    "queries": [
        "ноутбук"
    ],
    "sort": "score",
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/ozon-product-search").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 = {
    "queries": ["ноутбук"],
    "sort": "score",
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/ozon-product-search").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 '{
  "queries": [
    "ноутбук"
  ],
  "sort": "score",
  "maxItems": 50
}' |
apify call themineworks/ozon-product-search --silent --output-dataset

```

## MCP server setup

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

```

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/fbTQan9i7GPL4c9ee/builds/l7UvE8dRuSTBcxQpK/openapi.json
