Magnit Grocery Price & Stock Monitor avatar

Magnit Grocery Price & Stock Monitor

Pricing

from $10.00 / 1,000 results

Go to Apify Store
Magnit Grocery Price & Stock Monitor

Magnit Grocery Price & Stock Monitor

Scrape & monitor the Magnit (magnit.ru) grocery catalogue per store — price, discount (old price + %), rating and stock. Tracks promo start/end, price moves and products going out of stock between runs. Cheap datacenter proxy, no browser.

Pricing

from $10.00 / 1,000 results

Rating

0.0

(0)

Developer

Sasha Ebashu

Sasha Ebashu

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 hours ago

Last modified

Share

Scrapes the Magnit grocery catalogue (magnit.ru) by category — product name, price, stock status, image and URL — for a specific store — and tracks how prices and availability change between runs.

Runs on Apify's cheap datacenter proxy. No browser, no residential proxy, no CAPTCHA solving.

Prices are per STORE — this is the important part

Magnit does not have one national price list. Prices differ per store, not merely per city: two Magnit shops on different streets of the same city can price the same item differently, and across regions the gap is large. Measured on one category, comparing a Krasnodar store against a Volzhsk store: 20 of the 47 products they share had different prices — for example

ProductKrasnodarVolzhsk
Крабовые палочки Русское море охлажд.139.99 ₽99.99 ₽
Краб Крем-Фиш снежный 150г111.59 ₽89.99 ₽
Креветка Agama королевская569.99 ₽599.99 ₽

So every row carries shopCode and shopAddress, and comparisons only make sense within one store.

Getting your store code

Open magnit.ru, pick your store, then read the shopCode cookie — that number is the input. Leave Store code empty to use whatever store the site defaults to; the Actor still reports which one that was.

An unknown code does not raise an error. Magnit silently falls back to its default store and serves those prices instead. The Actor detects this and logs a clear warning, so a typo cannot quietly hand you the wrong store's data.

What you get

One row per product:

store, shopCode, shopAddress, productId, name, price, oldPrice, discountPercent, onSale, currency, available, unitPrice, unitLabel, isWeighted, cashback, rating, reviewsCount, ratingsCount, image, url, categoryName, categoryPath, scrapedAt

Discounts are the point

Magnit runs promos constantly — in a 1,200-product sample 61% of items were discounted. Every row carries the pre-promo oldPrice and the discountPercent, so you can tell a genuine shelf-price change from a temporary promo. Ratings and review counts come along for free.

Monitor mode

Each row also gets changeType, previousPrice, priceLow30, priceHigh30, firstSeenAt, lastConfirmedAt.

changeTypeMeans
newFirst time this product was seen in this scope
promo_startWent on discount since the last run
promo_endDiscount finished
price_up / price_downShelf price moved with no promo change
out_of_stockWas in the catalogue before and has now vanished from it
unchangedNothing moved

promo_start / promo_end are checked before the plain price comparison, because a drop caused by a promo is a different event from the shelf price itself changing — only the former reverts.

About out_of_stock: Magnit does not mark items as unavailable — it simply stops listing them (the catalogue reports InStock for every product it shows, 99/99 sampled). So a product that was in the baseline and is no longer in the listing has gone out of stock or been delisted. It is reported once, then dropped from the snapshot. This detection is skipped whenever the run did not cover every category in full — cut short by the time budget, the cost cap, Max results, or a category that returned nothing — because then "missing" would just mean "not reached". The log says so when that happens.

Turn on Output only changed products to drop unchanged rows — you then pay for and read only what actually moved. out_of_stock rows are always emitted; a disappearance is a change.

Input

FieldWhat it does
Category URLsCategories to scrape. Paste from the browser (https://magnit.ru/catalog/4998-ryba_moreprodukty) or just the id-slug.
Store code (shopCode)Which store's prices to read. Empty = site default.
Crawl all categoriesDiscover categories from Magnit's sitemap (~714) instead of listing them.
Category filterWith the sitemap crawl: keep only categories whose URL contains this text (moloko, ryba, …).
Max categories from sitemapSafety cap for the sitemap crawl.
Max pages per category32 products per page; the Actor stops on its own when a category ends.
Max resultsGlobal cap. 0 = no limit.
Monitor mode / Output only changedChange-tracking, described above.

Notes & limits

  • The listing is the data source. Magnit's individual /product/<id> page is rendered in the browser and contains no price in its HTML, so this Actor reads the category listings, which Magnit server-renders into its Nuxt payload (with the JSON-LD OfferCatalog as a fallback if that payload ever changes shape — those rows then carry price and name but no discount, rating or unit data, and the log says how many pages were affected). Reading listings is also why it stays cheap: measured $0.03 per 1,000 products.
  • Monitor snapshots are scoped to the categories and the store. Changing the store starts a fresh history rather than reporting every price as "changed" — which is what a shared snapshot would produce, since prices legitimately differ per store.
  • The Actor honours your Maximum cost per run: it stops when the cap is reached and says so, instead of scraping pages the platform would discard.
  • If a category yields nothing, it is reported in the log and saved to the EMPTY_CATEGORIES record rather than passing silently.