Vita Pharmacy Price & Availability Monitor
Pricing
from $25.00 / 1,000 results
Vita Pharmacy Price & Availability Monitor
Track prices and stock across the Vita pharmacy chain (vitaexpress.ru) — price, availability, out-of-stock (дефектура) detection, and what changed since the last run.
Pricing
from $25.00 / 1,000 results
Rating
0.0
(0)
Developer
Sasha Ebashu
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Track prices, stock and drug shortages (дефектура) across Vita (vitaexpress.ru) — one of Russia's largest pharmacy chains (~1,200 stores, ~24,700 products).
Most RU pharmacy chains hide their catalogue behind anti-bot walls. Vita's own product pages expose a rich data record — this Actor reads it directly and, in Monitor mode, tells you what changed since the last run.
What you get
One row per product, with the fields a pharmacy analyst actually needs:
| Field | Meaning |
|---|---|
name, fullName, productId, url | Product identity |
price, maxPrice, priceCurrency | Price in ₽ (out-of-stock rows keep the last known price) |
city, cityId | The city the site rendered (default St. Petersburg / 251). Reported for transparency — Vita's prices and stock are chain-wide, not per-city (verified across Самара / СПб / Саратов / Смоленск) |
available, canSell, canDeliver | Stock & sellability |
defectureProduce, defectureRus | Vita's own shortage flags — producer shortage / national shortage. Tells you why something is unavailable, not just that it is |
mnn, mnnIds | Active ingredient(s) (МНН) — group products across brands |
recipe, noRecipe, pku, isTermo, isAlcohol, isAdult | Rx & handling flags |
maker, land, form, packaging, shelfLifeMonths, storage | Manufacturer, country, dosage form, packaging, shelf life, storage conditions |
brand, category, categoryPath, image, analogsCount | Merchandising data |
In Monitor mode, every row also gets: changeType (new / price_up / price_down / stock_change / delisted / relisted / unchanged), previousPrice, previousAvailable, firstSeenAt, lastConfirmedAt, and a 30-day price band (priceLow30 / priceHigh30).
Delisted products are reported, not dropped. If Vita removes a product (its page starts returning 404), you still get a row — delisted: true, available: false, changeType: "delisted" — carrying the last known name and price from the previous run. A product leaving the catalogue is a signal, not missing data. The delisting is reported once — after that it stays unchanged until the product returns, which is reported as relisted.
Use it for
- Price monitoring — track a competitor's or your own prices; get only what moved (
onlyChanges). - Shortage (дефектура) tracking — catch products going out of stock, and whether it's a producer/national shortage.
- Assortment research — by active ingredient (МНН), manufacturer, country, or dosage form.
Input
| Option | Description |
|---|---|
| Product URLs | Specific vitaexpress.ru/product/… pages. Any Vita product URL is normalised. |
| Crawl the catalogue | Pull products from Vita's product sitemap (~24.7k). |
| Catalogue filter | Narrow the crawl by slug substring — slugs are latin-transliterated (troksevazin, vitamin, omega). |
| Max products from catalogue / Max products | Keep a run bounded. |
| Monitor mode / Only output changes | Compare against the previous run; optionally emit only what changed. |
| Max concurrency | Parallel page fetches (default 24, max 30). Residential latency (~5 s/request) is the bottleneck, so this scales throughput almost linearly — the default is verified at scale: 1000 products in 3.5 min, zero skips, 4× faster than concurrency 6. |
| Proxy | Residential Russia is required (see below) and is the default. |
Example
{"crawlSitemap": true,"productFilter": "vitamin","maxProductsFromSitemap": 200,"monitorMode": true,"onlyChanges": true}
Run it on a schedule and each run's dataset is a clean list of every vitamin whose price or stock moved.
Notes & limits
- Residential RU proxy is required. Vita rate-limits datacenter IPs (HTTP 503). The Actor defaults to Apify Residential + Russia; keep it that way. If every request fails, the run fails loudly with an explanation rather than returning an empty dataset.
- Prices are chain-wide, not city-specific. Verified by switching the site's city (Самара / СПб / Саратов / Смоленск): price, stock and shortage flags come back identical. The
cityfield just records which city the site rendered (St. Petersburg by default) — you do not need to run the Actor per city. - Out-of-stock products keep their last known price and are marked
available: false, with the shortage flags explaining why. - Vita intermittently 503s even residential IPs; the Actor retries on a rotated session, which clears it — a 1,000-product run completed 1000/1000 with zero skips.
- Active ingredient (
mnn) is only present for medicines and supplements (~1/3 of the catalogue) — cosmetics, hygiene and food products legitimately have none. Every prescription product carries one. - One request per product — a full 24.7k catalogue sweep is large (~$20 of residential traffic). Use the filter and the caps, or crawl in batches.