Dirk Scraper
Pricing
from $2.00 / 1,000 products
Dirk Scraper
Dirk van den Broek product API alternative: all ~7,700 dirk.nl products with prices, deals with dates, next week's deals, EAN barcodes, Nutri-Score, unit prices and organic flag, in about 2 minutes, no proxy. Checked against Dirk's own sitemap. Keyword and barcode search included.
Pricing
from $2.00 / 1,000 products
Rating
0.0
(0)
Developer
Sleep Mode Systems
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 hours ago
Last modified
Categories
Security
Limited permissionsShare
Dirk Scraper extracts products from Dirk van den Broek (https://www.dirk.nl): prices, unit prices, deals (aanbiedingen) with their dates, next week's deals before they start, EAN barcodes on every product, Nutri-Score, organic flag, badges and categories. Every full run checks itself against Dirk's own product sitemap: the last one collected 7,666 of the sitemap's 7,670 products, the other 4 having no price, plus 4 products on sale that the sitemap does not list.
Price: $2.00 per 1,000 products. A full run reads all 7,670 products in about 2.5 minutes on Apify, with no proxy.
What does the Dirk Scraper extract?
| Data | Fields | Filled in last full run |
|---|---|---|
| Identity | externalId, name, brand, ean, gtins | 100% id, name and barcode, 94.0% brand |
| Size | sizeText, packCount, quantity, unit | 100% size text, 99.9% parsed quantity and unit |
| Price | price, currency, unitPrice, unitPriceUnit | 100% price, 99.1% unit price |
| Deals | promoPrice, promoText, promoType, promoStart, promoEnd | 609 products on a deal (7.9%), all with dates |
| Product facts | organic, nutriScore, badges, soldByWeight | 100% organic flag (276 organic), 12.2% Nutri-Score, 39.4% badges |
| Category | categoryPath, categoryIds, category | 100% |
| Links | url, imageUrl | 100% url, 99.6% image |
| Run | priceDate, searchTerm, scrapedAt | 100% |
Last full run: 2026-11-04, 7,670 products, 188 requests, all HTTP 200.
Who uses the Dirk Scraper?
- Price comparison sites load the full catalog and match it to Albert Heijn, Jumbo and other chains on
ean, which every Dirk product has. - Deal and folder apps publish next week's Dirk aanbiedingen on Monday or Tuesday, before the folder week starts, with
nextWeek. - Brand and category managers follow their products' price and deals at Dirk week by week.
- Retail and market analysts track a discounter's prices, private label (
1 de Beste, 1,149 products) and deal share. - Nutrition and health apps filter on
nutriScore,organicand badges such asBeter LevenorMSC Vis. - Developers who need a Dirk van den Broek product API without maintaining one call this actor from JavaScript, Python or REST.
How much does the Dirk Scraper cost?
Pay per event. You pay for products written to the dataset and a tiny start fee. Platform usage is included.
| Event | Price |
|---|---|
| Product written to dataset | $0.002 |
| Actor start | $0.00005 per run at the default 512 MB |
Dirk Scraper cost examples
| Scenario | Products | Cost |
|---|---|---|
Small test, maxItems: 100 | 100 | $0.20 |
Keyword search, keywords: ["halfvolle melk"] | 37 | $0.07 |
| Barcode lookup, 100 barcodes in one run | up to 100 | up to $0.20 |
This week's deals, onlyBonus: true | 609 | $1.22 |
Next week's deals, onlyBonus and nextWeek | 476 | $0.95 |
| Full catalog | 7,670 | $15.34 |
| Full catalog every week, 4 runs a month | 30,680 | $61.36 |
Product counts are from runs on 2026-11-04. Set maxItems to cap any run. Set the run's maximum charge in Apify to cap spend; the actor stops cleanly when it is reached and reports how many products it got.
How do you configure the Dirk Scraper?
| Field | Type | Default | Meaning |
|---|---|---|---|
keywords | array of strings | empty | Search for these words instead of reading the full catalog. At most 250 results a word. |
eans | array of strings | empty | Look up these barcodes instead of reading the full catalog. |
onlyBonus | boolean | false | Keep only products on a deal, in any mode. |
nextWeek | boolean | false | Prices and deals as they will be on the coming Wednesday, instead of today's. |
maxItems | integer | 100000 | Stop after this many products. The default covers the full catalog. |
minItems | integer | 1 | Fail the run if fewer products were found. |
With keywords and eans empty, the actor reads the full catalog.
How do you scrape the full Dirk van den Broek catalog with the Dirk Scraper?
Use it for a complete Dirk product list with prices and barcodes. Leave the input empty. The actor reads Dirk's 146 categories, then the products in Dirk's sitemap that no category lists, and fetches every product's barcode.
{}
How do you get next week's Dirk aanbiedingen with the Dirk Scraper?
Use it to publish or plan around next week's folder before it starts. Dirk's deal week runs Wednesday to Tuesday. With nextWeek, prices and deals are those of the coming Wednesday: on Wednesday 4 November the run returned 476 deals for 11 November, 360 of which had not started yet.
{"onlyBonus": true,"nextWeek": true}
How do you get this week's Dirk aanbiedingen with the Dirk Scraper?
onlyBonus keeps products on a deal and works with every mode. On the full catalog it reads all products and stores those on a deal: 609 in the last run, each with its start and end date.
{"onlyBonus": true}
How do you search Dirk by keyword with the Dirk Scraper?
Use it when you need a product group. One Dirk search runs per keyword; products Dirk does not price are left out. halfvolle melk returned 37 products. Dirk's search returns at most 250 results; the run summary marks such a search as capped.
{"keywords": ["halfvolle melk", "pindakaas"]}
How do you look up Dirk products by EAN barcode with the Dirk Scraper?
Use it to check the price and deal of products you already know. A product is returned only when its own barcode matches. Leading zeros are optional: 8710506037166 and 08710506037166 find the same Johma salad. Dirk's own search finds a barcode only about 6 times in 10, so the barcodes it misses are looked up in the whole catalog: 3 barcodes, one of them missed by search, took 80 seconds. A barcode not in the catalog gives no item and expected: 0 in the run summary, so it is truly not on sale.
{"eans": ["8710506037166", "8716200094795"]}
Which fields does the Dirk Scraper output?
Source: Dirk = Dirk's value unchanged. Derived = computed by this actor. Fixed = same in every item. Input = from your input. Missing values are null, never an empty string.
| Field | Source | Meaning |
|---|---|---|
chain | Fixed | Always dirk. |
store | Fixed | Always null: the prices dirk.nl shows, the same for every visitor. |
externalId | Dirk | Dirk product id, such as 4276. |
ean | Dirk | Barcode, mostly EAN-13. |
gtins | Derived | The barcode in a list, for the same field on other chains. |
name | Dirk | Product name. |
brand | Dirk | Brand. |
sizeText | Dirk | Size as Dirk writes it, such as 500 g, 6 x 330 ml or 1 kg (ca. 6 stuks). |
packCount | Derived | Units in a multipack, read from sizeText; 1 when not a multipack. |
quantity | Derived | Size of one unit: 6 x 330 ml gives 330. |
unit | Derived | Unit of quantity: g, kg, ml, cl, l, stuk, zakje, and so on. |
price | Dirk | Regular price in EUR. |
currency | Fixed | Always EUR. |
unitPrice | Derived | Regular price per kg, litre or piece in EUR: Dirk gives none. |
unitPriceUnit | Derived | Unit of unitPrice: kg, l or stuk. |
promoPrice | Dirk | Deal price in EUR, when lower than price. |
promoText | Dirk | The deal label: ACTIE, PROBEER PRIJS or VR, ZA & ZO actie. |
promoType | Dirk | Dirk's label code: ACTIE, PROBEER_PRIJS or VR, ZA & ZO_actie. |
promoLabels | Fixed | Always null on Dirk; kept for the same field on other chains. |
promoStart | Dirk | First day of the deal, YYYY-MM-DD. Weekend deals give their Friday. |
promoEnd | Dirk | Last day of the deal, YYYY-MM-DD. |
organic | Dirk | true when Dirk shows its Biologisch logo. |
nutriScore | Dirk | Nutri-Score A to E, from Dirk's Nutri-Score logo. |
badges | Dirk | Dirk's product logos, such as Beter Leven 1, MSC Vis, Fairtrade or Op=Op. |
soldByWeight | Dirk | true when the product is sold by weight. |
categoryPath | Dirk | Department and group, such as Aardappelen, groente & fruit/Groente. |
categoryIds | Dirk | Department id and group id. |
category | Dirk | Department. |
url | Dirk | Product page on dirk.nl. |
imageUrl | Dirk | Product image. |
inStock | Fixed | Always null: Dirk gives no stock information. |
availabilityLabel | Fixed | Always null on Dirk. |
priceDate | Derived | The day the prices apply to: today, or the coming Wednesday with nextWeek. |
searchTerm | Input | The keyword or barcode that found the product; null in full-catalog mode. |
scrapedAt | Fixed | Time the product was read, ISO 8601. |
Dirk Scraper output example
{"chain": "dirk","store": null,"externalId": "43411","ean": "8710871183451","gtins": ["8710871183451"],"name": "1 de Beste Hutspot","brand": "1 de Beste","sizeText": "500 g","packCount": 1,"quantity": 500,"unit": "g","price": 1.59,"currency": "EUR","unitPrice": 3.18,"unitPriceUnit": "kg","promoPrice": 0.99,"promoText": "ACTIE","promoType": "ACTIE","promoLabels": null,"promoStart": "2026-11-04","promoEnd": "2026-11-10","organic": false,"nutriScore": "A","badges": ["NUTRI-SCORE A = GROEN", "1 DE BESTE (VERSIE 2018)", "Planet proof"],"soldByWeight": false,"categoryPath": "Aardappelen, groente & fruit/Groente","categoryIds": ["1", "5"],"category": "Aardappelen, groente & fruit","url": "https://www.dirk.nl/boodschappen/aardappelen-groente-fruit/groente/1-de-beste-hutspot/43411","imageUrl": "https://web-fileserver.dirk.nl/artikelen/19407_1_247500_638306083404003645.png","inStock": null,"availabilityLabel": null,"priceDate": "2026-11-04","searchTerm": null,"scrapedAt": "2026-11-04T17:43:32.942Z"}
How does the Dirk Scraper report on its run?
Every run saves a SUMMARY record in its key-value store. From the last full run:
{"mode": "catalog","priceDate": "2026-11-04","itemsPushed": 7670,"distinctIds": 7670,"productsRead": 7670,"sitemapProducts": 7670,"sitemapCollected": 7666,"sitemapNotOnSale": 4,"notInSitemap": 4,"barcodesMissing": 0,"stoppedAtChargeLimit": false,"blocked": false,"concurrencyReduced": false,"eanCatalogScan": false,"durationSec": 143,"requests": 188,"statusCodes": { "200": 188 },"errors": [],"retries": [],"categories": [{ "id": 1, "name": "Aardappelen, groente & fruit/Aardappelen", "collected": 35 }],"searches": []}
| Field | Meaning |
|---|---|
itemsPushed, distinctIds | Products stored. Only products Apify accepted count. |
productsRead | Distinct products on sale that were read, including those left out by onlyBonus, maxItems or your charge limit. |
sitemapProducts | Products in Dirk's own product sitemap. Dirk publishes no other total. |
sitemapCollected | Of those, products collected. |
sitemapNotOnSale | Of those, products Dirk gives no price: not on sale. |
notInSitemap | Products on sale that only a category lists. |
barcodesMissing | Products whose barcode could not be read. |
categories | Products on sale per category. |
searches | In search mode, the products on sale found and collected per keyword or barcode; capped when Dirk's 250-result limit was reached. |
stoppedAtChargeLimit | true when the run stopped at your maximum charge. |
blocked | true when Dirk refused twice in a row (HTTP 403); the run then fails with the products it already had. |
concurrencyReduced | true when Dirk answered 403 or 429; the actor then sends 1 request at a time instead of 2. |
eanCatalogScan | true when Dirk's search missed a barcode and the catalog was read to find it. |
statusCodes, retries, errors | Every HTTP status received, every retry with its reason, and requests that failed after 3 retries. |
A full-catalog run is suspect when sitemapCollected + sitemapNotOnSale is below sitemapProducts, when barcodesMissing is above 0, when blocked or concurrencyReduced is true, or when statusCodes holds anything other than 200. Set minItems to make a bad run fail outright.
How does the Dirk Scraper compare to other Dirk scrapers?
| Dirk Scraper | incognito_mode/dirk-product-scraper | harvestedge/dutch-supermarkets-all-11 | |
|---|---|---|---|
| Price per 1,000 | $2.00 | from $4.00 | $5.00 |
| Full catalog | yes, default | yes, with maxItems raised from the default 500 | no, keyword search |
| EAN barcode | yes, every product | not mentioned | no |
| Next week's deals | yes, nextWeek | no | no |
| Deal dates | yes, weekend deals included | yes | no |
| Nutri-Score, organic, badges | yes | not mentioned | no |
| Unit price | yes, computed | yes, parsed | yes |
| Keyword and barcode search | yes | no | keyword only |
| Completeness check | yes, against Dirk's sitemap | no | no |
| Proxy | none | Apify datacenter by default | not stated |
Figures read from each actor's public page on 2026-11-04.
Things to know about Dirk data from the Dirk Scraper
- Dirk's deal week runs Wednesday to Tuesday. In the run of Wednesday 2026-11-04, 401 products had a deal from 4 to 10 November. Weekend deals (
VR, ZA & ZO actie, 21 products) run Friday to Sunday, and their dates say so. - Next week's deals are readable before Wednesday. On 4 November, 476 products had a deal for 11 November, 360 of them not on a deal yet. With
nextWeek, a product Dirk will not price that day is left out. - Dirk publishes no product total. The check is Dirk's product sitemap, and neither source is complete alone: in the last run, 5 products on sale were in the sitemap and in no category (such as Activia Kefir drink mango), and 4 were in a category and not in the sitemap. The actor reads both.
- Dirk gives no unit price.
unitPriceis computed from the regular price and size. Dirk writes two litre sizes as millilitres (1,98 mlon Dr Pepper 6x330ml,1,5 mlon a 1.5 l bottle); a millilitre size with decimals under 10 is read as litres, which changes exactly these two of 7,665 products checked.sizeTextstays as Dirk writes it. - Some deals have no lower price. 151 deals are products sold only during a promotion, at one price, such as
Vleeschmeesters Actie angusburger: they havepromoTypeand dates, andpromoPriceisnull. - Dirk has no multi-buy deals. No
1+1or2 voor: every deal is a price. - Some deals carry no label. 199 of 609:
promoTextisnullandpromoTypeisACTIE. - Prices are the ones dirk.nl shows. Dirk's system holds other price lists, but none can be matched to a shop, and dirk.nl uses one list whatever shop a visitor picks. So
storeisnull. - No stock information. A product with a price is on sale;
inStockis alwaysnull. - Dirk's search misses barcodes. It found 18 of 30 barcodes tried; Friesche Vlag Halvamel, on sale, was one it missed. The actor then looks in the whole catalog, so barcode lookups are complete but take about 80 seconds when search misses one.
- Short barcodes are Dirk's own codes. 7,460 barcodes are EAN-13 and 147 EAN-8; 62 fresh and weighed products have shorter in-store codes.
- Nutri-Score and organic come from Dirk's logos. 934 products show a Nutri-Score logo, 276 the
Biologischlogo.
Is it legal to use the Dirk Scraper?
This actor reads publicly available data only. Dirk product data contains no personal data. It sends at most 2 requests at a time and does not bypass any login or paywall. You are responsible for how you use the data, including any terms that apply to you. See Apify's guide to web scraping legality.
Frequently asked questions about the Dirk Scraper
Can I get Dirk products as CSV or Excel?
Yes. Every run's dataset downloads as CSV, Excel, JSON or XML from Apify, or through the API.
How often should I run it?
Dirk's deals change every Wednesday. Run the full catalog once a week on Wednesday, and add a Monday or Tuesday run with onlyBonus and nextWeek to have the coming week's deals early.
Does it need proxies?
No. Requests go straight to Dirk, at most 2 at a time: the last full run got HTTP 200 on all 188. If Dirk answers 403 or 429, the actor goes to 1 request at a time; after a 403 it also pauses 60 seconds and tries once more, and a second 403 ends the run with blocked: true.
Can I schedule it and send results somewhere?
Yes. Use Apify Schedules, and a webhook or integration to send each run's dataset to your database, Google Sheets, Slack or Notion.
Does it work with the Apify API and SDK?
Yes. Any Apify client (JavaScript, Python, REST) can start the actor and read the dataset.
Can I get the Dirk aanbiedingen of next week?
Yes. Run with onlyBonus and nextWeek. The run of Wednesday 4 November returned 476 deals for Wednesday 11 November, 352 of them running 11 to 17 November.
Is there an official Dirk van den Broek API?
No public one. Dirk's website uses a GraphQL API that is not documented for outside use. This actor reads it for you and returns a stable set of fields, so you do not maintain the integration.
Is there a list of all Dirk products with prices?
Each full run produces one: 7,670 products in the last run, with price, unit price, barcode and category, downloadable as CSV, Excel or JSON.
Can I compare Dirk prices with Albert Heijn and Jumbo?
Yes. The Albert Heijn and Jumbo scrapers by Sleep Mode Systems output the same fields. Match on ean (Albert Heijn writes it with a leading zero, so compare without leading zeros) and compare unitPrice.
Does it give prices per Dirk shop?
No. It gives the prices dirk.nl shows, the same for every visitor. Dirk's system holds other price lists, but none can be matched to a shop.
Does it cover DekaMarkt?
No. DekaMarkt runs on the same platform with its own prices; the DekaMarkt Scraper by Sleep Mode Systems reads it, with the same fields and the same product ids.
Other scrapers by Sleep Mode Systems
| Actor | What it extracts | Price per 1,000 | |
|---|---|---|---|
| Dirk Scraper | Dirk products: prices, next week's deals, EAN, Nutri-Score | $2.00 | you are here |
| Albert Heijn Scraper | Albert Heijn products: prices, Bonus deals, EAN, Nutri-Score | $1.00 | |
| Jumbo Scraper | Jumbo products: prices, deals with dates, EAN, organic, shelf life | $1.50 | |
| PLUS Scraper | PLUS products: prices, deals with dates, EAN, Nutri-Score, vegan | $1.50 | |
| DekaMarkt Scraper | DekaMarkt products: prices, next week's deals, EAN, organic | $2.00 | |
| Hoogvliet Scraper | Hoogvliet products: prices, next week's deals, EAN, ingredients, vegan | $2.00 | |
| Vomar Scraper | Vomar products: prices, every EAN barcode, BIO, categories | $1.00 | |
| Poiesz Scraper | Poiesz products: prices, deals with dates, EAN, deposit, ingredients | $1.50 | |
| Ekoplaza Scraper | Ekoplaza products: prices, next week's deals, EAN, allergens, Ekoscope | $2.00 | |
| Aldi NL Scraper | Aldi products: prices, next week's deals, special buys, seals | $1.00 |
All of them share the same output fields, so you can combine their datasets directly. The Aldi NL Scraper adds articleNumber, description, specialBuy, vegan, vegetarian, ageRestriction and priceDate, and has no barcodes; the Ekoplaza Scraper adds articleNumber, vegan, vegetarian, ekoscope, origin, shelfLifeDays, ageRestriction, soldByWeight, detailsDate, description, ingredients, allergens, mayContain, freeFrom, nutrition and priceDate; the Poiesz Scraper adds promoDescription, deposit, depositAmount, ageRestriction, alcoholPercentage, purchaseLimit, soldByWeight, detailsRead, detailsDate, ingredients, allergens, mayContain, freeFrom, nutrition and storage; the Vomar Scraper adds soldByWeight, and fills gtins with every barcode Vomar lists; the Hoogvliet Scraper adds promoDescription, vegan, vegetarian, shelfLifeDays, ageRestriction, soldByWeight, ingredients, nutrition, storage, origin, alcoholPercentage and priceDate; the DekaMarkt and Dirk Scrapers add soldByWeight and priceDate; PLUS adds vegan, vegetarian, deposit, storeOnly, detailsRead and detailsDate; Jumbo adds promotions and shelfLifeDays. Category ids are text on Jumbo, Dirk, DekaMarkt, Hoogvliet, Vomar, Poiesz, Ekoplaza and Aldi, numbers on Albert Heijn, and not given by PLUS.
Support for the Dirk Scraper
Questions, a missing field, or a custom pipeline on top of this data: write to Imad at imad@sleepmodesystems.com. Bugs go in the Issues tab of this actor.