In September 2026 I collected the online prices of Moscow pharmacies over a single day through the parso.ru price monitoring service. The monitoring captured 262,000 offers from 3,445 pharmacies belonging to 33 chains. An offer is one product in one pharmacy, with a price and same-day collection. I assigned each pharmacy to its nearest metro station, which gave 264 stations.
By a pharmacy's neighbours I mean the pharmacies of other chains at the same station. A customer looking for a medicine on a pharmacy aggregator's map sees their prices side by side. I compared every offer with them: whether the pharmacy is cheaper or dearer than its neighbours, by how much, and whether it has the products they have.
I advise pharmacy chains, take part in developing pricing services for retail, and am affiliated with parso.ru and flexpricer.ru.
I looked at how chains set prices in “The drug market grew 13 percent without selling a single extra pack”. This piece is about where that price ends up next to the competitor across the street.
One pack, fourteen prices
On the day of the measurement, 14 chains at Novokosino station were selling a 60-tablet pack of Artra MSM Hyaluronic. Apteki Plus sold it cheapest, at 2,370 roubles. Apteka Ekonom and Apteka.ru asked 2,389 roubles, Planeta Zdorovya 2,615. Rigla and Zdravcity.ru set an identical price of 3,215 roubles. The most expensive were ASNA at 3,789 roubles and Gorzdrav at 3,793. The gap between the extremes was 1,423 roubles, or 60%.
Spreads of this size occur all over Moscow. I took every pair of station and product where at least four chains sell the product; there are 16,673 such pairs. In half of them (52%) the most expensive chain asks at least 20% more than the cheapest. In a quarter (27%) the difference exceeds 30%. In 7% of pairs the most expensive chain charges one and a half times the cheapest price or more.
A customer who books a medicine through an aggregator sees all these prices in one list. I looked at how booking works and what share of sales passes through it in “Selling what isn't there”.
Who is cheaper than the neighbours
One pack says little about a chain: at Novokosino Gorzdrav is the dearest, yet across Moscow its prices sit close to those of its neighbours. For the ranking I therefore compared with the neighbours every offer a chain has where at least three other chains quote a price at the same station.
The reference point was the neighbours' median. The median splits a series of prices in two: half the neighbours sell below it, half above. For each offer I calculated by what percentage the chain's price is above or below the neighbours' median. I call this the deviation from neighbours. The median of these deviations across all of a chain's offers sets its place in the ranking.
Apteka Ekonom keeps its prices lowest relative to its neighbours, with a deviation of −9.5%. Fewer than 1% of its offers are 10% or more above the neighbours. Next come Melodiya Zdorovya (−8.9%), Vasha No. 1 (−7.2%), Apteki Plus (−6.3%) and Planeta Zdorovya (−5.4%). Planeta holds that price level across 283 pharmacies.
The highest prices are at Apteka Aprel (+14.8%) and ASNA (+8.9%). Two thirds of Aprel's offers are more than 10% above the neighbours; for ASNA it is almost half. They are followed by Evalar (+5.9%), Aloe (+4.4%) and Zdravcity.ru (+3.2%).
The largest national chains sit close to the middle: Rigla +1.9%, 36.6 +2.2%, Gorzdrav +2.3%. In a large chain even a small share of dear offers adds up to a big number. The monitoring covers 902 Gorzdrav pharmacies, and 17.8% of its offers are 10% or more above the neighbours. For one day that comes to 9,025 offers. ASNA has 3,158 such offers, Apteka Aprel 1,578, Apteka Ekonom 25.
All 25 chains are shown in Figure 1: on the left those that price below their neighbours, on the right those that price above.
One price for the city, or a price for each pharmacy
The deviation from neighbours shows a chain's overall price level, but not whether the price is the same in all its pharmacies. I checked that separately: I took products the chain lists in at least three of its own pharmacies and compared their prices between pharmacies.
Five chains keep one price in every pharmacy: Gorzdrav, 36.6, Vasha No. 1, Apteki Plus and Eapteka.ru. Fewer than 1% of their products carry different prices. For Gorzdrav that means one price across all 902 of its pharmacies in the monitoring.
Other chains price almost every product differently. Zhivika has different prices for 99% of products, Magnit Apteka for 97%, Evalar for 96%, Planeta Zdorovya for 93% and Apteka Vita for 92%. I measured the spread as the difference between a chain's cheapest and dearest pharmacy for one product. The median spread at these chains lies between 11% at Evalar and 22% at Apteka Vita. Apteka Aprel prices 97% of products differently, and its median spread reaches 34%.
Figure 2 brings the two measures together. The horizontal axis shows the deviation from neighbours, the vertical axis the share of products priced differently across pharmacies. Chains with one price sit at the bottom, chains that change prices from one pharmacy to the next sit at the top. The top group includes both cheap and dear chains.
Prices differ, but they do not follow the neighbours
A chain that changes prices from one pharmacy to the next may be adjusting to competitors. In that case, where the neighbours are dearer, it should be dearer too. I checked this for each product. First I calculated how far the chain's price in a given pharmacy sits above or below its Moscow average for that product. Then I did the same for the neighbours' median at that station. For a chain that tracks its neighbours, the two deviations rise and fall together.
For the 25 Moscow chains they are barely linked. When the neighbours at a station are 10% above their own average, Evalar's price in that pharmacy is 2.8% above its own. That is the strongest link among the 25 chains. Magnit Apteka comes to 1.8%, Apteka Aprel 1.5%, Apteka Vita 0.6%. Planeta Zdorovya, Rigla and Zdravcity.ru show no link whatsoever: their price in a given pharmacy is independent of the neighbours.
So chains set different prices by their own rules, and competitors' prices at the station play almost no part in those rules. What the rules are cannot be seen from online prices.
ASNA stands apart in these calculations. Its prices differ for every product, and the median spread between its pharmacies reaches 58%. ASNA unites pharmacies with different owners: in the monitoring, pharmacies trading under more than 60 different names operate under its label. ASNA's figures in the charts are therefore best read as an average across 245 pharmacies belonging to different companies.
The neighbours have it, the pharmacy does not
A low price does not help a pharmacy if the product is not on the shelf. The monitoring shows this too: it only captures products that can be collected the same day.
I measured out-of-stocks relative to the neighbours as well. For each of a chain's pharmacies I took the products that at least three other chains at the same station have today. Of these I kept the chain's own core products, meaning those stocked in at least half of its pharmacies. If a core product is missing from the pharmacy while the neighbours have it, the customer will collect it from a neighbour. I call the share of such products the out-of-stock rate relative to the neighbours.
Apteka Ekonom is the least often without a core product: 9.2% of such products are missing. Magnit Apteka, Eapteka.ru and Melodiya Zdorovya are at about 13%, Planeta Zdorovya at 21.7%. Rigla is at 28.8%, Apteka Aprel at 29.6%, Gorzdrav at 30.8%. The highest rates are at Zdes Apteka (38.8%) and ASNA (42.5%).
Across a chain this means thousands of cases a day. Gorzdrav had 13,139: a core product missing from the pharmacy while three or more neighbours at the station had it. Planeta Zdorovya had 5,349 such cases and Rigla 3,595. All 25 chains are shown in Figure 3.
What to measure in your own chain
These calculations add up to three figures a chain owner should know. The first is the share of offers where a pharmacy is more than 10% above the median of its neighbours at the same station. Across Moscow it ranges from 0.6% at Apteka Ekonom to 66% at Apteka Aprel.
The second shows whether the chain changes prices from one pharmacy to the next and whether that price follows the neighbours. The strongest link in Moscow is Evalar's: 2.8% for every 10% at the neighbours.
The third is the out-of-stock rate relative to the neighbours, that is, the share of core products missing from a pharmacy although the neighbours have them. Across Moscow it ranges from 9.2% at Apteka Ekonom to 42.5% at ASNA.
All three figures need the prices and availability of every neighbour, for every pharmacy and every product, on the same day. parso.ru collects such data.
Methodology
Monitoring of online prices on one popular pharmacy aggregator over a single day in September 2026, Moscow, in-store collection with the product available on the day of the order. Each pharmacy is assigned to the nearest metro station.
A chain's price is compared with other chains' prices for the same product at the same station. Offers enter the calculation when there are at least three such prices. The ranking covers 25 of the 33 chains, each with at least 300 such offers.
The number of pharmacies in the figures is the chain's pharmacies captured by the monitoring, not the size of the whole chain. A chain is identified by the aggregator's partner. Zdravcity.ru, Eapteka.ru and Apteka.ru hand over orders in other chains' pharmacies at their own price; the ranking uses their own price.
A price counts as different when the chain's highest price for a product exceeds the lowest by more than 1%. Only products listed in three or more of the chain's pharmacies are included.
The link with the neighbours is estimated as a regression slope: the deviation of the chain's price in a pharmacy from its average price for the product, against the deviation of the neighbours' median at the same station from their average. A slope of 1 means the price follows the neighbours fully; a slope of 0 means it does not depend on them. Evalar's “2.8% per 10%” corresponds to a slope of 0.28.
Out-of-stock relative to the neighbours: the product is available today at no fewer than three other chains at the same station, the chain stocks it in at least half of its pharmacies, and this pharmacy does not have it for same-day collection. A product available to order for the next day counts as missing. ASNA has only 7 core products, so its figure rests on a small base. For Zdravcity.ru, Eapteka.ru and Apteka.ru availability depends on the shelves of the pharmacies where they hand over orders.
A single day of monitoring does not cover the chains' full range; the conclusions apply to the sample of products.
- Online pharmacy price monitoring in Moscow, parso.ru, September 2026