# Vidaxl Product Search Scraper (`stealth_mode/vidaxl-product-search-scraper`) Actor

Scrape product listings from Vidaxl across multiple regions (CH, RO, UK, etc.). Collect EAN codes, SKUs, product names, brands, categories, variants, and more — perfect for price monitoring, market analysis, and product research across European markets.

- **URL**: https://apify.com/stealth\_mode/vidaxl-product-search-scraper.md
- **Developed by:** [Stealth mode](https://apify.com/stealth_mode) (community)
- **Categories:** Automation, Developer tools, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 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 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

## Vidaxl Lots Search Scraper: Extract Product Data Across Markets

---

### What Is Vidaxl?

Vidaxl is a major European e-commerce platform specializing in furniture, home décor, and lifestyle products. With localized sites across Switzerland (.ch), Romania (.ro), United Kingdom (.co.uk), and other regions, Vidaxl offers millions of product listings catering to different regional markets and languages. Manually extracting and comparing product data across these regions is tedious and error-prone — the **Vidaxl Lots Search Scraper** automates multi-market product collection with structured output.

---

### Overview

The **Vidaxl Lots Search Scraper** extracts product information from Vidaxl search result pages across different regional domains. It is built for:

- **E-commerce analysts** monitoring product inventory and pricing trends
- **Price comparison platforms** aggregating Vidaxl data across regions
- **Market researchers** studying furniture and home goods availability
- **Competitors & retailers** tracking product launches and regional assortments
- **Data aggregators** building unified product catalogs across European markets

Key strengths include support for multi-regional URLs, configurable item limits per search page, and robust error handling to ensure uninterrupted scraping across large product catalogs.

---

### Input Format

**Example output record:**
```json
{
  "ean": "8721359337525",
  "master_product_id": "M3048713",
  "sku": "900096",
  "name": "vidaXL Klappsofa Bett Schwarz 70 x 80 x 60 cm Stoff",
  "brand": "vidaXL",
  "category": "Furniture (436)",
  "sub_category": "Sofas (460)",
  "attributes": {
    "color": "Schwarz",
    "size": "190 x 70 x 15 cm",
    "material": "Samt"
  },
  "variants": [
    {
      "color": "Black",
      "list_price": 110.0,
      "lowest_price_30d": 94.0,
      "currency": "CHF",
      "url": "/e/vidaxl-klappsofa-bett-schwarz-70-x-80-x-60-cm-stoff/8721359337525.html",
      "image_url": "/on/demandware.static/-/Sites-vidaxl-catalog-master-sku/default/dwb17134af/hi-res/436/460/900096/image_1_900096.jpg"
    },
    {
      "color": "Blue",
      "list_price": 130.0,
      "lowest_price_30d": 120.0,
      "currency": "CHF",
      "url": "/e/vidaxl-klappsofa-bett-blau-70-x-80-x-60-cm-stoff/8721359337471.html",
      "image_url": "/on/demandware.static/-/Sites-vidaxl-catalog-master-sku/default/dw188dfc22/hi-res/436/460/900091/image_1_900091.jpg"
    },
    {
      "color": "Light_grey",
      "list_price": 109.0,
      "lowest_price_30d": 109.0,
      "currency": "CHF",
      "url": "/e/vidaxl-klappsofa-bett-hellgrau-70-x-80-x-60-cm-stoff/8721359337488.html",
      "image_url": "/on/demandware.static/-/Sites-vidaxl-catalog-master-sku/default/dw08f1996e/hi-res/436/460/900092/image_1_900092.jpg"
    },
    {
      "color": "Dark_green",
      "list_price": 105.0,
      "lowest_price_30d": 105.0,
      "currency": "CHF",
      "url": "/e/vidaxl-klappsofa-bett-dunkelgrun-70-x-80-x-60-cm-stoff/8721359337501.html",
      "image_url": "/on/demandware.static/-/Sites-vidaxl-catalog-master-sku/default/dwe0586a5d/hi-res/436/460/900094/image_1_900094.jpg"
    },
    {
      "color": "Pink",
      "list_price": 129.0,
      "lowest_price_30d": 129.0,
      "currency": "CHF",
      "url": "/e/vidaxl-klappsofa-bett-rosa-70-x-80-x-60-cm-stoff/8721359337518.html",
      "image_url": "/on/demandware.static/-/Sites-vidaxl-catalog-master-sku/default/dw82c09d14/hi-res/436/460/900095/image_1_900095.jpg"
    }
  ],
  "locale": "de_CH",
  "site_id": null,
  "from_url": "https://de.vidaxl.ch/g/460/sofas?https%3A%2F%2Fde.vidaxl.ch%2Fg%2F460%2Fsofas=undefined&page=2"
}
````

The scraper accepts a JSON configuration object for flexible product search scraping:

```json
{
  "urls": [
    "https://de.vidaxl.ch/g/460/sofas?page=1"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 200
}
```

| Parameter | Type | Description |
|---|---|---|
| `urls` | Array | Direct links to Vidaxl search result pages (e.g., category pages, filtered searches) across any regional domain |
| `max_items_per_url` | Integer | Maximum products to extract per page (default: 20, max: 200+) |
| `ignore_url_failures` | Boolean | If `true`, skips failed or blocked pages and continues scraping; if `false`, stops on first error |

**Supported domains:** `vidaxl.ch`, `vidaxl.ro`, `vidaxl.co.uk`, `vidaxl.de`, `vidaxl.at`, and other regional Vidaxl subdomains.

> **Best practice:** Include pagination parameters (e.g., `?page=1`, `?page=2`) to scrape multiple result pages systematically.

***

### Output Format

Each product returned contains rich structured data ideal for inventory management, pricing, and product research:

#### Product Identification

| Field | Purpose |
|---|---|
| `EAN` | European Article Number (barcode) — unique product identifier across regions |
| `SKU` | Stock Keeping Unit — Vidaxl's internal product code |
| `Master Product ID` | Unified identifier linking variants across regional sites |
| `Name` | Official product name as displayed on Vidaxl |

#### Product Classification

| Field | Purpose |
|---|---|
| `Brand` | Manufacturer or product line name |
| `Category` | Primary product category (e.g., "Furniture") |
| `Sub Category` | Detailed classification (e.g., "Sofas", "Office Chairs") |
| `Attributes` | Structured specs: dimensions, color, material, weight, etc. |

#### Variants & Localization

| Field | Purpose |
|---|---|
| `Variants` | Alternative product versions (different colors, sizes, configurations) available on that page |
| `Locale` | Regional language code (e.g., `de_CH`, `ro_RO`, `en_GB`) — indicates which market the product data comes from |
| `Site ID` | Identifier for the specific Vidaxl regional domain scraped |

***

### How to Use

1. **Select search pages** — Navigate to any Vidaxl regional site and browse to a product category or search results page. Copy the URL.
2. **Add URLs** — Paste one or multiple search result URLs into the `urls` array. Include pagination parameters for multi-page scraping.
3. **Configure limits** — Set `max_items_per_url` to control the number of products per page (e.g., `50`, `200`).
4. **Enable error handling** — Set `ignore_url_failures: true` to skip any blocked or unavailable pages without stopping the run.
5. **Execute & export** — Run the scraper and download results as JSON, CSV, or Excel.

**Common use cases:**

- Scrape all sofas across `vidaxl.ch/sofas`, `vidaxl.ro/sofas`, and `vidaxl.co.uk/sofas` to compare regional inventory
- Extract product variants to identify which colors/sizes are available by region
- Gather EAN and SKU data for database reconciliation

***

### Use Cases & Business Applications

- **Price monitoring:** Track Vidaxl product availability and pricing across European markets
- **Competitive intelligence:** Monitor competitor product assortments and catalog updates
- **Market expansion:** Research regional product preferences and local SKU variations
- **Inventory synchronization:** Keep internal product databases in sync with live Vidaxl listings
- **Data enrichment:** Collect structured product metadata for aggregator platforms or marketplaces

By automating product data extraction, teams reduce manual work, improve data accuracy, and unlock insights for smarter merchandising decisions.

***

### Technical Considerations

- **Multi-region support:** Works across all Vidaxl domains; output includes `Locale` and `Site ID` for easy filtering
- **Pagination:** Use page parameters to systematically collect entire catalogs
- **Rate limiting:** Use `max_items_per_url` to control request volume and avoid rate-limiting
- **Variant handling:** Product variants are returned as structured arrays for easy deduplication

***

### Conclusion

The **Vidaxl Lots Search Scraper** is the most efficient way to extract comprehensive product data from Vidaxl's multi-regional catalog. Whether you're monitoring prices, analyzing markets, or building aggregator platforms, this scraper delivers clean, actionable product records across European markets. Start scraping today and turn Vidaxl listings into structured intelligence.

# Actor input Schema

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

Add the URLs of the product search list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.

## `ignore_url_failures` (type: `boolean`):

If true, the scraper will continue running even if some URLs fail to be scraped.

## `max_items_per_url` (type: `integer`):

The maximum number of items to scrape per URL.

## Actor input object example

```json
{
  "urls": [
    "https://de.vidaxl.ch/g/460/sofas?https%3A%2F%2Fde.vidaxl.ch%2Fg%2F460%2Fsofas=undefined&page=17"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}
```

# 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 = {
    "urls": [
        "https://de.vidaxl.ch/g/460/sofas?https%3A%2F%2Fde.vidaxl.ch%2Fg%2F460%2Fsofas=undefined&page=17"
    ],
    "ignore_url_failures": true,
    "max_items_per_url": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("stealth_mode/vidaxl-product-search-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 = {
    "urls": ["https://de.vidaxl.ch/g/460/sofas?https%3A%2F%2Fde.vidaxl.ch%2Fg%2F460%2Fsofas=undefined&page=17"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/vidaxl-product-search-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 '{
  "urls": [
    "https://de.vidaxl.ch/g/460/sofas?https%3A%2F%2Fde.vidaxl.ch%2Fg%2F460%2Fsofas=undefined&page=17"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/vidaxl-product-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Vidaxl Product Search Scraper",
        "description": "Scrape product listings from Vidaxl across multiple regions (CH, RO, UK, etc.). Collect EAN codes, SKUs, product names, brands, categories, variants, and more — perfect for price monitoring, market analysis, and product research across European markets.",
        "version": "0.0",
        "x-build-id": "K1YHiHw0bKRzrBG9S"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~vidaxl-product-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-vidaxl-product-search-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/stealth_mode~vidaxl-product-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-vidaxl-product-search-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/stealth_mode~vidaxl-product-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-vidaxl-product-search-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": {
                    "urls": {
                        "title": "URLs of the product search list urls to scrape",
                        "type": "array",
                        "description": "Add the URLs of the product search list urls you want to scrape. You can paste URLs one by one, or use the Bulk edit section to add a prepared list.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "ignore_url_failures": {
                        "title": "Continue running even if some URLs fail to be scraped",
                        "type": "boolean",
                        "description": "If true, the scraper will continue running even if some URLs fail to be scraped."
                    },
                    "max_items_per_url": {
                        "title": "Max items per URL",
                        "type": "integer",
                        "description": "The maximum number of items to scrape per URL."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
