# elcorteingles.es - Prices, Variants, Rebajas & Reviews (`abotapi/elcorteingles-es-scraper`) Actor

Scrape El Corte Inglés (elcorteingles.es): moda, electrónica, hogar, perfumería, joyería, juguetes and libros. Current price plus was-price/discount on marked-down items, colour/size variants with availability, brand, category path, images and reviews. Search by keyword/category or paste links.

- **URL**: https://apify.com/abotapi/elcorteingles-es-scraper.md
- **Developed by:** [Abot API](https://apify.com/abotapi) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 product results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## El Corte Inglés Product Scraper

Pull product data from El Corte Inglés (elcorteingles.es), Spain's flagship department store: moda (fashion), electrónica, hogar, perfumería, joyería y relojes, juguetes and libros. Search by keyword or a real site category, or paste product and listing links directly. Every record includes the current price, the strike-through original price with discount percentage when a product is marked down, colour/size variants with their own price and availability, and product reviews.

### Why This Scraper?

- **Was-price and discount, structured, not scraped from a badge.** When a product is marked down, both the original and current price are captured plus the discount percentage, read straight from the site's own product data.
- **Colour and size variants.** Fashion, footwear and similar products return every colour and size as its own variant, each with its own price, was-price/discount and availability.
- **Reviews with rating and distribution.** Overall rating, total review count, and individual reviews (rating, title, body, author, date).
- **Two ways in.** Keyword or category search with brand, price and on-sale filters plus the site's own sort, or paste any product/listing link and continue pagination automatically.
- **Optional export to your apps.** Send results into Notion, Linear, Airtable, or any Apify MCP connector alongside the dataset.

### Data You Get

| Field | Example value |
|---|---|
| productId / sku | `A12345678`, `41931658` |
| name | `Sample Running Sneaker` |
| brand | `SAMPLE BRAND` |
| category / categoryPath | `Zapatillas`, `["Moda hombre", "Zapatillas"]` |
| url | `https://www.elcorteingles.es/moda-hombre/A12345678-sample-slug/` |
| price / currency | `39.90`, `EUR` |
| originalPrice / discountPercent | `79.90`, `50` |
| isOnSale | `true` |
| color / size | `Beige`, `42` |
| onlineAvailable | `true` |
| seller / isMarketplace | `SAMPLE SELLER`, `true` |
| image / images | `["https://dam.elcorteingles.es/producto/sample-00.jpg"]` |
| description | full product description text |
| specifications | `{"Género": "Hombre", "Capacidad": "15 ml"}` |
| variants | `[{"sku": "41931658", "color": "Beige", "size": "39", "price": 39.9, "originalPrice": 79.9, "discountPercent": 50, "onlineAvailable": true}]` |
| reviews.averageRating / reviews.totalReviewCount | `4.6`, `212` |
| reviews.items\[] | `[{"rating": 5, "title": "Muy cómodas", "body": "Sample review text.", "author": "Cliente", "date": "2026-06-05T00:00:00.000+00:00"}]` |

> Sample shape: values above are illustrative placeholders, not from a live product.

### How to Use

**1. Keyword search, first page, with reviews (default):**

```json
{
  "mode": "search",
  "searchTerm": "zapatillas running",
  "maxItems": 20
}
```

**2. Category browse, filtered to a brand and price band, sorted by discount, on sale only:**

```json
{
  "mode": "search",
  "categoryPath": "moda-hombre/zapatillas",
  "brands": ["Skechers"],
  "minPrice": 20,
  "maxPrice": 100,
  "onSaleOnly": true,
  "sortBy": "DISCOUNT_DESC",
  "maxItems": 50,
  "maxPages": 5
}
```

**3. Full product detail (variants + description + specifications) and reviews for a pasted product link:**

```json
{
  "mode": "url",
  "urls": ["https://www.elcorteingles.es/moda-hombre/A12345678-sample-slug/"],
  "fetchDetails": true,
  "fetchReviews": true
}
```

**4. Paste a category or search-result listing and keep paginating forward:**

```json
{
  "mode": "url",
  "urls": ["https://www.elcorteingles.es/electronica/television/"],
  "maxItems": 100,
  "maxPages": 10
}
```

**5. Continue a previous run, collecting only new products:**

```json
{
  "mode": "search",
  "categoryPath": "moda-hombre/zapatillas",
  "resumeFromRunId": "<a previous run id or dataset id>"
}
```

### Input Parameters

| Parameter | Type | Description |
|---|---|---|
| `mode` | string | `search` or `url`. |
| `searchTerm` | string | Keyword (search mode only). |
| `categoryPath` | string | A real site category path, e.g. `moda-hombre/zapatillas` (search mode only). |
| `onSaleOnly` | boolean | Keep only products currently marked down (search mode only). |
| `brands` | array | Exact brand names to keep (search mode only). |
| `minPrice` / `maxPrice` | number | EUR price band to keep (search mode only). |
| `sortBy` | string | `RELEVANCE`, `PRICE_ASC`, `PRICE_DESC`, `NEWEST`, `BEST_SELLERS`, `DISCOUNT_DESC`, `RATING_DESC`, `NAME_ASC`, `NAME_DESC`, or `STOCK_DESC`. |
| `urls` | array | Product, category, or search-result listing URLs to scrape (url mode only). |
| `fetchDetails` | boolean | Fetch full product detail (breadcrumb category path, description, specifications, complete colour/size variant matrix). |
| `fetchReviews` | boolean | Fetch the product's reviews. |
| `maxReviewsPerProduct` | integer | Cap on individual reviews fetched per product. |
| `maxPages` | integer | Cap on 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. |
| `maxItems` | integer | Cap on total products returned; `0` = unlimited. |
| `resumeFromRunId` | string | Optional: a previous run id (or its dataset id). Products it already collected are skipped, so this run returns only new products (a delta). Leave empty for a normal run. |
| `proxy` | object | Apify proxy configuration. Works on every plan by default. |
| `mcpConnectors` | array | Optional MCP connectors to export results into (Notion, Linear, Airtable, Apify). |
| `notionParentPageUrl` | string | Notion connector only: page under which item pages are created. |
| `maxNotifyListings` | integer | Cap on items exported to each connector per run. Does not affect the dataset. |

### Output Example

```json
{
  "productId": "A12345678",
  "name": "Sample Running Sneaker",
  "brand": "SAMPLE BRAND",
  "category": "Zapatillas",
  "categoryPath": ["Moda hombre", "Zapatillas"],
  "url": "https://www.elcorteingles.es/moda-hombre/A12345678-sample-slug/",
  "sku": "41931658",
  "gtin": "8447340292665",
  "price": 39.9,
  "currency": "EUR",
  "originalPrice": 79.9,
  "discountPercent": 50,
  "isOnSale": true,
  "color": "Beige",
  "size": "39",
  "onlineAvailable": true,
  "seller": "SAMPLE SELLER",
  "isMarketplace": true,
  "image": "https://dam.elcorteingles.es/producto/sample-00.jpg",
  "images": ["https://dam.elcorteingles.es/producto/sample-00.jpg", "https://dam.elcorteingles.es/producto/sample-01.jpg"],
  "description": "Sample product description as shown on the site.",
  "specifications": { "Género": "Hombre" },
  "variants": [
    { "sku": "41931658", "color": "Beige", "size": "39", "price": 39.9, "currency": "EUR", "originalPrice": 79.9, "discountPercent": 50, "isOnSale": true, "onlineAvailable": true }
  ],
  "reviews": {
    "averageRating": 4.6,
    "totalReviewCount": 212,
    "items": [
      { "rating": 5, "title": "Muy cómodas", "body": "Sample review text.", "author": "Cliente", "date": "2026-06-05T00:00:00.000+00:00" }
    ]
  }
}
```

> Sample shape: values above are illustrative placeholders, not from a live product.

### A note on coverage

The `supermercado` (grocery) section of the site 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. All other departments (moda, electrónica, hogar, perfumería, joyería y relojes, juguetes, libros) are fully supported.

Reviews come from the site's own reviews feed. Not every product has reviews; products with none simply return an empty `items` list rather than blocking the run.

### Send results into your apps (MCP connectors)

Optionally pipe results into the apps you already use through Model Context Protocol (MCP) connectors. Authorize a connector once under Apify, Settings, Integrations, then select it in the `mcpConnectors` field.

| | |
|---|---|
| What's sent | A condensed, human-readable summary per product (name plus key fields) -- the complete record always stays in the Apify dataset. |
| Notion setup | Set `notionParentPageUrl` to the page the item pages should be created under. |
| Supported connectors | Notion, Linear, Airtable, and Apify. Leave `mcpConnectors` empty to skip; it never changes the dataset output. Use `maxNotifyListings` to cap how many items are exported per connector per run. |

### A note on proxy

Leave the default proxy configuration as-is for normal runs. You may optionally switch to a different proxy group for very large or sustained runs.

# Actor input Schema

## `mode` (type: `string`):

'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.

## `searchTerm` (type: `string`):

Free-text keyword, e.g. 'zapatillas running' or 'television'. Leave empty and use Category path only below to browse a whole category instead.

## `categoryPath` (type: `string`):

A real elcorteingles.es category path exactly as it appears in the site's own URL, e.g. 'moda-hombre/zapatillas', 'electronica/television', '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.

## `onSaleOnly` (type: `boolean`):

Keep only products currently marked down (a genuine strike-through original price on the site itself), dropping full-price items from the results.

## `brands` (type: `array`):

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.

## `minPrice` (type: `number`):

Only return products priced at or above this amount, in euros.

## `maxPrice` (type: `number`):

Only return products priced at or below this amount, in euros.

## `sortBy` (type: `string`):

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).

## `urls` (type: `array`):

Paste one or more elcorteingles.es product pages, category listing pages, or search-result pages. Pagination continues forward automatically from any page segment already in the URL. Filter fields above are ignored in this mode.

## `fetchDetails` (type: `boolean`):

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.

## `fetchReviews` (type: `boolean`):

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.

## `maxReviewsPerProduct` (type: `integer`):

Cap on individual reviews fetched per product when 'Fetch reviews' is on.

## `maxPages` (type: `integer`):

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.

## `maxItems` (type: `integer`):

Hard cap on total products returned across every search/category/URL entry. 0 = unlimited (still bounded by Max pages per search).

## `resumeFromRunId` (type: `string`):

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.

## `proxy` (type: `object`):

Leave the default proxy configuration as-is for normal runs. You may optionally switch to a different proxy group for very large or sustained runs.

## `mcpConnectors` (type: `array`):

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).

## `notionParentPageUrl` (type: `string`):

URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.

## `maxNotifyListings` (type: `integer`):

Cap on items written to each connector per run. Does not affect the dataset.

## Actor input object example

```json
{
  "mode": "search",
  "searchTerm": "zapatillas running",
  "onSaleOnly": false,
  "brands": [],
  "sortBy": "RELEVANCE",
  "urls": [
    "https://www.elcorteingles.es/electronica/television/"
  ],
  "fetchDetails": false,
  "fetchReviews": true,
  "maxReviewsPerProduct": 10,
  "maxPages": 0,
  "maxItems": 20,
  "proxy": {
    "useApifyProxy": true
  },
  "maxNotifyListings": 50
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "search",
    "searchTerm": "zapatillas running",
    "brands": [],
    "urls": [
        "https://www.elcorteingles.es/electronica/television/"
    ],
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/elcorteingles-es-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "search",
    "searchTerm": "zapatillas running",
    "brands": [],
    "urls": ["https://www.elcorteingles.es/electronica/television/"],
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/elcorteingles-es-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "search",
  "searchTerm": "zapatillas running",
  "brands": [],
  "urls": [
    "https://www.elcorteingles.es/electronica/television/"
  ],
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call abotapi/elcorteingles-es-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=abotapi/elcorteingles-es-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/sZSqgcSBzDHZCKI5G/builds/0X33rwBDUIL64uh4U/openapi.json
