Pharmacy Price Comparison — European Pharmacy Prices avatar

Pharmacy Price Comparison — European Pharmacy Prices

Pricing

Pay per usage

Go to Apify Store
Pharmacy Price Comparison — European Pharmacy Prices

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

Studio Amba

Maintained by Community

Actor 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

PharmacyCountryCurrency
FarmalineBelgiumEUR
MultipharmaBelgiumEUR
KruidvatBelgium / NetherlandsEUR
ApotheekBelgium / NetherlandsEUR
ViataBelgiumEUR
APONEOGermanyEUR
Shop ApothekeGermany / AustriaEUR
dmGermanyEUR
ApoteketSwedenSEK
ApoteaSwedenSEK
ApotekshjärtatSwedenSEK
MatasDenmarkDKK

Input

FieldTypeRequiredDescription
searchQueryStringNoProduct to search for (default: "paracetamol")
countriesArrayNoCountry codes to include: BE, NL, DE, AT, SE, DK (default: all)
maxItemsPerPharmacyIntegerNoMax products per pharmacy (default: 10)
timeoutPerPharmacySecsIntegerNoTimeout per scraper in seconds (default: 120)
proxyConfigurationObjectNoProxy settings passed to underlying scrapers

Output

Each result is a product comparison showing the price at every pharmacy where it was found:

FieldTypeExample
productNameString"Paracetamol 500mg 20 tablets"
eanString"5412345678901"
lowestPriceNumber2.99
highestPriceNumber4.49
priceDifferenceString"50.2%"
pharmacyCountNumber4
pricesArrayPrice at each pharmacy (see below)
scrapedAtStringISO 8601 timestamp

Each entry in the prices array contains:

FieldTypeDescription
pharmacyStringPharmacy name
countryStringCountry code (BE, NL, DE, etc.)
priceNumberCurrent selling price
currencyStringCurrency code (EUR, SEK, DKK)
urlStringDirect link to the product page
inStockBooleanWhether the product is available
originalPriceNumberPrice 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:

  1. 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.

  2. 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:

  1. Receives your search query and country filters
  2. Starts the relevant pharmacy scrapers in parallel via the Apify API
  3. Waits for all scrapers to finish (with configurable timeout)
  4. Collects and normalizes results from each scraper's dataset
  5. Groups identical products by EAN barcode
  6. Applies fuzzy name matching for products without EAN codes
  7. 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 maxItemsPerPharmacy to 5-10 for quick price checks, or 20-50 for comprehensive comparisons
  • Schedule weekly runs to monitor price changes over time
  • The priceDifference field 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