El Corte Inglés API & Scraper
El Corte Inglés API returns live El Corte Inglés data as clean JSON for el corte inglés The primary endpoint, search, returns product results including product id, product type, path, name and brand.
🤖 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 El Corte Inglés 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.
El Corte Inglés id formats: product codes, variant ids and seller ids
El Corte Inglés carries its own stock and third-party marketplace stock in one catalogue, and the id tells you which is which. Below that, a variant id addresses one colour and size row and carries its own barcode, price and stock flag. Every example was measured 2026-08-27.
| Field | Shape | Measured example | Identifies |
|---|---|---|---|
| product_id (own stock) | A followed by 8 or 9 digits | A56390869, A200383484 | One product page in El Corte Inglés' own catalogue |
| product_id (marketplace) | MP_<sellerId>_<sellerSku> | MP_0652065_MKXC3 | A third-party seller's listing, is_marketplace true |
| variant_id / eci_reference | 18 digits | 001057063613046009 | One colour and size row, with its own price and stock |
| colour sku | 15 digits, the variant id minus its last 3 | 001057063613046 | One colourway and its image set |
| gtin13 | EAN-13 | 8806097643135 | The barcode of that specific variant |
| seller_id | 001, or a longer numeric code | 001 is El Corte Inglés, 0652065 a marketplace seller | Who actually sells the row |
search accepts a product code or a bare EAN-13 in query and switches to a single-result lookup: query=A56390869 returned meta.search_mode id_lookup with total_results 1. The supermarket tree is not browsable at all: category=supermercado returns a typed NOT_FOUND explaining that /supermercado/ and /alimentacion/ render their contents in the browser and publish no product rows.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/elcorteingles/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "zapatillas running",
"max_results": 12
}
}{
"ok": true,
"meta": {
"api": "elcorteingles",
"endpoint": "search",
"mode": "live",
"latency_ms": 3104,
"record_count": 8,
"bytes": 1927650,
"cache_hit": false,
"completeness_pct": 66.67,
"stop_reason": "limit_reached",
"pages_requested": 1,
"pages_ok": 1,
"search_mode": "query",
"robots": "disallowed_by_robots",
"robots_note": "elcorteingles.es/robots.txt disallows /search-nwx/* for crawlers; browse by `category` for the robots-clean route to the same rows",
"source": {
"route": "/search-nwx/",
"upstream_calls": 1
},
"sort": {
"requested": null,
"applied": "featuredDesc",
"label": "Recomendados"
},
"tiles_seen": 12,
"sponsored_slots": 4,
"rejected_rows": 0,
"pagination": {
"page": 1,
"per_page": 12,
"pages_fetched": 1,
"total_results": 3422,
"total_pages": 286,
"returned": 8,
"has_more": true,
"next_page": 2
},
"notes": null,
"charged_credits": 2,
"version": "1.0.0"
},
"data": {
"products": [
{
"product_id": "MP_0248955_M4118K1",
"product_type": "catalog",
"url": "https://www.elcorteingles.es/deportes/MP_0248955_M4118K1-azul-marino-pr-zapatillas-de-running-de-hombre-411v4-new-balance/",
"path": "/deportes/MP_0248955_M4118K1-azul-marino-pr-zapatillas-de-running-de-hombre-411v4-new-balance/",
"name": "Zapatillas de running de hombre 411v4 New Balance Azul marino",
"brand": "New Balance",
"brand_slug": "new-balance",
"gtin13": "0199063123600",
"categories": [
"Deportes"
],
"hierarchy": [
"deportes"
],
"image": "https://dam.elcorteingles.es/producto/www-0199063123877-00.jpg",
"colour_count": 1,
"colours": [
"Azul marino"
],
"variant_count": 10,
"in_stock_variant_count": 3,
"price": 49.99,
"price_min": 49.99,
"price_max": 49.99,
"currency": "EUR",
"availability": "partially_in_stock",
"in_stock": true,
"is_marketplace": true,
"sellers": [
"0248955"
],
"is_gift_card": false,
"is_collection": false,
"size_guide": "https://www.elcorteingles.es/deportes/calzado/tabla-de-tallas-new-balance/",
"group_by": "Talla"
},
{
"product_id": "A53952653",
"product_type": "catalog",
"url": "https://www.elcorteingles.es/deportes/A53952653-marron-pr-zapatillas-de-running-de-mujer-w-nike-revolution-8-nike/",
"path": "/deportes/A53952653-marron-pr-zapatillas-de-running-de-mujer-w-nike-revolution-8-nike/",
"name": "Zapatillas de running de mujer W NIKE REVOLUTION 8 Nike Marrón",
"brand": "Nike",
"brand_slug": "nike",
"gtin13": "0197862924213",
"categories": [
"Deportes"
],
"hierarchy": [
"deportes"
],
"image": "https://dam.elcorteingles.es/producto/www-001017730957960-00.jpg",
"colour_count": 1,
"colours": [
"Marrón"
],
"variant_count": 9,
"in_stock_variant_count": 9,
"price": 45.49,
"price_min": 45.49,
"price_max": 45.49,
"currency": "EUR",
"availability": "in_stock",
"in_stock": true,
"is_marketplace": false,
"sellers": [
"001"
],
"is_gift_card": false,
"is_collection": false,
"size_guide": "https://www.elcorteingles.es/deportes/calzado/tabla-de-tallas-nike/",
"group_by": "Talla"
},
{
"product_id": "A55645803",
"product_type": "catalog",
"url": "https://www.elcorteingles.es/deportes/A55645803-azul-pr-zapatillas-de-hombre-galaxy-adidas/",
"path": "/deportes/A55645803-azul-pr-zapatillas-de-hombre-galaxy-adidas/",
"name": "Zapatillas de Hombre Galaxy Adidas Azul",
"brand": "adidas",
"brand_slug": "adidas",
"gtin13": "4068812042942",
"categories": [
"Deportes"
],
"hierarchy": [
"deportes"
],
"image": "https://dam.elcorteingles.es/producto/www-001017730881269-00.jpg",
"colour_count": 1,
"colours": [
"Azul"
],
"variant_count": 6,
"in_stock_variant_count": 6,
"price": 39.99,
"price_min": 39.99,
"price_max": 39.99,
"currency": "EUR",
"availability": "in_stock",
"in_stock": true,
"is_marketplace": false,
"sellers": [
"001"
],
"is_gift_card": false,
"is_collection": false,
"size_guide": "https://www.elcorteingles.es/deportes/calzado/tabla-de-tallas-adidas/",
"group_by": "Talla"
}
]
}
}What the El Corte Inglés API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search or browse elcorteingles.es. Give a Spanish free-text `query` ('zapatillas running', 'movil samsung', 'lavadora'), an El Corte Inglés product code or a bare EAN-13, or a `category` path to browse ('electronica/moviles-y-smartphones', 'moda-mujer/zapatos'). Every row carries El Corte Inglés' own product code, the product URL to feed straight into `product_detail`, the name, brand, EAN-13, price range across colours, the colour list, the variant count, how many of those variants are actually buyable, the image, the category hierarchy and whether the listing is a marketplace seller's. Sort by price, discount, rating, newness, name or stock; page through the whole result set. `category` browsing is the route El Corte Inglés' robots.txt allows and `meta.robots` reports which route answered. | Pricing teams call search to search or browse elcorteingles.es. | query, category, page, max_results, sort |
| product_detail | Get one El Corte Inglés product in full, by URL, product code or EAN-13. ONE call returns the complete image gallery, the full colour x size variant matrix with a stable native variant id, an EAN-13, a price, a strike-through price and a live buyable flag on EVERY row, the specification table as El Corte Inglés publishes it (grouped, with their own glossary text), the brand, the availability, the star rating and the top customer reviews inline, plus the seller behind each variant (El Corte Inglés itself or a marketplace merchant), the active promotions and the EU-Omnibus 30-day lowest price. Supermarket products are supported too and return their EAN, gallery and full nutrition panel instead of a size matrix. A product El Corte Inglés has WITHDRAWN answers `NOT_FOUND` with `meta.withdrawn: true` and `meta.withdrawn_product` naming the product it was — their server keeps the page online for search engines but pulls every price, so there is no offer left to return. That verdict is permanent and `retryable: false`: it is the signal to drop the SKU from a monitoring list, not a transient failure to retry. | Marketplace operators call product_detail to get one El Corte Inglés product in full, by URL, product code or EAN-13. | url, product_id, ean, include_reviews, max_reviews |
| price | Cheap price + stock refresh for ONE El Corte Inglés product, by URL, product code or EAN-13 — for re-checking products you already track, instead of paying for a full `product_detail`. Returns the current price (what you pay today), the strike-through price, the discount, the EU-Omnibus 30-day lowest price, the buyable flag for the product AND for every colour x size variant, and each variant's own EAN, price and seller. It reads El Corte Inglés' own JSON product feed (the one their storefront renders from) in ONE upstream call, about 2.5-6x fewer bytes than the product page; `url`, `product_id` and `ean` cost the same. It does NOT return the gallery, description, specifications or reviews — that is `product_detail`. Supermarket (B-code) items are not covered here; use `product_detail`. A code or barcode El Corte Inglés no longer lists returns NOT_FOUND, retryable:false. | Catalog enrichment teams call price to get cheap price + stock refresh for ONE El Corte Inglés product, by URL, product code or EAN-13. | url, product_id, ean |
Call search from your stack
curl -X POST https://api.reefapi.com/elcorteingles/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"zapatillas running","max_results":12}'import requests
r = requests.post(
"https://api.reefapi.com/elcorteingles/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "zapatillas running",
"max_results": 12
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/elcorteingles/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "zapatillas running",
"max_results": 12
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.elcorteingles.search with {"query":"zapatillas running","max_results":12}.Who uses this API and why
- Pricing teams use El Corte Inglés to search or browse elcorteingles.es.
- Marketplace operators use El Corte Inglés to get one El Corte Inglés product in full, by URL, product code or EAN-13.
- Catalog enrichment teams use El Corte Inglés to get cheap price + stock refresh for ONE El Corte Inglés product, by URL, product code or EAN-13.
Questions developers ask before integrating
I asked for 12 products and got 8. Why?
Sponsored tiles are excluded from the rows. On the query zapatillas running the response reported tiles_seen 12, sponsored_slots 4, rejected_rows 0 and returned 8 products. El Corte Inglés fixes its own page at 12 tiles and ignores itemsPerPage, size and limit, so a page can be part advertising. meta.tiles_seen against meta.pagination.returned always reconciles the difference.
What is lowest_recent_price, and is it the same as list_price?
No. list_price is the struck-through reference price and lowest_recent_price is the lowest price in the recent window that EU pricing rules require shops to publish. On product A56390869 the three numbers were price 319.90, list_price 379.00 and lowest_recent_price 255.37, all EUR. discount_percent 15 is computed from price against list_price, so do not recompute a discount from lowest_recent_price.
How do I tell El Corte Inglés' own stock from marketplace stock?
Three signals agree. The product_id prefix (A... versus MP_...), the is_marketplace boolean, and the sellers array: own stock returns 001, a marketplace row returns the seller's code, for example 0652065 on MP_0652065_MKXC3 in deportes/ciclismo. Mixed categories are normal, that cycling page returned one marketplace row among eleven own-stock rows.
Is gtin13 the same for every colour of a product?
No, and this catches people out. The product-level gtin13 is the barcode of the preselected colour. On A56390869 the product carried 8806097643135, which is the black variant, while blue was 8806097640233 and grey 8806097640271. If you are matching a catalogue by barcode, read variants[].gtin13, not product.gtin13.
What does availability partially_in_stock mean?
The product is buyable but not every variant is. A56390869 returned availability partially_in_stock with in_stock true, variant_count 3 and in_stock_variant_count 2: black and blue had availability in_stock and status ADD, grey had out_of_stock and status SOLD_OUT. Colours also carry their own available boolean, so you can grey out a swatch without walking the variant list.
How deep can I page a category?
12 products per page, fixed at their end, and a hard ceiling on the result set. A narrow query pages out honestly: zapatillas running reported total_results 2,507 over 210 pages. A broad one hits the cap: moda-mujer/zapatos reported total_results 10000 over 416 pages, which is El Corte Inglés' own limit rather than the real catalogue size. Page until meta.pagination.has_more is false and split broad categories into sub-categories.
Does a bad sort value get ignored?
No, it is rejected before the request goes out. sort=cheapest returns INVALID_PARAM naming the ten keys the site publishes: featuredDesc, priceAsc, priceDesc, bestSellerQtyDesc, newInAsc, stockDesc, nameAsc, nameDesc, discountPerDesc and ratingDesc. That is deliberate, because elcorteingles.es answers an unknown sort key with HTTP 503. meta.sort echoes both what you asked for and the label the site confirmed, for example priceAsc and Precio de menor a mayor.
Where do the star ratings and reviews come from?
From Bazaarvoice, the review platform the product page loads, not from the El Corte Inglés HTML itself, and rating.source says so explicitly. On A56390869 it returned value 3.0, best 5.0, count 3 and two Spanish reviews with review_id, title, body and an ISO date. Coverage is uneven by department, so expect rating to be absent on plenty of products; set include_reviews false to skip the extra request entirely.
What is the El Corte Inglés API?
El Corte Inglés API is a ReefAPI endpoint group for el corte inglés It returns live JSON through POST requests under /elcorteingles/v1.
Is the El Corte Inglés API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. El Corte Inglés calls use the same shared credit balance as every other ReefAPI engine.
Do I need an El Corte Inglés login or account?
No login to El Corte Inglés 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 El Corte Inglés 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 El Corte Inglés API use?
El Corte Inglés 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 El Corte Inglés from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call elcorteingles actions with the same key, credit pool and JSON envelope used by normal REST requests.