Search a real product below — watch min / median / max across countries appear, in €, traced to the store. Then connect your whole catalog by API.
Exact URL, timestamp, and how we matched it — not a black box. Drill from a single EAN down to an individual offer, with local and normalized currency at every level.
Every SKU keeps a full timeline. Query the median market price over any window, or subscribe to the raw series — each point traced to the store that set it.
Six primitives. Compose them for pricing, monitoring and reporting.
Exact-match lookups. One identifier in, a full market snapshot out.
Country → city → store → offer. Local and EUR / USD side by side.
Prices updated every day. Full timeline retained per SKU.
Source, freshness and match confidence on every single price.
Messy product string in → canonical, deduplicated product out.
Send N SKUs, monitor them all. Deltas and alerts pushed via webhook.
Enterprise price-intelligence suites are matched and normalized — but sold through a sales call, black-box, and priced for enterprise. Raw data / SERP APIs are self-serve and cheap — but hand you unmatched scrape output. Benchmarker is the missing middle.
Authorization: Token header — one key, rotate anytime.code + human message.curl https://api.bench.d1s.app/v1/prices/by-ean \ -H "Authorization: Token $BM_KEY" \ -H "Content-Type: application/json" \ -d '{ "ean": "4948570114344", "display_currency": "EUR", "countries": ["PL","DE","CY"] }'
import requests r = requests.post( "https://api.bench.d1s.app/v1/prices/by-ean", headers={"Authorization": f"Token {BM_KEY}"}, json={"ean": "4948570114344", "display_currency": "EUR"}, ) data = r.json() print(data["market"]["median"]) # 489
const res = await fetch("https://api.bench.d1s.app/v1/prices/by-ean", { method: "POST", headers: { Authorization: `Token ${process.env.BM_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ ean: "4948570114344", display_currency: "EUR" }), }); const data = await res.json();
<?php $ch = curl_init("https://api.bench.d1s.app/v1/prices/by-ean"); curl_setopt_array($ch, [ CURLOPT_POST => true, CURLOPT_HTTPHEADER => ["Authorization: Token {$BM_KEY}"], CURLOPT_POSTFIELDS => json_encode(["ean" => "4948570114344"]), CURLOPT_RETURNTRANSFER => true, ]); $data = json_decode(curl_exec($ch), true);
Benchmarker ships a Model Context Protocol server — the open standard for connecting LLMs to tools and data. Point Claude, Cursor, or your own agent at the endpoint, drop in your key, and the model calls prices as native tools. No glue code, no scraping.
Same auth, same data, same provenance as the REST API — just spoken in a language the model already understands.
{
"mcpServers": {
"benchmarker": {
"command": "npx",
"args": ["-y", "@benchmarker/mcp"],
"env": { "BM_KEY": "bm_live_9f2b…4a1c" }
}
}
}
# connect any MCP client to: https://mcp.bench.d1s.app/v1 Authorization: Token $BM_KEY
Priced by tracked SKUs / month — how many products you monitor.
Upload a price list, map SKUs to EANs, and watch your position per country — cheapest, median or most expensive — with alerts when a rival moves.
The console turns the same API into the two jobs a pricing team does daily: watch my position per country, and react to competitor moves — plus catalog upload, history, keys and usage.
Free key, 25 tracked SKUs, no card. You'll make your first real call in under a minute.