# Ozon Scraper - Products, Prices & Ratings (`memo23/ozon-scraper`) Actor

Scrape Ozon.ru, Russia's largest marketplace. Get product title, price, original price & discount, rating, review count, images, seller and category. Search by keyword or paste Ozon search/category URLs. The actor bypasses Ozon's bot protection for you. JSON or CSV, pay per result

- **URL**: https://apify.com/memo23/ozon-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** E-commerce, AI, Agents
- **Stats:** 6 total users, 5 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.00 / 1,000 product results

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/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/docs.md):

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

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python/docs.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/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

## Ozon Scraper - Products, Prices & Ratings

<img src="https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/ozon-card.png" alt="Ozon Scraper — products, prices & ratings" width="760">

Scrape product data from **Ozon.ru** — Russia's largest online marketplace. Get product title, current & original price, discount, rating, review count, image gallery, seller and category. Search by keyword or paste any Ozon search/category URL. The actor **solves Ozon's bot protection for you** (Ozon redirect-loops normal scrapers) and returns clean structured rows. Pay per result, no monthly fee.

#### How it works

![How the Ozon Scraper works](https://raw.githubusercontent.com/muhamed-didovic/muhamed-didovic.github.io/main/assets/how-it-works-ozon.png)

#### ✨ Why use this scraper?

- **Beats Ozon's bot wall.** Ozon redirect-loops plain HTTP clients and residential proxies alike; this actor unlocks it server-side and reads Ozon's own `composer-api` product data — you just get results.
- **Keyword or URL.** Type search terms (`iphone`, `наушники`) or paste Ozon search/category URLs — mixed freely, each auto-paginated.
- **Rich product rows.** Current price, original price + discount %, rating, review count, full image gallery, seller and category — one clean row per product.
- **Fair budgeting.** The `maxItems` cap is split evenly across your keywords/URLs so one query can't eat the whole run.
- **Pay per result.** Billed per product with a strict `maxItems` ceiling — a run never collects (or charges) more than you set.

#### 🎯 Use cases

| You are… | Use it to… |
|---|---|
| **Pricing / competitive intelligence** | Track competitor prices, discounts and availability on Ozon |
| **Resellers & sellers** | Monitor rankings, prices and ratings for your own and rival listings |
| **Market research** | Measure assortment, price bands and review volume by category |
| **Brand monitoring** | Watch how your products are priced and rated by third-party sellers |
| **Deal / price monitors** | Track price drops on specific products on a schedule |

#### 📥 Supported inputs

| Input | Example | What you get |
|---|---|---|
| **Search keyword** | `iphone` | Products matching that query, paginated |
| **Search URL** | `https://www.ozon.ru/search/?text=наушники` | That search, paginated |
| **Category URL** | `https://www.ozon.ru/category/smartfony-15502/` | That category, paginated |

#### ⚙️ Input configuration

| Field | Type | Default | Description |
|---|---|---|---|
| `searchTerms` | array | `["iphone"]` | Keywords to search on Ozon |
| `startUrls` | array | `[]` | Ozon search/category URLs, paginated automatically |
| `maxItems` | integer | `100` | Hard cap on products collected (and billed) |
| `maxConcurrency` | integer | `4` | Parallel searches (kept low — every request goes through the unlocker) |

#### 📤 Output

Every product is one row:

```json
{
  "type": "product",
  "site": "ozon",
  "productId": "3820689151",
  "url": "https://www.ozon.ru/product/apple-smartfon-iphone-17-256gb-3820689151/",
  "title": "Apple Смартфон iPhone 17 256GB nanoSIM+eSIM",
  "brand": "Apple",
  "price": 65018,
  "originalPrice": 96902,
  "currency": "RUB",
  "discountPct": 33,
  "rating": 5,
  "reviewCount": 59,
  "inStock": "5 шт осталось",
  "images": ["https://ir.ozone.ru/s3/multimedia-1-e/7972046006.jpg"],
  "category": "/category/smartfony-15502/apple-26303000/",
  "scrapedAt": "2026-07-10T10:00:00.000Z",
  "sourceUrl": "https://www.ozon.ru/product/apple-smartfon-iphone-17-256gb-3820689151/"
}
````

Export as **JSON, CSV, Excel** or via API.

#### 🔑 Key output fields

| Field | Description |
|---|---|
| `productId` | Ozon SKU (stable id) |
| `title` / `brand` | Product name and brand |
| `price` / `originalPrice` / `discountPct` | Current price, crossed-out price, and discount % (RUB) |
| `rating` / `reviewCount` | Star rating and number of reviews |
| `inStock` | Stock indicator (e.g. "5 шт осталось") |
| `images` | Full product image gallery |
| `category` | Ozon category path |
| `url` | Canonical product page URL |

#### ❓ FAQ

- **Do I need proxies or an unlocker key?** No. Ozon unblocking is built in.
- **Why keep concurrency low?** Every request goes through the unlocker; the default (4) balances speed and cost. Raise it for faster (pricier) runs.
- **Prices in which currency?** Rubles (RUB), as shown on Ozon.
- **How current is the data?** Live — fetched at run time from Ozon.
- **Can I schedule it?** Yes — use Apify Schedules and diff the output for price-drop alerts.

#### 💬 Support

Found a bug or need an extra field? Open an issue on the actor's Issues tab and I'll take a look.

#### ⚠️ Disclaimer

This actor collects only publicly available product data from Ozon.ru. It does not access private data, bypass authentication, or collect personal information. You are responsible for using the scraped data in compliance with Ozon's terms of service, applicable laws (including data-protection and intellectual-property law), and your local regulations.

#### SEO Keywords

ozon scraper, ozon.ru scraper, ozon product scraper, ozon price scraper, russian marketplace scraper, ozon api, ozon data extraction, ecommerce scraper russia, ozon product data, ozon price monitoring, ozon reviews scraper, скрапер озон

# Actor input Schema

## `searchTerms` (type: `array`):

Keywords to search on Ozon (e.g. `iphone`, `наушники`, `кофемашина`).

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

Paste Ozon search or category page URLs (e.g. `https://www.ozon.ru/category/smartfony-15502/`). Each is paginated automatically. Scraped in addition to any keywords.

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

Hard cap on products collected (and billed), split fairly across your keywords/URLs.

## `maxConcurrency` (type: `integer`):

Parallel searches. Kept low by default because every Ozon request goes through the unlocker.

## Actor input object example

```json
{
  "searchTerms": [
    "iphone"
  ],
  "startUrls": [],
  "maxItems": 100,
  "maxConcurrency": 4
}
```

# 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 = {
    "searchTerms": [
        "iphone"
    ],
    "startUrls": []
};

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

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

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Ozon Scraper - Products, Prices & Ratings",
        "description": "Scrape Ozon.ru, Russia's largest marketplace. Get product title, price, original price & discount, rating, review count, images, seller and category. Search by keyword or paste Ozon search/category URLs. The actor bypasses Ozon's bot protection for you. JSON or CSV, pay per result",
        "version": "0.0",
        "x-build-id": "uZJZnapnVcKfCftD1"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/memo23~ozon-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-memo23-ozon-scraper",
                "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/memo23~ozon-scraper/runs": {
            "post": {
                "operationId": "runs-sync-memo23-ozon-scraper",
                "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/memo23~ozon-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-memo23-ozon-scraper",
                "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",
                "properties": {
                    "searchTerms": {
                        "title": "Search keywords",
                        "type": "array",
                        "description": "Keywords to search on Ozon (e.g. `iphone`, `наушники`, `кофемашина`).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Ozon search / category URLs",
                        "type": "array",
                        "description": "Paste Ozon search or category page URLs (e.g. `https://www.ozon.ru/category/smartfony-15502/`). Each is paginated automatically. Scraped in addition to any keywords.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Maximum products",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Hard cap on products collected (and billed), split fairly across your keywords/URLs.",
                        "default": 100
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Parallel searches. Kept low by default because every Ozon request goes through the unlocker.",
                        "default": 4
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
