M.Video Scraper - Russian Electronics Prices by Category & City avatar

M.Video Scraper - Russian Electronics Prices by Category & City

Pricing

from $0.70 / 1,000 product scrapeds

Go to Apify Store
M.Video Scraper - Russian Electronics Prices by Category & City

M.Video Scraper - Russian Electronics Prices by Category & City

mvideo.ru scraper: category ids (205 = smartphones) in Moscow, St Petersburg or 8 more cities to one row per product with shown, base and promo price, discounts, M.Club bonus rubles, stock flags, rating, seller, specs and photos. For Russian electronics price watches.

Pricing

from $0.70 / 1,000 product scrapeds

Rating

0.0

(0)

Developer

Superslow Sloth

Superslow Sloth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

M.Video scraper: Russian electronics prices by category and city

This M.Video scraper reads mvideo.ru's category listings for the city you choose (Moscow, Saint Petersburg, Yekaterinburg, Novosibirsk, Kazan and five more) and returns one flat row per product: the shown price in rubles, the base (crossed-out) price, the promo price, the discount and the promotions behind it, M.Club bonus rubles, stock flags (sold out, retail-store only, pre-order), star rating and review count, the marketplace seller when a third party sells it, brand and model, five key specs and the photos. Run it on a schedule and diff the dataset to get a price watch for a category in a city: which phones dropped in price, which went out of stock, which marketplace sellers undercut M.Video.

No account, no API key, no login, no browser. One page is 48 products.

Input

FieldNotes
categoryIdsmvideo.ru category ids, one per line: the number at the end of a category link, so https://www.mvideo.ru/smartfony-i-svyaz-10/smartfony-205 is 205 (smartphones, the default). The whole link works too. Up to 20 categories.
cityOne of moscow (default), saint-petersburg, yekaterinburg, novosibirsk, kazan, nizhny-novgorod, samara, krasnodar, chelyabinsk, rostov-on-don. Prices and the assortment differ by city.
maxItemsProducts to return per category (default 100, up to 20,000), cheapest first.
proxyConfigurationApify datacenter proxy by default.

Example input:

{
"categoryIds": ["205"],
"city": "moscow",
"maxItems": 500
}

Output

FieldNotes
city, city_nameThe city slug you asked for and its name as the site writes it (Москва).
search_category_idThe category id the product was listed under.
positionPlace in the category in the site's price-ascending order, 1 = cheapest. The site sorts by its own index, which can trail a live price change: 3 of 96 neighbours checked were out of order by price, by 43 to 380 rubles.
product_idM.Video's product id, the unique key. A product listed under two of your categories is returned once, under the first.
name, urlAs shown, and https://www.mvideo.ru/products/<product_id>.
brand, brand_id, model_nameFrom the product card.
category_id, category_nameThe product's own category (Смартфоны, iPhone). Its id is a different number from the listing's category id (products listed under 205 carry 761).
priceThe price the site shows (salePrice), in rubles.
base_priceThe price before discounts (basePrice).
promo_pricebasePromoPrice as the site sends it. It equalled price on 98 of 100 products checked and was null (not sent) on the other 2.
discount_amount, promotionsThe listed discounts added up, in rubles, and their names (Скидка по акции). discount_amount is 0 when the site lists no discount.
is_final_priceThe site's own flag.
bonus_rublesM.Club bonus rubles the purchase earns.
currencyAlways RUB.
rating, review_countStar rating out of 5 and the number of reviews.
sold_out, available_only_in_retail_store, is_preorderStock flags. A sold-out product still has a price, and is returned (35 of 108 products checked were sold out).
used_product_typeThe site's used/refurbished marker (BU1P); null for new.
seller_id, seller_nameThe marketplace seller for a product a third party sells.
image_url, imagesThe main photo and all photos (https://img.mvideo.ru/...).
key_specsUp to five key specs as the site labels them, e.g. {"Экран": "6.9\"/1600x720 Пикс", "Оперативная и встроенная память": "8 ГБ/256 ГБ"}.

Honest nulls

A field the site did not send is null, never 0:

  • rating is null for an unreviewed product. The site sends a 0-star rating with 0 reviews there; that is not a rating of 0, so rating is null and review_count is 0. When the site sends neither, both are null.
  • seller_id/seller_name are null when the site names no supplier. In the products checked that was every product from M.Video's own stock and none of the marketplace ones.
  • promo_price is null when the site does not send it, as for 2 of 100 products checked (both undiscounted). bonus_rubles and base_price are null the same way if a price record ever arrives without them; every one checked had them.
  • A product without a price is not returned. Each row joins the product card and the city's price; an id the search lists but for which the card or the price does not come back is skipped, logged and not charged.

Pricing

Pay per event:

  • $0.002 per run (actor-start), charged only after your input is validated, so a run that fails on bad input costs nothing.
  • $0.0007 per product row written (product-scraped), i.e. $0.70 per 1,000 products. A row that is not written is not charged: repeats and products without a price are free.

How it fetches

It reads the same JSON API (/bff/...) the mvideo.ru web app calls for a listing page, three requests per 48 products: the category search (product ids only), the product cards (POST /bff/product-details/list) and the city's prices (/bff/products/prices). The city is four cookies the site sets when you pick a city; their values for each supported city were read from the site's own location endpoints (Moscow's match what the site's own pages send). Measured 2026-10-23 from Apify datacenter addresses: HTTP 200 on the search and prices calls, and on the product-card call when a mvideo.ru Referer is sent (8 of 8; 0 of 10 without). A refusal (403 block page, 429, 5xx), an HTTP 200 without the data, or the site's per-address escalation (an HTTP 400 asking for session cookies that it sends after a few hundred requests from one address) is treated as the address being refused: the actor rotates to a fresh address and retries. It also changes address every 40 pages on its own.

Things worth knowing, all measured:

  • Cheapest first, always. In the site's default order the search pages skip and repeat products (each page after the first returned 23 of 24, and two pages of 24 did not match one page of 48). Sorted by price ascending they page cleanly, so that is the order used.
  • How deep it goes: the whole category. One walk of smartphones in Moscow listed 8,212 products, 8,212 distinct, matching the site's total; the last page held 12 and the next one none. The site's total moved between 8,212 and 8,214 during the day, so the walk ends on a short or empty page, not on the total.
  • Unknown category ids return no products (HTTP 200, total 0); the run logs it and goes on.
  • Other cities. Only the ten cities above are offered, because each needs its own four cookie values and these ten were read from the site and checked. The category totals differ per city (smartphones: Moscow 8,213, Saint Petersburg 7,373, Novosibirsk 7,246 in the same hour).

If mvideo.ru changes its API, the run fails with a message instead of returning empty rows.