Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the toppreise.ch API page →
E-commerce & Marketplaces

toppreise.ch API & Scraper

toppreise.ch is Switzerland's price comparison site.

6 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 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.

This API reads it as JSON, in Swiss francs, logged out. `search` takes product words, a category id or both and returns two kinds of rows: catalogue products (lowest price, lowest price including shipping, number of offers, best availability) and product series, a model line with its variants nested inside, each with its own id. Brand, shop and availability filters take the ids from `filters`, which lists the brands, shops, series and sub-categories toppreise offers for a search with their hit counts. `offers` returns every shop for one product in one call, up to 96: shop and shop id, offer title, item price, shipping, total including shipping, availability, shop rating and number of ratings, payment methods and the cheapest-price badges; used offers come back apart with their condition. `price_history` is toppreise's own daily chart: the lowest item price and the lowest price including shipping per day. `product` adds the GTIN codes, manufacturer part numbers, category path, series and the spec sheet.

Reference

What a toppreise.ch field actually contains

Fields that read differently from how they look. Every row was measured against live toppreise.ch pages on 2026-10-15.

FieldWhat it holds
row_typeproduct or series. A product row has product_id (the number after -p in its URL), a series row has series_id and a variants list of product rows. product_id goes into product, offers and price_history; series_id into series. 8 of 8 product ids and 3 of 3 series ids came back as the same record.
price_min, price_min_incl_shippingThe lowest item price and the lowest price including shipping toppreise prints on the card, in CHF. They equalled the product page's lowest price and the cheapest offer's total on 8 of 8 products (an iPhone case: 31.90 item, 36.80 with shipping).
offers[].total_pricetoppreise's price including shipping for the shop's cheapest payment method. On 54 of 56 offer rows it was item price plus shipping; on the other 2 a payment discount or fee applies (397.10 + 0.00 shipping, total 385.20 with a 3% prepayment discount). price_difference shows that amount and total_has_adjustment marks the row.
used_offersSecond-hand offers toppreise lists on the same product, with condition (for example akzeptabel). They are often cheaper than the cheapest new offer (257.30 against 284.35 for one coffee machine) and are never mixed into offers or price_min.
offers[].availability_codetoppreise's delivery class: 1 in stock at the shop's own warehouse, 2 from a supplier or foreign warehouse, 3 within a week, 4 within two weeks, 5 within four weeks, 9 no information. availability carries the site's wording.
shop_rating, shop_rating_countThe shop's rating on toppreise.ch and how many ratings it has (5.4 from 2,770).
total, total_cappedThe number of hits toppreise prints. It stops at 10,000 ("more than 10'000"); total_capped is then true. Sorting by price lists every product separately, so the same search counts 1,245 hits by price and 1,115 by popularity, where series are grouped.
price_history.points[]One point per day: price (lowest item price) and price_incl_shipping. The last point is yesterday's; current is today's price as the chart prints it, so the two can differ after a price change.

Prices are in Swiss francs as toppreise.ch prints them. The same offer lists came back identical from three different network locations (38 of 38 row comparisons).

Live example

Real request and response JSON

Captured from the indexed primary action, search, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/toppreise/v1/search",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "query": "kaffeevollautomat"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "toppreise",
    "endpoint": "search",
    "mode": "live",
    "latency_ms": 1864.7,
    "record_count": 24,
    "bytes": 584158,
    "cache_hit": false,
    "total": 1247,
    "upstream_requests": 1,
    "charged_credits": 3,
    "version": "0.1.0",
    "request_id": "14785d8d1eb440b3",
    "queue_ms": 1.8,
    "fetched_at": "2026-10-15T17:03:00.989Z"
  },
  "data": {
    "query": "kaffeevollautomat",
    "category_id": null,
    "sort": "popularity",
    "page": 1,
    "page_size": 24,
    "total": 1247,
    "total_capped": false,
    "total_is_exact": true,
    "last_page": 52,
    "has_more": true,
    "page_beyond_last": false,
    "no_result": false,
    "filters_applied": {
      "brand_id": null,
      "shop_id": null,
      "availability": null
    },
    "filter_echo": null,
    "listing_url": "https://www.toppreise.ch/produktsuche?q=kaffeevollautomat",
    "rows": [
      {
        "row_type": "series",
        "series_id": "64949",
        "title": "DELONGHI Magnifica Start",
        "brand": "DELONGHI",
        "features": "Vollautomat • Druck: 15 bar, Leistung: 1450 W, Wassertank: 1.8 L, Bohnenbehälter: 250 g, Milchaufschäumer",
        "url": "https://www.toppreise.ch/produktserie/Magnifica_Start-pc-s64949",
        "variant_count_shown": 2,
        "price_min_incl_shipping": 249.95,
        "currency": "CHF",
        "variants": [
          {
            "row_type": "[trimmed-depth]",
            "product_id": "[trimmed-depth]",
            "title": "[trimmed-depth]",
            "url": "[trimmed-depth]",
            "category_slug": "[trimmed-depth]",
            "image": "[trimmed-depth]",
            "offer_count": "[trimmed-depth]",
            "price_min": "[trimmed-depth]",
            "price_min_incl_shipping": "[trimmed-depth]",
            "best_availability_code": "[trimmed-depth]",
            "best_availability": "[trimmed-depth]",
            "currency": "[trimmed-depth]"
          },
          {
            "row_type": "[trimmed-depth]",
            "product_id": "[trimmed-depth]",
            "title": "[trimmed-depth]",
            "url": "[trimmed-depth]",
            "category_slug": "[trimmed-depth]",
            "image": "[trimmed-depth]",
            "offer_count": "[trimmed-depth]",
            "price_min": "[trimmed-depth]",
            "price_min_incl_shipping": "[trimmed-depth]",
            "best_availability_code": "[trimmed-depth]",
            "best_availability": "[trimmed-depth]",
            "currency": "[trimmed-depth]"
          }
        ]
      },
      {
        "row_type": "series",
        "series_id": "41301",
        "title": "DELONGHI Dinamica Plus",
        "brand": "DELONGHI",
        "features": "Vollautomat • Leistung: 1450 W, Wassertank: 1.8 L, Bohnenbehälter: 300 g, Milchaufschäumer, Milchbehälter, Heisswasserfunktion",
        "url": "https://www.toppreise.ch/produktserie/Dinamica_Plus-pc-s41301",
        "variant_count_shown": 3,
        "price_min_incl_shipping": 446.35,
        "currency": "CHF",
        "variants": [
          {
            "row_type": "[trimmed-depth]",
            "product_id": "[trimmed-depth]",
            "title": "[trimmed-depth]",
            "url": "[trimmed-depth]",
            "category_slug": "[trimmed-depth]",
            "image": "[trimmed-depth]",
            "offer_count": "[trimmed-depth]",
            "price_min": "[trimmed-depth]",
            "price_min_incl_shipping": "[trimmed-depth]",
            "best_availability_code": "[trimmed-depth]",
            "best_availability": "[trimmed-depth]",
            "currency": "[trimmed-depth]"
          },
          {
            "row_type": "[trimmed-depth]",
            "product_id": "[trimmed-depth]",
            "title": "[trimmed-depth]",
            "url": "[trimmed-depth]",
            "category_slug": "[trimmed-depth]",
            "image": "[trimmed-depth]",
            "offer_count": "[trimmed-depth]",
            "price_min": "[trimmed-depth]",
            "price_min_incl_shipping": "[trimmed-depth]",
            "best_availability_code": "[trimmed-depth]",
            "best_availability": "[trimmed-depth]",
            "currency": "[trimmed-depth]"
          },
          {
            "row_type": "[trimmed-depth]",
            "product_id": "[trimmed-depth]",
            "title": "[trimmed-depth]",
            "url": "[trimmed-depth]",
            "category_slug": "[trimmed-depth]",
            "image": "[trimmed-depth]",
            "offer_count": "[trimmed-depth]",
            "price_min": "[trimmed-depth]",
            "price_min_incl_shipping": "[trimmed-depth]",
            "best_availability_code": "[trimmed-depth]",
            "best_availability": "[trimmed-depth]",
            "currency": "[trimmed-depth]"
          }
        ]
      },
      {
        "row_type": "series",
        "series_id": "43271",
        "title": "PHILIPS 2200 series",
        "brand": "PHILIPS",
        "features": "Vollautomat • Druck: 15 bar, Leistung: 1500 W, Wassertank: 1.8 L, Bohnenbehälter: 275 g, Milchaufschäumer, Heisswasserfunktion • Wasserfilter",
        "url": "https://www.toppreise.ch/produktserie/2200_series-pc-s43271",
        "variant_count_shown": 2,
        "price_min_incl_shipping": 207.05,
        "currency": "CHF",
        "variants": [
          {
            "row_type": "[trimmed-depth]",
            "product_id": "[trimmed-depth]",
            "title": "[trimmed-depth]",
            "url": "[trimmed-depth]",
            "category_slug": "[trimmed-depth]",
            "image": "[trimmed-depth]",
            "offer_count": "[trimmed-depth]",
            "price_min": "[trimmed-depth]",
            "price_min_incl_shipping": "[trimmed-depth]",
            "best_availability_code": "[trimmed-depth]",
            "best_availability": "[trimmed-depth]",
            "currency": "[trimmed-depth]"
          },
          {
            "row_type": "[trimmed-depth]",
            "product_id": "[trimmed-depth]",
            "title": "[trimmed-depth]",
            "url": "[trimmed-depth]",
            "category_slug": "[trimmed-depth]",
            "image": "[trimmed-depth]",
            "offer_count": "[trimmed-depth]",
            "price_min": "[trimmed-depth]",
            "price_min_incl_shipping": "[trimmed-depth]",
            "best_availability_code": "[trimmed-depth]",
            "best_availability": "[trimmed-depth]",
            "currency": "[trimmed-depth]"
          }
        ]
      }
    ]
  }
}
Actions

What the toppreise.ch API does

ActionDescriptionConcrete use caseKey params
searchKeyword or category search on toppreise.ch (Switzerland, CHF). Rows are catalogue products (lowest price, lowest price incl. shipping, number of offers, availability) and product series (`row_type: series`, a model line with its variants nested). Filter by brand, shop and availability (ids from the `filters` action), sort by price, name, availability or popularity, 24 rows per page. Give `query`, `category_id` or both.Pricing teams call search to get keyword or category search on toppreise.ch (Switzerland, CHF).none
filtersThe filter facets toppreise offers for a search: brands, shops, product series and sub-categories with their ids and hit counts, the price steps and the exact hit count. Use the ids as `brand_id` / `shop_id` / `category_id` in `search`.Marketplace operators call filters to get the filter facets toppreise offers for a search.query
productOne toppreise product: title, brand, GTIN/EAN codes, manufacturer part numbers, description, category path and id, series id, lowest and highest offer price (CHF), number of offers, spec sheet, and the first page of shop offers (up to 24, lowest total first) with used offers apart.Catalog enrichment teams call product to get one toppreise product.product_id
offersEvery shop's offer for one product (up to 96, ordered by toppreise's lowest total first): shop and shop id, offer title, price, shipping, total price incl. shipping for the cheapest payment method, the difference when discounts or fees apply, availability, shop rating and rating count, payment methods, cheapest-price badges. Used ('Occasion') offers are returned apart in `used_offers` with their condition.Retail analysts call offers to get every shop's offer for one product (up to 96, ordered by toppreise's lowest total first).product_id
price_historytoppreise's own daily price history for one product: the lowest item price and the lowest price incl. shipping per day (measured: since 2023-11 on a 2023 product), with the chart's own current, lowest and highest price.Pricing teams call price_history to get toppreise's own daily price history for one product.product_id
seriesOne toppreise product series (model line): its name and every variant product with lowest price, number of offers and availability.Marketplace operators call series to get one toppreise product series (model line).series_id
Code samples

Call search from your stack

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

Who uses this API and why

  • Track every Swiss shop's CHF price, shipping and availability for a product list.
  • Read toppreise's daily price history to judge whether today's price is a good one.
  • Compare used offers with the cheapest new price for the same product.
  • Map a category with lowest prices, offer counts, GTINs and specs.
  • Find which shops carry a brand and at what price in Switzerland.
FAQ

Questions developers ask before integrating

Do I need a toppreise.ch account?

No. Everything is read logged out.

How many shops does offers return?

All of them up to 96 in one call, cheapest total first. A De'Longhi Magnifica Start had 30 shop offers on 2026-10-15, all 30 returned, plus used offers apart.

Is shipping included?

Every offer row has the item price, the shipping cost and the total. Search rows carry both the lowest item price and the lowest price including shipping.

Which search filters are there?

Brand, shop, availability and category, checked against the unfiltered count in the same run: "kaffeevollautomat" 1,115 hits → brand De'Longhi 25, shop digitec 323, in stock 270, deliverable within a week 824, category Vollautomaten 140. A brand or shop id toppreise does not offer for the search is refused, not ignored. There is no price-range filter.

Where do brand and shop ids come from?

From filters, for the same words: it lists every brand, shop, product series and sub-category toppreise offers, with ids and hit counts.

How far back does price_history go?

As far as toppreise keeps the product: a coffee machine listed since November 2023 had 1,072 daily points. time_range takes 1m, 3m, 6m, 1y or all.

What is a series?

toppreise groups variants of one model line (colours, bundles) into a series. Search rows of type series carry their variants; series returns all variants of one series.

How many pages can I read?

24 rows per page, up to page 100. has_more and last_page tell you where a result ends.

What is the toppreise.ch API?

toppreise.ch API is a ReefAPI endpoint group for swiss price comparison in chf: every shop's price with shipping, used offers apart, the daily price history, gtins and specs. It returns live JSON through POST requests under /toppreise/v1.

Is the toppreise.ch API free to try?

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

Do I need a toppreise.ch login or account?

No login to toppreise.ch 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 toppreise.ch 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 toppreise.ch API use?

toppreise.ch actions currently cost 2-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.

Can I call toppreise.ch from an AI assistant or MCP client?

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

docs / toppreise

toppreise.ch

Swiss price comparison in CHF: every shop's price with shipping, used offers apart, the daily price history, GTINs and specs.

base /toppreise/v16 endpoints
post/toppreise/v1/filters2 credits

The filter facets toppreise offers for a search: brands, shops, product series and sub-categories with their ids and hit counts, the price steps and the exact hit count. Use the ids as `brand_id` / `shop_id` / `category_id` in `search`.

ParameterAllowed / rangeDescription
queryrequired—Search words.
Try in playground →
post/toppreise/v1/product3 credits

One toppreise product: title, brand, GTIN/EAN codes, manufacturer part numbers, description, category path and id, series id, lowest and highest offer price (CHF), number of offers, spec sheet, and the first page of shop offers (up to 24, lowest total first) with used offers apart.

ParameterAllowed / rangeDescription
product_idrequired—toppreise product id: the number after '-p' in a product URL (…/DELONGHI-ECAM220-60-B-Magnifica-Start-p749259 → 749259), or `product_id` of a search row. A full product URL is accepted too.
Try in playground →
post/toppreise/v1/offers3 credits

Every shop's offer for one product (up to 96, ordered by toppreise's lowest total first): shop and shop id, offer title, price, shipping, total price incl. shipping for the cheapest payment method, the difference when discounts or fees apply, availability, shop rating and rating count, payment methods, cheapest-price badges. Used ('Occasion') offers are returned apart in `used_offers` with their condition.

ParameterAllowed / rangeDescription
product_idrequired—toppreise product id: the number after '-p' in a product URL (…/DELONGHI-ECAM220-60-B-Magnifica-Start-p749259 → 749259), or `product_id` of a search row. A full product URL is accepted too.
Try in playground →
post/toppreise/v1/price_history3 credits

toppreise's own daily price history for one product: the lowest item price and the lowest price incl. shipping per day (measured: since 2023-11 on a 2023 product), with the chart's own current, lowest and highest price.

ParameterAllowed / rangeDescription
product_idrequired—toppreise product id: the number after '-p' in a product URL (…/DELONGHI-ECAM220-60-B-Magnifica-Start-p749259 → 749259), or `product_id` of a search row. A full product URL is accepted too.
time_range = 1yoptional1m · 3m · 6m · 1y · allHow far back.
Try in playground →
post/toppreise/v1/series3 credits

One toppreise product series (model line): its name and every variant product with lowest price, number of offers and availability.

ParameterAllowed / rangeDescription
series_idrequired—Series id: `series_id` of a search row or the number after '-pc-s' in a series URL.
Try in playground →
Built for volume
5M+ requests a day

Measured at 60 requests a second across the fleet, with no central bottleneck. Volume pricing is on request, and per-key limits are raised for high-volume accounts.

Missing a source?
We build it

Tell us a site we do not cover yet and it becomes an engine. A customer asked for bestprice.gr on a Sunday and it was in the catalog the next day.

Support
2 minute median reply

Median time from a question in the live chat to the first answer, measured across every answered conversation. Setup help included, no support tier to buy.

One key, one balance
Every API included

No per-site plans and no separate subscriptions. One key and one credit pool across the whole catalog, so adding a source costs nothing up front.

Planning something large? Tell us the volume and the sources and we will come back with what it costs and what we would have to build.