Alza API & Scraper
The Alza API returns Central Europe's largest electronics retailer as clean JSON, in four actions - search, category, product/detail and product/reviews - across five national storefronts on one platform: Czechia (CZK), Slovakia (EUR), Hungary (HUF), Austria (EUR) and Germany (EUR).
🤖 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.
A country parameter picks the storefront and the currency follows it. search and category return 24 products per page with an exact result total, the price a shopper pays now, the struck-through price and the discount, the monthly financing figure kept apart from the price, the stock wording the shop itself prints, the customer rating on a 5-star scale with the number of ratings, the EU energy class where the product has one, and how many colour or capacity variants exist. Both accept the orderings Alza itself offers - cheapest, most expensive, best rated, best selling, newest - and narrow by brand, price range, in stock, on sale, newly added or well rated; each filter is applied by the shop and the response reports the exact resulting total, so you can see it bite. product/detail adds the price both including and excluding VAT, the manufacturer part number, the complete image gallery, the full technical specification grouped exactly as the shop groups it, the description, the colour and capacity variants with their price difference and stock, the breadcrumb and a delivery block. product/reviews returns the shop's own customer reviews with the reviewer's public nickname, what they liked and disliked as separate lists, the date and whether Alza verified the purchase. Verified on 2026-09-23: 58 of 58 live checks behaved as expected, and on 16 products across 7 categories and 4 storefronts the price, the price without VAT, the currency, the part number, the rating and both rating counts matched the shop's own product page on 16 of 16 - checked three ways, including against a second endpoint. No Alza account, no browser - one ReefAPI key and the standard { ok, data, meta, error } envelope.
Which storefront, which currency — and why you cannot reuse an id across them
One platform, one parameter. Measured on 2026-09-23: every storefront below returned a live search and at least one full product record in the same run. The catalogue, the currency and the price are all per storefront - the same product is not the same price in two countries, even two euro ones.
| country | storefront | currency | measured live |
|---|---|---|---|
| cz | alza.cz | CZK | search + category + product/detail + reviews |
| sk | alza.sk | EUR | search + category + product/detail + reviews |
| hu | alza.hu | HUF | search + category + product/detail |
| at | alza.at | EUR | search + product/detail |
| de | alza.de | EUR | search + product/detail |
Alza closed its UK shop: alza.co.uk has not sold anything since 27 May 2022 and publishes a suspension notice instead of a catalogue, so country=uk is rejected with that reason rather than returning an empty result. Product ids belong to a catalogue, not to the group: of five Czech iPhone ids checked, all five existed on Slovakia, two on Austria and Germany, and none on Hungary, which lists the same phone under its own id. Ask for an id a storefront does not carry and you get NOT_FOUND, never a different product.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/alza/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "iphone",
"country": "cz"
}
}{
"ok": true,
"meta": {
"api": "alza",
"endpoint": "search",
"mode": "live",
"latency_ms": 644.7,
"record_count": 24,
"bytes": 327467,
"cache_hit": false,
"charged_credits": 2,
"version": "0.1.0"
},
"data": {
"results": [
{
"position": 1,
"product_id": "13078788",
"product_code": "RI055b3",
"title": "iPhone 17 Pro 256GB stříbrná",
"url": "https://www.alza.cz/iphone-17-pro-256gb-stribrna-d13078788.htm",
"image": "https://image.alza.cz/products/RI055b3/RI055b3.jpg?width=230&height=230",
"currency": "CZK",
"price": 29990,
"was_price": null,
"discount_percent": null,
"discount_percent_site": null,
"discount_label": null,
"is_discounted": false,
"monthly_instalment": 690,
"rating": 4.9,
"rating_count": 345,
"rating_scale": 5,
"availability_text": "Skladem > 5 ks",
"availability_code": "avl0",
"energy_class": "A",
"variant_count": 9,
"summary": "Mobilní telefon - 6,3\" AMOLED 2622 × 1206 (120Hz), úložiště: 256 GB, RAM: 12 GB, fotoaparát: 48Mpx (f/1,78) hlavní + 48Mpx širokoúhlý + 48Mpx teleobjektiv + 48Mpx makro + 18Mpx přední, CPU: Apple A19 Pro, NFC, USB-C, 5G, dual SIM, voděodolný dle IP68, rychlé nabíjení 36W, baterie 3988 mAh, model 2025, iOS",
"badges": [
"EnergyClass2021",
"NoChargerPresence",
"TopPosition"
],
"open_box": false
},
{
"position": 2,
"product_id": "13078791",
"product_code": "RI055b1",
"title": "iPhone 17 Pro 256GB temně modrá",
"url": "https://www.alza.cz/iphone-17-pro-256gb-temne-modra-d13078791.htm",
"image": "https://image.alza.cz/products/RI055b1/RI055b1.jpg?width=230&height=230",
"currency": "CZK",
"price": 29990,
"was_price": null,
"discount_percent": null,
"discount_percent_site": null,
"discount_label": null,
"is_discounted": false,
"monthly_instalment": 690,
"rating": 4.9,
"rating_count": 345,
"rating_scale": 5,
"availability_text": "Skladem > 5 ks",
"availability_code": "avl0",
"energy_class": "A",
"variant_count": 9,
"summary": "Mobilní telefon - 6,3\" AMOLED 2622 × 1206 (120Hz), úložiště: 256 GB, RAM: 12 GB, fotoaparát: 48Mpx (f/1,78) hlavní + 48Mpx širokoúhlý + 48Mpx teleobjektiv + 48Mpx makro + 18Mpx přední, CPU: Apple A19 Pro, NFC, USB-C, 5G, dual SIM, voděodolný dle IP68, rychlé nabíjení 36W, baterie 3988 mAh, model 2025, iOS",
"badges": [
"EnergyClass2021",
"NoChargerPresence",
"TopPosition"
],
"open_box": false
},
{
"position": 3,
"product_id": "13078787",
"product_code": "RI055b2",
"title": "iPhone 17 Pro 256GB kosmicky oranžová",
"url": "https://www.alza.cz/iphone-17-pro-256gb-kosmicky-oranzova-d13078787.htm",
"image": "https://image.alza.cz/products/RI055b2/RI055b2.jpg?width=230&height=230",
"currency": "CZK",
"price": 29990,
"was_price": null,
"discount_percent": null,
"discount_percent_site": null,
"discount_label": null,
"is_discounted": false,
"monthly_instalment": 690,
"rating": 4.9,
"rating_count": 345,
"rating_scale": 5,
"availability_text": "Skladem > 5 ks",
"availability_code": "avl0",
"energy_class": "A",
"variant_count": 9,
"summary": "Mobilní telefon - 6,3\" AMOLED 2622 × 1206 (120Hz), úložiště: 256 GB, RAM: 12 GB, fotoaparát: 48Mpx (f/1,78) hlavní + 48Mpx širokoúhlý + 48Mpx teleobjektiv + 48Mpx makro + 18Mpx přední, CPU: Apple A19 Pro, NFC, USB-C, 5G, dual SIM, voděodolný dle IP68, rychlé nabíjení 36W, baterie 3988 mAh, model 2025, iOS",
"badges": [
"EnergyClass2021",
"NoChargerPresence",
"TopPosition"
],
"open_box": false
}
],
"count": 24,
"total_results": 127,
"page": 1,
"page_count": 6,
"per_page": 24,
"search_mode": "resolved",
"resolved_url": "https://www.alza.cz/iphone/18851638.htm",
"category_id": 18851638,
"producer_id": null,
"brands": [
{
"id": 1627,
"name": "Apple",
"product_count": 122
},
{
"id": 45144,
"name": "[redacted-name]",
"product_count": 6
}
],
"country": "cz",
"currency": "CZK",
"filters_applied": null,
"filters_supported": true,
"query": "iphone"
}
}What the Alza API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search one national Alza storefront by keyword and get 24 products per page with the price a shopper pays now (VAT included), the struck-through price and the discount, the financing offer, stock wording, customer rating on a 5-star scale, energy class and the number of colour/capacity variants. Sort by price, rating, bestseller or newest, and narrow by brand, price range, in-stock, on-sale, newly-added or well-rated. Every filter is applied by the storefront's own listing service and the response reports the exact resulting total. | Pricing teams call search to search one national Alza storefront by keyword and get 24 products per page with the price a…. | query, country, page, sort, brand, ... |
| category | List the products of one Alza category page — from the site navigation, a product breadcrumb or a `search` response — 24 per page, with the same product fields as search and the same sorting and filters. Producer-filtered category URLs keep their brand restriction. | Marketplace operators call category to list the products of one Alza category page. | category, country, page, sort, brand, ... |
| product/detail | The full Alza product record by id or URL: title, brand, manufacturer part number (and the EAN when the storefront's part number really is one), the price both including and excluding VAT, the struck-through price and discount, financing, stock wording and the schema.org availability, condition, the complete image gallery, the complete technical specification grouped exactly as the site groups it, the description, colour/capacity variants with their price difference and stock, the energy class, the breadcrumb, and the rating with both counts Alza publishes. | Catalog enrichment teams call product/detail to get the full Alza product record by id or URL. | product_id, country, max_rotations |
| product/reviews | Customer reviews for one Alza product, newest first, straight from the storefront's own review feed: star rating, the reviewer's public nickname as the site prints it, what they liked and disliked as separate lists, the free text, the date, whether Alza verified the purchase, which variant was reviewed, any photos, and the shop's reply where there is one. | Retail analysts call product/reviews to get customer reviews for one Alza product, newest first, straight from the storefront's own revie…. | product_id, country, limit, offset, max_rotations |
Call search from your stack
curl -X POST https://api.reefapi.com/alza/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"iphone","country":"cz"}'import requests
r = requests.post(
"https://api.reefapi.com/alza/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "iphone",
"country": "cz"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/alza/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "iphone",
"country": "cz"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.alza.search with {"query":"iphone","country":"cz"}.Who uses this API and why
- Track Czech, Slovak, Hungarian, Austrian and German prices for the same product line and see where a market really is cheaper - the same item was 325.90 EUR in Austria and 323.90 EUR in Germany on the same day.
- Feed a B2B pricing or procurement sheet that needs the figure without VAT, which Alza publishes on every product.
- Watch discounts: pull the on-sale filter on a category each morning and keep price, was_price and the shop's own discount badge.
- Build or enrich a product catalogue with the full specification table grouped as the retailer groups it, the image gallery, the part number and the EU energy class.
- Mine customer reviews for a product line, with the separate liked and disliked lists, the verified-purchase flag and the variant that was reviewed.
Questions developers ask before integrating
Does Alza publish prices with and without VAT?
Yes, and the API returns both on every product. price is what a logged-out consumer pays, VAT included, and price_ex_vat is the shop's own figure without VAT. Both were checked against the shop's own product page on 16 of 16 sampled products across 7 categories and 4 storefronts.
How do I find products that are actually on discount right now?
Set discounted_only on search or category. It is Alza's own sale filter and it really narrows the set: on the Czech iPhone category it cut 123 products to 4, and on a graphics-card category 214 to 13, in the same run. Discounted rows carry was_price alongside price, plus discount_percent.
Whose discount percentage do I get, yours or Alza's?
Both, separately. discount_percent is computed from the two prices, and discount_percent_site plus discount_label carry Alza's own badge. They can disagree: one product priced 41,990 down from 43,990 is 4.55 percent, and the shop's badge prints -4 percent. Neither figure overwrites the other.
Do I get an EAN?
Only when the shop really publishes one. Alza publishes a manufacturer part number, which the API always returns as mpn. On some categories that value is itself a valid EAN-13 and is then also returned as ean; on others it is a vendor part code. Measured across 7 categories: toys 2 of 2 and drugstore 2 of 2 had an EAN, while phones 0 of 4, laptops 0 of 2, appliances 0 of 2 and storage 0 of 2 did not. The API never derives or guesses one.
Can I get a delivery date?
No, and the API says so rather than inventing one. Alza does not publish a delivery date to an anonymous visitor - it asks for a postcode first. What you do get is the stock wording the shop prints, such as "Skladem > 5 ks", where else it is held, the shop's delivery promise, and exact_date_requires_address set to true.
Do the sort and filter options actually change the results?
Yes, and every response reports the exact total so you can verify it. Measured on one category in one run: unfiltered 214 products, price from 20,000 gives 100, price up to 15,000 gives 86, both bounds together give 31, in stock only 193, on sale only 13, newly added 1, well rated 144, and brand GIGABYTE 62. Sorting by cheapest and by most expensive both returned strictly monotonic prices.
Is there anything search cannot do?
Yes. Alza answers most keywords with one of its own category or brand pages - 11 of 16 sampled keywords - and there you get the exact category total plus every sort and filter. The other keywords are answered by its free-text search page, where Alza itself offers no sorting or filtering, so asking for one there is rejected with an explanation instead of being silently ignored. The response field filters_supported tells you which mode you got, and free-text totals were observed to plateau near 300 on broad queries.
What do the different review numbers mean?
Alza publishes three and the API keeps them apart. rating_count is how many people gave a star rating, review_count is how many wrote a text review, and total_reviews on product/reviews is what the review feed will actually page through. On one phone those were 345, 58 and 80. A product nobody has rated returns rating null with rating_count 0, never a zero-star rating.
What is the Alza API?
Alza API is a ReefAPI endpoint group for central europe's largest electronics retailer in 5 countries: prices with and without vat, discounts, stock, specs and reviews. It returns live JSON through POST requests under /alza/v1.
Is the Alza API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Alza calls use the same shared credit balance as every other ReefAPI engine.
Do I need an Alza login or account?
No login to Alza 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 Alza 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 Alza API use?
Alza actions currently cost 1-2 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Alza from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call alza actions with the same key, credit pool and JSON envelope used by normal REST requests.