Worten API & Scraper
Worten is Portugal's largest electronics and home-appliance retailer, and worten.pt also hosts hundreds of marketplace sellers next to Worten's own stock.
🤖 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 worten.pt and Worten Canarias (canarias.worten.es, the Spanish store that still sells online) as JSON. `search` takes a keyword and/or a Worten category with the site's own filters (brand, price range, in stock, on sale, sold by Worten or by premium marketplace sellers or one named seller, new / refurbished / outlet) and five sort orders, and returns 12, 24 or 48 products per page: product id, Worten reference, EAN, name, brand, price, the original price and what kind it is (recommended retail price or Worten promotion), discount, stock, who sells the featured offer, how many offers exist and the next offer's price, delivery cost and days, rating, promotion end date, energy class, plus the category tree, brands, sellers and other facets with counts. `product` returns one product in full: every seller's offer with its own price, stock, delivery days and cost and store pickup, the cheapest offer in stock, extended-warranty and insurance add-ons with prices, grouped specifications, description, category and rating. `offers` returns the offers alone, and `reviews` returns the written buyer reviews with the rating distribution.
What a Worten field actually contains
Fields that read differently from how they look. Every row was measured against live Worten responses on 2026-10-14.
| Field | What it holds |
|---|---|
| product_id, sku, ean | product_id is Worten's product uuid; sku is the 7-digit Worten reference printed on the page (MRKEAN-<ean> for products only marketplace sellers offer); ean is the barcode. Any of the three opens the product; a product URL works too. Search to product returned the same id on 16 of 16 products. |
| price, original_price, price_type | price is what the shopper pays now. original_price is the crossed-out price and price_type says which kind it is: recommended_retail_price is the manufacturer's recommended price (PVPR), not an earlier Worten price; promotion is a Worten promotion; regular means no reduction. Marketplace offers carry no type. discount_pct is computed from the two prices. |
| seller, offer_count, second_offer_price | seller is whoever holds the offer shown first (is_worten tells Worten from a marketplace shop; 59 of 216 rows were marketplace offers). offer_count is how many sellers offer the product and second_offer_price the next offer's price. product and offers list every one. |
| site | pt is worten.pt; canarias is Worten Canarias with its own price list: the same iPhone was 1,459 € on worten.pt and 1,279 € on Canarias. worten.es (mainland Spain) no longer sells online. |
| in_stock, fulfilment | in_stock is the site's online availability flag (no unit counts are published). fulfilment lists the delivery options of an offer: home delivery with min/max days and cost, 2-hour delivery, scheduled delivery, and pickup in store, as the site shows them. |
| total | The source's own count. Broad one-word searches on worten.pt match across the whole marketplace and the count moves between calls (iphone: 849,407 and 721,544 minutes apart); narrow searches are stable (29,125 twice). A sorted search can report a smaller total than relevance order. |
| rating, rating_count vs reviews | rating_count counts every rating, including ratings without text; reviews returns the written ones. iPhone 15: 162 ratings, 115 of them without text, 40 written reviews in Portuguese. |
The product price matched the product page's own structured data on 12 of 12 products (4 of them discounted), and the search price matched the product price on 16 of 16. Reading the same 8 products from two different countries gave identical prices, delivery days, delivery costs and offer lists.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/worten/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "iphone",
"brand": "APPLE"
}
}{
"ok": true,
"meta": {
"api": "worten",
"endpoint": "search",
"mode": "live",
"latency_ms": 3140.3,
"record_count": 24,
"bytes": 114184,
"cache_hit": false,
"upstream_requests": 1,
"site": "pt",
"query": "iphone",
"brand": "APPLE",
"sort": "relevance",
"total": 16856,
"page": 1,
"page_size": 24,
"last_page": 41,
"has_more": true,
"price_basis": "EUR incl. VAT/IGIC, www.worten.pt price list",
"charged_credits": 2,
"version": "0.1.0",
"request_id": "91f9a85041804e3c",
"queue_ms": 1.4,
"fetched_at": "2026-10-14T18:57:35.349Z"
},
"data": {
"results": [
{
"product_id": "ffffffff-0000-4000-a000-000078064eb1",
"sku": "8782294",
"ean": "0195951030524",
"eans": null,
"entity_id": "1351392474",
"webitem_id": "01KJR3Q9JVG7J6505VWFTY6SH9",
"name": "iPhone 17e APPLE (6.1'' - 256 GB - Preto)",
"brand": "APPLE",
"url": "https://www.worten.pt/produtos/iphone-17e-apple-6-1-256-gb-preto-8782294",
"image": "https://www.worten.pt/i/06960f9290d5876ef1ec70e16a0a041fcfac6e10",
"price": 699.99,
"original_price": 889,
"price_type": "recommended_retail_price",
"discount_pct": 21,
"currency": "EUR",
"in_stock": true,
"offer_id": "ffffffff-0000-4000-a001-0000008601d6",
"seller": {
"seller_id": "689dda97-efa4-4c6d-96bc-6f4bbfda8394",
"name": "Worten",
"is_worten": true,
"premium": null,
"rating": null,
"rating_count": null
},
"offer_count": 5,
"second_offer_price": 785,
"shipping": {
"price": 0,
"min_days": 1,
"max_days": 2
},
"free_delivery_list": null,
"rating": 4.4667,
"rating_count": 15,
"variant_count": 5,
"promo_start": "2026-10-12T23:00:00Z",
"promo_end": "2026-10-19T22:59:59Z",
"energy_class": "A",
"release_date": "11 de março de 2026",
"badges": null,
"tags": [
"multi_offers",
"worten_offer",
"is_in_stock"
],
"category_ids": [
"01G2YY69NZ4MFFQC8GXDMEVWF5",
"01K2F771M6YTHNP8BXE6V93P5D",
"01K10M7EHRM8BWKVYXPT607G7W"
]
},
{
"product_id": "ffffffff-0000-4000-a000-000077b0f967",
"sku": "8600345",
"ean": "0195950628166",
"eans": null,
"entity_id": "1318714948",
"webitem_id": "01K4T453SVQG0RRSN5TWBJY4M0",
"name": "iPhone 17 Pro APPLE (6.3'' - 512 GB - Azul escuro)",
"brand": "APPLE",
"url": "https://www.worten.pt/produtos/iphone-17-pro-apple-6-3-512-gb-azul-escuro-8600345",
"image": "https://www.worten.pt/i/7678e0e2184bd26e50a49bda4f42766c1a6cb713",
"price": 1519,
"original_price": null,
"price_type": "regular",
"discount_pct": null,
"currency": "EUR",
"in_stock": true,
"offer_id": "ffffffff-0000-4000-a001-000000833b19",
"seller": {
"seller_id": "689dda97-efa4-4c6d-96bc-6f4bbfda8394",
"name": "Worten",
"is_worten": true,
"premium": null,
"rating": null,
"rating_count": null
},
"offer_count": 11,
"second_offer_price": 1433,
"shipping": {
"price": 0,
"min_days": 1,
"max_days": 2
},
"free_delivery_list": null,
"rating": 4.4444,
"rating_count": 9,
"variant_count": 8,
"promo_start": "2026-10-12T23:00:00Z",
"promo_end": "2026-10-19T22:59:59Z",
"energy_class": "A",
"release_date": "19 de setembro de 2025",
"badges": null,
"tags": [
"multi_offers",
"worten_offer",
"is_in_stock"
],
"category_ids": [
"01G2YY69NZ4MFFQC8GXDMEVWF5",
"01K2F771M6YTHNP8BXE6V93P5D",
"01K10M7EHRM8BWKVYXPT607G7W"
]
},
{
"product_id": "ffffffff-0000-4000-a000-000079540124",
"sku": "8997951",
"ean": "0195951410357",
"eans": null,
"entity_id": "1452945015",
"webitem_id": "01M25AN0F7X0DAX0VWFJGJD6AT",
"name": "iPhone 18 Pro Max APPLE (6.9'' - 256 GB - Prateado)",
"brand": "APPLE",
"url": "https://www.worten.pt/produtos/iphone-18-pro-max-apple-6-9-256-gb-prateado-8997951",
"image": "https://www.worten.pt/i/2d7939d02264b730fd687f9d8d24a9f8d0a69b37",
"price": 1649,
"original_price": null,
"price_type": "regular",
"discount_pct": null,
"currency": "EUR",
"in_stock": true,
"offer_id": "ffffffff-0000-4000-a001-000000894c3f",
"seller": {
"seller_id": "689dda97-efa4-4c6d-96bc-6f4bbfda8394",
"name": "Worten",
"is_worten": true,
"premium": null,
"rating": null,
"rating_count": null
},
"offer_count": 2,
"second_offer_price": 1763,
"shipping": {
"price": 0,
"min_days": 3,
"max_days": 4
},
"free_delivery_list": null,
"rating": 4,
"rating_count": 1,
"variant_count": 15,
"promo_start": "2026-10-05T23:00:00Z",
"promo_end": "2026-10-19T22:59:59Z",
"energy_class": "A",
"release_date": "18 de setembro de 2026",
"badges": null,
"tags": [
"multi_offers",
"worten_offer",
"is_in_stock"
],
"category_ids": [
"01G2YYDYYVP212M9N4DGER68ZK",
"01JFAXMSABF3J1HQGK5QGAHF9T",
"01M2372Z7NJ64BVNSP2PH5CXWD"
]
}
],
"total": 16856,
"page": 1,
"page_size": 24,
"last_page": 41,
"has_more": true,
"site": "pt",
"currency": "EUR",
"facets": {
"categories": [
{
"category_id": "01G2YYDYYVP212M9N4DGER68ZK",
"label": "Telemóveis e Smartphones",
"count": 15213,
"level": 1,
"children": [
"[trimmed-depth]",
"[trimmed-depth]"
]
},
{
"category_id": "01G2Z1Z2GXVMGJGWPVCJZF9ZJZ",
"label": "Telemóveis Recondicionados",
"count": 13160,
"level": 1,
"children": [
"[trimmed-depth]"
]
},
{
"category_id": "01G2Z2ZW60D0G075PVDEY1HG2X",
"label": "Smartwatches Recondicionados",
"count": 2,
"level": 1,
"children": [
"[trimmed-depth]"
]
}
],
"price_range": {
"min": 0.99,
"max": 9999
},
"other": [
{
"key": "t_tags",
"label": "Stock",
"type": "tags",
"options": [
"[trimmed-depth]"
]
},
{
"key": "m_entrega-estimada-em",
"label": "Entrega estimada em",
"type": "terms",
"options": [
"[trimmed-depth]",
"[trimmed-depth]",
"[trimmed-depth]"
]
},
{
"key": "seller_id",
"label": "Vendedores",
"type": "terms",
"options": [
"[trimmed-depth]",
"[trimmed-depth]",
"[trimmed-depth]"
]
}
]
}
}
}What the Worten API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search Worten (worten.pt or Worten Canarias) by keyword and/or category with the site's own filters: brand, price range, in stock online, on sale, seller (Worten itself, premium marketplace sellers, or one marketplace seller), condition (new / refurbished / outlet, worten.pt), 5 sort orders. Each row: product id, Worten reference (sku), EAN, name, brand, price, original price and its type (recommended retail price vs promotion), discount, stock, the featured offer's seller (Worten or marketplace), number of offers and the next offer's price, delivery price and days, rating and count, promotion window, energy class. Plus the source's total and its facets (category tree with ids, brands, sellers, condition, ratings, delivery time, price range). | Pricing teams call search to search Worten (worten.pt or Worten Canarias) by keyword and/or category with the site's own f…. | query, site, category_id, category_level, brand, ... |
| product | Full Worten product record: name, brand, model, Worten reference, EAN, description, category, rating and count, the featured offer's price, original price and its type, discount, stock, seller (Worten or marketplace) and delivery / store-pickup options, EVERY seller's offer with its own price, stock, delivery days and cost, the cheapest in-stock offer, warranty and insurance add-ons with prices, energy class, release date, manufacturer, grouped technical specifications and the raw attribute list. | Marketplace operators call product to get full Worten product record. | product_id, sku, ean, site |
| offers | Every offer for one Worten product in one call — Worten's own and each marketplace seller's: price, original price, discount, stock, seller name / rating / order count, delivery days and cost, store pickup — plus the cheapest in-stock offer. Lighter than `product` for price monitoring. | Catalog enrichment teams call offers to get every offer for one Worten product in one call. | product_id, sku, ean, site |
| reviews | Written buyer reviews of a Worten product (the site's Bazaarvoice reviews): stars, title, text, date, nickname, verified-purchaser flag, recommended flag, helpful votes, sub-ratings, photos, brand responses. Plus the rating summary: average, distribution, total submissions and how many are ratings without text. Reviews are shared across a product's variants, as on the site. | Retail analysts call reviews to get written buyer reviews of a Worten product (the site's Bazaarvoice reviews). | entity_id, product_id, sku, ean, site, ... |
Call search from your stack
curl -X POST https://api.reefapi.com/worten/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"iphone","brand":"APPLE"}'import requests
r = requests.post(
"https://api.reefapi.com/worten/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "iphone",
"brand": "APPLE"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/worten/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "iphone",
"brand": "APPLE"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.worten.search with {"query":"iphone","brand":"APPLE"}.Who uses this API and why
- Track Worten prices in Portugal and the Canary Islands, with recommended-retail and promotion prices kept apart.
- Watch every marketplace seller's price, stock and delivery cost against Worten's own offer.
- Match products by EAN between Worten and other European electronics retailers.
- Find products on sale in a Worten category, filtered by brand and price.
- Collect buyer reviews and rating distributions for product research.
Questions developers ask before integrating
Do I need a Worten account?
No. Everything is read logged out, and you call reefapi.com from anywhere.
Is Worten Spain covered?
Worten Canarias (canarias.worten.es) is, with site=canarias. worten.es for mainland Spain no longer sells online; its pages only point to Worten Canarias, so there is nothing to read there.
Which filters are there and do they work?
Brand, price range, in stock, on sale, seller, condition and category. Each was checked against the unfiltered count in the same run: maquina de lavar roupa 29,125 → on sale 19,788, in stock 25,344, sold by Worten 4,006, premium sellers 7,438, outlet 2,298, 300-400 € 856. A brand the store does not carry returns 0 rows, never the whole catalogue.
Can I see marketplace sellers' prices, not just Worten's?
Yes. product and offers list every seller of a product with price, stock, delivery days and delivery cost; a washing machine had Worten plus 9 marketplace sellers between 343.72 € and 416.93 €. In search, seller=worten keeps Worten's own offers and seller=premium the premium marketplace sellers.
How deep can I page?
Worten serves the first 1,000 rows of any search: 41 pages of 24, 20 of 48 or 83 of 12. A later page is refused with the last valid page number; narrow the search with filters to reach more.
Do you return delivery cost and store stock?
Delivery cost and delivery days per offer, yes, as Worten shows them without a postcode (they did not change with the reader's country). Store pickup is shown as available or not; per-store unit counts are not published.
Is the eco fee (ecovalor) included?
Worten does not publish it as a separate figure on the product data or page, so it is not a field. Prices are the final prices the site shows.
Where do the reviews come from?
From the reviews shown on the Worten product page. Reviews are shared across colour and size variants of a product, as on the site, and the summary gives the average, the star distribution and how many ratings have no text.
What is the Worten API?
Worten API is a ReefAPI endpoint group for portugal's largest electronics store and its marketplace: prices, pvpr and promotion prices, every seller's offer, stock, delivery, ean, specs and reviews. It returns live JSON through POST requests under /worten/v1.
Is the Worten API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Worten calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Worten login or account?
No login to Worten 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 Worten 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 Worten API use?
Worten 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 Worten from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call worten actions with the same key, credit pool and JSON envelope used by normal REST requests.