Ozon.ru Scraper – Products, URLs, Keywords, Sellers & Reviews avatar

Ozon.ru Scraper – Products, URLs, Keywords, Sellers & Reviews

Pricing

from $1.30 / 1,000 results

Go to Apify Store
Ozon.ru Scraper – Products, URLs, Keywords, Sellers & Reviews

Ozon.ru Scraper – Products, URLs, Keywords, Sellers & Reviews

Extract structured product data from Ozon.ru, Russia’s largest marketplace. Search by keyword or use product, category, and seller URLs. Get clean JSON with 40+ fields, including prices, discounts, ratings, specs, variants, images, current seller, buybox sellers, and reviews.

Pricing

from $1.30 / 1,000 results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

71

Total users

15

Monthly active users

4 days ago

Last modified

Share

Ozon.ru Product, Review, Seller & Buybox Scraper

Pull structured data from Ozon.ru, Russia's largest online marketplace. Search by keyword or paste product, category and seller links, and get back clean JSON with 40+ fields per product: pricing, discount, rating, full specifications, variants, image gallery, the current seller, the full list of competing sellers (the buybox), and customer reviews. Fast, with a deep field set per product and a low cost per result.

Why this scraper

  • 40+ fields per product, including data most Ozon scrapers skip.
  • Buybox tracking: for every product you get the current seller AND every competing seller offering the same item, each with their own price, delivery date, legal entity and authorized-brand flag. Run it on a schedule to watch who wins the buybox over time.
  • Seller transparency: seller name, id, rating, order count and registered legal entity with its state registry number.
  • Full specifications: the complete characteristic list (40+ rows on a typical product), plus the description, hashtags, and the per-star rating breakdown.
  • Variants: every size / colour / memory option with its own SKU and price.
  • Customer reviews: turn on 'Attach reviews' to add reviews (text, pros, cons, star score, photos, videos, helpfulness votes) to each product record, paged up to your chosen limit.
  • Two input modes: keyword search, and direct URL walking (product, category, search, seller, and short links). Price/rating filters apply in search mode AND when walking a category, search or seller URL, but not to a single pasted product URL, which always returns just that one product. To export reviews for specific products, paste their URLs in URL mode and turn on 'Attach reviews'.
  • Lean or rich: switch detail enrichment off for a fast, cheap run with the core listing fields, or leave it on for the full record.
  • Daily/recurring change monitoring: turn on Incremental mode to get only NEW, UPDATED, and REAPPEARED products on every scheduled run, or resume one specific interrupted crawl with resumeFromRunId.

Data you get

Sample shape: values are illustrative placeholders, not from a live listing.

FieldExample
sku"100000001"
url"https://www.ozon.ru/product/100000001/"
title"Sample Smartphone 6/128 GB, Nano-SIM"
brand"Sample Brand"
price59990
originalPrice89990
discountPercent33
currency"RUB"
rating4.8
reviewCount1200
questionCount35
availability"3 left in stock"
coverImage"https://ir.ozone.ru/s3/multimedia-1-x/0000000000.jpg"
images["https://ir.ozone.ru/.../0000000001.jpg", "..."]
specs[{"name": "Screen size", "value": "6.1"}, {"name": "Battery", "value": "3349"}] (full list, 40+ rows)
description"Package contents: phone, cable, documentation"
hashtags["#Sample", "#SampleBrand"]
ratingBreakdown{"5": 900, "4": 200, "3": 60, "2": 20, "1": 20}
variants[{"sku": "100000002", "value": "Blue", "price": 57990}]
categoryPath"Electronics > Phones > Smartphones"
sellerName"Sample Seller"
sellerId"1000000"
seller{"sellerId": "1000000", "name": "Sample Seller", "rating": 4.9, "ordersCount": "1.6 K", "legalName": "Sample legal entity", "registryNumber": "000000000000000", "isPremium": true}
otherSellersCount13
otherSellersMinPrice54990
buyboxSellers[{"sellerId": "1000001", "name": "Sample Seller 2", "price": 54990, "legalName": "Sample legal entity 2", "registryNumber": "000000000000000", "deliveryText": "Delivery in 2 days", "authorizedSeller": "Verified brand seller"}]
reviews[{"authorName": "Sample A.", "score": 5, "comment": "Sample review text", "usefulUp": 4}]
scrapedAt"2026-01-01T00:00:00.000Z"
changeTypeNEW (incremental mode only — see "Resume and recurring updates" below)
changedFields["price"] (incremental mode, UPDATED rows only)
firstSeenAt2026-01-01T00:00:00.000Z (incremental mode only)
lastSeenAt2026-01-02T00:00:00.000Z (incremental mode only)

Each attached review carries: reviewId, authorName, score, comment, positive, negative, photos, videos, usefulUp, usefulDown, commentsCount, status, publishedAt.

How to use

Search with filters:

{
"mode": "search",
"queries": ["iphone 15", "samsung galaxy"],
"sortBy": "price",
"minPrice": 40000,
"maxPrice": 120000,
"scrapeProductDetails": true,
"fetchBuybox": true,
"fetchSellerDetails": true,
"maxPages": 3,
"maxListings": 100,
"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "RU" }
}

Fast, cheap run with core listing fields only:

{
"mode": "search",
"queries": ["наушники"],
"scrapeProductDetails": false,
"maxPages": 5,
"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "RU" }
}

Walk URLs (product, category, search or seller; short ozon.ru/t/ links are resolved):

{
"mode": "url",
"urls": [
"https://www.ozon.ru/product/100000001/",
"https://www.ozon.ru/category/smartfony-15502/",
"https://www.ozon.ru/seller/1000000/"
],
"maxPages": 2,
"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "RU" }
}

Export reviews for specific products (URL mode + attach reviews):

{
"mode": "url",
"urls": ["https://www.ozon.ru/product/100000001/", "https://www.ozon.ru/product/100000002/"],
"fetchReviews": true,
"maxReviewsPerProduct": 200,
"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"], "apifyProxyCountry": "RU" }
}

Input parameters

ParameterTypeDefaultDescription
modestring"search""search" or "url".
queriesarray["iphone 15"]Search terms (search mode).
sortBystring"score"score, price, price_desc, new, rating, discount. Search mode only.
urlsarrayProduct, category, search or seller URLs (url mode).
minPriceintegerLower price bound in rubles. Applies in search mode and to category/search/seller URLs; not to a single pasted product URL.
maxPriceintegerUpper price bound in rubles. Same scope as minPrice.
minRatingintegerKeep products at or above this rating (1 to 5). Same scope as minPrice.
maxReviewsPerProductinteger30Reviews to page through per product.
scrapeProductDetailsbooleantrueAdds full specs, gallery, variants, seller and category path to each product.
fetchBuyboxbooleantrueAttach the full list of competing sellers per product.
fetchSellerDetailsbooleantrueEnrich the current seller from its seller page.
fetchReviewsbooleanfalseAttach customer reviews to each product record (paged up to maxReviewsPerProduct).
maxReviewsPerProductinteger30When fetchReviews is on, reviews to page through per product.
maxPagesinteger1Result pages to walk per query or URL.
maxListingsinteger0Total product cap across all inputs (0 = unlimited).
resumeFromRunIdstring(empty)Continue one specific previous run/dataset: products already saved there are loaded before scraping starts and skipped, so this run only appends new products. For recurring daily monitoring of the same search/URLs, use incrementalMode instead — see the "Resume and recurring updates" section below.
incrementalModebooleanfalseDaily/recurring monitoring of this same search/URL set. First run returns everything as NEW; later runs return only NEW/UPDATED/REAPPEARED by default. See the "Resume and recurring updates" section below.
stateKeystring(empty)Optional name for a monitoring campaign, so its incremental state stays stable or is deliberately shared. Auto-derived from your mode/query/URL/filter/enrichment settings when left empty.
emitUnchangedbooleanfalseIncremental mode only. Also return products unchanged since the last run, marked UNCHANGED. Adds and bills extra rows you already have.
emitExpiredbooleanfalseIncremental mode only. Also return products from a previous run no longer found, marked EXPIRED, once a run has fully scanned the search/URLs (not capped, not a resume). Adds and bills extra synthetic rows.
proxyobjectApify Residential RUProxy configuration.

Resume and recurring updates

You want to...Use
A crawl stopped and should continueresumeFromRunId
Run the same search/URLs every day and receive only changesincrementalMode

Resume (resumeFromRunId) continues one specific interrupted or previous large crawl: paste a run ID or dataset ID and this run skips products already collected there, returning only the remaining NEW products.

Incremental mode (incrementalMode) is for a schedule (for example, daily): the actor remembers the previous run of the same search/URL set by itself, so you never paste a run ID. The first run returns everything as NEW. Later runs return only NEW, UPDATED, and REAPPEARED products by default — duplicates and unchanged products are suppressed (and not charged, including the detail-enrichment and review-enrichment surcharges below). Turn on emitUnchanged or emitExpired only when you also want those rows returned (and billed for). State is isolated per mode/query/URL/filter/enrichment setup automatically; set stateKey to name or deliberately share a monitoring campaign.

{ "mode": "search", "queries": ["iphone 15"], "incrementalMode": true }

→ every product comes back with "changeType": "NEW".

{ "mode": "search", "queries": ["iphone 15"], "incrementalMode": true }

→ run again later: products whose price/rating/specs/etc. changed come back as "changeType": "UPDATED" with changedFields listing what changed, brand-new listings come back as "changeType": "NEW" — and products that are still there, unchanged, are not returned at all (suppressed, not charged) unless emitUnchanged is on.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape — the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record — not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Output example

Sample shape: values are illustrative placeholders, not from a live listing.

{
"sku": "100000001",
"url": "https://www.ozon.ru/product/100000001/",
"title": "Sample Smartphone 6/128 GB, Nano-SIM",
"brand": "Sample Brand",
"price": 59990,
"originalPrice": 89990,
"discountPercent": 33,
"currency": "RUB",
"rating": 4.8,
"reviewCount": 1200,
"questionCount": 35,
"availability": "3 left in stock",
"coverImage": "https://ir.ozone.ru/s3/multimedia-1-x/0000000000.jpg",
"images": ["https://ir.ozone.ru/s3/multimedia-1-x/0000000001.jpg"],
"specs": [{ "name": "Screen size", "value": "6.1" }],
"variants": [{ "sku": "100000002", "value": "Blue", "price": 57990, "aspectName": "Colour" }],
"categoryPath": "Electronics > Phones > Smartphones",
"sellerName": "Sample Seller",
"sellerId": "1000000",
"seller": {
"sellerId": "1000000",
"name": "Sample Seller",
"rating": 4.9,
"ordersCount": "1.6 K",
"legalName": "Sample legal entity",
"registryNumber": "000000000000000",
"isPremium": true
},
"otherSellersCount": 13,
"otherSellersMinPrice": 54990,
"buyboxSellers": [
{
"sellerId": "1000001",
"name": "Sample Seller 2",
"price": 54990,
"originalPrice": 54990,
"legalName": "Sample legal entity 2",
"registryNumber": "000000000000000",
"deliveryText": "Delivery in 2 days",
"authorizedSeller": "Verified brand seller",
"productSku": "100000003"
}
],
"reviews": [],
"scrapedAt": "2026-01-01T00:00:00.000Z"
}

Plan requirement

Ozon.ru accepts traffic mainly from Russian residential connections, so a Russian residential proxy is strongly recommended. On Apify this means an Apify plan that includes Residential proxy (Starter or higher), with the proxy set to Residential and country RU (the default in the input). On the free plan, without Residential access, runs may return zero items; the actor prints an upgrade hint at the start of the run.