El Corte Inglés Scraper at a glance
El Corte Inglés Scraper is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes product id, sku, product, brand and category, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Ecommerce, Automation, Developer Tools
- Region
- Europe
- Pricing
- $2.00 per 1,000 results (Free plan), from $1.00 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 24 options
Scrape El Corte Inglés elcorteingles.es products across fashion, electronics, home, beauty, jewellery, toys and books. Extract current and was-prices, discounts, brands, categories, images, colour/size variants, availability, ratings and reviews. Supports keyword, category and URL modes.
What El Corte Inglés Scraper can do
- Was-price and discount, read from the site's own data, never guessed. When a product is marked down, both the original and current price are captured plus the discount percentage; on a full-price item those fields are simply empty rather than invented.
- Colour and size variants. Fashion, footwear and similar products return every colour and size as its own variant, each carrying its own price, was-price/discount and availability.
- Reviews with overall rating and review count. Total review count and individual reviews (rating, title, body, author, date), gathered whenever reviews are switched on.
- Two ways in. Keyword or category search with brand, price and on-sale filters plus the site's own sort, or paste any product or listing link and continue pagination automatically.
- Marketplace or direct sold, told apart. Every record says whether it is sold by El Corte Inglés itself or by a marketplace seller, and names that seller when it is.
- Built for monitoring. Incremental mode returns only new and updated products on a recurring search by default (reappeared ones need Emit expired too), and a run that could not read the site at all fails loudly rather than finishing as an empty success.
Choose what to collect
These inputs let you configure El Corte Inglés Scraper - Products, Prices, Variants & Reviews. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | 'search' finds products by keyword and/or a real elcorteingles.es category path (e.g. 'moda-hombre/zapatillas', exactly as it appears in the site's own URL), with brand/price/on-sale filters and the site's own sort. 'url' scrapes any product, category, or search-result page URL you paste, walking pagination forward automatically. |
searchTermstring | Free-text keyword, e.g. 'zapatillas running' or 'television'. Leave empty and use Category path only below to browse a whole category instead. Defaults to 'zapatillas running' so a run started with no input still returns real products instead of nothing. |
categoryPathstring | A real elcorteingles.es category path exactly as it appears in the site's own URL, e.g. 'moda-hombre/zapatillas', 'electronica/tv', 'perfumeria'. Browses the whole category when the keyword above is empty. Note: the supermercado (grocery) section is not supported by this actor -- see the README. |
onSaleOnlyboolean | Keep only products currently marked down (a genuine strike-through original price on the site itself), dropping full-price items from the results. |
brandsarray | Only return products from these brands, e.g. 'Samsung', 'Skechers', 'La Mer'. Match the exact brand name as shown on the site. Leave empty for all brands. The site has no brand filter of its own, so this is checked after each result page is fetched. A very rare brand in a very large category can stop the run early (see the run's status message and the README). |
minPricenumber | Only return products priced at or above this amount, in euros. Applied by the site's own price filter, so the run pages only through results already inside the band instead of walking the whole category. |
maxPricenumber | Only return products priced at or below this amount, in euros. Applied by the site's own price filter, so the run pages only through results already inside the band instead of walking the whole category. |
Show 17 more inputs
| Input | What it controls |
|---|---|
minDiscountPercentnumber | Only return products discounted by at least this percentage. Applied by the site's own discount filter, so the run pages only through already-discounted results. Leave empty for no discount filter. |
sortBystring | The site's own sort order, verified live to reorder the full server-side result set (so it stays correct across pagination, not just within one fetched page). Applies in both search and URL mode. In URL mode, though, this only kicks in when the pasted category or search-result URL has no sort order of its own encoded in it -- an already-sorted pasted URL keeps its own ordering regardless of this setting. |
urlsarray | Paste one or more elcorteingles.es product pages, category listing pages, or search-result pages (search, paginated, sorted, price-filtered, legacy /search/ and mobile m. links all work). Pagination continues forward automatically from any page segment already in the URL. The supermercado (grocery) section is not supported and is skipped with a warning. Filter fields above are ignored in this mode. Left untouched, this list scrapes one example per link shape. |
fetchDetailsboolean | Adds the full breadcrumb category path, complete description, flattened specifications, and every colour x size variant (each with its own price, was-price/discount and availability) from the product page. Current price, was-price/discount and card image are already included without this toggle. |
fetchReviewsboolean | Fetch the product's reviews: overall rating, total review count, and individual reviews (rating, title, body, author, date). Products with no reviews simply return an empty list. |
maxReviewsPerProductinteger | Cap on individual reviews fetched per product when 'Fetch reviews' is on (maximum 1000). |
maxPagesinteger | Stop after this many result pages per search/category/URL entry. 0 (default) = unlimited -- walk every page until the site's own page count or Max products total is hit. |
maxItemsinteger | Hard cap on total products returned across every search/category/URL entry. 0 = the maximum of 1,000,000 (still bounded by Max pages per search). |
resumeFromRunIdstring | Paste a previous run id (or its dataset id) to continue that run: products already collected there are skipped, so this run only returns new products (a delta). Leave empty for a normal run. For a recurring/scheduled search, use Incremental mode below instead -- it remembers the previous run itself, without pasting an id every time. |
incrementalModeboolean | For a search/category you run on a schedule: the actor remembers the products it saw last time (in a dedicated key-value store, keyed by this search) and, by default, only returns products that are NEW, UPDATED or REAPPEARED. UPDATED is driven by price, original price, discount, on-sale flag, online availability, marketplace seller, name, brand, category, images, the per-size variants (their price and availability), and, when Fetch reviews is on, the review count, average rating and the latest review rows (a genuinely new review is a real change). UPDATED also reacts, when a detail fetch lands, to the description, specifications and full category path. Always excluded from change detection (they stay in the output): shortDescription, categories, hierarchy, media_objects, badges, promotional_actions, provider, is_sold_by, is_gift_card, status, size_guide, size_guide_type, size_guide_details, default_image and canonical. You can exclude more with 'Ignore fields when detecting changes' below (the fields stay in the output). Unlike Resume above, you never need to paste a run or dataset id. Off by default: a normal run always returns every matching product. |
stateKeystring | Optional label for the tracked search when Incremental mode is on, e.g. 'zapatillas-running-es'. Leave empty to let the actor derive one automatically from your search/category/URL and filters -- two different searches never share a baseline either way. Set this if you want a stable, human-readable name, or want to run the exact same search twice as two separate monitoring campaigns. |
emitUnchangedboolean | When Incremental mode is on, also return products with no changes since last time (changeType 'UNCHANGED'), not just NEW/UPDATED/REAPPEARED. Off by default. Returning unchanged rows bills like any other product result -- turn this on only if you need the full current snapshot every run, not just what changed. |
emitExpiredboolean | When Incremental mode is on AND this run scans the search to its natural end (no Max products/Max pages cap reached, no Resume from a previous run), also return one row per previously-seen product no longer found (changeType 'EXPIRED'), using its last-known data. Off by default. Returning expired rows bills like any other product result. |
ignoreFieldsForChangesarray | Incremental mode only: field names that must NOT make a product count as UPDATED, e.g. ['images', 'reviews']. A name matches at any depth, so 'size' also ignores it inside every variant and 'body' inside every review row. The fields stay in the output rows; they are only left out of change detection and 'changedFields'. Beyond the always-excluded descriptive fields named under Incremental mode, nothing is ignored by default. Changing this list never re-bills your tracked products as UPDATED. |
mcpConnectorsarray | Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify -> Settings -> Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
productIdProduct ID (text)skuSKU (text)nameProduct (text)brandBrand (text)categoryCategory (text)pricePrice (number)currencyCurrency (text)originalPriceOriginal price (number)discountPercentDiscount % (number)isOnSaleOn sale (boolean)colorColour (text)sizeSize (text)Show 19 more fields
onlineAvailableAvailable (boolean)sellerSeller (text)urlURL (link)imageImage (image)changeTypeChange (Incremental mode) (text)changedFieldsChanged fields (Incremental mode) (object)firstSeenAtFirst seen (Incremental mode) (date)lastSeenAtLast seen (Incremental mode) (date)variantsVariants (sku, colour/size, price, was-price, availability) (object)reviewsReviews (rating, count, per-review list) (object)descriptiondescription (text)categoriescategories (object)hierarchyhierarchy (object)media_objectsmedia_objects (object)badgesbadges (object)promotional_actionspromotional_actions (object)providerprovider (text)statusstatus (text)canonicalcanonical (text)Example output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"productId": "A930015820",
"name": "Chaqueta acolchada con capucha desmontable",
"brand": "NORTHPEAK",
"category": "Chaquetas",
"categoryPath": [
"Moda mujer",
"Abrigos y chaquetas",
"Chaquetas"
],
"url": "https://www.elcorteingles.es/moda-mujer/A930015820-8412345671236-pr-sample-slug/",
"sku": "52918473",
"gtin": "8412345671236",
"price": 54.95,
"currency": "EUR",
"originalPrice": 89.95,
"discountPercent": 39,
"isOnSale": true,
"color": "Verde botella",
"size": "M",
"onlineAvailable": true,
"seller": "Tienda Oficial Ejemplo",
"isMarketplace": true,
"image": "https://dam.elcorteingles.es/producto/sample-front.jpg",
"images": [
"https://dam.elcorteingles.es/producto/sample-front.jpg",
"https://dam.elcorteingles.es/producto/sample-back.jpg"
],
"description": "Sample product description text as shown on the site.",
"specifications": {
"Género": "Mujer",
"Composición": "80% poliéster, 20% algodón"
},
"variants": [
{
"sku": "52918473",
"gtin": "8412345671236",
"color": "Verde botella",
"size": "M",
"price": 54.95,
"currency": "EUR",
"originalPrice": 89.95,
"discountPercent": 39,
"isOnSale": true,
"onlineAvailable": true,
"isMarketplace": true,
"seller": "Tienda Oficial Ejemplo"
},
{
"sku": "52918474",
"gtin": "8412345671259",
"color": "Verde botella",
"size": "L",
"price": 54.95,
"currency": "EUR",
"originalPrice": 89.95,
"discountPercent": 39,
"isOnSale": true,
"onlineAvailable": true,
"isMarketplace": true,
"seller": "Tienda Oficial Ejemplo"
}
],
"reviews": {
"averageRating": 4.3,
"totalReviewCount": 128,
"items": [
{
"rating": 5,
"title": "Muy abrigada",
"body": "Sample review text.",
"author": "Cliente",
"date": "2026-03-14T00:00:00.000+00:00"
}
]
}
}Ways to use this data
- Price and markdown monitoring: track discounts and price history across a category or brand on a recurring schedule.
- Competitive retail research: compare pricing, sellers, stock and assortment across brands and departments.
- Catalog and content enrichment: pull descriptions, specifications, images and variant data into your own product database.
- Customer sentiment tracking: aggregate ratings and reviews for the products or brands you follow.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does El Corte Inglés Scraper return?
The documented output for El Corte Inglés Scraper includes product id, sku, product, brand, category, price, currency and original price. Availability of each field depends on the source page and the selected mode.
How much does El Corte Inglés Scraper cost?
It costs $2.00 per 1,000 results on the Apify Free plan and from $1.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new or changed products on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated products for that tracked search by default (plus reappeared ones once an Emit expired pass has marked them gone), and unchanged ones are not billed unless you turn that on too.
Why does a supermercado (grocery) category or link return nothing?
The grocery section sits behind a materially harder verification step than the rest of the catalog and is not currently scraped by this actor. A categoryPath or pasted URL under that section is skipped with a clear log message rather than failing the whole run. Every other department (moda, electrónica, hogar, perfumería, joyería y relojes, juguetes, libros) is fully supported.
Why did a run stop before reaching the end of the results?
Brand and on-sale filters have no equivalent on the site, so a very selective combination can page through many results with nothing matching; the run stops a search after 5 consecutive pages with no match, and says so in the status message rather than claiming that was the end of the results. If that 5-page stop happens on every search in the run and nothing at all was returned, the run is marked failed rather than a plain empty success, since it has not actually proven there are no matches; add maxItems or maxPages, or narrow the filters, and try again. Max products and Max pages caps behave the same way: raise them, or narrow the category or filters, to see more.
Why did my run fail instead of returning an empty dataset?
If every page this run tried to load failed to load at all, the run stops with an error instead of finishing as an empty success, because that is a connection problem, not evidence that there are no matching products. Run it again in a few minutes. A run that read pages and reached the real end of the results, even with zero matches, finishes normally and reports what it found. If the walk instead gave up after 5 pages in a row with no match and returned nothing, the run is also marked failed, for the same reason: it has not proven there are no matches, see "Why did a run stop before reaching the end of the results?" above.
