Magnit Grocery Price & Stock Monitor
Pricing
from $10.00 / 1,000 results
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
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
| Product | Krasnodar | Volzhsk |
|---|---|---|
| Крабовые палочки Русское море охлажд. | 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.
changeType | Means |
|---|---|
new | First time this product was seen in this scope |
promo_start | Went on discount since the last run |
promo_end | Discount finished |
price_up / price_down | Shelf price moved with no promo change |
out_of_stock | Was in the catalogue before and has now vanished from it |
unchanged | Nothing 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
| Field | What it does |
|---|---|
| Category URLs | Categories 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 categories | Discover categories from Magnit's sitemap (~714) instead of listing them. |
| Category filter | With the sitemap crawl: keep only categories whose URL contains this text (moloko, ryba, …). |
| Max categories from sitemap | Safety cap for the sitemap crawl. |
| Max pages per category | 32 products per page; the Actor stops on its own when a category ends. |
| Max results | Global cap. 0 = no limit. |
| Monitor mode / Output only changed | Change-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-LDOfferCatalogas 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_CATEGORIESrecord rather than passing silently.