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
5.0
(1)
Developer
Abot API
Maintained by CommunityActor stats
3
Bookmarked
202
Total users
41
Monthly active users
a day ago
Last modified
Categories
Share
Ozon Scraper: Product Data, Pricing, Buybox & Reviews
Ozon Scraper turns Ozon, Russia's largest online marketplace, into structured product data. Search by keyword or paste product, category, search and seller links, and get back 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. Export to JSON, CSV or Excel, or read it straight through the API.
Why This Scraper?
- 40+ fields per product, with more depth than most Ozon scrapers.
- Buybox tracking. For every product, 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.
- Seller transparency. Name, rating, order count and registered legal entity with its state registry number.
- Full specifications, variants and gallery. Every characteristic (40+ rows on a typical product), every size, colour or memory option with its own SKU and price, and the complete image gallery.
- Customer reviews on demand. Turn on review attachment to add text, pros, cons, star score, photos, videos and helpfulness votes to each product, paged up to your chosen limit.
- Two ways in. Keyword search, or walk product, category, search and seller URLs directly.
- Built for schedules. Incremental mode returns only new and changed products on recurring runs, and turning off detail enrichment gives a faster, cheaper run with just the core listing fields.
Use Cases
- Competitive pricing and buybox monitoring: track who wins the buybox and at what price, across your own catalog or a competitor's.
- Marketplace catalog and content sync: pull specs, images and variants to power a comparison site or product feed.
- Seller due diligence: check a seller's rating, order count and registered legal entity before buying or partnering.
- Voice of customer analysis: aggregate reviews, star scores, pros and cons to spot recurring complaints or praise.
- Category and pricing research: filter by price and rating across a whole category or search to benchmark a market.
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 / brand | "Смартфон Sample 6/128 ГБ, Nano-SIM" / "Sample Brand" |
price / originalPrice / discountPercent | 59990 / 89990 / 33 |
currency | "RUB" |
rating / reviewCount / questionCount | 4.8 / 1200 / 35 |
availability | "Осталось 3 шт" |
coverImage / images | "https://ir.ozone.ru/s3/multimedia-1-x/0000000000.jpg" / list of gallery image URLs |
specs | [{"name": "Диагональ экрана, дюймы", "value": "6.1"}, ...], full characteristic list (when scrapeProductDetails is on) |
description / hashtags | package contents text / ["#Sample", "#SampleBrand"] (when scrapeProductDetails is on) |
ratingBreakdown | {"5": 900, "4": 200, "3": 60, "2": 20, "1": 20} (when scrapeProductDetails is on) |
variants | [{"sku": "100000002", "value": "Синий", "price": 57990}] (when scrapeProductDetails is on) |
categoryPath | "Электроника > Телефоны и смарт-часы > Смартфоны" (when scrapeProductDetails is on) |
sellerName / sellerId | "Sample Seller" / "1000000" |
seller | full profile: {"sellerId", "name", "rating", "ordersCount", "legalName", "registryNumber", "isPremium"} (when scrapeProductDetails is on) |
otherSellersCount / otherSellersMinPrice | 13 / 54990 |
buyboxSellers | list of competing sellers, each with price, legal entity and delivery estimate (when fetchBuybox is on) |
reviews | list of customer reviews with score, comment and helpfulness votes (when fetchReviews is on) |
scrapedAt | "2026-01-01T00:00:00.000Z" |
changeType / changedFields / firstSeenAt / lastSeenAt | incremental mode only: "NEW" / ["price"] / timestamps |
How to Use
- Pick a run mode:
search(query and filters below) orurl(paste product, category, search or seller URLs). - In search mode, set one or more queries, sort order and price or rating filters. In URL mode, price and rating filters apply to category, search and seller URLs but not to a single pasted product URL.
- Switch on the enrichment you need (full details, buybox, seller profile, reviews), and set Max pages and Max products to control run size and cost.
- Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.
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"] }}
Fast, cheap run with core listing fields only:
{"mode": "search","queries": ["наушники"],"scrapeProductDetails": false,"maxPages": 5,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Walk URLs (product, category, search or seller):
If you switch to url mode and leave urls empty or absent, the actor now walks one built-in example of each supported shape (a smartphone category, an iphone 15 search, one product and one seller) instead of stopping with an error. Pass your own list to override it.
| URL shape | Example | Notes |
|---|---|---|
| Category | https://www.ozon.ru/category/smartfony-15502/ | Paginates; filters apply. |
| Search | https://www.ozon.ru/search/?text=iphone+15 | Paginates; filters apply. |
| Product | https://www.ozon.ru/product/2209157453/ | Returns that one product. |
| Seller | https://www.ozon.ru/seller/dubaidutyfree/ | Walks the seller's listing; filters apply. |
| Highlight or brand page | https://www.ozon.ru/highlight/..., https://www.ozon.ru/brand/... | Walked like a search listing; filters apply. |
Ozon country domains (ozon.kz, ozon.by, ozon.com and similar) are walked as their ozon.ru path. A URL on a non-Ozon site, or an Ozon /t/ short link (not supported), is skipped with a warning in the run log. Paste the full product, category, search or seller URL instead. An Ozon URL with any other path is walked as a listing page with a warning in the run log.
Walk several URL shapes at once:
{"mode": "url","urls": ["https://www.ozon.ru/product/100000001/","https://www.ozon.ru/category/smartfony-15502/","https://www.ozon.ru/seller/dubaidutyfree/"],"maxPages": 2,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Export reviews for specific products:
{"mode": "url","urls": ["https://www.ozon.ru/product/100000001/", "https://www.ozon.ru/product/100000002/"],"fetchReviews": true,"maxReviewsPerProduct": 200,"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/ozon-ru-scraper").call(run_input={"mode": "search", "queries": ["iphone 15"]})for product in client.dataset(run["defaultDatasetId"]).iterate_items():print(product["title"], product["price"], product["sellerName"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/ozon-ru-scraper').call({ mode: 'search', queries: ['iphone 15'] });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Output views
The dataset has these views: Listings, Product details, Reviews (one row per review), Competing sellers (one row per buybox seller) and Changes (incremental mode). Reviews are capped at maxReviewsPerProduct (default 30, maximum 1000); reviews are billed through the review surcharge described under Pricing.
Resume and recurring updates
- Resume (
resumeFromRunId) continues one specific interrupted or previous large crawl: paste a run or dataset ID and this run skips products already collected there, returning only the remaining new ones, so you don't pay twice. - Incremental mode (
incrementalMode) is for a schedule, for example daily: the actor remembers the previous run of the same search or URL set by itself, so you never paste a run ID. The first run returns everything asNEW. Later runs return onlyNEW,UPDATED(withchangedFieldslisting what changed) andREAPPEAREDproducts by default; unchanged products are suppressed and not billed unlessemitUnchangedis on, andEXPIREDproducts appear only after a run that fully scanned the tracked search or URLs, and only withemitExpiredon. State is isolated automatically per mode, query, URL, filter and enrichment combination; setstateKeyto name or deliberately share a monitoring campaign.UPDATEDis decided by comparing price, original price, discount, rating, review count, title, brand, description, images, specs, variants, categories and seller or buybox data;scrapedAt,deliveryText, seller order counters, review vote counters and image CDN host changes never count as a change (they stay in the output). List more fields inignoreFieldsForChangesto ignore them too; widening the list never causes a one-time wave ofUPDATEDrows. TurningscrapeDescriptionorscrapeSpecificationsoff does not mark tracked products asUPDATEDeither. AnEXPIREDsweep is skipped when the run was capped (bymaxListingsormaxItems), resumed, or started from a pasted URL with?page=above 1.
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.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search or url. |
queries | array | (none; prefilled iphone 15) | Search terms. Search mode only. |
sortBy | string | score | score, price, price_desc, new, rating, or discount. Search mode only. |
urls | array | category, search, product and seller examples | Product, category, search or seller URLs. URL mode only. |
minPrice | integer | (none) | Lower price bound in rubles. Applies in search mode and to category, search and seller URLs; not to a single pasted product URL. |
maxPrice | integer | (none) | Upper price bound in rubles. Same scope as minPrice. |
minRating | integer | (none) | Keep products at or above this rating, 1 to 5. Same scope as minPrice. |
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. Requires full product details. |
fetchSellerDetails | boolean | true | Enrich the current seller from its seller page. Requires full product details. |
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 (maximum 1000). |
maxPages | integer | 0 (= 1 page) | Result pages to walk per query or URL. |
maxListings | integer | 100 | Total product cap across all queries and URLs (maximum 100000; 0 from older saved tasks is read as 100000). |
resumeFromRunId | string | (none) | Continue one interrupted run. |
incrementalMode | boolean | false | Return only new and changed products on recurring runs. |
stateKey | string | (none) | Name or share an incremental-mode monitoring campaign. |
emitUnchanged | boolean | false | Also return (and bill) unchanged products. |
emitExpired | boolean | false | Also return (and bill) expired products. |
ignoreFieldsForChanges | array | (none) | Field names that do not count as a change in incremental mode. |
startUrls | array | (none) | Alias of urls. |
searchKeywords | array | (none) | Alias of queries. |
sortSearchBy | string | (none) | Alias of sortBy using the other vocabulary: popular, new, cheaper, moreExpensive, rating, discount. Used when sortBy is left at its default (score); ignored when sortBy is set to any other value. |
maxItems | integer | 100 | Alias cap per start URL or keyword (maximum 100000). |
scrapeDescription | boolean | true | Set to false to blank the description. |
scrapeSpecifications | boolean | true | Set to false to blank the specifications. |
proxy | object | Residential | Connection settings. |
mcpConnectors | array | (none) | Optional: send a summary of each product to apps you authorized under Integrations. |
notionParentPageUrl | string | (none) | Notion connector only: page under which items are created. |
maxNotifyListings | integer | 50 | Cap on items written to each connector per run. |
Compatibility with other Ozon scrapers
Switching from another Ozon scraper? These inputs work as aliases: startUrls (same as urls), searchKeywords (same as queries), sortSearchBy (popular, new, cheaper, moreExpensive, rating, discount, mapped to sortBy), maxItems (cap per start URL or keyword), scrapeDescription and scrapeSpecifications (set to false to blank those fields). Your own input names win when both are set; a field left at its pre-filled example value (such as the example urls) counts as not set, so startUrls and sortSearchBy take effect, and startUrls with no queries switches to URL mode. Each product also carries the alias fields mainImage, priceString, originalPriceString, videos (product gallery videos; empty unless Ozon's product gallery exposes a video, and not yet confirmed non-empty on a live product), sellerInfo, specifications, reviewsCount and questionsCount, which mirror coverImage, price, originalPrice, seller, specs, reviewCount and questionCount. They add no cost and never mark a tracked product as updated in incremental mode.
Output Example
Sample shape: values are illustrative placeholders, not from a live listing.
{"sku": "100000001","url": "https://www.ozon.ru/product/100000001/","title": "Смартфон Sample 6/128 ГБ, Nano-SIM","brand": "Sample Brand","price": 59990,"originalPrice": 89990,"discountPercent": 33,"currency": "RUB","rating": 4.8,"reviewCount": 1200,"questionCount": 35,"availability": "Осталось 3 шт","coverImage": "https://ir.ozone.ru/s3/multimedia-1-x/0000000000.jpg","images": ["https://ir.ozone.ru/s3/multimedia-1-x/0000000001.jpg"],"specs": [{ "name": "Диагональ экрана, дюймы", "value": "6.1" }],"variants": [{ "sku": "100000002", "value": "Синий", "price": 57990, "aspectName": "Цвет" }],"categoryPath": "Электроника > Телефоны и смарт-часы > Смартфоны","sellerName": "Sample Seller","sellerId": "1000000","seller": {"sellerId": "1000000","name": "Sample Seller","rating": 4.9,"ordersCount": "1,6 тыс.","legalName": "ООО «Пример»","registryNumber": "000000000000000","isPremium": true},"otherSellersCount": 13,"otherSellersMinPrice": 54990,"buyboxSellers": [{"sellerId": "1000001","name": "Sample Seller 2","price": 54990,"legalName": "ИП Пример","registryNumber": "000000000000000","deliveryText": "Доставка через 2 дня","authorizedSeller": "Официальный продавец бренда"}],"reviews": [],"scrapedAt": "2026-01-01T00:00:00.000Z"}
Plan Requirement
Ozon.ru blocks plain HTTP clients on every proxy tier we measured: datacenter, the Apify residential group fetched with a simple HTTP client, and a direct home connection all received the same "Похоже, нет соединения" (no connection) refusal page with HTTP 403. So this actor does not work with no action on your side. It needs a connection Ozon accepts, and the default Connection setting (Residential, country left empty) is the recommended one; pinning a specific country turns off the automatic connection handling. Whether a given residential exit is accepted varies from run to run, so the actor tries several exits before giving up.
Free Apify plan: free plans do not include residential proxies. The run then logs "The selected connection is unavailable to this run. Apify free plans do not include residential proxies." and continues on a backup connection, where some pages may still be unavailable. If that backup cannot load the pages, the run fails with "No results: residential proxies are unavailable on this run (Apify free plans do not include them), and the backup connection could not load the requested Ozon.ru pages." If every connection is refused before reaching Ozon, the run fails with "The proxy connection was refused for this account, so no page could be read." Upgrade, or supply your own proxy URLs in the Connection field.
FAQ
How much does it cost?
You pay per product returned. Products whose full details attach carry a detail surcharge (buybox and seller data are included in it), and products that come back with at least one review carry a review surcharge. The per-product, detail, review and run-start rates depend on your Apify plan; the Pricing tab shows the current rates and is authoritative. Use Max products to cap the cost of any run.
Is it legal to scrape Ozon.ru?
This actor collects only publicly available product listing data. You are responsible for how you use it: follow Ozon's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Prices and specifications are generally facts, but photos, seller branding and reviews may be subject to third-party rights.
Can I get only new or changed products on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and reappeared products, and unchanged ones are not billed unless you turn on emitUnchanged.
Why do minPrice, maxPrice and minRating have no effect on a single product URL?
These filters apply only to result tiles: search mode, and category, search or seller URLs. A single pasted product URL always returns exactly that one product regardless of price or rating.
Why did my run fail instead of returning an empty dataset?
If Ozon refuses every connection, the run ends as failed with a message such as "Ozon antibot (ABT) refused every one of the N residential exit(s) tried, so no session could be cleared", followed by a per-exit breakdown, so "no matching products" is never confused with "nothing could be read". On the Free plan you get the "No results: residential proxies are unavailable on this run" message instead. When every connection is refused before reaching Ozon the run fails with "The proxy connection was refused for this account, so no page could be read." (plus a note that your Apify plan does not include proxy access). After an ABT block the run also logs "Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search." If the run ran out of time first it says "Raise the run timeout in Input > Run options". Keep the default residential proxy setting and retry in a few minutes, or supply a clean residential or mobile proxy via the proxy URLs input. A run that did reach Ozon but found nothing matching your query or filters finishes normally with an empty dataset.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
🔗 Want more e-commerce data?
Pair this actor with these related scrapers from the same team:
| 🏷️ Wildberries Scraper Scrape Wildberries marketplace: product search with prices (wallet vs retail), discounts... | 🏷️ Avito.ru Scraper From $1/1K. Scrape structured listings from Avito.ru by region, category, filters, or... |
| 🏠 Domclick RU Property Scraper Extract property listings from domclick.ru, one of Russia’s largest real estate portals... | 🧩 Dzen.ru Scraper Scrape Dzen.ru (ex Yandex.Zen): articles, videos and channels. Full article text with... |
| 🛒 Coupang Scraper Scrape Coupang.com products by keyword, category or URL. Extract 20+ fields including... | 🛒 Amazon Australia Product & Reviews Scraper Scrape Amazon Australia (amazon.com.au) products and customer reviews. Search by keyword... |
💬 Support & custom scrapers
- 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
- 🛠️ Need another site, extra fields or a private build? Email contact@abotapi.com or message Telegram @abotapi.
- ⭐ Enjoying it? A quick review on the actor page helps other users find it.