Get Ozon.ru products as JSON or CSV: prices, discounts, ratings, reviews, specs, variants, the current seller and every competing seller (buybox), by keyword or by product, category, search or seller URL.
Ozon is Russia's largest online marketplace. Thousands of sellers often compete on the same product card, so price and seller data changes daily. Ozon's Seller API only covers your own shop; for competitors, categories and reviews you need the public site.
This repo shows how to pull that data with the Ozon.ru Scraper on Apify, a hosted scraper you can run from the web UI or call from code.
| Group | Fields |
|---|---|
| Product | SKU, URL, title, brand, price, original price, discount %, price strings (5 190 ₽), currency, rating, rating breakdown (1–5 stars), review and question counts, stock text, category path, hashtags |
| Details (default on) | description, specs, image gallery, variants (color, size, ... with their own SKU, price and stock) |
| Seller | current seller with rating, order count and premium flag |
| Buybox (default on) | every competing seller on the same product with delivery date and authorized-brand flag; other sellers' count and lowest price |
Reviews (fetchReviews) |
author, score, text, pros/cons, photos, videos, helpful votes, publish time |
No code: open the scraper page,
type a search term (Russian works best, e.g. наушники for "headphones"), click Start, and download JSON, CSV or Excel.
From code: get a free Apify API token, then:
git clone https://github.com/abotapi/ozon-scraper && cd ozon-scraper
export APIFY_TOKEN=<your token>Use a residential proxy. Every example sets
"proxy": {"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}. Leave the country empty.
pip install "apify-client>=3"
python examples/python/main.py "наушники"Saved 10 products to ozon.csv
- Наушники беспроводные SampleAudio Air Pro с шумоподавлением, бел | 4 990 ₽ | rating 4.8 | seller Пример Электроникс
- Наушники накладные DemoSound 300, черные | 2 390 ₽ | rating 4.7 | seller Демо Дом
examples/node/index.mjs walks a search results URL and lists who else sells each product, with delivery dates.
cd examples/node && npm install && node index.mjs5 products
Робот-пылесос ExampleClean R5, влажная уборка, Wi-Fi | 12 490 ₽ | sold by Пример Электроникс | 3 other sellers
- Магазин Образец: Доставим 18 октября
- Демо Дом: Доставим 21 октября
(Printed values above are mock.)
examples/curl.sh sorts by discount and turns scrapeProductDetails off, which returns only search-result fields and is much faster and cheaper:
./examples/curl.sh > discounts.json| Option | What it does |
|---|---|
mode |
search (keywords) or url (product, category, search or seller URLs) |
queries |
Search terms in Russian or English |
urls |
Full https://www.ozon.ru/ product, /category/, /search/ or /seller/ URLs (short ozon.ru/t/ links are not supported) |
sortBy |
score (relevance), price, price_desc, new, rating, discount |
minPrice / maxPrice / minRating |
Filters (prices in RUB) |
scrapeProductDetails |
On by default: description, specs, gallery, variants, seller, category. Off: search-result fields only |
fetchBuybox / fetchSellerDetails |
Competing sellers / seller profile data (both on by default) |
fetchReviews / maxReviewsPerProduct |
Attach customer reviews to each product |
maxListings / maxPages / maxItems |
Limit results |
incrementalMode |
For scheduled runs: only output new or changed products, e.g. price changes |
See the scraper page for the full list.
Mock data with the same fields and types as real output (the products, sellers and reviews are made up):
sample-output/sample.json · sample-output/sample.csv
{
"sku": "9000000001",
"title": "Наушники беспроводные SampleAudio Air Pro с шумоподавлением, белые",
"brand": "SampleAudio",
"price": 4990,
"originalPrice": 8990,
"discountPercent": 44,
"priceString": "4 990 ₽",
"currency": "RUB",
"rating": 4.8,
"reviewCount": 3120,
"ratingBreakdown": { "1": 40, "2": 25, "3": 90, "4": 410, "5": 2555 },
"availability": "12 ед осталось",
"categoryPath": "Электроника > Наушники и аудиотехника > Наушники",
"sellerName": "Пример Электроникс",
"otherSellersCount": 3,
"otherSellersMinPrice": 4790,
"buyboxSellers": [
{ "name": "Магазин Образец", "deliveryText": "Доставим 18 октября", "authorizedSeller": "Проверенный продавец бренда", "productSku": "9000000011" }
],
"url": "https://www.ozon.ru/product/naushniki-besprovodnye-sampleaudio-air-pro-9000000001"
}- Price monitoring: daily prices and discounts for your products or competitors', with
incrementalMode - Buybox and reseller control: which sellers offer a brand's products, at what delivery speed, and whether they are authorized
- Assortment research: brands, price bands and specs that win a category
- Review analysis: ratings and review text across a category for product development
- AI and data teams: structured Russian e-commerce data for product matching and RAG
How much does it cost? You pay per result on Apify, and new accounts get free monthly credit. See the scraper page for current pricing. Residential proxy traffic is billed by Apify separately.
Russian or English queries? Both work. Russian queries (наушники, кроссовки) match how Ozon shoppers search. For a search URL, URL-encode the Cyrillic text, as in the Node example.
Why are there duplicate field names? specs/specifications, seller/sellerInfo and reviewCount/reviewsCount hold the same data, so code written for other Ozon scrapers keeps working.
Is scraping Ozon allowed? The scraper only collects publicly visible product, seller and review data. Check Ozon's terms and applicable law for your use case.
- Awesome Web Scrapers: a curated list of ready-to-run scrapers, including other Russian sites (Avito, Wildberries, Cian)
- web-scrapers: code examples and mock samples for every scraper in that list
The scraper is maintained by abotapi. Examples in this repo are MIT licensed. Not affiliated with Ozon.