# Vidaxl Products Listings Scraper (`alkausari_mujahid/vidaxl-products-listings-scraper`) Actor

Scrape product data from vidaXL.com and vidaXL.de. Provide product or category URLs and get names, prices, images, descriptions, specs, and more — including all size and color variants, ready to export.

- **URL**: https://apify.com/alkausari\_mujahid/vidaxl-products-listings-scraper.md
- **Developed by:** [Alkausari M](https://apify.com/alkausari_mujahid) (community)
- **Categories:** E-commerce, Integrations, Automation
- **Stats:** 3 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

Extract structured product data from [vidaXL.com](https://www.vidaxl.com) and [vidaXL.de](https://www.vidaxl.de) — one of Europe's largest online furniture and home goods retailers. This Actor collects detailed information from individual product pages including **price, images, descriptions, and full specifications**. It also **automatically discovers and scrapes all size and color variants** of each product. No coding required — just paste your product or category URLs and run.

### How it works

This Actor handles both page types in a single run — no companion Actor needed:

- **Category / listing page URLs** (`/g/...`) — the Actor finds every product link on the page and adds them all to the queue automatically.
- **Direct product page URLs** (`/e/...`) — scraped immediately. The Actor extracts the full product data and then checks for size or color variants, enqueueing each one as a separate product.

This means you can paste a single category URL and get back every individual product on that page — including all their variants — in one run.

### Use cases

- **eBay / reseller pricing** — the output includes a suggested eBay price (17% below the vidaXL price) ready to use when listing products.
- **Product catalogue building** — bulk-collect names, descriptions, images, and specs to populate your own store or database.
- **Price monitoring** — schedule regular runs to track price changes across a product range.
- **Content generation** — use the scraped descriptions and specifications as a base for your own product listings.
- **Inventory research** — discover all available variants (sizes, colours) and their individual pricing across a product family.

### Getting started

**Step 1** — Go to [vidaxl.de](https://www.vidaxl.de) or [vidaxl.com](https://www.vidaxl.com) and browse to the product or category page you want to scrape.

**Step 2** — Copy the URL from your browser's address bar. You can use:
  - A **product page** URL (e.g. `https://www.vidaxl.de/e/vidaxl-schreibtisch/8719883742960.html`)
  - A **category page** URL (e.g. `https://www.vidaxl.de/g/12345`) to scrape all products listed on that page

**Step 3** — Open this Actor in Apify Console and paste the URL(s) into the **Product URLs** field. You can mix product and category URLs in the same run.

**Step 4** — Click **Start** and wait for the run to finish. The Actor will collect all product links from category pages (if any), then scrape each product detail page including its variants.

**Step 5** — Go to the **Output** tab and download your results in JSON, CSV, HTML, or Excel format.

### Input

| Field | Description | Required |
|---|---|---|
| **Product URLs** | One or more vidaXL URLs — category/listing pages, direct product pages, or a mix of both | Yes |
| **Max Requests per Crawl** | Limits how many pages are processed in total (default: 100). Set higher for large category runs. | No |

#### Example input — category page

```json
{
    "startUrls": [
        { "url": "https://www.vidaxl.de/g/12345" }
    ],
    "maxRequestsPerCrawl": 100
}
````

#### Example input — direct product URLs

```json
{
    "startUrls": [
        { "url": "https://www.vidaxl.de/e/vidaxl-schaukelliege-akazienholz/8718475502579.html" },
        { "url": "https://www.vidaxl.de/e/vidaxl-butterfly-sessel-braun-echtleder/8718475526094.html" }
    ],
    "maxRequestsPerCrawl": 100
}
```

### Output

Each product variant is saved as one record. You can download the full dataset in **JSON, CSV, HTML, or Excel** format from the Output tab.

#### Example output record

```json
{
    "url": "https://www.vidaxl.de/e/vidaxl-schreibtisch/8719883742960.html",
    "name": "schreibtisch 120 x 60 x 75 cm",
    "brand": "vidaXL",
    "breadcrumbs": [
        { "index": 1, "name": "Büro", "url": "https://www.vidaxl.com/g/5432", "categoryId": "5432" },
        { "index": 2, "name": "Schreibtische", "url": "https://www.vidaxl.com/g/5433", "categoryId": "5433" }
    ],
    "vidaXLPrice": "89.99",
    "ebayPrice": "74.69",
    "currency": "€",
    "images": [
        { "fileName": "image_1", "url": "https://www.vidaxl.com/static/img/product.jpg?sw=1024" },
        { "fileName": "image_2", "url": "https://www.vidaxl.com/static/img/product2.jpg?sw=1024" }
    ],
    "selectedColor": "White",
    "shortDescription": "This sturdy desk is made from engineered wood...",
    "descriptionHtml": "<p>This sturdy desk is ideal for your home office...</p>",
    "descriptionText": "This sturdy desk is ideal for your home office...",
    "specificationsHtml": "<ul><li>Material: Engineered wood</li>...</ul>",
    "specifications": {
        "Material": "Engineered wood",
        "Dimensions": "120 x 60 x 75 cm",
        "Weight": "25 kg",
        "Colour": "White"
    },
    "pros": [
        "Easy to assemble",
        "Sturdy construction",
        "Spacious work surface"
    ]
}
```

### Variant handling

Many vidaXL products are available in multiple sizes or colours. When the Actor lands on a product page that has a size or colour dropdown, it **automatically discovers every variant URL** and adds them to the queue. Each variant is then scraped as its own record with its own price, images, and specifications.

You do not need to do anything extra — just provide the URL for any one variant or the base product URL and the Actor takes care of the rest. A product with 10 size options will produce 10 separate records in the output dataset.

> **Note:** Variant discovery requires navigating the page for each option to capture its unique URL. For products with many variants this adds some extra time per product, which is expected behaviour.

### Tips and advanced options

- **Start small** — set *Max Requests per Crawl* to `10–20` on your first run to verify the output looks right before running at full scale.
- **Use category pages for bulk scraping** — paste a `/g/` category URL to collect every product on that page without listing URLs one by one.
- **Mix URL types** — you can paste both category URLs and specific product URLs in the same run and they will all be processed together.
- **Schedule regular runs** — use Apify's built-in scheduler to run this Actor on a recurring basis and keep your product data up to date.
- **Download as CSV or Excel** — perfect for opening directly in Google Sheets or Microsoft Excel without any extra tools.
- **Connect to other apps** — use Apify's integrations with Zapier, Make (Integromat), Google Sheets, and more to send results automatically wherever you need them.

### FAQ, disclaimers, and support

**Is it legal to scrape vidaXL?**
This Actor collects only publicly visible product data — the same information any person sees when browsing the site. Always use the data responsibly and in accordance with [vidaXL's Terms of Service](https://www.vidaxl.com). Do not use scraped data for spam, unauthorised redistribution, or any purpose that violates applicable laws.

**Why are some fields empty (null)?**
Not all products have every field filled in on the vidaXL website. Missing values will appear as `null` in the output.

**The Actor finished but I got fewer results than expected — why?**
The *Max Requests per Crawl* setting limits how many pages are processed in total. Increase this value if you need more results. Keep in mind that variant discovery also counts towards this limit.

**Can I scrape both the .com and .de sites?**
Yes — the Actor supports both `vidaxl.com` and `vidaxl.de` URLs. You can mix them in the same run.

**I found a bug or need help.**
Please open an issue in the **Issues** tab of this Actor on Apify Console. For custom scraping solutions or enterprise needs, reach out directly at <alkausarimujahid@gmail.com>.

# Actor input Schema

## `startUrls` (type: `array`):

Add one or more vidaXL product or category page URLs to scrape.

## `maxRequestsPerCrawl` (type: `integer`):

Maximum number of requests that can be made by this crawler.

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

Proxy settings to use during crawling.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.vidaxl.de/e/vidaxl-schaukelliege-akazienholz/8718475502579.html"
    },
    {
      "url": "https://www.vidaxl.de/e/vidaxl-butterfly-sessel-braun-echtleder/8718475526094.html"
    }
  ],
  "maxRequestsPerCrawl": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "proxyUrls": []
  }
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://www.vidaxl.de/e/vidaxl-schaukelliege-akazienholz/8718475502579.html"
        },
        {
            "url": "https://www.vidaxl.de/e/vidaxl-butterfly-sessel-braun-echtleder/8718475526094.html"
        }
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "proxyUrls": []
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("alkausari_mujahid/vidaxl-products-listings-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 = {
    "startUrls": [
        { "url": "https://www.vidaxl.de/e/vidaxl-schaukelliege-akazienholz/8718475502579.html" },
        { "url": "https://www.vidaxl.de/e/vidaxl-butterfly-sessel-braun-echtleder/8718475526094.html" },
    ],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "proxyUrls": [],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("alkausari_mujahid/vidaxl-products-listings-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 '{
  "startUrls": [
    {
      "url": "https://www.vidaxl.de/e/vidaxl-schaukelliege-akazienholz/8718475502579.html"
    },
    {
      "url": "https://www.vidaxl.de/e/vidaxl-butterfly-sessel-braun-echtleder/8718475526094.html"
    }
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "proxyUrls": []
  }
}' |
apify call alkausari_mujahid/vidaxl-products-listings-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Vidaxl Products Listings Scraper",
        "description": "Scrape product data from vidaXL.com and vidaXL.de. Provide product or category URLs and get names, prices, images, descriptions, specs, and more — including all size and color variants, ready to export.",
        "version": "0.0",
        "x-build-id": "qiHduPKv7QfNhaAPS"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/alkausari_mujahid~vidaxl-products-listings-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-alkausari_mujahid-vidaxl-products-listings-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/alkausari_mujahid~vidaxl-products-listings-scraper/runs": {
            "post": {
                "operationId": "runs-sync-alkausari_mujahid-vidaxl-products-listings-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/alkausari_mujahid~vidaxl-products-listings-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-alkausari_mujahid-vidaxl-products-listings-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",
                "required": [
                    "startUrls"
                ],
                "properties": {
                    "startUrls": {
                        "title": "Product URLs",
                        "type": "array",
                        "description": "Add one or more vidaXL product or category page URLs to scrape.",
                        "default": [
                            {
                                "url": "https://www.vidaxl.de/e/vidaxl-schaukelliege-akazienholz/8718475502579.html"
                            },
                            {
                                "url": "https://www.vidaxl.de/e/vidaxl-butterfly-sessel-braun-echtleder/8718475526094.html"
                            }
                        ],
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxRequestsPerCrawl": {
                        "title": "Max Requests per Crawl",
                        "type": "integer",
                        "description": "Maximum number of requests that can be made by this crawler.",
                        "default": 10
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings to use during crawling.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "proxyUrls": []
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
