Beslist.nl Scraper - Product Prices, EANs & Offer Counts
Pricing
from $0.50 / 1,000 run start fees
Beslist.nl Scraper - Product Prices, EANs & Offer Counts
Beslist.nl scraper for Dutch search results and category pages. Per product: EAN barcode, cheapest and highest price across shops, price spread, number of offers, title, image and link. No login or API key. For price monitoring, EAN matching and assortment research.
Pricing
from $0.50 / 1,000 run start fees
Rating
0.0
(0)
Developer
SR
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Beslist.nl Scraper
Beslist.nl Scraper collects products from Dutch search results and category pages, including EAN barcodes, prices in euros, merchant price ranges and the number of offers. Use this Beslist scraper for price monitoring and barcode matching: enter a search term or paste a Beslist URL with the filters you need, and export the rows as JSON, CSV or Excel, or read them through the Apify API.
The actor returns one dataset row per product. It keeps catalogue products and merchant listings distinguishable through ean and product_id, and can restrict results to products with a barcode. It does not open individual merchant offers, so each row represents the product shown on the comparison page.
Beslist.nl Scraper input
Provide query or url. When both are present, url selects the page and query remains available on each output row as your label. Dutch search terms are useful because this is the Dutch Beslist catalogue. The input form suggests laptops; that is a prefill, not an automatic search term when both fields are missing.
| Field | Type | Default | Meaning |
|---|---|---|---|
query | string | none | Dutch search term; optional when a URL is provided |
url | string | none | Beslist search or category URL; takes precedence |
limit | integer | 50 | Maximum products, from 1 to 900 |
ean_only | boolean | false | Keep products with an EAN in their URL |
retries | integer | 3 | Maximum attempts per page, from 1 to 6 |
The actor follows result pages and removes repeated products before applying your limit. If fewer matching products are available, the dataset can contain fewer rows. Filtering by EAN can also reduce the result count. Existing integrations can keep using these input names and defaults.
Output
The following selected fields are from a real response collected on 3 October 2026 with the all-options input. Prices and availability change, so treat this as a format example, not a current offer:
{"position": 1,"ean": "8720726969239","product_id": "8720726969239","url": "https://www.beslist.nl/p/ooqe-pro-hx9-bluetooth-koptelefoon-noise-cancelling-zwart/655/8720726969239/","title": "OOQE PRO HX9 - Bluetooth Koptelefoon - Noise Cancelling - Zwart","price": 34.95,"lowest_offer": 34.95,"highest_offer": 34.95,"price_spread": 0,"currency": "EUR","offer_count": 2,"structured_low": 34.95,"structured_high": 34.95,"image": "https://hwimages.beslist.net/beslist-images/pim/8720726969239/394/F300/e28ae7f24c09528fe81341c942072534/Koptelefoons/OOQE-PRO-HX9-Bluetooth-Koptelefoon-Noise-Cancelling-Zwart.webp","enriched": true,"query": "koptelefoon","fetched_at": "2026-10-03T20:08:11.322Z"}
Every row preserves the original 23 fields: position, ean, product_id, slug, url, title, price, lowest_offer, highest_offer, price_spread, price_text, currency, offer_count, offer_count_text, structured_low, structured_high, offers_in_structured_data, labels, is_popular, description, image, enriched and query.
Prices are numbers or null, barcodes are strings or null, and labels is a list of strings or null. Barcodes stay strings so leading zeroes are preserved. The additional fetched_at timestamp identifies when a page was retrieved. Common catalogue fields are also supplied as source, country, gtin, image_url, lowest_price, highest_price and offers_count. Existing field names continue to work.
The default key-value store contains summary, with the delivered product count, EAN coverage, products with prices, comparable products and structured price checks. An errors record is written when a search or page encounters a problem. OUTPUT contains delivery status, charge counts and free-tier information.
Reading the price range
Beslist is a comparison site. price and lowest_offer represent the cheapest offer shown on the card, while highest_offer represents the most expensive. price_spread is their difference. The two amounts are a range across merchants; they do not describe a previous price and a discounted price.
offer_count comes from the product card's comparison link. It describes offers indexed by Beslist, rather than every shop in the country. The structured fields provide a separate cross-check where Beslist publishes matching structured data. They remain null on products without that evidence. Duplicate structured titles are excluded from the cross-check to avoid attaching one variant's prices to another.
Pricing
The existing pay-per-event prices are unchanged: run_start costs $0.0005 per run, and product costs $0.001 per product delivered, or $1 per 1,000 products. Product charges occur after dataset delivery. A search with no results incurs no product events; its existing run-start fee still applies. Pages and retry attempts do not add product charges.
Users without a paid Apify plan receive at most ten products per run. Product charges follow the rows actually delivered. Paid users can request up to 900 products, subject to the number of results available from the selected search or category.
Use cases for this Beslist scraper
- Price monitoring for Dutch retailers. Run the same search or category every day and compare your own price with
lowest_offer, the cheapest offer Beslist shows for the product. - Assortment and gap analysis. Pull a full category and join it to your catalogue on
eanto see which products competitors list that you do not. - Marketplace sellers and brands. Follow how many offers (
offer_count) a product attracts and how wide the price range (price_spread) is before you enter a category. - EAN enrichment. Collect barcodes for Dutch product titles without opening every product page.
Beslist scraper compared with other options
Beslist itself offers APIs for merchants, such as the shop item and order interfaces. Those are for shops that sell on Beslist and manage their own feed; they do not return the public comparison data for products of other shops. A Beslist scraper fills that gap by reading what any visitor sees on the search and category pages.
On the Apify Store there is one other Beslist actor, which takes search URLs or a keyword and returns product listings with shop details. This actor focuses on comparison data: the barcode as a string, the minimum and maximum offer per product, the spread between them, the number of offers, and a structured-data cross-check. It also accepts a category URL with your filters, deduplicates products across pages and can keep only rows with an EAN. Pricing is a flat, predictable $1 per 1,000 products plus a small start fee, with nothing charged for empty results.
General-purpose web scraping tools can also read Beslist pages, but you then have to write and maintain the selectors yourself. This actor returns a fixed schema whose field names and types stay stable, so existing integrations keep working.
Uses and limitations
Join catalogue products to your own inventory using ean or its alias gtin. Compare your current price with the minimum offer, inspect the spread and consider how many offers Beslist lists. Repeated runs can help track the products and price ranges shown for a category over time. This actor returns the current response; it does not supply historical sales or transaction volumes.
Merchant listings, especially clothing variants, may have a Beslist identifier without an EAN. Keep product_id when you need those rows, or enable ean_only for barcode joins. Missing fields remain null rather than being guessed. The actor returns the best available image URL from the page.
An unknown search term can produce a successful empty run with no_results. A page that cannot be retrieved also produces a successful empty run when no products were collected. If a later page fails, the actor retries that same page before giving up; products collected so far always remain in the dataset, and the summary reports any incomplete collection. At most twenty result pages are collected for one input.
FAQ
Can I collect EANs without opening every product page?
Yes. Where the product URL contains a barcode, the actor reads it from the listing page and preserves it as a string. Barcode coverage depends on the products and category.
Does the highest price mean an old price or a discount?
It is the highest merchant offer shown on the card. Compare it with lowest_offer to measure the range across offers.
Why does my clothing search have null EANs?
Many clothing rows are merchant listings with their own Beslist identifiers. They remain identifiable by product_id, but no barcode is invented.
Can I get each merchant's individual price?
The actor returns the range and offer count from the listing page. It does not return a separate row for each merchant.
How are empty runs charged?
No products means no product charge. The $0.0005 run-start fee still applies, so a search term you are unsure about costs a twentieth of a cent to try.