# Jumbo Scraper (`sleepmodesystems/jumbo`) Actor

Jumbo product API alternative: all ~17,300 jumbo.com products with prices, unit prices, deals with start and end dates, EAN barcodes, organic flag and shelf life, in about a minute, no proxy. Every run checks its count against Jumbo's own total. Keyword and barcode search included.

- **URL**: https://apify.com/sleepmodesystems/jumbo.md
- **Developed by:** [Sleep Mode Systems](https://apify.com/sleepmodesystems) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

Jumbo Scraper extracts products from Jumbo (https://www.jumbo.com): prices, unit prices, deals (aanbiedingen) with start and end dates, EAN barcodes, organic flag, shelf life, badges, categories and stock status. It is the only Jumbo actor that reads the full catalog, and every run checks itself: it compares the products it read with Jumbo's own total and reports the result as `coverage`, which was 1 (17,272 of 17,272) in the last full run.

**Price: $1.50 per 1,000 products. A full run reads all 17,272 products in about 70 seconds on Apify, with no proxy.**

### What does the Jumbo Scraper extract?

| Data            | Fields                                                                         | Filled in last full run                                         |
| --------------- | ------------------------------------------------------------------------------ | --------------------------------------------------------------- |
| Identity        | `externalId`, `name`, `brand`, `ean`, `gtins`                                  | 100% id, name and brand, 99.8% barcode                          |
| Size            | `sizeText`, `packCount`, `quantity`, `unit`                                    | 94.6% size text, 100% parsed quantity and unit                  |
| Price           | `price`, `currency`, `unitPrice`, `unitPriceUnit`                              | 99.8% price, 98.9% unit price                                   |
| Deals           | `promoPrice`, `promoText`, `promoType`, `promoStart`, `promoEnd`, `promotions` | 11.2% of products had a deal (1,941), 10.6% with dates          |
| Product facts   | `organic`, `badges`, `shelfLifeDays`, `nutriScore`                             | 100% organic flag (775 organic), 28.3% badges, 15.5% shelf life |
| Category        | `categoryPath`, `categoryIds`, `category`                                      | 100%                                                            |
| Links and stock | `url`, `imageUrl`, `inStock`, `availabilityLabel`                              | 100% url and stock flag, 99.8% image, 2.1% availability note    |

Last full run: 2026-11-04, 17,272 products, 91 requests, all HTTP 200.

### Who uses the Jumbo Scraper?

- **Price comparison sites** load the full catalog and match it to Albert Heijn and other Dutch chains on `ean`.
- **Brand and category managers** follow their own and competing products' `price`, deals and presence at Jumbo per week.
- **Retail and market analysts** track Jumbo's prices, deal share and assortment across its 18 top-level categories.
- **Deal apps and folder sites** read this week's aanbiedingen with `promoStart`, `promoEnd` and the deal text.
- **Food and sustainability apps** filter on `organic`, `shelfLifeDays` and badges such as `Van dichtbij` (local) or `Bekroond` (award-winning).
- **Developers** who need a Jumbo product API without maintaining one call this actor from JavaScript, Python or REST.

### How much does the Jumbo 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.0015                                |
| Actor start                | $0.00005 per run at the default 512 MB |

#### Jumbo Scraper cost examples

| Scenario                                  | Products  | Cost        |
| ----------------------------------------- | --------- | ----------- |
| Small test, `maxItems: 100`               | 100       | $0.15       |
| Keyword search, `keywords: ["pindakaas"]` | 49        | $0.07       |
| Barcode lookup, 100 barcodes in one run   | up to 100 | up to $0.15 |
| Deals only, `onlyBonus: true`             | 1,941     | $2.91       |
| Full catalog                              | 17,272    | $25.91      |
| Full catalog every week, 4 runs a month   | 69,088    | $103.63     |

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 Jumbo Scraper?

| Field       | Type             | Default | Meaning                                                                     |
| ----------- | ---------------- | ------- | --------------------------------------------------------------------------- |
| `keywords`  | array of strings | empty   | Search for these words instead of reading the full catalog.                 |
| `eans`      | array of strings | empty   | Look up these barcodes instead of reading the full catalog, 8 to 14 digits. |
| `onlyBonus` | boolean          | `false` | Keep only products with a deal, in any mode.                                |
| `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 Jumbo catalog with the Jumbo Scraper?

Use it for a complete Jumbo product list: price monitoring, matching, or a weekly snapshot. Leave the input empty. The actor reads Jumbo's whole product list, 200 products per request, compares the count with Jumbo's own total, and reads the list once more if it came up short.

```json
{}
```

### How do you search Jumbo by keyword with the Jumbo Scraper?

Use it when you need a product group, not the whole store. One Jumbo search runs per keyword, with all result pages; `halfvolle melk` returned 44 products and `pindakaas` 49, one request each. Any number of keywords fits in one run.

```json
{
    "keywords": ["halfvolle melk", "pindakaas"]
}
```

### How do you look up Jumbo products by EAN barcode with the Jumbo 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: `8712800001386` and `08712800001386` find the same product. A barcode Jumbo does not sell gives no item and `expected: 0` in the run summary.

```json
{
    "eans": ["8712800001386", "4014071692718"]
}
```

### How do you get only Jumbo aanbiedingen with the Jumbo Scraper?

Use it to track deals. `onlyBonus` keeps products with a product deal and works with every mode. Delivery discounts (`bezorgkorting`) do not count. On the full catalog it still reads all products and stores those on a deal: 1,941 in the last run.

```json
{
    "onlyBonus": true
}
```

### Which fields does the Jumbo Scraper output?

Source: **Jumbo** = Jumbo'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 `jumbo`.                                                                                                                     |
| `store`             | Fixed   | Always `null`: webshop prices are national.                                                                                         |
| `externalId`        | Jumbo   | Jumbo product id, such as `293407STK`.                                                                                              |
| `ean`               | Jumbo   | Barcode as Jumbo lists it, mostly EAN-13.                                                                                           |
| `gtins`             | Derived | The barcode in a list, for the same field on other chains.                                                                          |
| `name`              | Jumbo   | Product name.                                                                                                                       |
| `brand`             | Jumbo   | Brand.                                                                                                                              |
| `sizeText`          | Jumbo   | Pack size as Jumbo states it, such as `4 x 75 g`; when Jumbo states none, the size at the end of the name.                          |
| `packCount`         | Derived | Units in a multipack, read from `sizeText`; 1 when not a multipack.                                                                 |
| `quantity`          | Derived | Size of one unit: `4 x 75 g` gives 75. From Jumbo's net content when there is no size text.                                         |
| `unit`              | Derived | Unit of `quantity`: `g`, `kg`, `ml`, `cl`, `l`, `stuk`, `wasbeurt`, and so on.                                                      |
| `price`             | Jumbo   | Regular price in EUR.                                                                                                               |
| `currency`          | Fixed   | Always `EUR`.                                                                                                                       |
| `unitPrice`         | Derived | Regular price per kg, litre, piece or wash load in EUR.                                                                             |
| `unitPriceUnit`     | Jumbo   | Unit of `unitPrice`: `kg`, `l`, `pieces` or `wb` (wash load).                                                                       |
| `promoPrice`        | Jumbo   | Price of one item on the deal, when Jumbo states one.                                                                               |
| `promoText`         | Jumbo   | The deal as shown, such as `1+1 gratis`, `2 voor 5,00` or `voor 4,99`.                                                              |
| `promoType`         | Jumbo   | Kind of deal: `Week` (weekly folder), `Seizoen` (seasonal) or `Nvt` (standing, such as Kies & Mix).                                 |
| `promoLabels`       | Fixed   | Always `null` on Jumbo; kept for the same field on other chains.                                                                    |
| `promoStart`        | Jumbo   | First day of the deal, `YYYY-MM-DD`.                                                                                                |
| `promoEnd`          | Jumbo   | Last day of the deal, `YYYY-MM-DD`.                                                                                                 |
| `promotions`        | Jumbo   | Every deal on the product: `id`, `type`, `text`, `title` (what it covers), `subtitle`, `start`, `end`, `kiesAndMix`, `maxQuantity`. |
| `organic`           | Derived | `true` when the product is in Jumbo's organic (biologisch) filter or its name says bio, biologisch or organic.                      |
| `nutriScore`        | Jumbo   | Always `null` today: Jumbo leaves it empty.                                                                                         |
| `badges`            | Jumbo   | Jumbo's badges, such as `Goedkoopje`, `10+ dagen houdbaar`, `Diepvries`, `Van dichtbij` or `Bekroond`.                              |
| `shelfLifeDays`     | Derived | Minimum days the product keeps, from the `houdbaar` badge.                                                                          |
| `categoryPath`      | Derived | Category path from top level to leaf, such as `Diepvries/IJs/Schepijs/Unieke smaken schepijs`.                                      |
| `categoryIds`       | Jumbo   | Jumbo category ids from top level to leaf.                                                                                          |
| `category`          | Jumbo   | Top-level category.                                                                                                                 |
| `url`               | Jumbo   | Product page on jumbo.com.                                                                                                          |
| `imageUrl`          | Jumbo   | Product image, 360 x 360 px.                                                                                                        |
| `inStock`           | Jumbo   | `true` when the product can be ordered online.                                                                                      |
| `availabilityLabel` | Jumbo   | Availability note, such as `Voorlopig niet leverbaar` or `Vanaf 2 dec leverbaar`.                                                   |
| `searchTerm`        | Input   | The keyword or barcode that found the product; `null` in full-catalog mode.                                                         |
| `scrapedAt`         | Fixed   | Time the product was read, ISO 8601.                                                                                                |

#### Jumbo Scraper output example

```json
{
    "chain": "jumbo",
    "store": null,
    "externalId": "351769CUP",
    "ean": "8711327371002",
    "gtins": ["8711327371002"],
    "name": "Ben & Jerry's IJs Half Baked 465 ml",
    "brand": "Ben & Jerry's",
    "sizeText": "406 g",
    "packCount": 1,
    "quantity": 406,
    "unit": "g",
    "price": 7.99,
    "currency": "EUR",
    "unitPrice": 17.18,
    "unitPriceUnit": "l",
    "promoPrice": 4.99,
    "promoText": "voor 4,99",
    "promoType": "Week",
    "promoLabels": null,
    "promoStart": "2026-11-04",
    "promoEnd": "2026-11-10",
    "promotions": [
        {
            "id": "3022153",
            "type": "Week",
            "text": "voor 4,99",
            "title": "Ben & Jerry's",
            "subtitle": "Alle bekers à 427-465 ml",
            "start": "2026-11-04",
            "end": "2026-11-10",
            "kiesAndMix": false,
            "maxQuantity": null
        }
    ],
    "organic": false,
    "nutriScore": null,
    "badges": ["Diepvries"],
    "shelfLifeDays": null,
    "categoryPath": "Diepvries/IJs/Schepijs/Unieke smaken schepijs",
    "categoryIds": ["SG6", "SG6HG3", "SG6HG4_1", "1562147214202"],
    "category": "Diepvries",
    "url": "https://www.jumbo.com/producten/ben-jerry-s-ijs-half-baked-465-ml-351769CUP",
    "imageUrl": "https://www.jumbo.com/dam-images/fit-in/360x360/Products/8711327371002_1790317843723_08711327371002_H1N1.png",
    "inStock": true,
    "availabilityLabel": null,
    "searchTerm": null,
    "scrapedAt": "2026-11-04T16:01:33.922Z"
}
```

### How does the Jumbo Scraper report on its run?

Every run saves a `SUMMARY` record in its key-value store. From the last full run:

```json
{
    "mode": "catalog",
    "itemsPushed": 17272,
    "distinctIds": 17272,
    "productsRead": 17272,
    "expectedTotal": 17272,
    "coverage": 1,
    "organicCount": 634,
    "stoppedAtChargeLimit": false,
    "blocked": false,
    "durationSec": 63,
    "requests": 91,
    "secondPassRequests": 0,
    "statusCodes": { "200": 91 },
    "errors": [],
    "retries": [],
    "categories": [{ "name": "Koek, snoep, chocolade en chips", "collected": 2021 }],
    "searches": []
}
```

| Field                              | Meaning                                                                                                      |
| ---------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| `itemsPushed`, `distinctIds`       | Products stored. Only products Apify accepted count.                                                         |
| `productsRead`                     | Distinct products read from Jumbo, including those left out by `onlyBonus`, `maxItems` or your charge limit. |
| `expectedTotal`                    | Jumbo's own product count. `null` in search mode.                                                            |
| `coverage`                         | `productsRead / expectedTotal`. `null` in search mode.                                                       |
| `organicCount`                     | Products in Jumbo's organic filter. `null` when the filter could not be read; `organic` is then `null`.      |
| `categories`                       | Products read per top-level category.                                                                        |
| `searches`                         | In search mode, Jumbo's count and the collected count per keyword or barcode.                                |
| `secondPassRequests`               | Requests spent re-reading a list that came up short.                                                         |
| `stoppedAtChargeLimit`             | `true` when the run stopped at your maximum charge.                                                          |
| `blocked`                          | `true` when Jumbo refused twice in a row (HTTP 403); the run then fails with the products it already had.    |
| `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 `coverage` is below 1 while `stoppedAtChargeLimit` is `false`, when `blocked` is `true`, when `statusCodes` holds anything other than 200, or when `organicCount` is `null`. Set `minItems` to make a bad run fail outright.

### How does the Jumbo Scraper compare to other Jumbo scrapers?

|                                          | Jumbo Scraper      | studio-amba/jumbo-scraper      | harvestedge/dutch-supermarkets-all-11 |
| ---------------------------------------- | ------------------ | ------------------------------ | ------------------------------------- |
| Price per 1,000                          | $1.50              | from $2.00, plus $0.02 per run | $5.00                                 |
| Full catalog                             | yes, default       | no, one keyword per run        | no, keyword search                    |
| Keywords per run                         | any number         | one                            | any number, on 11 chains              |
| Barcode lookup                           | yes, exact, `eans` | no                             | no                                    |
| EAN in output                            | yes                | yes                            | no                                    |
| Deal start and end dates                 | yes                | no                             | no                                    |
| Deal type, Kies & Mix                    | yes                | no                             | no                                    |
| Organic flag, shelf life, badges         | yes                | no                             | no                                    |
| Deals-only filter                        | yes                | no                             | no                                    |
| Completeness check against Jumbo's count | yes, every run     | no                             | no                                    |
| Proxy                                    | none needed        | NL residential, required       | not stated                            |

Figures read from each actor's public page on 2026-11-04.

### Things to know about Jumbo data from the Jumbo Scraper

- **Jumbo's deal week runs Wednesday to Tuesday.** In the run of Wednesday 2026-11-04, 887 products had a deal from Wednesday 4 to Tuesday 10 November, 440 to 17 November and 208 to 1 December.
- **`unitPrice` is the regular unit price.** On a deal Jumbo shows the deal unit price: Jumbo Wortelen 1 kg costs 1.39, on offer for 0.99, and Jumbo shows 0.99 per kg. The actor scales it back to 1.39, as for Albert Heijn. Divide `promoPrice` by the size for a deal unit price.
- **Most deals have no `promoPrice`.** Only 332 of 1,941 deals state one. Multi-buy deals such as `1+1 gratis` (447 products), `2e halve prijs` (242) or `2 voor 5,00` (130) leave the single price unchanged; the deal is in `promoText`.
- **Delivery discounts are left out.** Jumbo lists `€ 1,50 bezorgkorting` and similar on 333 products as promotions; they are no product deal, so they appear in no deal field and not with `onlyBonus`.
- **Some deals are campaigns.** 82 products carry `Extra spaarzegel spellen · Bij 2 stuks`, extra stamps, which Jumbo files as a weekly deal.
- **Standing deals have no dates.** 112 products have a Kies & Mix or other standing deal, with `promoStart` and `promoEnd` `null`.
- **43% of products have no pack size from Jumbo.** `sizeText` then holds the size at the end of the name. Jumbo's pack size can differ from the name: Ben & Jerry's Half Baked 465 ml has a pack size of 406 g.
- **Weighed products have in-store barcodes.** 405 products with an id ending in `KGR` are sold by approximate weight (`ca. 150 g`); 615 barcodes start with 2, a code for the shop, not a brand barcode.
- **26 products show a price of 0 on Jumbo.** Their `price` is `null`.
- **Organic is Jumbo's organic filter plus the product name.** Jumbo has no organic field, and its organic filter (634 products) misses products its own names call organic, such as Jumbo Biologische Zwarte Bonen. The actor adds those named bio, biologisch or organic: 141 more, 775 in all. Bin bags named biologisch (biodegradable) are left out. `organicCount` in the summary is the filter's own count.
- **Jumbo gives no Nutri-Score.** The field exists in Jumbo's API and is empty on every product, so `nutriScore` is always `null`.
- **`inStock` means orderable online.** 364 products could not be ordered: 335 `Voorlopig niet leverbaar`, 29 available from a later date.
- **Prices are national webshop prices.** `store` is always `null`.

### Is it legal to use the Jumbo Scraper?

This actor reads publicly available data only. Jumbo product data contains no personal data. It sends one request 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](https://blog.apify.com/is-web-scraping-legal/).

### Frequently asked questions about the Jumbo Scraper

#### Can I get Jumbo 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?

Jumbo's deals change every Wednesday. Run the full catalog once a week, on Wednesday, for that week's prices and aanbiedingen.

#### Does it need proxies?

No. Requests go straight from Apify to Jumbo, one at a time: a full catalog read from Apify got HTTP 200 on all 87 catalog requests. Where other Jumbo actors require a Dutch residential proxy, this one has no proxy cost at all. If Jumbo answers 403, the actor pauses 60 seconds and tries once more; a second 403 ends the run with `blocked: true` and the products it already had.

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

#### Is there an official Jumbo API?

No public one. Jumbo's webshop 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.

#### Can I get the Jumbo aanbiedingen of this week?

Yes. Run with `onlyBonus: true` on a Wednesday or later. Each deal carries `promoStart` and `promoEnd`; weekly folder deals have `promoType` `Week`.

#### Is there a downloadable list of all Jumbo products?

Each full run produces one: 17,272 products in the last run, with prices, barcodes and categories, downloadable as CSV, Excel or JSON. Schedule it weekly to keep it current.

#### Can I compare Jumbo prices with Albert Heijn?

Yes. The Albert Heijn Scraper by Sleep Mode Systems outputs the same fields. Match products on `ean` (Albert Heijn writes it with a leading zero, so compare without leading zeros), compare sizes with `packCount`, `quantity` and `unit`, and prices with `unitPrice`.

#### Which Jumbo products cannot be delivered?

Those with `inStock: false`. `availabilityLabel` says why: `Voorlopig niet leverbaar` (335 products) or `Vanaf <date> leverbaar` (29 products).

#### Does it cover Jumbo Belgium?

No. It reads the Dutch webshop (jumbo.com). Jumbo's Belgian site has not been tested.

### Other scrapers by Sleep Mode Systems

| Actor                                                                   | What it extracts                                                       | Price per 1,000 |              |
| ----------------------------------------------------------------------- | ---------------------------------------------------------------------- | --------------- | ------------ |
| Jumbo Scraper                                                           | Jumbo products: prices, deals with dates, EAN, organic                 | $1.50           | you are here |
| [Albert Heijn Scraper](https://apify.com/sleepmodesystems/albert-heijn) | Albert Heijn products: prices, Bonus deals, EAN, Nutri-Score           | $1.00           |              |
| [Dirk Scraper](https://apify.com/sleepmodesystems/dirk)                 | Dirk products: prices, next week's deals, EAN, Nutri-Score             | $2.00           |              |
| [PLUS Scraper](https://apify.com/sleepmodesystems/plus)                 | PLUS products: prices, deals with dates, EAN, Nutri-Score, vegan       | $1.50           |              |
| [DekaMarkt Scraper](https://apify.com/sleepmodesystems/dekamarkt)       | DekaMarkt products: prices, next week's deals, EAN, organic            | $2.00           |              |
| [Hoogvliet Scraper](https://apify.com/sleepmodesystems/hoogvliet)       | Hoogvliet products: prices, next week's deals, EAN, ingredients, vegan | $2.00           |              |
| [Vomar Scraper](https://apify.com/sleepmodesystems/vomar)               | Vomar products: prices, every EAN barcode, BIO, categories             | $1.00           |              |
| [Poiesz Scraper](https://apify.com/sleepmodesystems/poiesz)             | Poiesz products: prices, deals with dates, EAN, deposit, ingredients   | $1.50           |              |
| [Ekoplaza Scraper](https://apify.com/sleepmodesystems/ekoplaza)         | Ekoplaza products: prices, next week's deals, EAN, allergens, Ekoscope | $2.00           |              |
| [Aldi NL Scraper](https://apify.com/sleepmodesystems/aldi)              | 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 Jumbo 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.

# Actor input Schema

## `keywords` (type: `array`):

Search Jumbo for these words instead of reading the full catalog. One search per keyword, all result pages. Leave empty for the full catalog.

## `eans` (type: `array`):

Look up these barcodes instead of reading the full catalog, 8 to 14 digits. Leading zeros are optional. Leave empty for the full catalog.

## `onlyBonus` (type: `boolean`):

Keep only products with a deal (aanbieding), in full-catalog or search mode. Delivery discounts do not count as a deal.

## `maxItems` (type: `integer`):

Stop after this many distinct products. The full Jumbo catalog is about 17,300 products.

## `minItems` (type: `integer`):

Fail the run if fewer products were found.

## Actor input object example

```json
{
  "keywords": [],
  "eans": [],
  "onlyBonus": false,
  "maxItems": 100000,
  "minItems": 1
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `summary` (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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("sleepmodesystems/jumbo").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("sleepmodesystems/jumbo").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call sleepmodesystems/jumbo --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,sleepmodesystems/jumbo"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/6xx8NWiL0VzHNvvot/builds/oZUIcqfLLvLoFwZjm/openapi.json
