Vita Pharmacy Price & Availability Monitor avatar

Vita Pharmacy Price & Availability Monitor

Pricing

from $25.00 / 1,000 results

Go to Apify Store
Vita Pharmacy Price & Availability Monitor

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

Sasha Ebashu

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

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:

FieldMeaning
name, fullName, productId, urlProduct identity
price, maxPrice, priceCurrencyPrice in ₽ (out-of-stock rows keep the last known price)
city, cityIdThe 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, canDeliverStock & sellability
defectureProduce, defectureRusVita's own shortage flags — producer shortage / national shortage. Tells you why something is unavailable, not just that it is
mnn, mnnIdsActive ingredient(s) (МНН) — group products across brands
recipe, noRecipe, pku, isTermo, isAlcohol, isAdultRx & handling flags
maker, land, form, packaging, shelfLifeMonths, storageManufacturer, country, dosage form, packaging, shelf life, storage conditions
brand, category, categoryPath, image, analogsCountMerchandising 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

OptionDescription
Product URLsSpecific vitaexpress.ru/product/… pages. Any Vita product URL is normalised.
Crawl the cataloguePull products from Vita's product sitemap (~24.7k).
Catalogue filterNarrow the crawl by slug substring — slugs are latin-transliterated (troksevazin, vitamin, omega).
Max products from catalogue / Max productsKeep a run bounded.
Monitor mode / Only output changesCompare against the previous run; optionally emit only what changed.
Max concurrencyParallel 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.
ProxyResidential 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 city field 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.