Tweakers Pricewatch API & Scraper
Tweakers Pricewatch is the price-comparison section of tweakers.net, the largest tech site in the Netherlands: for each product it lists the shops that sell it and keeps a daily price chart.
🤖 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 for the Dutch market. `search` takes product words, filters by category, brand and price range, and returns each product edition with its lowest price, number of shops and review count, plus the category and brand facets with their counts. `category` reads tweakers' own category listings (videokaarten, laptops, smartphones, or one brand or product family inside them). `offers` returns every shop for one product in one call, in tweakers' order, with tweakers' own cost breakdown per shop: product price, shipping line and amount, payment method and its cost, and the total. `product` adds the lowest and highest price, the exact review score, EAN and SKU codes, the category path and the product family. `price_history` returns the daily lowest and average shop price since the product was listed, and `specs` the full specification sheet.
What a Tweakers Pricewatch field actually contains
Fields that read differently from how they look. Every row was measured against live tweakers.net pages on 2026-10-15.
| Field | What it holds |
|---|---|
| product_id | Tweakers' id of one product edition, digits only (2158394), the number in tweakers.net/pricewatch/<id>/. Pass it unchanged to product, offers, specs and price_history; a product URL works too. Search to product returned the same id and title on 9 of 9 products. |
| price_from (search, category) | The lowest shop price printed on the listing card ('vanaf'). It matched product's lowest_price, the first offer row and the last price-history point on 9 of 9 products. |
| total_price | Tweakers' own total for that shop: product price plus the shipping line plus the payment-method line, as its cost overview prints it. On 113 of 113 offer rows the total equalled the parts. offers comes in tweakers' order, which is by total, not by product price: a shop with a lower price but paid shipping can sit below a dearer shop with free shipping. |
| shipping_label, shipping_cost | The shipping line exactly as the shop states it to tweakers ('Pakketpost (vanaf € 50,-)', 'Opsturen') and its amount for this order in euros; 0 when the line prints € 0,-. |
| seller.marketplace_seller | On marketplace rows (Amazon.nl Marketplace, bol Plaza) the business that actually sells, from the row's 'Verkoop door …' line; null on ordinary shops, whose slogan is in seller.tagline. |
| rating_stars, rating | Listing cards and shop ratings show half stars (a product with 4.8 from 123 reviews shows 5 / 5). product.rating is the exact score; it is null, not 0, for a product nobody has reviewed yet. |
| refurbished[] | Refurbished offers come in their own list and are not counted in offer_count, lowest_price or highest_price. |
| row_type, unsorted_id | Search can list shop-feed items tweakers has not yet added to its catalogue (row_type unsorted, 3 of the 5 rows for "27 inch 4k monitor"). They have prices and shops but no spec sheet or price chart; pass unsorted_id to offers for their shop list. Catalogue rows have row_type product and a product_id. |
| category.path, family.path | Tweakers' category path (videokaarten) and the product family inside it (videokaarten/asus/prime-geforce-rtx-5070-ti-16gb-gddr7_p1700610). Pass either unchanged to category; the product was in its family listing on 3 of 3 checks. |
Prices are euros including VAT for delivery in the Netherlands. Tweakers shows a different set of shops and shipping costs to visitors in Belgium; this API returns the Dutch market and says so in country: NL on every response.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/tweakers/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "rtx 5070"
}
}{
"ok": true,
"meta": {
"api": "tweakers",
"endpoint": "search",
"mode": "live",
"latency_ms": 506.6,
"record_count": 40,
"bytes": 416514,
"cache_hit": false,
"total": 451,
"price_basis": "EUR, VAT included, Dutch market (tweakers.net Pricewatch for delivery in the Netherlands)",
"pagination": {
"page": 1,
"last_page": 12,
"has_more": true
},
"upstream_requests": 1,
"country": "NL",
"charged_credits": 3,
"version": "0.1.0",
"request_id": "56d0c438f06243c3",
"queue_ms": 1.6,
"fetched_at": "2026-10-18T11:42:03.805Z"
},
"data": {
"query": {
"query": "rtx 5070",
"priced_only": true,
"sort": "relevance",
"page": 1
},
"total": 451,
"page": 1,
"last_page": 12,
"has_more": true,
"page_beyond_last": null,
"results": [
{
"row_type": "product",
"product_id": "2158422",
"unsorted_id": null,
"title": "Gigabyte GeForce RTX 5070 Ti Gaming OC 16G",
"url": "https://tweakers.net/pricewatch/2158422/gigabyte-geforce-rtx-5070-ti-gaming-oc-16g.html",
"image": "https://tweakers.net/i/NCtAXPW8w7ZWKVDndR99C40LMyQ=/fit-in/84x63/filters:strip_icc():fill(white):strip_exif()/i/2007289380.jpeg?f=thumbsmall",
"summary": "Max. 2,588GHz • 16GB GDDR7 • 3x DP, HDMI",
"tested": true,
"rating_stars": 5,
"review_count": 30,
"price_from": 1349,
"price_display": "€ 1.349,-",
"currency": "EUR",
"shop_count": 18,
"price_status": null
},
{
"row_type": "product",
"product_id": "2176414",
"unsorted_id": null,
"title": "MSI GeForce RTX 5070 Ti 16G VENTUS 3X OC",
"url": "https://tweakers.net/pricewatch/2176414/msi-geforce-rtx-5070-ti-16g-ventus-3x-oc.html",
"image": "https://tweakers.net/i/kKc7vTleF1-gL6eeLlR9PdgsE_4=/fit-in/84x63/filters:strip_icc():fill(white):strip_exif()/i/2007272654.jpeg?f=thumbsmall",
"summary": "Max. 2,497GHz • 16GB GDDR7 • 3x DP, HDMI",
"tested": true,
"rating_stars": 3.5,
"review_count": 4,
"price_from": 1249,
"price_display": "€ 1.249,-",
"currency": "EUR",
"shop_count": 13,
"price_status": null
},
{
"row_type": "product",
"product_id": "2158394",
"unsorted_id": null,
"title": "ASUS Prime GeForce RTX 5070 Ti 16GB GDDR7 OC Edition",
"url": "https://tweakers.net/pricewatch/2158394/asus-prime-geforce-rtx-5070-ti-16gb-gddr7-oc-edition.html",
"image": "https://tweakers.net/i/udFRaPCRnc35xA5khkcK98x6HVE=/fit-in/84x63/filters:fill(white):strip_exif()/i/2007171922.png?f=thumbsmall",
"summary": "Max. 2,527GHz • 16GB GDDR7 • 3x DP, HDMI",
"tested": true,
"rating_stars": 5,
"review_count": 123,
"price_from": 1379.9,
"price_display": "€ 1.379,90",
"currency": "EUR",
"shop_count": 15,
"price_status": null
}
],
"country": "NL",
"category_facets": [
{
"id": 326,
"name": "Barebones",
"count": 2
},
{
"id": 61,
"name": "Behuizingen",
"count": 2
},
{
"id": 496,
"name": "Laptops",
"count": 219
}
],
"brand_facets": [
{
"id": 47,
"name": "Acer",
"count": 43
},
{
"id": 5,
"name": "ASUS",
"count": 65
},
{
"id": 492,
"name": "Gigabyte",
"count": 20
}
]
}
}What the Tweakers Pricewatch API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Keyword search in tweakers.net Pricewatch (the Netherlands). Filter by tweakers category id and brand id (both from the facets this action returns), price range and sort. Each row is one product edition with its lowest shop price ('vanaf'), number of shops, half-star rating and review count. Needs `query` OR `category_id` (either one is enough). By default only products that some shop sells right now are counted (`priced_only`); tweakers' own search also counts discontinued and announced products. | Pricing teams call search to get keyword search in tweakers.net Pricewatch (the Netherlands). | query, category_id, brand_id, min_price, max_price, ... |
| category | One tweakers Pricewatch category listing (the site's own 'vergelijken' page): every product edition in a category, or in a brand / product family inside it, with its lowest price, number of shops, rating and the two spec columns tweakers shows for that category. Lists what tweakers lists: products with a shop price plus announced ones without a price yet (`price_status: Wordt verwacht`). Filter by brand id and price range; sort by popularity, price, rating or newest. | Marketplace operators call category to get one tweakers Pricewatch category listing (the site's own 'vergelijken' page). | category, brand_id, min_price, max_price, sort, ... |
| product | One Pricewatch product page: title, brand, images, EAN and SKU codes, category and product family (pass `category.path` / `family.path` to `category`), the lowest and highest shop price, the number of offers, the exact review score and review count, how many users want / have it, the headline specs and whether Tweakers' lab tested it. The lowest price is checked against the offer table. Use `offers` for every shop, `specs` for the full sheet, `price_history` for the chart. | Catalog enrichment teams call product to get one Pricewatch product page. | product_id, url |
| offers | Every shop selling one product in the Netherlands, in Pricewatch's order (cheapest TOTAL first — price plus shipping plus payment cost): the shop (id, name, slogan or the marketplace seller, half-star rating and review count), the price, and tweakers' own cost breakdown for that shop — shipping line and amount, payment method and its cost, and the total. Delivery promise text per shop. Refurbished offers come apart in `refurbished[]`. The whole table comes in one call. Takes a catalogue `product_id` (or `url`), or the `unsorted_id` of an unsorted search row. | Retail analysts call offers to get every shop selling one product in the Netherlands, in Pricewatch's order (cheapest TOTAL first. | product_id, url, unsorted_id |
| specs | The full specification sheet of one product (Specificaties), grouped as tweakers groups it, in tweakers' own Dutch wording; yes/no specs are true / false. Includes the 'Meer informatie' group (category, brand, series, EAN, SKU, maker link). | Pricing teams call specs to get the full specification sheet of one product (Specificaties), grouped as tweakers groups it, i…. | product_id, url |
| price_history | Daily price history of one product on Pricewatch (the price chart): the lowest shop price and the average shop price for every day tweakers recorded, from the day it was listed, plus tweakers' own chart markers (e.g. lowest price in 6 months). The chart is daily; its last point is the last completed day. | Marketplace operators call price_history to get daily price history of one product on Pricewatch (the price chart). | product_id, url |
Call search from your stack
curl -X POST https://api.reefapi.com/tweakers/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"rtx 5070"}'import requests
r = requests.post(
"https://api.reefapi.com/tweakers/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "rtx 5070"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/tweakers/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "rtx 5070"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.tweakers.search with {"query":"rtx 5070"}.Who uses this API and why
- Monitor the cheapest Dutch shop price, including shipping, for a list of products every day.
- Build a price-history dataset of the daily lowest and average price per product since launch.
- Compare shop prices, shipping and payment costs for one product across every Dutch shop.
- Map a category's catalogue (graphics cards, laptops, monitors) with prices, ratings and EAN codes.
- Match products to your own catalogue by EAN and SKU and pull the full Dutch spec sheet.
Questions developers ask before integrating
Do I need a Tweakers account?
No. Everything is read logged out, and you call reefapi.com from anywhere.
How many shops does offers return?
All of them, in one call: from 1 to 34 shops on the 9 products measured on 2026-10-15, plus a separate refurbished list (up to 13 rows on one iPhone).
Is shipping included?
Yes, as tweakers calculates it: every offer row has the shipping line, the payment method line and the total, and on 113 of 113 rows the total equalled price plus shipping plus payment cost.
Which search filters are there?
Category, brand, price range, priced-only and five sorts. Each was checked against the unfiltered count in the same run: "rtx 5070" 468 priced products → Laptops 224, one brand 73, € 600 to 900 15 (15 of 15 in range), from € 1,000 432 (40 of 40 in range). Category and brand ids come back in the facets of the same response.
How far back does price_history go?
To the day tweakers first listed the product: 597 daily points for a graphics card launched in February 2025, 1,623 for an older laptop accessory. Each point has the lowest and the average shop price of that day; the last point is the last full day.
Can I list a whole category?
Yes. category reads tweakers' own listing, 40 products per page: Videokaarten had 811 products, Laptops 4,277, Monitoren 4,058 on 2026-10-15. Filter by brand or price, sort by popularity, price, rating or newest.
Does the price depend on where I call from?
Not for you. Tweakers serves Belgian visitors a different shop list; this API always returns the Dutch one and marks it country: NL.
Do you return user reviews?
Not yet. product returns the exact review score and the number of reviews; the review texts themselves are not returned.
What is the Tweakers Pricewatch API?
Tweakers Pricewatch API is a ReefAPI endpoint group for the netherlands' tech price comparison: every dutch shop's price with shipping and total, daily price history, full specs and category listings. It returns live JSON through POST requests under /tweakers/v1.
Is the Tweakers Pricewatch API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Tweakers Pricewatch calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Tweakers Pricewatch login or account?
No login to Tweakers Pricewatch 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 Tweakers Pricewatch 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 Tweakers Pricewatch API use?
Tweakers Pricewatch actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Tweakers Pricewatch from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call tweakers actions with the same key, credit pool and JSON envelope used by normal REST requests.