Yandex Market API & Scraper
The Yandex Market API turns market.yandex.ru, one of Russia's largest marketplaces, into JSON in four actions.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
search returns the keyword result grid with the site's four sorts (popular, cheapest, most expensive, rating) and a price range; every row carries product_id, model_id and sku_id, the title, the price the buyer pays and the struck price with the discount, the row's own printed price for checking, stock count, rating, number of ratings and purchases, the selling shop, delivery dates and the site's own promoted-row flag. category/products lists one category by its id or URL, optionally with a keyword inside it, with the same sorts, price range and row fields. product/detail returns one product card in full: title, brand, the category path, every image, description, the specification table, current and struck price, stock, rating, the shop with its rating, order count and the public legal record the card prints, plus how many sellers offer the product and from which price. product/offers lists every seller offering one product with each offer's price, stock and delivery dates. Prices are in rubles for the Moscow delivery region. One ReefAPI key, the standard { ok, data, meta, error } envelope, no Yandex account.
What one Yandex Market product returns
Real results read on 2026-10-14. The price on every result row was compared with the price the row itself prints: 80 of 80 rows matched in each of three runs, and the product card's price matched the card's own structured data on 18 of 18 cards.
| product | what the page shows | price / was_price | other fields |
|---|---|---|---|
| CASIO G-Shock watch, search row | 7 213 ₽, struck price shown on the card | 7213 / 12521 | discount_percent 42, stock_quantity 226, rating 4.8 (49) |
| CASIO G-Shock GBM-2100A-4B, product card | 18 096 ₽ · 30 389 ₽ · –40% | 18096 / 30389 | offers_count 2, offers_min_price 18070 |
| Same product, all sellers | two offers, 18 070 ₽ and 23 157 ₽ | 18070 and 23157 | seller name per offer |
price is always what the buyer pays without an account; was_price is the struck price and is null when nothing is discounted. Prices change during the day: the same card read 18 070 and then 18 096 rubles a few minutes apart, so store the time you read them.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/yandex-market/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "casio g-shock"
}
}{
"ok": true,
"meta": {
"api": "yandex-market",
"endpoint": "search",
"mode": "live",
"latency_ms": 3121.7,
"record_count": 8,
"bytes": 1836230,
"cache_hit": false,
"upstream_requests": 1,
"charged_credits": 3,
"version": "0.1.0",
"request_id": "ffe9421d5c7844c7",
"queue_ms": 1.4,
"fetched_at": "2026-10-14T18:57:35.642Z"
},
"data": {
"results": [
{
"position": 1,
"product_id": "5043663052",
"sku_id": "553235493",
"model_id": "112364506",
"offer_id": "I-mVwC-xpbyfE1cPaODccA",
"title": "Наручные часы G-Shock",
"url": "https://market.yandex.ru/card/casio-g-shock-ga-2100-1a1/5043663052",
"image": "https://avatars.mds.yandex.net/get-mpic/1589815/img_id3986589323776303814.jpeg/orig",
"price": 7213,
"was_price": 12521,
"discount_percent": 42,
"discount_badge_percent": 42,
"price_display": 7213,
"currency": "RUB",
"available": true,
"stock_quantity": 31,
"rating": 4.8,
"rating_count": 49,
"purchase_count": 192,
"seller": {
"name": "Time to Stars",
"shop_id": "217033681",
"business_id": "216634294",
"supplier_id": "217033681"
},
"brand_id": "152967",
"category_id": "91259",
"is_express": false,
"is_cross_border": false,
"sponsored": false,
"badges": [
"Оригинал",
"Скидка 42%",
"Промокод 7 %"
],
"delivery": [
{
"type": "[trimmed-depth]",
"date_from": "[trimmed-depth]",
"date_to": "[trimmed-depth]"
},
{
"type": "[trimmed-depth]",
"date_from": "[trimmed-depth]",
"date_to": "[trimmed-depth]"
},
{
"type": "[trimmed-depth]",
"date_from": "[trimmed-depth]",
"date_to": "[trimmed-depth]"
}
]
},
{
"position": 3,
"product_id": "5043670581",
"sku_id": "947340007",
"model_id": "1779623231",
"offer_id": "Jvwe0mj2SpmYv5vMY74WHw",
"title": "Наручные часы G-Shock",
"url": "https://market.yandex.ru/card/casio-g-shock-gba-900-7a/5043670581",
"image": "https://avatars.mds.yandex.net/get-mpic/11621477/2a0000018c41438d70455899e29e0e294a4f/orig",
"price": 10927,
"was_price": 17915,
"discount_percent": 39,
"discount_badge_percent": 39,
"price_display": 10927,
"currency": "RUB",
"available": true,
"stock_quantity": 44,
"rating": 4.7,
"rating_count": 44,
"purchase_count": 117,
"seller": {
"name": "Time to Stars",
"shop_id": "216701236",
"business_id": "216634294",
"supplier_id": "216701236"
},
"brand_id": "152967",
"category_id": "91259",
"is_express": false,
"is_cross_border": false,
"sponsored": true,
"badges": [
"Ниже рынка",
"Оригинал",
"Скидка 39%"
],
"delivery": [
{
"type": "[trimmed-depth]",
"date_from": "[trimmed-depth]",
"date_to": "[trimmed-depth]"
},
{
"type": "[trimmed-depth]",
"date_from": "[trimmed-depth]",
"date_to": "[trimmed-depth]"
},
{
"type": "[trimmed-depth]",
"date_from": "[trimmed-depth]",
"date_to": "[trimmed-depth]"
}
]
},
{
"position": 4,
"product_id": "5043410507",
"sku_id": "5205809094",
"model_id": "1288674535",
"offer_id": "KmAjW31gxo75eG2NMO8s1g",
"title": "Наручные часы G-Shock",
"url": "https://market.yandex.ru/card/casio-g-shock-gd-350-1e/5043410507",
"image": "https://avatars.mds.yandex.net/get-mpic/11552111/2a0000018eb04eb0c582313ee55796ad3af4/orig",
"price": 6348,
"was_price": 11683,
"discount_percent": 46,
"discount_badge_percent": 46,
"price_display": 6348,
"currency": "RUB",
"available": true,
"stock_quantity": 49,
"rating": 4.9,
"rating_count": 14,
"purchase_count": 27,
"seller": {
"name": "Time to Stars",
"shop_id": "216657026",
"business_id": "216634294",
"supplier_id": "216657026"
},
"brand_id": "152967",
"category_id": "91259",
"is_express": false,
"is_cross_border": false,
"sponsored": false,
"badges": [
"Ниже рынка",
"Оригинал",
"Скидка 46%"
],
"delivery": [
{
"type": "[trimmed-depth]",
"date_from": "[trimmed-depth]",
"date_to": "[trimmed-depth]"
},
{
"type": "[trimmed-depth]",
"date_from": "[trimmed-depth]",
"date_to": "[trimmed-depth]"
},
{
"type": "[trimmed-depth]",
"date_from": "[trimmed-depth]",
"date_to": "[trimmed-depth]"
}
]
}
],
"count": 8,
"page": 1,
"total_results": 802,
"total_pages": 30,
"has_more": true,
"sort_applied": "popular",
"applied_filters": {},
"carousel_rows_dropped": 0,
"region": {
"id": 213,
"delivery_point": "Москва",
"delivery_point_id": 213
},
"query": "casio g-shock"
}
}What the Yandex Market API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search Yandex Market by keyword: the result grid with the price the buyer pays and the struck price, stock, rating, seller, delivery dates and the promoted-row flag, sorted and price-filtered like the site. | Pricing teams call search to search Yandex Market by keyword. | query, page, sort, price_min, price_max |
| category/products | List one Yandex Market category (optionally with a keyword inside it), with the site's sorts and price filter; same row fields as search. | Marketplace operators call category/products to list one Yandex Market category (optionally with a keyword inside it), with the site's sorts…. | category, query, page, sort, price_min, ... |
| product/detail | One Yandex Market product card by product number or URL: title, brand, category path, images, description, specifications, current and struck price, stock, rating, the selling shop with rating, order count and public legal record, and how many sellers offer it from which price. | Catalog enrichment teams call product/detail to get one Yandex Market product card by product number or URL. | product_id, url |
| product/offers | Every seller offering one Yandex Market product (by model_id): each offer's price and struck price, stock, seller, rating and delivery dates. | Retail analysts call product/offers to get every seller offering one Yandex Market product (by model_id). | model_id, sku_id |
Call search from your stack
curl -X POST https://api.reefapi.com/yandex-market/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"casio g-shock"}'import requests
r = requests.post(
"https://api.reefapi.com/yandex-market/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "casio g-shock"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/yandex-market/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "casio g-shock"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.yandex-market.search with {"query":"casio g-shock"}.Who uses this API and why
- Track prices on Yandex Market: product/detail for your SKUs, with the paid price, struck price, stock and the cheapest competing offer.
- Monitor competing sellers: product/offers lists every seller of a product with price, stock and delivery dates.
- Map a category: category/products with the cheapest-first sort and a price range returns the market's price ladder.
- Compare with Wildberries: the same keyword on both marketplaces gives paid and struck prices side by side.
- Audit sellers: the card's shop block carries rating, order count and the public legal record.
Questions developers ask before integrating
Which prices does it return?
The price the buyer pays (price), the struck price (was_price) with the computed discount_percent, and on result rows the price the row itself prints (price_display), so you can check the unit. On a product card any further price the card prints with its own label goes to other_prices. In our 2026-10-14 sample (22 product cards, 72 result rows on six listing pages) an anonymous Moscow visitor was shown no separate Yandex Pay, bank-card or Plus price, so none is returned; prices that appear only after signing in are not available.
Which region are the prices for?
Moscow (region 213), in rubles. Every response carries a region block with the region id the page was served for, so a different region can never pass unnoticed.
Why is the card's price sometimes higher than the cheapest offer?
The product card shows its default offer, which is not always the cheapest one. The card also returns offers_count and offers_min_price (for example a card at 18 096 rubles said 'all 2 offers from 18 070'), and product/offers lists every seller with its own price.
What does sponsored mean?
It is the site's own flag for promoted placements in the result grid. On 2026-10-14 about 66 of 80 sampled rows were promoted. Rows are kept and flagged, never dropped, so you can filter them yourself.
How many rows does one page return?
The first result page returns up to 8 or 9 grid rows and later pages up to 16 or 17, up to page 30. Each row carries its position on the page. total_results is the site's own figure; it is not comparable between a keyword search and a keyword-less category listing.
How do I get every seller of a product?
Take model_id and sku_id from a search row or product card and call product/offers. With sku_id the offers match the card's own 'all offers' block (cheapest 7 213 = card's 7 213 in our runs); without it you get every variant of the model.
What does the seller block contain?
On product/detail: the shop name, its ids, rating, number of ratings and orders, subscribers, months on Yandex Market, its status badge, and the public legal record the card prints (legal form, registered name, tax number and registration number). Result rows carry the shop name and ids.
How fast is it?
One request to the source per call in almost every case. Over two identical runs, every positive call succeeded; median times were 2.7 to 4.8 seconds for search, 1.6 to 1.7 seconds for category listings, 3.4 to 3.5 seconds for product cards and 1.4 to 1.9 seconds for seller lists, with the slowest calls around 8 seconds.
What is the Yandex Market API?
Yandex Market API is a ReefAPI endpoint group for russia's yandex market as json: keyword search, category listings, full product cards with the price the buyer pays and the struck price, stock, specifications and the selling shop, and every seller offering a product. It returns live JSON through POST requests under /yandex-market/v1.
Is the Yandex Market API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Yandex Market calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Yandex Market login or account?
No login to Yandex Market is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Yandex Market data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Yandex Market API use?
Yandex Market actions currently cost 3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Yandex Market from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call yandex-market actions with the same key, credit pool and JSON envelope used by normal REST requests.