E-commerce & Marketplaces

Price Comparison API API

The Price Comparison API returns multi-merchant offers, specs and price history as clean JSON.

8 actionsLive JSON1,000 free creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

The primary search endpoint returns products with id, title, lowest price, offer count, review count, image, comparison URL and EAN, and you can pull a product, its offers across merchants, price_history, categories and a direct compare. It is built for shopping tools, price-drop alerts and buying guides that need cross-merchant price data from one endpoint. One ReefAPI key, one shared credit pool, the standard envelope.

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/price-compare/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "iphone 15"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "price-compare",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 1998.3,
    "record_count": 30,
    "bytes": 317106,
    "cache_hit": false,
    "source": "geizhals",
    "method": "ssr_html_decodo_isp",
    "query": "iphone 15",
    "page": 1
  },
  "data": {
    "results": [
      {
        "product_id": "140380",
        "id_kind": "product_family",
        "title": "Apple iPhone 15 128GB schwarz",
        "lowest_price": 599.9,
        "currency": "EUR",
        "offer_count": 193,
        "review_count": 331,
        "image": "https://gzhls.at/pix/fe/c1/fec1bb6835adeada-m.webp",
        "comparison_url": "https://geizhals.de/apple-iphone-15-v140380.html",
        "ean": null,
        "gtin": null
      },
      {
        "product_id": "3020645",
        "id_kind": "variant",
        "title": "Apple iPhone 15 128GB schwarz",
        "lowest_price": 608.88,
        "currency": "EUR",
        "offer_count": 42,
        "review_count": 157,
        "image": "https://gzhls.at/pix/fe/c1/fec1bb6835adeada-m.webp",
        "comparison_url": "https://geizhals.de/apple-iphone-15-128gb-schwarz-a3020645.html",
        "ean": null,
        "gtin": null
      },
      {
        "product_id": "3020646",
        "id_kind": "variant",
        "title": "Apple iPhone 15 128GB blau",
        "lowest_price": 599.9,
        "currency": "EUR",
        "offer_count": 33,
        "review_count": 52,
        "image": "https://gzhls.at/pix/8f/d6/8fd6d17ac20f45aa-m.webp",
        "comparison_url": "https://geizhals.de/apple-iphone-15-128gb-blau-a3020646.html",
        "ean": null,
        "gtin": null
      }
    ],
    "query": "iphone 15",
    "page": 1,
    "page_size": 38,
    "has_more": false,
    "next_page": null
  }
}
Actions

What the Price Comparison API API does

ActionDescriptionConcrete use caseKey params
searchkeyword/EAN product search across a comparison source → product cards with lowest_price, offer_count, rating, image, comparison_urlPricing teams call search to get keyword/EAN product search across a comparison source → product cards with lowest_price, offe….query, source, country, page, sort
productfull product detail (title, brand, EAN/GTIN, MPN, breadcrumb, images, specs, rating, lowest_price, embedded merchant offers) by product_id or urlMarketplace operators call product to get full product detail (title, brand, EAN/GTIN, MPN, breadcrumb, images, specs, rating, lowest_p….product_id, url, source, country
offersall merchant offers for a product variant — per-merchant price, availability, delivery, merchant redirect URL (paginated; use a VARIANT id, -aNNN)Catalog enrichment teams call offers to get all merchant offers for a product variant.product_id, url, source, country, page, ...
price_historyprice-history for a product — window + min/max observed. cimri ships a REAL 90-day daily min-price series; geizhals' raw point-series is JS-chart-only (min/max + range surfaced, honestly flagged, R15 no fabrication). akakce: not exposed (use cimri for TR history).Retail analysts call price_history to get price-history for a product.product_id, url, source, country
categorybrowse a comparison-site category by its id/slug → product cards (same shape as search). geizhals-only (cimri/akakce expose search/product/offers/price_history/suggest/compare).Pricing teams call category to get browse a comparison-site category by its id/slug → product cards (same shape as search).category, source, country, page, sort
categoriestop-level category navigation tree of the comparison source (id, name, url)Marketplace operators call categories to get top-level category navigation tree of the comparison source (id, name, url).source, country
suggestsearch autocomplete — product-name suggestions + the linked product_id for a partial queryCatalog enrichment teams call suggest to search autocomplete.query, source, country
compareone-shot price-compare: resolve a query to its top product, then return that product's merchant offers + EAN/GTIN in a single call (search→offers convenience)Retail analysts call compare to get one-shot price-compare.query, source, country, sort, merchant, ...
Code samples

Call search from your stack

curl -X POST https://api.reefapi.com/price-compare/v1/search \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"query":"iphone 15"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.price-compare.search with {"query":"iphone 15"}.
Use cases

Who uses this API and why

  • Shopping tools call search then offers to show the cheapest merchant for a product.
  • Price-alert products use price_history to notify users when a product hits a target price.
  • Buying-guide sites use compare to build side-by-side product and price tables.
FAQ

Questions developers ask before integrating

What is the Price Comparison API API?

Price Comparison API API is a ReefAPI endpoint group for price comparison api It returns live JSON through POST requests under /price-compare/v1.

Is the Price Comparison API API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Price Comparison API calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Price Comparison API login or account?

No login to Price Comparison API is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Price Comparison API data?

The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Price Comparison API API use?

Price Comparison API actions currently cost 2-4 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Price Comparison API from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call price-compare actions with the same key, credit pool and JSON envelope used by normal REST requests.

Is the Price Comparison API API a Price Comparison API scraper?

It is the managed alternative to a DIY Price Comparison API scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same price comparison api back as clean JSON.

Why does my Price Comparison API scraper keep getting blocked?

Most Price Comparison API scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked or failed calls are free.

docs / price-compare

Price Comparison API

Price Comparison API

base /price-compare/v18 endpoints
post/price-compare/v1/product3 credits

full product detail (title, brand, EAN/GTIN, MPN, breadcrumb, images, specs, rating, lowest_price, embedded merchant offers) by product_id or url

ParameterAllowed / rangeDescription
product_idoptionalProduct id. geizhals: the digits in -vNNN.html (family) / -aNNN.html (variant). cimri: the numeric id after the slug comma (…,2237451716) — prefer passing the full `url`. akakce: the numeric prCode (…,282674948.html, or just 282674948) — a bare prCode works (api6 needs no slug).
urloptionalFull product/variant URL (overrides product_id). geizhals: a *.html page. cimri: https://www.cimri.com/<slug>,<id>. akakce: https://www.akakce.com/<slug>,<id>.html. Take it from a search result's comparison_url.
source = geizhalsoptionalgeizhals · cimri · akakcePrice-comparison site to query. 'geizhals' covers Germany, Austria, and the EU (geizhals.de / geizhals.at / geizhals.eu); 'akakce' and 'cimri' cover Turkey. All three return multi-merchant offer lists, EAN/GTIN identifiers, and current pricing. Idealo (idealo.de) is not currently available.
country = deoptionalde · at · eu · trLocale host. geizhals: de/at/eu (same DOM, different merchant pool). cimri/akakce are TR-only (country is ignored for them).
Try in playground →
post/price-compare/v1/offers3 credits

all merchant offers for a product variant — per-merchant price, availability, delivery, merchant redirect URL (paginated; use a VARIANT id, -aNNN)

ParameterAllowed / rangeDescription
product_idoptionalProduct id. geizhals: the digits in -vNNN.html (family) / -aNNN.html (variant). cimri: the numeric id after the slug comma (…,2237451716) — prefer passing the full `url`. akakce: the numeric prCode (…,282674948.html, or just 282674948) — a bare prCode works (api6 needs no slug).
urloptionalFull product/variant URL (overrides product_id). geizhals: a *.html page. cimri: https://www.cimri.com/<slug>,<id>. akakce: https://www.akakce.com/<slug>,<id>.html. Take it from a search result's comparison_url.
source = geizhalsoptionalgeizhals · cimri · akakcePrice-comparison site to query. 'geizhals' covers Germany, Austria, and the EU (geizhals.de / geizhals.at / geizhals.eu); 'akakce' and 'cimri' cover Turkey. All three return multi-merchant offer lists, EAN/GTIN identifiers, and current pricing. Idealo (idealo.de) is not currently available.
country = deoptionalde · at · eu · trLocale host. geizhals: de/at/eu (same DOM, different merchant pool). cimri/akakce are TR-only (country is ignored for them).
page = 1optional1–50Result page (1-based). Page forward with meta.next_page.
sortoptionalp · -p · r · tResult sort order. geizhals: passed to the site 'sort' value. akakce: engine-side offer sort — 'p' price asc, '-p' price desc.
merchantoptionalFilter offers to a merchant (vdName, case-insensitive substring — e.g. 'n11', 'Amazon', 'Trendyol'). akakce offers/compare only.
min_priceoptionalFilter offers to price >= min_price (akakce offers/compare).
max_priceoptionalFilter offers to price <= max_price (akakce offers/compare).
limitoptional1–200Top-N: cap the returned offers after sort/filter (akakce offers/compare). Honest bare ceiling per query ≈ 15 offers (~5 product models × top-3).
Try in playground →
post/price-compare/v1/price_history3 credits

price-history for a product — window + min/max observed. cimri ships a REAL 90-day daily min-price series; geizhals' raw point-series is JS-chart-only (min/max + range surfaced, honestly flagged, R15 no fabrication). akakce: not exposed (use cimri for TR history).

ParameterAllowed / rangeDescription
product_idoptionalProduct id. geizhals: the digits in -vNNN.html (family) / -aNNN.html (variant). cimri: the numeric id after the slug comma (…,2237451716) — prefer passing the full `url`. akakce: the numeric prCode (…,282674948.html, or just 282674948) — a bare prCode works (api6 needs no slug).
urloptionalFull product/variant URL (overrides product_id). geizhals: a *.html page. cimri: https://www.cimri.com/<slug>,<id>. akakce: https://www.akakce.com/<slug>,<id>.html. Take it from a search result's comparison_url.
source = geizhalsoptionalgeizhals · cimri · akakcePrice-comparison site to query. 'geizhals' covers Germany, Austria, and the EU (geizhals.de / geizhals.at / geizhals.eu); 'akakce' and 'cimri' cover Turkey. All three return multi-merchant offer lists, EAN/GTIN identifiers, and current pricing. Idealo (idealo.de) is not currently available.
country = deoptionalde · at · eu · trLocale host. geizhals: de/at/eu (same DOM, different merchant pool). cimri/akakce are TR-only (country is ignored for them).
Try in playground →
post/price-compare/v1/category2 credits

browse a comparison-site category by its id/slug → product cards (same shape as search). geizhals-only (cimri/akakce expose search/product/offers/price_history/suggest/compare).

ParameterAllowed / rangeDescription
categoryrequiredGeizhals category id or slug — the value after ?cat= (e.g. 'umtsover' for Handys, 'sm_ssd' for SSDs). Discover via the categories action.
source = geizhalsoptionalgeizhals · cimri · akakcePrice-comparison site to query. 'geizhals' covers Germany, Austria, and the EU (geizhals.de / geizhals.at / geizhals.eu); 'akakce' and 'cimri' cover Turkey. All three return multi-merchant offer lists, EAN/GTIN identifiers, and current pricing. Idealo (idealo.de) is not currently available.
country = deoptionalde · at · eu · trLocale host. geizhals: de/at/eu (same DOM, different merchant pool). cimri/akakce are TR-only (country is ignored for them).
page = 1optional1–50Result page (1-based). Page forward with meta.next_page.
sortoptionalp · -p · r · tResult sort order. geizhals: passed to the site 'sort' value. akakce: engine-side offer sort — 'p' price asc, '-p' price desc.
Try in playground →
post/price-compare/v1/categories2 credits

top-level category navigation tree of the comparison source (id, name, url)

ParameterAllowed / rangeDescription
source = geizhalsoptionalgeizhals · cimri · akakcePrice-comparison site to query. 'geizhals' covers Germany, Austria, and the EU (geizhals.de / geizhals.at / geizhals.eu); 'akakce' and 'cimri' cover Turkey. All three return multi-merchant offer lists, EAN/GTIN identifiers, and current pricing. Idealo (idealo.de) is not currently available.
country = deoptionalde · at · eu · trLocale host. geizhals: de/at/eu (same DOM, different merchant pool). cimri/akakce are TR-only (country is ignored for them).
Try in playground →
post/price-compare/v1/suggest2 credits

search autocomplete — product-name suggestions + the linked product_id for a partial query

ParameterAllowed / rangeDescription
queryrequiredSearch keyword (product name, model, or EAN/GTIN).
source = geizhalsoptionalgeizhals · cimri · akakcePrice-comparison site to query. 'geizhals' covers Germany, Austria, and the EU (geizhals.de / geizhals.at / geizhals.eu); 'akakce' and 'cimri' cover Turkey. All three return multi-merchant offer lists, EAN/GTIN identifiers, and current pricing. Idealo (idealo.de) is not currently available.
country = deoptionalde · at · eu · trLocale host. geizhals: de/at/eu (same DOM, different merchant pool). cimri/akakce are TR-only (country is ignored for them).
Try in playground →
post/price-compare/v1/compare4 credits

one-shot price-compare: resolve a query to its top product, then return that product's merchant offers + EAN/GTIN in a single call (search→offers convenience)

ParameterAllowed / rangeDescription
queryrequiredSearch keyword (product name, model, or EAN/GTIN).
source = geizhalsoptionalgeizhals · cimri · akakcePrice-comparison site to query. 'geizhals' covers Germany, Austria, and the EU (geizhals.de / geizhals.at / geizhals.eu); 'akakce' and 'cimri' cover Turkey. All three return multi-merchant offer lists, EAN/GTIN identifiers, and current pricing. Idealo (idealo.de) is not currently available.
country = deoptionalde · at · eu · trLocale host. geizhals: de/at/eu (same DOM, different merchant pool). cimri/akakce are TR-only (country is ignored for them).
sortoptionalp · -p · r · tResult sort order. geizhals: passed to the site 'sort' value. akakce: engine-side offer sort — 'p' price asc, '-p' price desc.
merchantoptionalFilter offers to a merchant (vdName, case-insensitive substring — e.g. 'n11', 'Amazon', 'Trendyol'). akakce offers/compare only.
min_priceoptionalFilter offers to price >= min_price (akakce offers/compare).
max_priceoptionalFilter offers to price <= max_price (akakce offers/compare).
limitoptional1–200Top-N: cap the returned offers after sort/filter (akakce offers/compare). Honest bare ceiling per query ≈ 15 offers (~5 product models × top-3).
Try in playground →