# Beslist Product Search Scraper (`stealth_mode/beslist-product-search-scraper`) Actor

Scrape product listings from Beslist.nl search results with complete pricing, shop details, and category information. Ideal for price monitoring, competitive analysis, and product research across Dutch and European e-commerce markets.

- **URL**: https://apify.com/stealth\_mode/beslist-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

## Beslist Product Search Scraper: Extract Dutch E-Commerce Product Data

---

### What Is Beslist.nl?

Beslist.nl is one of the Netherlands' largest product comparison and search platforms, aggregating millions of product listings from hundreds of retailers. It covers electronics, fashion, home goods, and virtually every consumer product category. For e-commerce professionals, researchers, and price optimization specialists, Beslist represents a rich source of market data — but manual collection is impractical. The **Beslist Product Search Scraper** automates product extraction from search result pages, delivering clean, structured product data ready for analysis.

---

### Overview

The **Beslist Product Search Scraper** collects product listings from Beslist.nl search pages, capturing 31 data fields per item including pricing, shop information, product metadata, and category hierarchies. It is ideal for:

- **Price monitoring specialists** tracking competitor pricing and market trends
- **E-commerce businesses** analyzing product positioning and shop performance
- **Market researchers** studying product availability and pricing strategies
- **Product aggregators** feeding data into comparison platforms or dashboards
- **Data analysts** building datasets for retail market intelligence

The scraper handles pagination automatically, collects shop-level pricing data, and includes robust error handling to ensure reliable bulk collection across multiple search queries.

---

### Input Format

The scraper accepts a JSON configuration object with three core parameters:

```json
{
  "urls": [
    "https://www.beslist.nl/products/mode/?page=2",
    "https://www.beslist.nl/products/elektronics/?page=1"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 200
}
````

| Field | Description | Example |
|---|---|---|
| `urls` | Array of Beslist product search page URLs to scrape | `https://www.beslist.nl/products/mode/?page=2` |
| `ignore_url_failures` | If `true`, scraper continues even if some URLs fail; if `false`, stops on first error | `true` or `false` |
| `max_items_per_url` | Maximum number of products to extract per URL (1-200) | `200` |

**Important notes:**

- Use complete search URLs (with `?page=N` parameters) to target specific result pages
- The scraper respects pagination; multiple page URLs will each be processed independently
- Set `max_items_per_url: 200` for bulk collection; use lower values for smaller test runs

***

### Output Format

**Sample output**

```json
{
  "advertisement_id": "yXFoFXtwSCQe1gFSjRtFdfkewt2",
  "category_id": 9000865,
  "description": "Dit oranje voetbalshirt is een uitstekende keuze voor zowel kinderen als volwassenen die hun steun voor het Nederlands Elftal willen tonen. Gemaakt van 100% polyester, biedt het shirt een comfortabele pasvorm en blijft het na meerdere wasbeurten in topconditie zonder kleurverlies.Een van de aantrekkelijke kenmerken van dit shirt is de mogelijkheid om het te personaliseren met een eigen naam en rugnummer. Dit maakt het shirt niet alleen uniek, maar ook een geweldige manier om je verbondenheid met...",
  "family_id": "yXFoFXtwSCQe1gFSjRtFdfkewt2",
  "group_id_with_facets": "V4_08b34905-8fa7-4c3e-9df3-45cd304bf81b",
  "group_id": "V4_08b34905-8fa7-4c3e-9df3-45cd304bf81b",
  "variant_id": null,
  "main_category_id": 137,
  "main_category_url": "mode",
  "main_image_url": "https://hwimages.beslist.net/beslist-images/pim/8720604866100/394/F300/0b64e05ee7215a27ef01544e33637509/Sportshirts/Nederlands-Elftal-Voetbalshirt-Thuis-Oranje-Sportshirts.webp",
  "min_price": 44.95,
  "min_price_only_new": 44.95,
  "min_price_only_used": 0,
  "pim_id": "nl-nl-gold-8720604866100",
  "pim_rating": null,
  "normalized_unit_price": null,
  "subtitle": null,
  "unit_label": null,
  "plp_url": "/p/nederlands-elftal-voetbalshirt-thuis-oranje-wk-2026-sportshirts/137/V4_08b34905-8fa7-4c3e-9df3-45cd304bf81b/",
  "plp_url_used": "",
  "price": {
    "__typename": "Price",
    "regular": 44.95,
    "sale": null
  },
  "product_id": "yXFoFXtwSCQe1gFSjRtFdfkewt2",
  "product_labels": [
    {
      "__typename": "ProductLabel",
      "icon": "thunder",
      "text": "Populair",
      "type": "BARGAIN",
      "variant": null
    }
  ],
  "shop_count": 2,
  "shop_count_new": 2,
  "shop_count_used": 0,
  "shop_id": 324421,
  "shop_name": "Voetbalshirtskoning.nl",
  "shop_type": "CPC",
  "title": "Nederlands Elftal - Voetbalshirt Thuis - Oranje - WK 2026 - Sportshirts",
  "type": "result",
  "from_url": "https://www.beslist.nl/products/mode/"
}
```

Each scraped product record contains 31 fields organized by category:

#### Product Identification

| Field | Meaning |
|---|---|
| `Product ID` | Unique internal Beslist identifier for the product |
| `Title` | Official product name as displayed |
| `Subtitle` | Additional product variant or descriptor |
| `Description` | Detailed product description |
| `Type` | Product type classification |
| `Product Labels` | Tags or labels assigned to the product (e.g., "bestseller", "new") |

#### Pricing Information

| Field | Meaning |
|---|---|
| `Price` | Current lowest retail price on Beslist |
| `Min Price` | Minimum price across all listed shops |
| `Min Price Only New` | Lowest price for new condition items only |
| `Min Price Only Used` | Lowest price for used/refurbished items only |
| `Normalized Unit Price` | Price standardized to per-unit basis (useful for bulk products) |
| `Unit Label` | Unit of measurement (e.g., per liter, per kilogram) |

#### Inventory & Availability

| Field | Meaning |
|---|---|
| `Shop Count` | Total number of retailers selling this product |
| `Shop Count New` | Number of retailers with new condition stock |
| `Shop Count Used` | Number of retailers with used/refurbished stock |
| `Shop ID` | Internal identifier for the specific retailer |
| `Shop Name` | Official retailer/shop name |
| `Shop Type` | Classification of shop (e.g., official distributor, marketplace) |

#### Category & Classification

| Field | Meaning |
|---|---|
| `Category ID` | Unique identifier for the product category |
| `Main Category ID` | Top-level category identifier |
| `Main Category URL` | URL path for the main category page |
| `Family ID` | Product family grouping (for variants) |
| `Group ID` | Product grouping identifier |
| `Group ID With Facets` | Group ID including filter facets applied |
| `Advertisement ID` | ID if product is part of a promoted listing |
| `Variant ID` | Identifier for product variants (color, size, etc.) |

#### Ratings & Data

| Field | Meaning |
|---|---|
| `PIM ID` | Product Information Management system identifier |
| `PIM Rating` | Review rating from the PIM system (typically 1-5 stars) |

#### URLs & Images

| Field | Meaning |
|---|---|
| `Main Image URL` | URL to the product's primary image |
| `PLP URL` | Product Landing Page URL for new items |
| `PLP URL Used` | Product Landing Page URL for used/refurbished items |

***

### How to Use

1. **Identify search URLs** — Navigate to Beslist.nl, perform a search, and copy the URL of results pages (including pagination parameters).
2. **Prepare the input** — Add URLs to the `urls` array. You can include multiple search pages or category pages.
3. **Set parameters** — Adjust `max_items_per_url` (1-200) based on your needs. For comprehensive collection, use 200; for sampling, use 10-50.
4. **Enable error tolerance** — Set `ignore_url_failures: true` to continue scraping even if one URL fails (recommended for bulk runs).
5. **Execute the scraper** — Start the run and monitor progress in the logs.
6. **Export data** — Download results as JSON, CSV, or Excel for analysis in spreadsheets or databases.

**Tips for success:**

- Use narrow, specific searches (e.g., brand + product category) to get relevant, focused results
- Test with 1-2 URLs and `max_items_per_url: 20` before scaling to larger runs
- Beslist pagination can be steep; use multiple page URLs to capture deeper results

***

### Use Cases & Business Value

- **Price intelligence:** Monitor competitor pricing daily and identify trends
- **Product sourcing:** Research supplier pricing and market availability
- **Market analysis:** Understand product positioning, shop diversity, and price distribution
- **Retail benchmarking:** Compare your products against competitor offerings
- **Inventory insights:** Track shop counts to gauge product popularity and availability

The Beslist Product Search Scraper transforms search results into actionable, normalized data — perfect for feeding BI tools, pricing dashboards, or machine learning pipelines.

***

### Conclusion

The **Beslist Product Search Scraper** is a powerful tool for anyone needing structured e-commerce product data from the Netherlands' largest product platform. With 31 detailed fields per product and flexible configuration, it unlocks market insights that drive pricing strategy, competitive analysis, and business growth. Start scraping today and turn Beslist listings into competitive advantage.

# 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://www.beslist.nl/products/mode/?page=2"
  ],
  "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://www.beslist.nl/products/mode/?page=2"
    ],
    "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/beslist-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://www.beslist.nl/products/mode/?page=2"],
    "ignore_url_failures": True,
    "max_items_per_url": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("stealth_mode/beslist-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://www.beslist.nl/products/mode/?page=2"
  ],
  "ignore_url_failures": true,
  "max_items_per_url": 20
}' |
apify call stealth_mode/beslist-product-search-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Beslist Product Search Scraper",
        "description": "Scrape product listings from Beslist.nl search results with complete pricing, shop details, and category information. Ideal for price monitoring, competitive analysis, and product research across Dutch and European e-commerce markets.",
        "version": "0.0",
        "x-build-id": "n0X279EJlbgCnVX4v"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/stealth_mode~beslist-product-search-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-stealth_mode-beslist-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~beslist-product-search-scraper/runs": {
            "post": {
                "operationId": "runs-sync-stealth_mode-beslist-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~beslist-product-search-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-stealth_mode-beslist-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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
