Zara API & Scraper
Zara API returns live Zara data as clean JSON for zara The primary endpoint, search, returns matching records including product id, product group id, name, brand and brand id.
🤖 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.
Developers reach for it when they need to track product listings, prices, availability, variants and reviews without maintaining one-off scraping code or separate API contracts. If you were about to build or fix a Zara scraper, this API is the maintained alternative — it returns the same data as clean JSON, with the proxies, rotation and anti-bot handling already solved. This page covers the live example, request shape, response shape and available actions: search, product_detail, price. Every request uses the same ReefAPI envelope, one API key and one shared credit pool, so it fits alongside the rest of your data stack.
Zara price minor units by market, and what exponent 0 means
Zara returns money as an integer plus an exponent, so reading price.raw on its own is how you end up off by a factor of a hundred, and the exponent is not the same in every market. The same product also has a different assortment and a different in-stock size count per store. Every row below is product 545456737, a pinstripe blazer, fetched once per market on 2026-08-27.
| market | Currency | price.raw / exponent | price.amount | sizes_in_stock of 5 |
|---|---|---|---|---|
| us | USD | 21900 / -2 | 219.00 | 4 |
| de | EUR | 13900 / -2 | 139.00 | 5 |
| gb | GBP | 13900 / -2 | 139.00 | 3 |
| tr | TRY | 799000 / -2 | 7990.00 | 5 |
| in | INR | 1295000 / -2 | 12950.00 | 1 |
| jp | JPY | 25990 / 0 | 25990 | 4 |
| kr | KRW | 259900 / 0 | 259900 | 4 |
The market enum holds 19 codes: us, ca, mx, br, gb, ie, es, pt, fr, it, de, nl, pl, tr, ae, in, jp, kr, au. The default is us. price.amount is already the divided figure, so use it unless you need the integer. sku_count stayed at 5 in every market above while sizes_in_stock moved between 1 and 5, which means stock is per store even though the SKU list is not.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/zara/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "dress",
"max_results": 20
}
}{
"ok": true,
"meta": {
"api": "zara",
"endpoint": "search",
"mode": "live",
"latency_ms": 1380.2,
"record_count": 20,
"bytes": 82151,
"cache_hit": false,
"completeness_pct": 100,
"stop_reason": "limit_reached",
"market": "us",
"query": "dress",
"match_type": "EXACT",
"pagination": {
"page": 1,
"page_size": 20,
"total_results": 831,
"returned": 20,
"has_more": true,
"next_page": 2
},
"charged_credits": 1,
"version": "1.0.0"
},
"data": {
"query": "dress",
"market": {
"code": "us",
"store_id": "11719",
"locale": "en_US",
"currency": "USD",
"url_base": "https://www.zara.com/us/en"
},
"match": {
"type": "EXACT",
"provider": "Attraqt",
"universe": "WOMAN"
},
"results": [
{
"product_id": "552893657",
"product_group_id": "552885420",
"name": "100% LEATHER MIDI DRESS",
"url": "https://www.zara.com/us/en/100-leather-midi-dress-p03046309.html?v1=552893657",
"brand": "zara",
"brand_id": 1,
"reference": "C03046309620000-I2026",
"display_reference": "3046/309",
"price": {
"amount": 179,
"currency": "USD",
"raw": 17900,
"exponent": -2,
"was": null,
"discount_pct": null,
"discount_label": null,
"on_sale": false,
"unavailable": null
},
"availability": "coming_soon",
"in_stock": false,
"section": 1,
"section_name": "WOMAN",
"family_name": "DRESS",
"subfamily_name": "B.DRESS",
"kind": "Wear",
"type": "Product",
"color": {
"product_id": "552893657",
"color_id": "620",
"name": "Pink",
"hex": "#9A5454",
"reference": "C03046309620000-I2026",
"availability": "coming_soon"
},
"available_colors": [
{
"name": "[trimmed-depth]",
"hex": "[trimmed-depth]"
}
],
"additional_color_count": 0,
"main_color_hex": "#9A5454",
"tags": null,
"image": "https://static.zara.net/assets/public/f8db/f569/3c6e4193bbb7/54db8ec968a7/03046309620-p/03046309620-p.jpg?ts=1789479719664&w=2048",
"images": [
{
"url": "[trimmed-depth]",
"kind": "[trimmed-depth]",
"name": "[trimmed-depth]",
"width": "[trimmed-depth]",
"height": "[trimmed-depth]",
"order": "[trimmed-depth]"
}
],
"image_count": 1,
"seo": {
"keyword": "100-leather-midi-dress",
"seo_product_id": "03046309",
"discern_product_id": "552893657"
},
"position": 1
},
{
"product_id": "590621958",
"product_group_id": "549296705",
"name": "PLAID A-LINE DRESS",
"url": "https://www.zara.com/us/en/plaid-a-line-dress-p06096811.html?v1=590621958",
"brand": "zara",
"brand_id": 1,
"reference": "C06096811080101-I2026",
"display_reference": "6096/811",
"price": {
"amount": 45.9,
"currency": "USD",
"raw": 4590,
"exponent": -2,
"was": null,
"discount_pct": null,
"discount_label": null,
"on_sale": false,
"unavailable": null
},
"availability": "in_stock",
"in_stock": true,
"section": 3,
"section_name": "KID",
"family_name": "DRESS",
"subfamily_name": "GRL DRESS",
"kind": "Wear",
"type": "Product",
"color": {
"product_id": "590621958",
"color_id": "080",
"name": "Ecru / Blue",
"hex": "#aaa7a0",
"reference": "C06096811080101-I2026",
"availability": "in_stock"
},
"available_colors": [
{
"name": "[trimmed-depth]",
"hex": "[trimmed-depth]"
}
],
"additional_color_count": 0,
"main_color_hex": "#aaa7a0",
"tags": null,
"image": "https://static.zara.net/assets/public/ae04/4415/1cc24528bbc1/09891fe18d52/06096811080-f1/06096811080-f1.jpg?ts=1788429202043&w=2048",
"images": [
{
"url": "[trimmed-depth]",
"kind": "[trimmed-depth]",
"name": "[trimmed-depth]",
"width": "[trimmed-depth]",
"height": "[trimmed-depth]",
"order": "[trimmed-depth]"
}
],
"image_count": 1,
"seo": {
"keyword": "plaid-a-line-dress",
"seo_product_id": "06096811",
"discern_product_id": "590621958"
},
"position": 2
},
{
"product_id": "595370971",
"product_group_id": "550767475",
"name": "CHECKERED KNIT-DETAIL DRESS",
"url": "https://www.zara.com/us/en/checked-dress-with-knit-detail-p05536684.html?v1=595370971",
"brand": "zara",
"brand_id": 1,
"reference": "C05536684700020-I2026",
"display_reference": "5536/684",
"price": {
"amount": 45.9,
"currency": "USD",
"raw": 4590,
"exponent": -2,
"was": null,
"discount_pct": null,
"discount_label": null,
"on_sale": false,
"unavailable": null
},
"availability": "in_stock",
"in_stock": true,
"section": 3,
"section_name": "KID",
"family_name": "BABY DRESS",
"subfamily_name": "KDA KNITWEAR",
"kind": "Wear",
"type": "Product",
"color": {
"product_id": "595370971",
"color_id": "700",
"name": "Brown",
"hex": "#675655",
"reference": "C05536684700020-I2026",
"availability": "in_stock"
},
"available_colors": [
{
"name": "[trimmed-depth]",
"hex": "[trimmed-depth]"
}
],
"additional_color_count": 0,
"main_color_hex": "#675655",
"tags": [
{
"type": "[trimmed-depth]",
"label": "[trimmed-depth]"
}
],
"image": "https://static.zara.net/assets/public/e438/527c/bf2442d4bdf0/c89fb5b07d15/05536684700-f1/05536684700-f1.jpg?ts=1785831180838&w=2048",
"images": [
{
"url": "[trimmed-depth]",
"kind": "[trimmed-depth]",
"name": "[trimmed-depth]",
"width": "[trimmed-depth]",
"height": "[trimmed-depth]",
"order": "[trimmed-depth]"
}
],
"image_count": 1,
"seo": {
"keyword": "checked-dress-with-knit-detail",
"seo_product_id": "05536684",
"discern_product_id": "595370971"
},
"position": 3
}
],
"filters_available": {
"color": [
{
"value": "beige",
"label": "Beige",
"count": 113,
"filter": "color_facet:beige"
},
{
"value": "black",
"label": "Black",
"count": 164,
"filter": "color_facet:black"
},
{
"value": "blue",
"label": "Blue",
"count": 101,
"filter": "color_facet:blue"
}
],
"price_range": [
{
"value": "2154",
"label": "2154",
"count": null,
"filter": "priceFilter:"
},
{
"value": "3000",
"label": "3000",
"count": null,
"filter": "priceFilter:"
},
{
"value": "4000",
"label": "4000",
"count": null,
"filter": "priceFilter:"
}
],
"rootCategories": [
{
"value": "catalog01_woman",
"label": "Woman",
"count": 529,
"filter": "rootCategories_facet:catalog01_woman"
},
{
"value": "catalog01_kid",
"label": "Kid",
"count": 117,
"filter": "rootCategories_facet:catalog01_kid"
},
{
"value": "catalog01_massimoduttiwoman",
"label": "MD Woman",
"count": 107,
"filter": "rootCategories_facet:catalog01_massimoduttiwoman"
}
]
},
"sort_available": [
{
"value": "price_asc",
"label": "Cheapest first"
},
{
"value": "price_desc",
"label": "Most expensive first"
}
]
}
}What the Zara API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search the Zara catalogue and get back the products on sale right now — each with Zara's own product id, name, price (with the was-price and discount percentage when it is reduced), currency, availability, colourway with hex code, the other colours it comes in, the product images at full resolution, the department and product family, and the link to the page. Choose the country store with `market` (that is what sets the currency), narrow with section, colour, category or brand, sort by price, and page through the results. Every filter value the query actually supports comes back in `filters_available` with counts, so you never have to guess one. | Pricing teams call search to search the Zara catalogue and get back the products on sale right now. | query, market, section, group_section, size, ... |
| product_detail | Get one Zara product in full, by its product id or its zara.com URL — the name and the full description, the price with its currency and any discount, the product reference as printed on the label, EVERY colourway it is made in and, inside each one, EVERY size with Zara's own SKU number, that size's own price and whether it is in stock right now. Also the complete image gallery at full resolution, the fibre composition broken down per garment part, care instructions, country of origin and traceability, safety warnings, certified and sustainable material claims, physical measurements where Zara publishes them, the size system, the department and product family, and the date the product first went on sale. Choose the country store with `market` — id, price, currency and stock are all per-market. | Marketplace operators call product_detail to get one Zara product in full, by its product id or its zara.com URL. | product_id, url, market, include_composition, find_market |
| price | Cheap refresh of ONE Zara product's current price and stock, by product id or zara.com URL: the price with its currency (and the was-price and discount when it is reduced), the colour's availability word and an `in_stock` boolean. One light upstream request instead of the three a full product_detail makes, so use this for daily price/stock monitoring and product_detail only when you need sizes, images or composition. Same ids and the same `market` knob as product_detail. | Catalog enrichment teams call price to get cheap refresh of ONE Zara product's current price and stock, by product id or zara.com URL. | product_id, url, market |
Call search from your stack
curl -X POST https://api.reefapi.com/zara/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"dress","max_results":20}'import requests
r = requests.post(
"https://api.reefapi.com/zara/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "dress",
"max_results": 20
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/zara/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "dress",
"max_results": 20
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.zara.search with {"query":"dress","max_results":20}.Who uses this API and why
- Pricing teams use Zara to search the Zara catalogue and get back the products on sale right now.
- Marketplace operators use Zara to get one Zara product in full, by its product id or its zara.com URL.
- Catalog enrichment teams use Zara to get cheap refresh of ONE Zara product's current price and stock, by product id or zara.com URL.
Questions developers ask before integrating
Does the Zara API return prices in cents?
It returns both forms. price.raw is the integer Zara publishes, price.exponent says where the decimal point goes, and price.amount is the already-divided number. For product 545456737 on the us market that was raw 21900, exponent -2 and amount 219.0. Read amount unless you specifically need the integer, and never assume raw divided by 100.
Is the Zara price exponent always -2?
No, and that is the trap. Currencies without minor units come back with exponent 0: the same blazer on jp returned raw 25990 exponent 0 for JPY 25,990 and on kr raw 259900 exponent 0 for KRW 259,900. Dividing those by 100 would understate the price a hundredfold. us, de, gb, tr and in all returned -2 in the same measurement.
What does the market parameter change?
The catalogue, the assortment, the price and the currency, and nothing else. The same blazer was USD 219.00 on us, EUR 139.00 on de, GBP 139.00 on gb, TRY 7,990.00 on tr and INR 12,950.00 on in. It does not depend on where the request comes from, so the same market always returns the same currency. Nineteen codes are accepted and the default is us.
Is a Zara product_id the garment or the colour?
The colour. Zara ids are colour-level, so 545456737 is one colourway and product_group_id (545451465) is the garment it belongs to. Passing the group id also resolves. Inside product_detail, colors[] holds every colourway with its own color_id and hex, and colors[].sizes[] holds every size with its own sku, so one call gives you the whole matrix rather than one variant.
What size-level detail comes back, and what are the stock values?
Every size row carries sku, size_id, name, availability, in_stock and its own reference. On the us market that blazer returned SKUs 545451466 through 545451470 for XS, S, M, L and XL, with XL at availability "coming_soon" and in_stock false while the other four were "in_stock". Across a 60-row search the availability values seen were in_stock and low_on_stock, so treat it as a small vocabulary and read in_stock when you only need the boolean.
What are reference and display_reference?
reference is the full code printed on the label, built from the product code, the colour code and the season: "C00550156407000-I2026" for that blazer, whose color_id is 407. display_reference is the short form Zara shows on the page, "0550/156". Each size then has its own reference with the size appended, such as "0055015640701-I2026" for XS. Use reference when matching against Zara's own paperwork rather than the numeric id.
Why does a Zara search return Zara Home or Massimo Dutti products?
Because the search index behind a Zara store is the Inditex index for that store, so sister brands can match a query. A 60-row search for 'dress' on the us market returned 59 zara rows and 1 zarahome row. Every row carries brand and brand_id, and the brand parameter (zara, zarahome, massimodutti) trims rows after they are fetched, so a filtered page can come back shorter than max_results.
How do I know Zara actually matched my words?
Read match.type. "EXACT" means the words matched the catalogue, and Zara also reports spell-corrected and semantic-fallback matches instead of returning nothing, which is how a query quietly turns into merely similar products. match.universe names the department Zara routed the query to and it can disagree with the rows: a search for 'dress' came back with universe KID while the 60 rows split 36 KID, 21 WOMAN, 2 MAN and 1 HOME.
What is the Zara API?
Zara API is a ReefAPI endpoint group for zara It returns live JSON through POST requests under /zara/v1.
Is the Zara API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Zara calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Zara login or account?
No login to Zara 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 Zara 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 Zara API use?
Zara actions currently cost 1 credit per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Zara from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call zara actions with the same key, credit pool and JSON envelope used by normal REST requests.