Pharmacy Price Comparison — European Pharmacy Prices
Pricing
Pay per usage
Pharmacy Price Comparison — European Pharmacy Prices
Compare pharmacy prices across Europe. Searches 12 online pharmacies in BE, NL, DE, AT, SE, DK simultaneously and groups results by EAN barcode. Find the cheapest option for any medicine or health product.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Studio Amba
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Pharmacy Price Comparison
Compare pharmacy product prices across 12 European online pharmacies in 6 countries (BE, NL, DE, AT, SE, DK) with a single API call.
How to compare pharmacy prices across Europe
This actor searches multiple online pharmacies simultaneously and groups identical products by EAN barcode. You get a side-by-side price comparison showing which pharmacy offers the lowest price for any medicine, supplement, or health product.
Instead of manually visiting each pharmacy website, this actor does all the work: it runs 12 specialized pharmacy scrapers in parallel, collects their results, matches products by EAN code (or by fuzzy name matching as fallback), and outputs a unified comparison dataset.
Why use this actor?
- Save hours of manual comparison — one search query, 12 pharmacies checked automatically
- Find real savings — price differences of 20-50% are common for identical products across pharmacies
- Cross-border arbitrage — compare prices in Belgium, Netherlands, Germany, Austria, Sweden, and Denmark
- No login or cookies required — all data comes from publicly available product listings
- Automated monitoring — schedule runs to track price changes over time
Supported pharmacies
| Pharmacy | Country | Currency |
|---|---|---|
| Farmaline | Belgium | EUR |
| Multipharma | Belgium | EUR |
| Kruidvat | Belgium / Netherlands | EUR |
| Apotheek | Belgium / Netherlands | EUR |
| Viata | Belgium | EUR |
| APONEO | Germany | EUR |
| Shop Apotheke | Germany / Austria | EUR |
| dm | Germany | EUR |
| Apoteket | Sweden | SEK |
| Apotea | Sweden | SEK |
| Apotekshjärtat | Sweden | SEK |
| Matas | Denmark | DKK |
Input
| Field | Type | Required | Description |
|---|---|---|---|
searchQuery | String | No | Product to search for (default: "paracetamol") |
countries | Array | No | Country codes to include: BE, NL, DE, AT, SE, DK (default: all) |
maxItemsPerPharmacy | Integer | No | Max products per pharmacy (default: 10) |
timeoutPerPharmacySecs | Integer | No | Timeout per scraper in seconds (default: 120) |
proxyConfiguration | Object | No | Proxy settings passed to underlying scrapers |
Output
Each result is a product comparison showing the price at every pharmacy where it was found:
| Field | Type | Example |
|---|---|---|
productName | String | "Paracetamol 500mg 20 tablets" |
ean | String | "5412345678901" |
lowestPrice | Number | 2.99 |
highestPrice | Number | 4.49 |
priceDifference | String | "50.2%" |
pharmacyCount | Number | 4 |
prices | Array | Price at each pharmacy (see below) |
scrapedAt | String | ISO 8601 timestamp |
Each entry in the prices array contains:
| Field | Type | Description |
|---|---|---|
pharmacy | String | Pharmacy name |
country | String | Country code (BE, NL, DE, etc.) |
price | Number | Current selling price |
currency | String | Currency code (EUR, SEK, DKK) |
url | String | Direct link to the product page |
inStock | Boolean | Whether the product is available |
originalPrice | Number | Price before discount (if applicable) |
The last item in the dataset is a __SUMMARY__ record with run metadata: pharmaciesQueried, pharmaciesFailed, totalComparisons, and multiPharmacyMatches.
Example output
{"productName": "Paracetamol EG 500mg 20 Tabletten","ean": "5420036901234","prices": [{"pharmacy": "Multipharma","country": "BE","price": 2.49,"currency": "EUR","url": "https://www.multipharma.be/...","inStock": true},{"pharmacy": "Farmaline","country": "BE","price": 2.99,"currency": "EUR","url": "https://www.farmaline.be/...","inStock": true},{"pharmacy": "Kruidvat BE","country": "BE","price": 3.49,"currency": "EUR","url": "https://www.kruidvat.be/...","inStock": true}],"lowestPrice": 2.49,"highestPrice": 3.49,"priceDifference": "40.2%","pharmacyCount": 3,"scrapedAt": "2026-06-07T10:30:00.000Z"}
How product matching works
Products are matched across pharmacies using two methods:
-
EAN barcode match (primary) — When pharmacies provide EAN/GTIN barcodes, products with the same EAN are grouped together. This is the most reliable method and guarantees exact product matches.
-
Fuzzy name matching (fallback) — When no EAN is available, the actor uses word-overlap similarity to group products with similar names. A Jaccard similarity threshold of 55% is used to avoid false matches.
Results are sorted with multi-pharmacy matches first (most valuable comparisons), then by pharmacy count descending.
How it works technically
This is a meta-actor — it does not scrape pharmacy websites directly. Instead, it orchestrates 12 specialized pharmacy scrapers that are each optimized for their target site. The workflow:
- Receives your search query and country filters
- Starts the relevant pharmacy scrapers in parallel via the Apify API
- Waits for all scrapers to finish (with configurable timeout)
- Collects and normalizes results from each scraper's dataset
- Groups identical products by EAN barcode
- Applies fuzzy name matching for products without EAN codes
- Calculates price comparisons and outputs unified results
If any pharmacy scraper fails or times out, the actor continues with results from the remaining pharmacies.
Cost estimate
This actor runs multiple sub-actors, so costs depend on how many pharmacies are queried:
- All 12 pharmacies, 10 items each — approximately 0.5-1.0 compute units per run
- Single country (e.g., BE only) — approximately 0.1-0.3 compute units per run
The main cost driver is the number of pharmacies queried and the maxItemsPerPharmacy setting. Keep maxItemsPerPharmacy at 10-20 for cost-effective comparison runs.
Tips for best results
- Use generic product names like "paracetamol", "ibuprofen 400mg", or "vitamine D" for the broadest matches
- Filter by country if you only care about local prices — this saves compute and speeds up results
- Set
maxItemsPerPharmacyto 5-10 for quick price checks, or 20-50 for comprehensive comparisons - Schedule weekly runs to monitor price changes over time
- The
priceDifferencefield makes it easy to spot products with the biggest savings potential
Limitations
- Products can only be matched across pharmacies when they share an EAN barcode or have very similar names
- Currency conversion is not performed — EUR, SEK, and DKK prices are shown as-is
- Some pharmacies may not return results for certain search terms due to language differences
- Prescription-only medicines may not be available on all pharmacy websites
- The actor's cost scales with the number of pharmacies queried (each is a separate Apify run)
- If an underlying pharmacy scraper is temporarily broken, that pharmacy will be marked as failed and results from other pharmacies are still returned