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

Scrape products, prices, specifications, stock levels, and reviews from Krefel.be. Belgium's #2 electronics retailer. Supports category browsing and search.

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

## Pricing

from $2.00 / 1,000 result scrapeds

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Krefel Scraper - Extract Products & Prices from Belgium's Electronics Giant 🖥️

Scrape product data, real-time prices, stock levels, EAN barcodes, customer reviews, and 30+ technical specifications from [Krefel.be](https://www.krefel.be) — Belgium's second-largest electronics retailer with 70+ physical stores.

### What is Krefel Scraper? 🔍

Krefel Scraper is a ready-to-use data extraction tool that pulls structured product data directly from Krefel's internal API. Unlike manual browsing or copy-pasting, it delivers clean, machine-readable JSON for every product across Krefel's full catalog — from Samsung TVs and Apple MacBooks to Bosch dishwashers and Dyson vacuum cleaners.

Whether you're a pricing analyst tracking Belgian electronics prices, an e-commerce competitor benchmarking against Krefel, or a market researcher studying consumer electronics trends in Belgium, this actor gives you instant access to data that would take days to collect manually.

**Popular use cases:**

- 💰 **Price monitoring** — Track daily price movements on thousands of Krefel products. Catch promotions, price drops, and seasonal sales the moment they happen.
- 📊 **Competitor analysis** — Compare your product catalog against Krefel's pricing, stock availability, and product range. Know exactly where you stand in the Belgian market.
- 🏷️ **MAP compliance & enforcement** — Extract EAN/barcode data to match products across retailers and detect Minimum Advertised Price violations in Belgium.
- 🔬 **Market research** — Analyze which brands dominate specific categories, track new product launches, and study pricing patterns across the Belgian electronics market.
- 📦 **Stock monitoring** — Krefel exposes exact stock levels through their API. Monitor availability to identify supply shortages or restocking patterns.

### What data does Krefel Scraper extract? 📋

Every product record includes the following fields:

- 🏷️ **name** — Full product name (e.g., "Galaxy S25 Ultra 256 GB Titanium Blue")
- 🏭 **brand** — Manufacturer name (SAMSUNG, APPLE, LG, BOSCH, etc.)
- 💶 **price** — Current selling price in EUR
- 💸 **originalPrice** — Price before discount (when product is on promotion)
- 🔖 **discount** — Discount label or percentage shown on the site
- 🔢 **ean** — European Article Number (barcode) for cross-retailer product matching
- 🆔 **sku** — Krefel's internal product code
- ✅ **inStock** — Whether the product is currently available
- 📦 **stockLevel** — Exact number of units in stock
- ⭐ **rating** — Average customer rating
- 💬 **reviewCount** — Number of customer reviews
- 🖼️ **imageUrl** — Primary product image URL
- 🖼️ **imageUrls** — All available product images
- 🔧 **specs** — Full technical specifications (30+ fields per product: screen size, processor, RAM, weight, energy class, etc.)
- 📁 **category** — Product category breadcrumb (e.g., "Beeld & Geluid > Televisie > OLED TV")
- 📝 **description** — Product summary text
- 🌐 **url** — Direct link to the product page on Krefel.be
- 🕐 **scrapedAt** — ISO timestamp of when the data was collected

### How to scrape Krefel.be 🚀

#### Option 1: Browse by category

Provide one or more Krefel category URLs. The scraper will extract all products from those categories, paginating automatically through all results.

**Example category URLs:**

- `https://www.krefel.be/nl/c/laptops` — All laptops
- `https://www.krefel.be/nl/c/smartphones` — All smartphones
- `https://www.krefel.be/nl/c/televisie` — All televisions
- `https://www.krefel.be/fr/c/lave-linge` — All washing machines (French)

#### Option 2: Search by keyword

Enter a search query like `"Samsung Galaxy"`, `"wasmachine"`, or `"MacBook Pro"`. The scraper will search Krefel's product database and return matching results ranked by relevance.

#### Input parameters

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `categoryUrls` | Array | — | Krefel category pages to scrape |
| `searchQuery` | String | — | Keyword search (overrides category URLs) |
| `maxResults` | Integer | 100 | Maximum products to return (up to 10,000) |
| `language` | Enum | `nl` | Language: `nl` (Nederlands) or `fr` (Francais) |
| `proxyConfiguration` | Object | — | Proxy settings for large runs |

**Tips:**

- Leave everything blank and the scraper defaults to the homepage — useful for testing.
- Krefel serves both Dutch (nl) and French (fr) content. Switch the `language` field to get localized product names and descriptions.
- For full catalog dumps, set `maxResults` to 10000 and provide a broad category URL.
- Use proxies for runs above 500 products to avoid rate limiting.

### Output 📦

Each product is returned as a structured JSON object. Here is a realistic example of what you get:

```json
[
  {
    "name": "Samsung 65\" Neo QLED 4K QN95D (2024)",
    "brand": "SAMSUNG",
    "price": 2199,
    "currency": "EUR",
    "originalPrice": 2699,
    "discount": "-19%",
    "ean": "8806095073514",
    "sku": "41013890",
    "inStock": true,
    "stockLevel": 42,
    "rating": 4.7,
    "reviewCount": 28,
    "imageUrl": "https://www.krefel.be/medias/65QN95D-001-Front-Silver.jpg",
    "specs": {
      "Schermdiagonaal": "163 cm (65\")",
      "Resolutie": "3840 x 2160 (4K Ultra HD)",
      "Beeldtechnologie": "Neo QLED",
      "HDR": "HDR10+ Adaptive",
      "Refresh rate": "144 Hz",
      "Smart TV": "Ja (Tizen OS)",
      "HDMI": "4x HDMI 2.1",
      "Energielabel": "E",
      "Gewicht": "21.4 kg"
    },
    "category": "Beeld & Geluid > Televisie > Neo QLED TV",
    "description": "De Samsung QN95D combineert Neo QLED technologie met een anti-reflectiescherm voor een superieure kijkervaring.",
    "url": "https://www.krefel.be/nl/p/41013890",
    "scrapedAt": "2026-04-03T08:15:30.000Z"
  },
  {
    "name": "Apple iPhone 16 Pro Max 256 GB Desert Titanium",
    "brand": "APPLE",
    "price": 1479,
    "currency": "EUR",
    "sku": "41014205",
    "ean": "0195949044632",
    "inStock": true,
    "stockLevel": 156,
    "rating": 4.8,
    "reviewCount": 67,
    "imageUrl": "https://www.krefel.be/medias/iphone16promax-desert-front.jpg",
    "specs": {
      "Schermdiagonaal": "6.9 inch",
      "Chipset": "A18 Pro",
      "Opslagcapaciteit": "256 GB",
      "RAM": "8 GB",
      "Camera": "48 MP + 48 MP + 12 MP",
      "Besturingssysteem": "iOS 18",
      "5G": "Ja",
      "Gewicht": "227 g"
    },
    "category": "Telefonie > Smartphones > Apple iPhone",
    "url": "https://www.krefel.be/nl/p/41014205",
    "scrapedAt": "2026-04-03T08:15:31.000Z"
  }
]
```

### How much does it cost? 💰

Krefel Scraper uses Krefel's internal API under the hood, which makes it lightweight and fast. It runs on Playwright for the initial page load, then fetches product data via API calls — minimizing compute usage.

| Scenario | Products | Estimated cost | Time |
|----------|----------|---------------|------|
| Quick test | 24 | ~$0.01 | ~15 sec |
| Single category | 100 | ~$0.03 | ~30 sec |
| Multiple categories | 500 | ~$0.10 | ~2 min |
| Full catalog dump | 5,000+ | ~$0.50 | ~10 min |

Costs depend on your Apify subscription plan and proxy usage. The estimates above are based on default Apify platform pricing without proxies.

### Can I integrate? 🔗

Yes. Krefel Scraper works with the full Apify ecosystem and popular automation platforms:

- **Apify API** — Trigger runs programmatically, fetch results via REST API
- **Webhooks** — Get notified when a scrape completes
- **Apify integrations** — Connect to Google Sheets, Slack, Zapier, Make (Integromat), Airbyte, and 100+ other tools
- **Scheduled runs** — Set up daily/weekly price monitoring with Apify Schedules
- **Direct download** — Export results as JSON, CSV, XML, or Excel from the Apify Console

### Can I use it as an API? 🔌

Absolutely. Use Krefel Scraper as a product data API with any programming language. Here are examples using the Apify client libraries.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_API_TOKEN")

run = client.actor("studio-amba/krefel-scraper").call(run_input={
    "searchQuery": "Samsung televisie",
    "maxResults": 50,
    "language": "nl",
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(f"{item['brand']} {item['name']} — EUR {item['price']}")
```

#### JavaScript

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

const client = new ApifyClient({ token: "YOUR_API_TOKEN" });

const run = await client.actor("studio-amba/krefel-scraper").call({
  searchQuery: "Apple MacBook",
  maxResults: 20,
  language: "nl",
});

const { items } = await client
  .dataset(run.defaultDatasetId)
  .listItems();

items.forEach((item) => {
  console.log(`${item.brand} ${item.name} — EUR ${item.price}`);
});
```

### FAQ ❓

#### How often can I scrape Krefel?

You can run the scraper as often as needed. For price monitoring, most users set up daily or twice-daily scheduled runs. The scraper respects Krefel's rate limits automatically.

#### Does it work in French?

Yes. Set the `language` input to `fr` to get French product names, descriptions, and category labels. The same products are available in both languages.

#### Can I scrape the entire Krefel catalog?

Yes. Set `maxResults` to 10000 and use a broad category URL. The scraper paginates through all results automatically. A full catalog dump typically returns 5,000-8,000 products.

#### What is the EAN field used for?

EAN (European Article Number) is the barcode number printed on every product's packaging. It uniquely identifies a product across all retailers, making it essential for cross-retailer price comparison and MAP (Minimum Advertised Price) compliance monitoring.

#### Does this scraper handle anti-bot protection?

Krefel uses standard bot protection. The scraper loads pages with Playwright (a real browser) and then calls Krefel's internal API from within the browser context, which avoids most blocking. For very large runs (1,000+ products), using Apify's proxy service is recommended.

#### Why are some fields missing from certain products?

Optional fields like `originalPrice`, `discount`, `rating`, `reviewCount`, and `stockLevel` are only included when the data exists. Products that aren't on sale won't have `originalPrice`; products with no reviews won't have `rating`. This keeps the output clean and file sizes small.

### Limitations ⚠️

- **Product detail pages** — The scraper primarily uses Krefel's search/category API. Individual product page scraping is supported but slower.
- **Historical prices** — The scraper captures current prices at the time of the run. For historical price tracking, schedule recurring runs and store results externally.
- **Store-specific stock** — Stock levels represent total online inventory, not individual store locations.
- **Rate limits** — Very aggressive scraping (thousands of requests in minutes) may trigger temporary blocks. Use proxies and reasonable concurrency for large runs.
- **Images** — Image URLs point to Krefel's CDN. They may change over time if Krefel updates product photos.

### Other Belgian electronics scrapers 🇧🇪

Building a complete picture of the Belgian electronics market? Combine Krefel Scraper with these related actors:

- 🏪 **[Vanden Borre Scraper](https://apify.com/studio-amba/vandenborre-scraper)** — Belgium's #1 electronics retailer (Fnac Darty group). 13,000+ products via Algolia API. Lightning fast full-catalog dumps.
- 🧊 **[Coolblue Scraper](https://apify.com/studio-amba/coolblue-scraper)** — The Benelux's premium electronics retailer with same-day delivery. Products, prices, and expert reviews from coolblue.be.

Together, these three scrapers cover the Belgian electronics market completely — giving you cross-retailer price comparison data with EAN matching for every major product.

### Your feedback 💬

Found a bug? Need a feature? Want to scrape a different section of Krefel? Open an issue on the actor's GitHub page or reach out through the Apify Console. We actively maintain this scraper and respond to feedback quickly.

# Actor input Schema

## `categoryUrls` (type: `array`):

Krefel category pages to scrape. Example: https://www.krefel.be/nl/c/laptops

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

Search for products by name or keyword (e.g., 'Samsung Galaxy', 'wasmachine'). Overrides category URLs.

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

Maximum number of products to return.

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

Language for product data.

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

Proxy settings. Recommended for large runs to avoid blocking.

## Actor input object example

```json
{
  "categoryUrls": [
    {
      "url": "https://www.krefel.be/nl/c/laptops"
    }
  ],
  "maxResults": 5,
  "language": "nl",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BE"
  }
}
```

# Actor output Schema

## `results` (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 = {
    "categoryUrls": [
        {
            "url": "https://www.krefel.be/nl/c/laptops"
        }
    ],
    "maxResults": 5,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "BE"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/krefel-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 = {
    "categoryUrls": [{ "url": "https://www.krefel.be/nl/c/laptops" }],
    "maxResults": 5,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "BE",
    },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/krefel-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "categoryUrls": [
    {
      "url": "https://www.krefel.be/nl/c/laptops"
    }
  ],
  "maxResults": 5,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "BE"
  }
}' |
apify call studio-amba/krefel-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,studio-amba/krefel-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/JbsehSwCfZf8L1Yg0/builds/K9FJfoF3CeuR4cUzx/openapi.json
