European Price Comparison - Compare Prices Across EU Engines
Pricing
Pay per usage
European Price Comparison - Compare Prices Across EU Engines
Search 10 European price-comparison engines at once and compare prices for any product. Groups by EAN barcode, converts to EUR. No login or cookies required.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Studio Amba
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
European Price Comparison
Compare product prices across ten European price-comparison engines in a single run. This actor searches each engine in parallel, groups the results by EAN/GTIN barcode (with a fuzzy product-name fallback), and converts every price to EUR using live ECB rates so you can see the cheapest source across borders.
No login. No cookies. No account. You give it a product, it gives you a side-by-side comparison.
What it does
- Searches 10 European price engines at once: Akakçe (TR), Cimri (TR), Ceneo (PL), Compari (RO), Geizhals (AT), Heureka (CZ), Kelkoo (FR), Pazaruvaj (BG), PriceRunner (SE), Zboží (CZ).
- Matches the same product across engines by EAN barcode, then falls back to fuzzy name matching when no barcode is present.
- Converts all prices to EUR with live European Central Bank rates, so a Turkish lira price and a Polish złoty price are directly comparable.
- Returns the lowest price, highest price, and the percentage spread for each matched product.
- Sorts results so products found in the most engines appear first.
How to scrape European price comparison data
- Enter a product in the Search Query field. Use the brand and model for the best cross-engine matching, for example
iphone 15,sony wh-1000xm5, ordyson v15. - Optionally restrict the run to certain countries with the Countries field (for example
["AT", "CZ"]). Leave it empty to query every engine. - Set Max Items Per Source to control how many products are pulled from each engine. More items means more potential matches but a longer, costlier run.
- Run the actor. Each engine is queried in parallel, the results are grouped by EAN, and prices are converted to EUR.
- Open the dataset. Each row is one product with the prices found at every engine that carries it.
Input
| Field | Type | Description |
|---|---|---|
searchQuery | string | Product to search for across all engines. Defaults to iphone 15. |
countries | array | Optional country filter (TR, PL, RO, AT, CZ, FR, BG, SE). Empty means all. |
maxItemsPerSource | integer | Max products to fetch from each engine (1–100, default 10). |
timeoutPerSourceSecs | integer | Max seconds to wait for each engine (30–600, default 120). |
proxyConfiguration | object | Proxy settings passed to the underlying scrapers. Residential recommended. |
Example input
{"searchQuery": "sony wh-1000xm5","countries": ["AT", "CZ", "PL"],"maxItemsPerSource": 10,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Output
Each item in the dataset is one matched product:
{"productName": "Sony WH-1000XM5 Wireless Headphones","ean": "4548736141537","lowestPriceEur": 289.0,"highestPriceEur": 349.99,"priceDifference": "21.1%","sourceCount": 4,"prices": [{ "source": "Geizhals", "country": "AT", "price": 289.0, "currency": "EUR", "priceEur": 289.0, "url": "https://...", "inStock": true },{ "source": "Heureka", "country": "CZ", "price": 7290, "currency": "CZK", "priceEur": 291.6, "url": "https://...", "inStock": true }],"scrapedAt": "2026-06-15T18:00:00.000Z"}
| Field | Description |
|---|---|
productName | Canonical product name from the most detailed source. |
ean | EAN/GTIN barcode used for matching, or null if name-matched. |
lowestPriceEur | Lowest price across all sources, in EUR. |
highestPriceEur | Highest price across all sources, in EUR. |
priceDifference | Percentage spread between highest and lowest EUR price. |
sourceCount | How many engines carry this product. |
prices | Per-source price entries with native currency and EUR conversion. |
scrapedAt | ISO 8601 timestamp of the comparison. |
A final __SUMMARY__ item lists which sources answered, which failed, and the total number of comparisons.
How matching works
Products are grouped first by EAN/GTIN barcode, which is an exact identifier and the most reliable signal. Products without a barcode are matched to existing groups by name similarity (Jaccard word overlap, threshold 0.6) and otherwise start a new group. This keeps false merges low while still consolidating items that lack barcodes.
Currency conversion
Prices arrive in each engine's local currency. The actor fetches live EUR reference rates from the European Central Bank at the start of every run and converts each price to EUR for comparison. If the rate service is unreachable, it falls back to a built-in rate table so the run still completes. Native price and currency are always preserved alongside the EUR value.
Use cases
- Cross-border price monitoring for electronics and consumer goods.
- Finding the cheapest EU source for a specific product before buying.
- Feeding a price-intelligence dashboard with normalized, EUR-denominated data.
- Spotting arbitrage between countries where the same product sells at very different prices.
Notes
- This is a meta-actor. It orchestrates our individual country price-engine scrapers and runs them in parallel, so a single run can touch many sites at once.
- Results depend on each underlying engine carrying the product and returning it for your query. Generic queries match more broadly; specific brand+model queries match more accurately.
- Use residential proxies for the most reliable results, since some engines are sensitive to datacenter traffic.