Discover/Ozon API
live

Ozon APIozon.ru

Extract product details, reviews, Q&A, seller info, and category trees from Ozon.ru via 8 structured JSON endpoints.

Endpoints
8
Updated
2mo ago

What is the Ozon API?

The Ozon.ru API exposes 8 endpoints covering product search, category browsing, full product details, customer reviews, Q&A, seller profiles, and the complete category tree from Russia's largest e-commerce marketplace. The get_product_details endpoint alone returns 9 fields including SKU, price, rating, description, images, and a characteristics array, making it straightforward to build product data pipelines against Ozon's catalog.

Try it
Page number
Sort order (popular, new, price_asc, price_desc, rating, discount)
Search keyword
api.parse.bot/scraper/d5fe59e8-d72b-4067-8116-72bc658a37ce/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/d5fe59e8-d72b-4067-8116-72bc658a37ce/search_products' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace ozon-ru-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

"""
Ozon.ru API Parser Client
Get your API key from: https://parse.bot/settings
"""

import os
import requests
from typing import Optional, Any, Dict, List


class ParseClient:
    """Client for accessing Ozon.ru product data via Parse API."""

    def __init__(self, api_key: Optional[str] = None):
        """Initialize the Parse API client.
        
        Args:
            api_key: API key for authentication. If not provided, reads from PARSE_API_KEY environment variable.
        """
        self.base_url = "https://api.parse.bot"
        self.scraper_id = "38bf3079-48f3-41e3-926d-7c6ea7fa1fe9"
        self.api_key = api_key or os.getenv("PARSE_API_KEY")
        
        if not self.api_key:
            raise ValueError("API key must be provided or set in PARSE_API_KEY environment variable")

    def _call(self, endpoint: str, method: str = "POST", **params) -> Dict[str, Any]:
        """Make an API call to the Parse endpoint.
        
        Args:
            endpoint: The endpoint name (e.g., 'search_products')
            method: HTTP method ('GET' or 'POST')
            **params: Parameters to pass to the endpoint
            
        Returns:
            Response JSON as a dictionary
        """
        url = f"{self.base_url}/scraper/{self.scraper_id}/{endpoint}"
        headers = {
            "X-API-Key": self.api_key,
            "Content-Type": "application/json"
        }
        
        try:
            if method == "GET":
                response = requests.get(url, headers=headers, params=params, timeout=30)
            else:  # POST
                response = requests.post(url, headers=headers, json=params, timeout=30)
            
            response.raise_for_status()
            return response.json()
        except requests.exceptions.RequestException as e:
            raise Exception(f"API call failed: {e}")

    def search_products(
        self,
        query: str,
        page: int = 1,
        sort: str = "popular"
    ) -> Dict[str, Any]:
        """Search for products by keyword.
        
        Args:
            query: Search keyword
            page: Page number (default: 1)
            sort: Sort order - popular, new, price_asc, price_desc, rating, discount
            
        Returns:
            Dictionary containing products list and total count
        """
        return self._call("search_products", method="GET", query=query, page=page, sort=sort)

    def get_category_products(
        self,
        category_url: str,
        page: int = 1,
        sort: str = "popular"
    ) -> Dict[str, Any]:
        """Browse products in a specific category.
        
        Args:
            category_url: Full URL of the category page
            page: Page number (default: 1)
            sort: Sort order (default: 'popular')
            
        Returns:
            Dictionary containing products list and total count
        """
        return self._call("get_category_products", method="GET", category_url=category_url, page=page, sort=sort)

    def get_product_details(self, url: str) -> Dict[str, Any]:
        """Get full product detail page data.
        
        Args:
            url: Product URL
            
        Returns:
            Dictionary containing product details
        """
        return self._call("get_product_details", method="GET", url=url)

    def get_product_reviews(self, url: str) -> Dict[str, Any]:
        """Retrieve customer reviews for a specific product.
        
        Args:
            url: Product URL
            
        Returns:
            Dictionary containing reviews list
        """
        return self._call("get_product_reviews", method="GET", url=url)

    def get_product_questions(self, url: str) -> Dict[str, Any]:
        """Retrieve Q&A for a specific product.
        
        Args:
            url: Product URL
            
        Returns:
            Dictionary containing questions and answers
        """
        return self._call("get_product_questions", method="GET", url=url)

    def get_category_tree(self) -> Dict[str, Any]:
        """Get the full hierarchical category tree.
        
        Returns:
            Dictionary containing category hierarchy
        """
        return self._call("get_category_tree", method="GET")

    def get_search_filters(self, query: str) -> Dict[str, Any]:
        """Get available filter options for a search query.
        
        Args:
            query: Search keyword
            
        Returns:
            Dictionary containing available filters and their values
        """
        return self._call("get_search_filters", method="GET", query=query)

    def get_seller_info(self, seller_slug: str) -> Dict[str, Any]:
        """Get information about a seller by slug.
        
        Args:
            seller_slug: Seller slug from URL
            
        Returns:
            Dictionary containing seller information
        """
        return self._call("get_seller_info", method="GET", seller_slug=seller_slug)


if __name__ == "__main__":
    # Initialize the client
    client = ParseClient()
    
    print("=" * 80)
    print("OZON.RU PRODUCT SEARCH AND ANALYSIS EXAMPLE")
    print("=" * 80)
    
    # Step 1: Search for products
    search_query = "iPhone"
    print(f"\n1. Searching for products: '{search_query}'")
    print("-" * 80)
    
    search_results = client.search_products(query=search_query, sort="rating", page=1)
    products = search_results.get("products", [])
    total_products = search_results.get("total", 0)
    
    print(f"Found {total_products} products matching '{search_query}'")
    print(f"Displaying {len(products)} products on this page:\n")
    
    # Step 2: Display search results summary
    for idx, product in enumerate(products[:3], 1):  # Show first 3 products
        title = product.get("title", "N/A")
        url = product.get("url", "N/A")
        price = product.get("price", {})
        current_price = price.get("current", "N/A")
        discount = price.get("discount", "N/A")
        rating_info = product.get("rating", {})
        rating = rating_info.get("rating", "N/A")
        reviews = rating_info.get("reviews", "N/A")
        product_id = product.get("id", "N/A")
        
        print(f"Product {idx}: {title[:60]}")
        print(f"  Price: {current_price} (Discount: {discount})")
        print(f"  Rating: {rating}/5.0 ({reviews})")
        print(f"  ID: {product_id}")
        print()
    
    # Step 3: Get detailed information for the first product
    if products:
        first_product = products[0]
        product_url = first_product.get("url")
        product_title = first_product.get("title")
        
        if product_url:
            print("\n2. Getting detailed information for first product")
            print("-" * 80)
            print(f"Product: {product_title[:70]}")
            
            details = client.get_product_details(url=product_url)
            
            # Display key details
            detail_price = details.get("price", "N/A")
            detail_rating = details.get("rating", "N/A")
            review_count = details.get("review_count", "N/A")
            description = details.get("description", "N/A")
            sku = details.get("sku", "N/A")
            images_count = len(details.get("images", []))
            chars_count = len(details.get("characteristics", []))
            
            print(f"  SKU: {sku}")
            print(f"  Price: {detail_price}")
            print(f"  Rating: {detail_rating}/5.0")
            print(f"  Reviews: {review_count}")
            print(f"  Images: {images_count}")
            print(f"  Characteristics: {chars_count}")
            if description and description != "N/A":
                print(f"  Description: {description[:150]}...")
            
            # Step 4: Get reviews for the product
            print("\n3. Fetching customer reviews")
            print("-" * 80)
            reviews_data = client.get_product_reviews(url=product_url)
            reviews = reviews_data.get("reviews", [])
            
            print(f"Found {len(reviews)} reviews. Showing first 2:\n")
            for review_idx, review in enumerate(reviews[:2], 1):
                author = review.get("author", "Anonymous")
                rating_val = review.get("rating", "N/A")
                text = review.get("text", "N/A")
                date = review.get("date", "N/A")
                
                print(f"Review {review_idx}:")
                print(f"  Author: {author}")
                print(f"  Rating: {rating_val}/5")
                print(f"  Date: {date}")
                print(f"  Text: {text[:100]}...")
                print()
            
            # Step 5: Get Q&A for the product
            print("4. Fetching Q&A section")
            print("-" * 80)
            qa_data = client.get_product_questions(url=product_url)
            questions = qa_data.get("questions", [])
            
            print(f"Found {len(questions)} Q&A entries. Showing first 2:\n")
            for qa_idx, qa in enumerate(questions[:2], 1):
                question_text = qa.get("text", "N/A")
                question_date = qa.get("date", "N/A")
                answers = qa.get("answers", [])
                
                print(f"Q&A {qa_idx}:")
                print(f"  Question: {question_text}")
                print(f"  Asked: {question_date}")
                print(f"  Answers: {len(answers)}")
                if answers:
                    answer = answers[0]
                    answer_author = answer.get("author", "N/A")
                    answer_text = answer.get("text", "N/A")
                    print(f"    - {answer_author}: {answer_text[:80]}...")
                print()
    
    # Step 6: Get search filters for advanced filtering
    print("5. Available filters for search")
    print("-" * 80)
    filters_data = client.get_search_filters(query=search_query)
    filters = filters_data.get("filters", [])
    
    if filters:
        for filter_item in filters[:2]:  # Show first 2 filters
            filter_name = filter_item.get("name", "N/A")
            filter_id = filter_item.get("id", "N/A")
            values = filter_item.get("values", [])
            
            print(f"\nFilter: {filter_name} (ID: {filter_id})")
            print(f"  Available values:")
            for value in values[:3]:  # Show first 3 values
                value_name = value.get("name", "N/A")
                value_count = value.get("count", "0")
                print(f"    - {value_name} ({value_count} products)")
    
    # Step 7: Get category tree
    print("\n\n6. Category tree structure")
    print("-" * 80)
    category_tree = client.get_category_tree()
    categories = category_tree.get("data", [])
    
    if categories:
        for cat in categories[:2]:  # Show first 2 main categories
            cat_title = cat.get("title", "N/A")
            cat_id = cat.get("id", "N/A")
            items = cat.get("items", [])
            
            print(f"\nCategory: {cat_title} (ID: {cat_id})")
            print(f"  Subcategories:")
            for item in items[:3]:  # Show first 3 subcategories
                item_title = item.get("title", "N/A")
                item_link = item.get("link", "N/A")
                print(f"    - {item_title}")
    
    print("\n" + "=" * 80)
    print("SEARCH AND ANALYSIS COMPLETE")
    print("=" * 80)
All endpoints · 8 totalmissing one? ·

Search for products by keyword with support for sorting and pagination.

Input
ParamTypeDescription
pageintegerPage number
sortstringSort order (popular, new, price_asc, price_desc, rating, discount)
queryrequiredstringSearch keyword
Response
{
  "type": "object",
  "fields": {
    "total": "integer",
    "products": "array"
  },
  "sample": {
    "total": 1,
    "products": [
      {
        "id": "3015551004",
        "url": "https://www.ozon.ru/product/...",
        "price": {
          "current": "51143 ₽",
          "discount": "-10%",
          "original": "56825 ₽"
        },
        "title": "Apple Смартфон iPhone 16e 128GB Black 8/128 ГБ, черный",
        "rating": {
          "rating": "5.0",
          "reviews": "4 отзыва"
        }
      }
    ]
  }
}

About the Ozon API

Product Search and Category Browsing

The search_products endpoint accepts a required query string plus optional page and sort parameters. Sort values include popular, new, price_asc, price_desc, rating, and discount, giving you control over result ordering. The response returns a total count and a products array. For category-level browsing, get_category_products takes a full category_url and the same sort and pagination options. get_category_tree requires no inputs and returns the full hierarchical category structure in a data array, useful for mapping Ozon's taxonomy before building category-level scrapers.

Product Details, Filters, and Q&A

get_product_details accepts a product URL and returns sku, url, price, title, images (array), rating, description, review_count, and characteristics (array). The characteristics field carries structured attribute data such as brand, dimensions, and material. get_search_filters accepts a search query and returns a filters array listing the facets available for that keyword — useful for understanding which filter dimensions apply before narrowing a search programmatically.

get_product_reviews and get_product_questions both accept a product URL and return reviews and questions arrays respectively. These let you collect customer sentiment and answered Q&A alongside the core product record from a single product URL.

Seller Data

get_seller_info accepts a seller_slug taken from the seller's Ozon URL and returns name, slug, rating, and review_count. This is enough to identify and rank third-party sellers on the platform, though detailed storefront inventory requires separate calls to get_category_products with category URLs specific to that seller.

Reliability & maintenance

The Ozon API is a managed, monitored endpoint for ozon.ru — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when ozon.ru changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official ozon.ru API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Track price changes across Ozon product listings using get_product_details price and SKU fields
  • Build a competitor analysis tool by comparing characteristics arrays across similar products in the same category
  • Aggregate customer reviews from get_product_reviews for sentiment analysis or review summarization
  • Map Ozon's full product taxonomy using get_category_tree to structure an internal catalog mirror
  • Monitor seller ratings and review counts via get_seller_info to qualify marketplace suppliers
  • Generate search filter metadata with get_search_filters to power faceted search in a product comparison app
  • Collect product Q&A via get_product_questions to feed into an FAQ generation or chatbot training pipeline
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min

One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does Ozon have an official public developer API?+
Yes. Ozon provides an official Seller API for marketplace merchants at https://docs.ozon.ru/api/seller/. It is oriented toward sellers managing their own listings and orders, not toward reading arbitrary public catalog data.
What does get_product_details return beyond price and title?+
The endpoint returns 9 fields: sku, url, price, title, images (an array of image URLs), rating, description, review_count, and characteristics. The characteristics array contains structured product attributes such as brand, dimensions, and material as key-value pairs.
Can I paginate through search results and how many sort orders are supported?+
Both search_products and get_category_products accept an optional page integer for pagination. Six sort values are supported for search: popular, new, price_asc, price_desc, rating, and discount. The response includes a total field so you can calculate the number of pages.
Does the API return seller inventory or product listings for a specific seller's storefront?+
Not directly. get_seller_info returns name, slug, rating, and review_count — it does not return a seller's product listings. get_category_products can be pointed at seller-specific category URLs to retrieve their products. You can fork the API on Parse and revise it to add a dedicated seller-products endpoint.
Are promotional data, coupon codes, or Ozon Premium pricing returned?+
Not currently. The API returns a single price string from the product detail page. Promotional prices, Ozon Premium discounts, and coupon codes are not exposed as separate fields. You can fork the API on Parse and revise it to add those additional price fields if they appear on the product page.
Page content last updated . Spec covers 8 endpoints from ozon.ru.
Related APIs in EcommerceSee all →
ozon.kz API
Browse and search thousands of products on Ozon.kz, view detailed product information, reviews, and seller details across category listings. Get instant search suggestions and explore the complete category tree to discover items that match your needs.
uzum.uz API
Browse and search products across Uzum.uz marketplace categories, view detailed product information with customer reviews, and discover seller profiles and their product listings. Get real-time access to marketplace data including category organization, product details, pricing, and seller ratings all in one place.
aliexpress.com API
Search for products across AliExpress and instantly access detailed information including product specs, customer reviews, and pricing to make informed purchasing decisions. Browse through product categories and retrieve complete product data directly from URLs to compare options and find exactly what you're looking for.
megamarket.ru API
Search and browse products across MegaMarket.ru's catalog, view detailed product information with customer reviews, and explore catalog categories to discover items available on Sber's Russian marketplace. Get real-time search suggestions and product recommendations to help you find exactly what you're looking for.
catalog.onliner.by API
Search and compare products from Onliner.by's catalog with access to real-time prices, detailed product information, customer reviews, and historical price trends. Browse categories, get autocomplete suggestions, and view all available offers for any product to make informed purchasing decisions.
perekrestok.ru API
Browse Perekrestok.ru's grocery catalog, search for products, view detailed information and customer reviews, and explore items organized by category. Get instant access to product details, pricing, and shopper feedback to help you find exactly what you need from Russia's leading supermarket chain.
verkkokauppa.com API
Search and browse products from Verkkokauppa.com to find items across categories, check real-time prices and availability, read customer reviews, and discover deals in outlet and clearance sections. Filter products by your preferences and get detailed product information including specifications and store stock levels.
emag.ro API
Access product data from eMAG.ro, Romania's largest online retailer. Search by keyword, browse categories, retrieve product details and reviews, and look up seller information.