# Ozon Reviews Scraper (`theshark/ozon-reviews-scraper`) Actor

Reviews and questions of Ozon products (up to ~3,000 per product) — a row per review with text, pros, cons, rating, date, photos and the seller's reply; only new ones since your last run.

- **URL**: https://apify.com/theshark/ozon-reviews-scraper.md
- **Developed by:** [TheShark](https://apify.com/theshark) (community)
- **Categories:** E-commerce, Automation
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 reviews

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Ozon Reviews Scraper — reviews and questions of Ozon products

Collect **reviews and questions** of Ozon products as clean rows — one row per review: rating, text, pros, cons,
date, photos and videos, «useful» votes, aspect scores («Size: fits»), the **seller's reply** and the whole reply
thread. Give product links, search words or any Ozon list (category, seller, brand). No Ozon account needed.

### Why this Actor

- **Up to ~3,000 reviews per product.** Ozon lists at most 990 reviews per sort order; the Actor reads all three
  orders and merges them without duplicates (a product with 12,842 reviews gave 2,412 different ones).
- **Only new reviews.** Turn on **Only new reviews and questions**, schedule the Actor — and pay only for reviews
  your previous runs haven't returned.
- **Replies included.** The seller's reply and the whole thread under a review — shop and buyers.
- **Fast.** Review pages are fetched in parallel on several Ozon sessions.
- **Proxies included** — nothing to set up.

### What you can use it for

- **Product research** — what buyers like and complain about before you buy, stock or launch something similar.
- **Sentiment and AI summaries** — text, pros and cons in separate fields, ready for an LLM or a BI tool.
- **Competitor watch** — new reviews of competitors' products every day, with ratings and replies.
- **Questions and answers** — what people ask before buying, and what the seller answers.

### How to use

1. Paste **product links** — or search words, a category, seller or brand link (reviews of their first products).
2. Set **Reviews per product** (0 — as many as Ozon shows) and, if you need them, questions, replies, customer media.
3. Run it — a row per review appears in the dataset; an Excel workbook is in the key-value store.
4. For monitoring, turn on **Only new reviews and questions** and schedule the Actor.

### Input example

```json
{
  "urls": ["https://www.ozon.ru/product/211356510/"],
  "reviews_count": 200,
  "new_only": true
}
```

### Output example

A review from a real run (trimmed):

```json
{
  "type": "review",
  "product_sku": 211356510,
  "product_name": "Носки Cinema женские Синема, 1 пара",
  "id": "01a15f33-dd26-745d-a795-d31ccb7a93c8",
  "date": "2026-10-21 19:03",
  "rating": 5,
  "text": "Мне понравились и % хлопка хороший. У меня 38й,но и на 40й  будут нормально, как заявлено.",
  "pros": null,
  "cons": null,
  "details": {"Соответствие размеру": "Соответствует"},
  "photos": ["https://ir.ozone.ru/s3/rp-photo-14/5934d065-7f3c-46cd-b4da-19dd6353faf5.jpeg"],
  "useful": 0,
  "answers_count": 1,
  "seller_reply": null
}
```

### What you get

- **A row per review** (`type = review`): `product_sku`, `product_name`, `product_url`, `id`, `rating`, `text`,
  `pros`, `cons`, `date` (Moscow time), `author`, `photos`, `videos`, `useful`, `details` (aspect scores),
  `answers_count`, `seller_reply`, `comments` (with **Review replies**), `edited`, `language`, `url`.
- **A row per question** (`type = question`, with **Questions per product**): text, author, date, answers.
- **A free summary row per product** (`type = product_reviews`): rating, reviews in total and collected, stars
  (5★…1★), aspect ratings computed from the collected reviews, questions, customer photo/video gallery.

### Pricing

| Event | Price | What it is |
|---|---|---|
| `review` | $1.99 / 1,000 | a review or a question row |
| Actor start | $0.0072 | once per run; Apify counts one start per GB of memory — $0.0144 at the default 2 GB |

For example, 1,000 reviews cost $1.99 + $0.0144 for the start. Summary rows and deleted products are free. You are
never charged above the max total charge of the run. The **Pricing** tab always has the up-to-date prices.

### Good to know

- **Reviews per product** = 0 — as many as Ozon shows: up to ~3,000 per product.
- **Review order**: new and useful (Ozon's default), highest or lowest rating first. Ozon has no «newest first» for
  product reviews, so **Only new** looks through **Reviews per product** reviews and returns the unseen ones.
- Reviews are the same on ozon.ru, ozon.by and ozon.kz — a review is one row per run.
- More **Sessions** — faster, when a product has thousands of reviews.
- The Actor keeps its state in a named key-value store (**History store**) — that's how it knows what is «new». One
  store serves one run at a time.

***

### По-русски

Отзывы и вопросы товаров Озона строкой на отзыв: оценка, текст, достоинства и недостатки, дата, автор, фото и видео,
оценки по пунктам, ответ продавца и вся ветка. По ссылкам на товары, по словам поиска или по любому списку Озона.
До ~3000 отзывов на товар (Озон показывает 990 на порядок, порядков три — актор их объединяет), страницы — сразу на
нескольких сессиях. «Только новые» — строки лишь для отзывов, которых прошлые запуски не отдавали: поставьте актор в
расписание и платите только за новое. Цена — $1,99 за 1000 отзывов (событие `review`), сводка по товару — бесплатно.

# Actor input Schema

## `urls` (type: `array`):

Products whose reviews to collect. Search, category, seller and brand links work too — reviews of their first products (Products per query or link).

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

Words to search on Ozon: reviews of the products found.

## `filters` (type: `object`):

Filters for search queries, as on the Ozon search page: sorting (score, new, price, price_desc, rating, discount), price_min, price_max, delivery (today, tomorrow, 3_days, 7_days), weight_min, weight_max, category ("supermarket-25000" — Ozon fresh), brands, sellers (ids), high_rating, discounted, new, bestsellers, brand_certified, official_store, premium_sellers, made_in_russia, installment, sale, and any other Ozon filter by its key in "other".

## `categories` (type: `array`):

Category links: the actor walks the subcategory tree and takes the first products of every lowest category — a price slice of a whole market.

## `category_depth` (type: `integer`):

How many subcategory levels to walk down.

## `category_products` (type: `integer`):

How many first products (as Ozon sorts them) to take from every lowest category.

## `max_results` (type: `integer`):

0 — all. Also limited by your max total charge for the run.

## `reviews_count` (type: `integer`):

0 — as many as Ozon shows: up to ~3,000 per product (990 per sort order, all three merged). A charge per review row.

## `new_only` (type: `boolean`):

Modes reviews and hotel_reviews: rows only for reviews (and questions) not returned by your previous runs (they are remembered in the history store). Products: «Reviews per product» is how many to look through; hotels: newest first, up to the first review already returned.

## `reviews_sort` (type: `string`):

Which reviews come first.

## `reviews_replies` (type: `boolean`):

The whole reply thread under each review: the shop and buyers. +1 request per review with replies.

## `questions_count` (type: `integer`):

0 — none. Questions with all answers, 10 per request.

## `media_count` (type: `integer`):

0 — none. The whole review gallery, 100 per request.

## `output_language` (type: `string`):

Language of the Excel workbook, CSV, change details, run status and log. Ozon's own data (product names, characteristics, reviews) comes in the site language (the Language field).

## `sessions` (type: `integer`):

Anonymous Ozon buyers working at the same time on each storefront, each with its own proxy session: 2 — about twice as fast as 1. Sessions are kept in the history store, so a browser opens for a new one only once.

## `browsers` (type: `integer`):

A browser (~320 MB) opens only to get a new Ozon session (they are kept in the history store, so mostly on the first run). Several at once — the first run starts faster. Capped by run memory: 1 GB — 1, 2 GB — 3, 4 GB — 7.

## `history_store` (type: `string`):

Name of the key-value store in your account that keeps price history between runs. Different names — separate histories. Runs with the same store don't overlap: a second one waits up to 10 minutes for the first to finish.

## `proxy_ru` (type: `string`):

user:pass@host:port, residential, Russia — one per line: every Ozon session gets its own (one line — all sessions share it). Empty — the actor's built-in proxies of this country (included in the price).

## Actor input object example

```json
{
  "urls": [
    "https://www.ozon.ru/product/211356510/"
  ],
  "queries": [],
  "filters": {
    "sorting": "score"
  },
  "categories": [],
  "category_depth": 1,
  "category_products": 10,
  "max_results": 5,
  "reviews_count": 50,
  "new_only": false,
  "reviews_sort": "usefulness_desc",
  "reviews_replies": false,
  "questions_count": 0,
  "media_count": 0,
  "output_language": "en",
  "sessions": 8,
  "browsers": 3,
  "history_store": "ozon-reviews-history"
}
```

# Actor output Schema

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

Dataset rows.

## `summary` (type: `string`):

OUTPUT record: how many rows were delivered and every change since the previous run.

## `excel` (type: `string`):

results.xlsx with sheets and charts.

# 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 = {
    "urls": [
        "https://www.ozon.ru/product/211356510/"
    ],
    "filters": {
        "sorting": "score"
    },
    "reviews_count": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("theshark/ozon-reviews-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 = {
    "urls": ["https://www.ozon.ru/product/211356510/"],
    "filters": { "sorting": "score" },
    "reviews_count": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("theshark/ozon-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.ozon.ru/product/211356510/"
  ],
  "filters": {
    "sorting": "score"
  },
  "reviews_count": 50
}' |
apify call theshark/ozon-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/onvpIGXYJc0kf4D3s/builds/kYI9KcT5ajbxdK7CG/openapi.json
