Ozon.ru Scraper – Products, URLs, Keywords, Sellers & Reviews
Pricing
from $1.30 / 1,000 results
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
Maintained by CommunityActor stats
1
Bookmarked
71
Total users
15
Monthly active users
4 days ago
Last modified
Categories
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.
| Field | Example |
|---|---|
| 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/.../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} |
| otherSellersCount | 13 |
| otherSellersMinPrice | 54990 |
| 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" |
| changeType | NEW (incremental mode only — see "Resume and recurring updates" below) |
| changedFields | ["price"] (incremental mode, UPDATED rows only) |
| firstSeenAt | 2026-01-01T00:00:00.000Z (incremental mode only) |
| lastSeenAt | 2026-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
| Parameter | Type | Default | Description |
|---|---|---|---|
| mode | string | "search" | "search" or "url". |
| queries | array | ["iphone 15"] | Search terms (search mode). |
| sortBy | string | "score" | score, price, price_desc, new, rating, discount. Search mode only. |
| urls | array | Product, category, search or seller URLs (url mode). | |
| minPrice | integer | Lower price bound in rubles. Applies in search mode and to category/search/seller URLs; not to a single pasted product URL. | |
| maxPrice | integer | Upper price bound in rubles. Same scope as minPrice. | |
| minRating | integer | Keep products at or above this rating (1 to 5). Same scope as minPrice. | |
| maxReviewsPerProduct | integer | 30 | Reviews to page through per product. |
| scrapeProductDetails | boolean | true | Adds full specs, gallery, variants, seller and category path to each product. |
| fetchBuybox | boolean | true | Attach the full list of competing sellers per product. |
| fetchSellerDetails | boolean | true | Enrich the current seller from its seller page. |
| fetchReviews | boolean | false | Attach customer reviews to each product record (paged up to maxReviewsPerProduct). |
| maxReviewsPerProduct | integer | 30 | When fetchReviews is on, reviews to page through per product. |
| maxPages | integer | 1 | Result pages to walk per query or URL. |
| maxListings | integer | 0 | Total product cap across all inputs (0 = unlimited). |
| resumeFromRunId | string | (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. |
| incrementalMode | boolean | false | Daily/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. |
| stateKey | string | (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. |
| emitUnchanged | boolean | false | Incremental mode only. Also return products unchanged since the last run, marked UNCHANGED. Adds and bills extra rows you already have. |
| emitExpired | boolean | false | Incremental 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. |
| proxy | object | Apify Residential RU | Proxy configuration. |
Resume and recurring updates
| You want to... | Use |
|---|---|
| A crawl stopped and should continue | resumeFromRunId |
| Run the same search/URLs every day and receive only changes | incrementalMode |
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.
- Authorize a connector once under Apify → Settings → Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. (If the picker is empty, you haven't authorized a connector yet.)
- For Notion, also set
notionParentPageUrlto 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.