# Eldi Scraper — Belgian Electronics Products & Prices (`studio-amba/eldi-scraper`) Actor

Scrape products, prices, specs, and stock info from Eldi.be. Belgian electronics retailer with 80+ stores. Supports category browsing and search.

- **URL**: https://apify.com/studio-amba/eldi-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## Eldi Scraper

Scrape product data, prices, specs, and stock info from [Eldi.be](https://www.eldi.be) — Belgium's electronics retailer with 80+ physical stores. No cookies or login required.

### Why use this actor?

Eldi is one of Belgium's main electronics retailers, selling TVs, appliances, kitchen equipment, and personal care electronics. If you need Belgian electronics price tracking, competitive analysis against Coolblue/MediaMarkt, product catalog exports, or stock monitoring across Eldi's 80+ stores, this actor gets you clean, structured data.

### Features

- **Three scraping modes** — search by keyword, browse by category, or scrape all main product categories automatically
- **Bilingual** — supports both Dutch (`nl`) and French (`fr`) versions of the site, with correct pagination labels and URL prefixes
- **Rich product data** — names, brands, prices, sale prices, EANs, SKUs, ratings, stock status, specs, and images
- **Technical specifications** — extracts full spec tables (screen size, resolution, energy class, etc.)
- **JSON-LD parsing** — primary data extraction from Magento 2's structured data, with HTML fallback
- **No cookies, no login required** — works out of the box

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `searchQuery` | String | No | Search term (e.g. `"stofzuiger"`, `"televisie"`) |
| `categoryUrl` | String | No | Category slug or full URL |
| `maxResults` | Integer | No | Maximum products to return (default: 100) |
| `language` | String | No | `nl` (default) or `fr` |
| `proxyConfiguration` | Object | No | Proxy settings (recommended for large runs) |

Without input, the scraper browses all main categories: groot-elektro, beeld-en-geluid, huishouden-en-wonen, keuken, verzorging, inbouw, and toebehoren.

### Output

Each result contains:

| Field | Type | Example |
|-------|------|---------|
| `name` | String | `"Samsung UE55CU7170 55\" 4K Smart TV"` |
| `brand` | String | `"Samsung"` |
| `price` | Number | `449.00` |
| `originalPrice` | Number | `549.00` |
| `currency` | String | `"EUR"` |
| `ean` | String | `"8806094901238"` |
| `sku` | String | `"UE55CU7170UXXN"` |
| `inStock` | Boolean | `true` |
| `rating` | Number | `4.2` |
| `reviewCount` | Number | `15` |
| `url` | String | Full product URL |
| `imageUrl` | String | Primary product image URL |
| `description` | String | Product description |
| `specs` | Object | `{"Schermdiagonaal": "55\"", "Resolutie": "4K UHD"}` |
| `categories` | Array | `["Beeld en Geluid", "Televisies", "4K TV"]` |
| `language` | String | `"nl"` |

### Example output

```json
{
    "name": "Samsung UE55CU7170 55\" 4K Smart TV",
    "brand": "Samsung",
    "price": 449.00,
    "originalPrice": 549.00,
    "currency": "EUR",
    "ean": "8806094901238",
    "sku": "UE55CU7170UXXN",
    "inStock": true,
    "rating": 4.2,
    "reviewCount": 15,
    "url": "https://www.eldi.be/nl/samsung-ue55cu7170.html",
    "imageUrl": "https://www.eldi.be/media/catalog/product/samsung-ue55cu7170.jpg",
    "description": "Samsung 55 inch 4K UHD Smart TV met Crystal Processor 4K en HDR10+.",
    "specs": {
        "Schermdiagonaal": "55\"",
        "Resolutie": "4K UHD",
        "Smart TV": "Ja",
        "Energieklasse": "G"
    },
    "categories": ["Beeld en Geluid", "Televisies", "4K TV"],
    "language": "nl",
    "scrapedAt": "2026-04-06T10:00:00.000Z"
}
````

### Cost estimate

This actor uses approximately **1 compute unit per 1,000 products**. It visits product detail pages to extract full data from JSON-LD. A complete catalog scrape costs roughly **$0.50-1.00**.

### How it works

Eldi runs on Magento 2. The scraper:

1. Browses listing pages to discover product URLs
2. Visits each product page and extracts data from JSON-LD `Product` schema
3. Falls back to HTML parsing (`.price-box .price` selectors) when JSON-LD is missing
4. Handles Magento-style pagination with language-aware "next" button detection

### Limitations

- Rating normalization: Magento sometimes uses a `bestRating` > 5; the scraper normalizes all ratings to the standard 0-5 scale
- HTML entities in product names are decoded automatically
- Data is scraped from the public website and may change without notice

# Actor input Schema

## `categoryUrl` (type: `string`):

An Eldi category page URL to scrape. Example: https://www.eldi.be/nl/groot-elektro. If empty with no search query, scrapes from the main catalog.

## `searchQuery` (type: `string`):

Search for products by keyword (e.g., 'samsung', 'wasmachine'). Uses Eldi's search.

## `maxResults` (type: `integer`):

Maximum number of products to return.

## `language` (type: `string`):

Language for product data. Affects URL prefix (/nl/ or /fr/).

## `proxyConfiguration` (type: `object`):

Proxy settings. Usually not needed for Eldi.be.

## Actor input object example

```json
{
  "categoryUrl": "https://www.eldi.be/nl/groot-elektro",
  "maxResults": 100,
  "language": "nl"
}
```

# 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 = {
    "categoryUrl": "https://www.eldi.be/nl/groot-elektro"
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/eldi-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 = { "categoryUrl": "https://www.eldi.be/nl/groot-elektro" }

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/eldi-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 '{
  "categoryUrl": "https://www.eldi.be/nl/groot-elektro"
}' |
apify call studio-amba/eldi-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Eldi Scraper — Belgian Electronics Products & Prices",
        "description": "Scrape products, prices, specs, and stock info from Eldi.be. Belgian electronics retailer with 80+ stores. Supports category browsing and search.",
        "version": "0.1",
        "x-build-id": "kkXKhX04PrceZGRes"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/studio-amba~eldi-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-studio-amba-eldi-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/studio-amba~eldi-scraper/runs": {
            "post": {
                "operationId": "runs-sync-studio-amba-eldi-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/studio-amba~eldi-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-studio-amba-eldi-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "categoryUrl": {
                        "title": "Category URL",
                        "type": "string",
                        "description": "An Eldi category page URL to scrape. Example: https://www.eldi.be/nl/groot-elektro. If empty with no search query, scrapes from the main catalog."
                    },
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Search for products by keyword (e.g., 'samsung', 'wasmachine'). Uses Eldi's search."
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Maximum number of products to return.",
                        "default": 100
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "nl",
                            "fr"
                        ],
                        "type": "string",
                        "description": "Language for product data. Affects URL prefix (/nl/ or /fr/).",
                        "default": "nl"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. Usually not needed for Eldi.be."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
