Yandex Market Scraper API | Парсер Яндекс Маркета
Pricing
from $1.64 / 1,000 products
Yandex Market Scraper API | Парсер Яндекс Маркета
Scrape Yandex Market products by search term or catalogue URL: name, card price, price without the Yandex Pay card, old price, discount, rating, shop id, stock, category, short specs, images and product link. Moscow prices. No API key. $1.70 per 1,000 products.
Pricing
from $1.64 / 1,000 products
Rating
5.0
(1)
Developer
Dami's Studio
Maintained by CommunityActor stats
0
Bookmarked
32
Total users
17
Monthly active users
an hour ago
Last modified
Categories
Share
Search Yandex Market or paste a catalogue URL and get one row per product: name, card price, price without the Yandex Pay card, crossed-out old price, discount, rating, shop id, stock, category, the short spec line, images and a clean product link.
Three things worth knowing before the first run. Prices are Moscow prices, because that is the region
Yandex Market serves this catalogue from and it does not take a region hint. The headline price is
the one on the result card, which assumes payment with a Yandex Pay card, so priceWithoutCard is the
number you want for most comparisons. And since September 2026 the search pages no longer carry the
seller's name, the brand, the "bought" count, the delivery line or the card's badges, so those fields
come back empty.
| Input | Search terms, or Yandex Market search and catalogue URLs |
| Output | One row per product: prices, discount, rating, shop id, stock, specs, images |
| Ceiling | 5,000 products per run; a broad term usually runs dry well before that |
| Speed | About 230 to 280 products a minute, measured on three cloud runs |
| Account needed | None, and no API key |
| Price | $1.70 per 1,000 products, flat on every plan. The free plan's $5 a month covers about 2,900 |
🔍 What Yandex Market Scraper does
Two ways in, and they work together in one run.
Search. A term like фен or iphone 15, and it pages through the results until it hits your cap
or the search stops producing anything new. Russian terms reach more of the catalogue; Latin brand
and model names work fine.
URLs. Paste a Yandex Market search page or a catalogue listing and it reads that. Filters already sitting in the URL are kept, so you can build the exact view you want in a browser and hand it over.
Three prices come back on every row, and mixing them up is how a price monitor goes wrong:
| Field | What it is |
|---|---|
price | The big number on the result card. It assumes payment with a Yandex Pay card. |
priceWithoutCard | The same offer without that card discount. null when there is no difference. |
oldPrice | The crossed-out list price. discountPercent is worked out from oldPrice against price. |
📋 What data you get from each Yandex Market product
| What you get | Field |
|---|---|
| Yandex's model id, the offer it chose to show, and the stock code | productId, offerId, sku |
| Name and a clean product link | name, url |
| Card price, price without the card, old price, discount and currency | price, priceWithoutCard, oldPrice, discountPercent, currency |
| Rating and how many ratings it rests on | rating, ratingCount |
| The shop behind the offer, as an id | sellerId |
| Whether it can be added to the cart | inStock |
| Category id, and its name when the page gives one | categoryId, categoryName |
| The short spec line from the card | specs |
| Main image and the card gallery | imageUrl, images |
| Which of your inputs produced the row, and which page | searchQuery, sourceUrl, page |
| Kept for existing pipelines, empty since September 2026 | sellerName, sellerSlug, sellerUrl, brand, purchasedText, stockNote, deliveryText, badges |
▶️ How to scrape Yandex Market
- Open Yandex Market Scraper and click Try for free.
- Put your terms into Search terms, one per line, or paste links into Yandex Market URLs.
- Set Maximum products low for the first run.
- Click Start.
- Download the dataset as JSON, CSV or Excel, or read it from the Apify API.
Run it with everything empty and you get one labelled sample row, not charged.
💰 How much does it cost to scrape Yandex Market?
$1.70 per 1,000 products. Flat on every Apify plan, no volume tiers. On the free plan, the $5 Apify gives you each month covers about 2,900 products.
One row is one product. The sample row, every diagnostic row and every product dropped by your
minPrice, maxPrice or minRating filters are not charged. A search that finds nothing produces
no product rows to charge for.
📥 What you give it
{"searchQueries": ["фен", "ноутбук"],"maxItems": 200,"sortBy": "priceAsc","maxPrice": 5000}
| Field | Default | What it is |
|---|---|---|
searchQueries | none, the box holds фен | One search per line. Each term is paged until it runs out or your cap is reached. |
startUrls | empty | Yandex Market search pages or catalogue listings. Works alongside the search terms. |
maxItems | 50 | Hard cap on products across every search, 1 to 5,000. You are charged per product returned, so this is your spend cap. |
sortBy | relevance | relevance, priceAsc, priceDesc or rating. Ignored on a pasted URL that already carries its own sort. |
minPrice, maxPrice | empty | Bounds in roubles. Yandex treats an upper bound as a hint, so the cap is applied here as well. Products dropped that way are not charged. |
minRating | empty | Keep products rated at or above this, out of 5. Products with no rating yet are dropped when you set it. |
proxyConfiguration | leave it alone | Optional. Only change this if you want the run to go out through your own servers. |
📤 What you get back
A real product row from a run for фен on 26 September 2026. The images and specs lists are
trimmed here.
{"productId": "5741806961","offerId": "Xk6MuvhgNv0UlIrnf1k3Jg","sku": "103834569766","name": "Фен редмонд HD1702, Белый","url": "https://market.yandex.ru/card/fen-redmond-hd1702-1600-vt-2-skorosti-2-temperaturnykh-rezhima-belyy/4756956483","price": 1615,"oldPrice": 2379,"discountPercent": 32,"priceWithoutCard": 1665,"currency": "RUB","rating": 4.9,"ratingCount": 89,"purchasedText": null,"sellerName": null,"sellerId": "465852","sellerSlug": null,"sellerUrl": null,"brand": null,"inStock": true,"stockNote": null,"conditionNote": null,"deliveryText": null,"categoryId": "90401","categoryName": null,"badges": [],"specs": [{"name": "Мощность фена", "value": "1600 Вт"}, {"name": "Дополнительные функции", "value": "ионизация, подача холодного воздуха"}],"imageUrl": "https://avatars.mds.yandex.net/get-mpic/16369241/img_id6349726780689894057.png/orig","images": ["https://avatars.mds.yandex.net/get-mpic/16369241/img_id6349726780689894057.png/orig", "..."],"searchQuery": "фен","sourceUrl": null,"page": 1,"scrapedAt": "2026-09-26T07:07:53.743Z"}
| Field | How to read it |
|---|---|
sellerId | The id of the shop behind the offer on the card. Group by it to see who sells what. |
sellerName, sellerSlug, sellerUrl, brand | Empty. The search pages stopped carrying them in September 2026. The fields stay so existing pipelines keep their columns. |
inStock | true when the card offers an add-to-cart button. stockNote and deliveryText are empty. |
categoryName | Filled only when the page names it, which is rare now. categoryId is always there. |
specs | The short spec line from the card, as name and value pairs. Not the full spec sheet. |
🧾 Reading the output
Three kinds of row can land in your dataset.
| Row | How to spot it |
|---|---|
| A product | It has a productId and a price |
| The sample row | Written only when the input was empty |
| A diagnostic | It carries an errorCode |
Diagnostic rows are never charged, and neither are products your price or rating filters dropped.
| Code | What it means |
|---|---|
NO_RESULTS | Nothing came back for that term or URL. On a catalogue link this usually means the page only lists products when the URL carries its hid= category id; the row tells you so. |
BAD_URL | That entry is not a Yandex Market address. The other jobs carry on. |
CAPTCHA | Yandex did not serve that page on this run. Worth another run. |
FETCH_FAILED | Yandex was unreachable, or the page did not carry the product data it normally does. |
TIME_LIMIT | The run got close to its time limit and stopped early. Everything delivered before that is in your dataset; give the run more time, or ask for fewer products, to get the rest. If nothing had come back by then, the run ends as failed. |
If a job stops part way, the products it already returned stay in your dataset and stay charged. The diagnostic row tells you where it stopped.
💡 What people use it for
- Watching a competitor's prices on a schedule and diffing
priceWithoutCardbetween runs. - Pulling a whole category with
oldPriceanddiscountPercentto see who is really discounting. - Counting how many different shops a product line is sold by, through
sellerId. - Collecting images, specs and stock for a set of products, all on the row.
- Checking where your own listings sit when a shopper sorts by cheapest first.
🚧 What it does not do
- No seller names, brands, "bought" counts, delivery lines or badges. Yandex Market stopped putting them on its search pages in September 2026. You still get the shop id.
- Moscow prices only. Yandex Market serves this catalogue from Moscow and ignores a region hint, so a price in Novosibirsk can differ from the one you get here.
- One offer per product. You get the offer Yandex chose to put on the card, not the full list of sellers behind it.
- The same model can arrive twice. Rows are deduplicated on the exact offer, so if Yandex shows the same product again later under a different offer, that counts as another product and is charged as one.
- No review text. You get
ratingandratingCount, not what anyone wrote. - No sponsored flag. Yandex marks effectively everything on these pages as promoted, so the flag would tell you nothing and is not returned.
- A broad term runs dry well before 5,000 products. That is Yandex running out, not a cap here. To go deeper, split the term, use a catalogue URL, or change the sort so a different slice comes back.
- Strict filters can make a run long and thin. If almost everything is filtered out, the job
keeps turning pages looking for matches. Set
maxItemsto what you actually need. - It is not an official Yandex tool. Dami's Studio is independent and is not affiliated with or endorsed by Yandex, or by any other company named on this page.
🧭 Which Yandex scraper do you need?
| If you want | Use |
|---|---|
| Businesses on Yandex Maps, with phones, hours and coordinates | Yandex Maps Scraper |
| Reviews for a place on Yandex Maps | Yandex Maps Reviews Scraper |
| Yandex search results by keyword and region | Yandex Search Engine Scraper |
| Products and prices on Yandex Market | This one |
| Second-hand listings and private sellers on Avito | Avito Listings Scraper |
❓ Questions people ask
Do I need a Yandex account or an API key to scrape Yandex Market?
No. Nothing to register and no quota to watch.
Which price should I compare against?
priceWithoutCard when you want the plain shelf price, and price when you want the number a
shopper sees on the card. Do not mix the two between runs.
Can I get prices for my own city?
No. The catalogue answers with Moscow pricing whatever region you ask for.
Can I paste a filtered catalogue page?
Yes. Build the view you want on Yandex Market, copy the URL, and the filters in it are kept.
Can I call it from code or connect it to an AI assistant?
Yes. The API tab has ready-made code
for Python, JavaScript and the command line. For Claude, ChatGPT or another MCP client, connect
https://mcp.apify.com/?tools=fetch-actor-details,dami_studio/yandex-market-scraper. Either way the
run happens on your Apify account at the same price.
Is scraping Yandex Market legal?
These are public product listings. Apify's write-up on the legality of web scraping is a good place to start, and we are not lawyers.
🆘 If something breaks
Open the Issues tab on the actor page. Send the search term or URL and the run ID. The
errorCode on the diagnostic row usually names the problem on its own.