# Poiesz Scraper (`sleepmodesystems/poiesz`) Actor

Poiesz product API alternative: all ~9,700 Poiesz web shop products with price, unit price, EAN, deposit, this week's aanbiedingen with start and end dates, and on request ingredients, allergens and nutrition. Checked against Poiesz's own category totals. No proxy.

- **URL**: https://apify.com/sleepmodesystems/poiesz.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

Poiesz Scraper extracts products from the Poiesz web shop (https://webwinkel.poiesz-supermarkten.nl): prices, Poiesz's own unit prices, **this week's deals (aanbiedingen) with their start and end dates** and deal price, EAN barcodes, deposit (statiegeld), age checks and purchase limits, categories, and on request **ingredients, allergens, nutrition values and storage**. Every full run checks itself: it compares the products it read with the totals Poiesz gives for each of its 469 categories, and with this week's deals list. The last run read 9,729 of 9,729, and all 954 products of the deals list.

**Price: $1.50 per 1,000 products. A full run reads all 9,729 products in about 2.5 minutes on Apify, with no proxy.**

### What does the Poiesz Scraper extract?

| Data          | Fields                                                                                                        | Filled in last full run                                                 |
| ------------- | ------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| Identity      | `externalId`, `name`, `brand`, `ean`, `gtins`                                                                 | 100% id and name, 9,726 of 9,729 barcodes, 94.5% brand                  |
| Size          | `sizeText`, `quantity`, `unit`                                                                                | 100% size text, 9,725 as a number                                       |
| Price         | `price`, `currency`, `unitPrice`, `unitPriceUnit`                                                             | 100% price, 95.8% unit price                                            |
| Deals         | `promoPrice`, `promoText`, `promoType`, `promoStart`, `promoEnd`, `promoDescription`                          | 1,144 products on a deal (11.8%); 954 with dates; 484 with a deal price |
| Labels        | `deposit`, `depositAmount`, `ageRestriction`, `alcoholPercentage`, `purchaseLimit`, `soldByWeight`, `organic` | 590 with deposit, 387 with an age check, 220 by weight, 253 organic     |
| Product facts | `ingredients`, `allergens`, `mayContain`, `freeFrom`, `nutrition`, `storage` (with `withDetails`)             | 71.9% ingredients, 43.2% allergens, 60.2% nutrition, 69.1% storage      |
| Category      | `categoryPath`, `categoryIds`, `category`                                                                     | 100%                                                                    |
| Links         | `url`, `imageUrl`                                                                                             | 100% product page, 99.6% image                                          |
| Run           | `searchTerm`, `scrapedAt`                                                                                     | 100%                                                                    |

Last full run: 2026-11-05 on Apify, 9,729 products in 143 seconds, 667 requests, all HTTP 200. Product facts are from the full run with `withDetails` the same day.

### Who uses the Poiesz Scraper?

- **Price comparison sites** load the full Poiesz assortment and match it to Albert Heijn, Jumbo, Dirk, PLUS, DekaMarkt, Hoogvliet and Vomar on `ean`.
- **Deal and folder apps** publish Poiesz's aanbiedingen of this week with their start and end dates, every Sunday, with `onlyBonus`.
- **Food, diet and allergy apps** read `ingredients`, `allergens`, `mayContain`, `freeFrom` and `nutrition` of 7,885 products with at least one product fact.
- **Brand and category managers** in the north of the Netherlands follow their products' price, deals and unit price at Poiesz week by week.
- **Retail and market analysts** track a regional chain's prices, its own brands (`G'woon` 1,231 products, `POIESZ` and `Poiesz` 480) and its deal share.
- **Drinks suppliers** follow beer, wine and spirits prices with deposit and alcohol percentage: 398 products with alcohol.
- **Developers** who need a Poiesz product API without maintaining one call this actor from JavaScript, Python or REST.

### How much does the Poiesz 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 |

Product details (`withDetails`) cost nothing extra: the price is per product either way.

#### Poiesz Scraper cost examples

| Scenario                                | Products  | Cost        |
| --------------------------------------- | --------- | ----------- |
| Small test, `maxItems: 100`             | 100       | $0.15       |
| Keyword search, `keywords: ["bier"]`    | 204       | $0.31       |
| Barcode lookup, 100 barcodes in one run | up to 100 | up to $0.15 |
| This week's deals, `onlyBonus: true`    | 1,144     | $1.72       |
| Full catalog                            | 9,729     | $14.59      |
| Full catalog every week, 4 runs a month | 38,916    | $58.37      |

Product counts are from runs on 2026-11-05. 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. With `withDetails`, it reads details only for the products it can still store.

### How do you configure the Poiesz Scraper?

| Field          | Type             | Default | Meaning                                                                                             |
| -------------- | ---------------- | ------- | --------------------------------------------------------------------------------------------------- |
| `keywords`     | array of strings | empty   | Search for these words instead of reading the full catalog, every result.                           |
| `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.                                                          |
| `withDetails`  | boolean          | `false` | Add each product's ingredients, allergens, nutrition and storage, from the actor's details file.    |
| `freshDetails` | boolean          | `false` | With `withDetails`: read every product's details live from Poiesz instead of the file.              |
| `maxItems`     | integer          | 100000  | Stop after this many products; a smaller catalog read also stops reading early (500 in 11 seconds). |
| `minItems`     | integer          | 1       | Fail the run when it stores fewer products: a guard for scheduled runs.                             |

### How do you scrape the full Poiesz assortment with the Poiesz Scraper?

Leave every field empty. The actor reads Poiesz's category tree, this week's deals list and all 469 leaf categories, 24 products a page: 667 requests and about 2.5 minutes on Apify for 9,729 products.

```json
{}
```

### How do you get this week's Poiesz aanbiedingen with the Poiesz Scraper?

Set `onlyBonus`. The actor reads the full catalog and keeps the 1,144 products on a deal (run of 2026-11-05). The 954 products of Poiesz's weekly deals list get `promoStart` and `promoEnd`: 2026-11-01 to 2026-11-07, Sunday to Saturday, as Poiesz writes "Geldig van 1 november tot en met 7 november 2026". The other 190 are deals of the web shop outside that list, without dates.

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

### How do you get ingredients, allergens and nutrition with the Poiesz Scraper?

Set `withDetails` in any mode. Every product then carries its ingredients (71.9% of products), allergens (43.2% contains, 19.1% may contain, 4.5% free from), nutrition per 100 gram or 100 ml (60.2%) and storage (69.1%). Poiesz gives details only one product at a time, so the actor ships with a details file read in one full run (`detailsDate`, 2026-11-05 for the current file) and reads live only the products the file does not know, such as new ones, 4 at a time. A full run with details takes as long as one without: 98 seconds against 94 in local runs, instead of about 21 minutes to read every detail live. Set `freshDetails` as well to read every product's details from Poiesz now: about 21 minutes on Apify for the full catalog (9,729 details, 10,396 requests, all HTTP 200), seconds on a search.

```json
{
    "keywords": ["pindakaas"],
    "withDetails": true
}
```

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

Give one or more words. The actor runs Poiesz's own search and pages through every result, 1,000 at a time: `bier` found 204 products, `kaas` 212, `melk` 124, `g'woon` 1,159. Each product is stored once, under the first keyword that found it (`searchTerm`).

```json
{
    "keywords": ["bier", "pindakaas"]
}
```

### How do you look up Poiesz products by EAN barcode with the Poiesz Scraper?

Give a list of barcodes; leading zeros are optional. Poiesz's search does not match barcodes, so the actor reads the catalog and stops as soon as every barcode is found: 3 barcodes took 268 requests and 33 seconds. A barcode Poiesz does not sell is reported in the run summary with `expected: 0`, after the whole catalog was read, and costs nothing.

```json
{
    "eans": ["8710624300715", "08710956101158", "2143670000000"]
}
```

### Which fields does the Poiesz Scraper output?

Source: **Poiesz** = Poiesz's value unchanged. **Derived** = computed by this actor. **Fixed** = same in every item. Missing values are `null`, never an empty string.

| Field               | Source  | Meaning                                                                                               |
| ------------------- | ------- | ----------------------------------------------------------------------------------------------------- |
| `chain`             | Fixed   | Always `poiesz`.                                                                                      |
| `store`             | Fixed   | Always `null`: the web shop's prices, the same in the stores sampled.                                 |
| `externalId`        | Poiesz  | Poiesz's article number, as text.                                                                     |
| `ean`               | Poiesz  | Barcode: EAN-13 on most products; codes starting with 2 are for products weighed in store.            |
| `gtins`             | Poiesz  | The barcode as a one-element list. Kept for the same field on other chains.                           |
| `name`              | Poiesz  | Product name as the web shop shows it.                                                                |
| `brand`             | Poiesz  | Brand as Poiesz writes it: `G'woon`, `POIESZ`, `Bio+`.                                                |
| `sizeText`          | Derived | Size as text: `500 gram`, `7200 milliliter`, `6 stuks`.                                               |
| `packCount`         | Fixed   | Always `null` on Poiesz. Kept for the same field on other chains.                                     |
| `quantity`          | Derived | Size as a number, in `unit`; centilitres become ml.                                                   |
| `unit`              | Derived | `g`, `kg`, `ml`, `l`, `stuk`, `m` or `cm`.                                                            |
| `price`             | Poiesz  | Regular price in EUR; during a price deal, the price before the deal (Poiesz's strike-through price). |
| `currency`          | Fixed   | Always `EUR`.                                                                                         |
| `unitPrice`         | Poiesz  | Regular price per kg, litre or metre as Poiesz gives it, or per piece (computed), in EUR.             |
| `unitPriceUnit`     | Derived | `kg`, `l`, `m` or `stuk`.                                                                             |
| `promoPrice`        | Derived | Deal price per pack in EUR; `null` for multi-buy and weight deals, and without a deal.                |
| `promoText`         | Poiesz  | Poiesz's deal label: `aanbieding`, `2 voor 3.00`, `1+1 gratis`, `25% korting: 4.39`.                  |
| `promoType`         | Derived | `price`, `multibuy` or `percentage`, from the label.                                                  |
| `promoLabels`       | Fixed   | Always `null` on Poiesz. Kept for the same field on other chains.                                     |
| `promoStart`        | Poiesz  | First day of the deal (YYYY-MM-DD), for deals in the weekly deals list.                               |
| `promoEnd`          | Poiesz  | Last day of the deal, inclusive.                                                                      |
| `promoDescription`  | Poiesz  | The deals list's own text, such as `schaal à 500 gram`.                                               |
| `organic`           | Derived | `true` when the name or brand says biologisch, Bio+ or bio, on food. Poiesz gives no organic label.   |
| `nutriScore`        | Fixed   | Always `null`: Poiesz gives none.                                                                     |
| `badges`            | Fixed   | Always `null` on Poiesz.                                                                              |
| `deposit`           | Derived | `true` when the product carries a deposit (statiegeld).                                               |
| `depositAmount`     | Poiesz  | Deposit in EUR, on top of `price`.                                                                    |
| `ageRestriction`    | Derived | `18` for products that need an age check; otherwise `null`.                                           |
| `alcoholPercentage` | Poiesz  | Alcohol percentage, when above 0.                                                                     |
| `purchaseLimit`     | Poiesz  | Most units one order may hold, when Poiesz sets a limit.                                              |
| `soldByWeight`      | Poiesz  | `true` for weighed products: the price is for the weight in `sizeText`.                               |
| `detailsRead`       | Derived | `true` when the product's details are known, from the details file or read live.                      |
| `detailsDate`       | Derived | Date the details were read: the details file's date, or the run's date when read live.                |
| `ingredients`       | Poiesz  | Ingredients text, with `withDetails`.                                                                 |
| `allergens`         | Poiesz  | Allergens the product contains (Bevat), with `withDetails`.                                           |
| `mayContain`        | Poiesz  | Allergens it may contain (Kan bevatten), with `withDetails`.                                          |
| `freeFrom`          | Poiesz  | Allergens it is free from (Vrij van), with `withDetails`.                                             |
| `nutrition`         | Poiesz  | `per` (`100 gram`, `100 ml`) and `values`, a list of `name` and `value`, with `withDetails`.          |
| `storage`           | Poiesz  | Storage instructions, with `withDetails`.                                                             |
| `categoryPath`      | Poiesz  | Category, sub-category and leaf, joined with `/`.                                                     |
| `categoryIds`       | Poiesz  | Poiesz's ids of the three levels, as text.                                                            |
| `category`          | Poiesz  | Top category, one of 25.                                                                              |
| `url`               | Derived | Product page in the web shop.                                                                         |
| `imageUrl`          | Poiesz  | Product image.                                                                                        |
| `inStock`           | Fixed   | Always `null`: the web shop gives no stock.                                                           |
| `availabilityLabel` | Fixed   | Always `null` on Poiesz.                                                                              |
| `searchTerm`        | Derived | Keyword or barcode that found the product; `null` in a full catalog run.                              |
| `scrapedAt`         | Derived | When the product was read (ISO 8601, UTC).                                                            |

#### Poiesz Scraper output example

Amstel Blik, from the full run with `withDetails` of 2026-11-05: a 25% deal with its dates, a 0.90 deposit and an age check.

```json
{
    "chain": "poiesz",
    "store": null,
    "externalId": "234166",
    "ean": "8712000059026",
    "gtins": ["8712000059026"],
    "name": "Amstel Blik",
    "brand": "Amstel",
    "sizeText": "6 stuks",
    "packCount": null,
    "quantity": 6,
    "unit": "stuk",
    "price": 5.85,
    "currency": "EUR",
    "unitPrice": 2.95,
    "unitPriceUnit": "l",
    "promoPrice": 4.39,
    "promoText": "25% korting: 4.39",
    "promoType": "percentage",
    "promoLabels": null,
    "promoStart": "2026-11-01",
    "promoEnd": "2026-11-07",
    "promoDescription": null,
    "organic": false,
    "nutriScore": null,
    "badges": null,
    "deposit": true,
    "depositAmount": 0.9,
    "ageRestriction": 18,
    "alcoholPercentage": 5,
    "purchaseLimit": null,
    "soldByWeight": false,
    "detailsRead": true,
    "detailsDate": "2026-11-05",
    "ingredients": "water, GERSTEMOUT, hop, hopextract",
    "allergens": ["Glutenbevattende granen", "Gerst en gerstproducten (glutenbevattend graan)"],
    "mayContain": null,
    "freeFrom": null,
    "nutrition": {
        "per": "100 ml",
        "values": [
            { "name": "Koolhydraten", "value": "3.1 gram" },
            { "name": "Energie", "value": "41 kcal" },
            { "name": "Energie", "value": "173 kJ" },
            { "name": "Vetzuren, totaal verzadigd", "value": "0 gram" },
            { "name": "Vetten", "value": "0 gram" },
            { "name": "Eiwitten", "value": "0 gram" },
            { "name": "Zout", "value": "0.01 gram" },
            { "name": "Suikers", "value": "0 gram" }
        ]
    },
    "storage": "Koel en donker bewaren",
    "categoryPath": "Bier/Pilsener/Pilsener blik",
    "categoryIds": ["111", "101", "102"],
    "category": "Bier",
    "url": "https://webwinkel.poiesz-supermarkten.nl/boodschappen/producten/234166",
    "imageUrl": "https://images.poiesz-supermarkten.nl/artikelen/234166.png",
    "inStock": null,
    "availabilityLabel": null,
    "searchTerm": null,
    "scrapedAt": "2026-11-05T17:13:56.069Z"
}
```

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

Every run saves a `SUMMARY` record in its key-value store. From the full run of 2026-11-05, with the 25 categories shortened to 2:

```json
{
    "mode": "catalog",
    "onlyBonus": false,
    "withDetails": false,
    "freshDetails": false,
    "itemsPushed": 9729,
    "distinctIds": 9729,
    "productsRead": 9729,
    "leafTotal": 9729,
    "dealsWeek": { "from": "2026-11-01", "to": "2026-11-07" },
    "dealsListed": 954,
    "dealsListedMissing": 0,
    "dealsOutsideList": 190,
    "barcodesMissing": 3,
    "detailsRead": 0,
    "detailsFromFile": 0,
    "detailsFileDate": null,
    "detailsFailed": 0,
    "stoppedAtChargeLimit": false,
    "blocked": false,
    "eanCatalogScan": false,
    "durationSec": 143,
    "requests": 667,
    "statusCodes": { "200": 667 },
    "errors": [],
    "retries": [],
    "categories": [
        { "id": 101, "name": "Aardappelen, groente & fruit", "expected": 365, "collected": 365 },
        { "id": 111, "name": "Bier", "expected": 203, "collected": 203 }
    ],
    "searches": []
}
```

A run is suspect when `productsRead` is below `leafTotal` (the sum of Poiesz's own category totals), when `dealsListedMissing` is above 0 (products of the weekly deals list not found in the categories), when `blocked` is `true`, or when `errors` or `detailsFailed` are not empty. In a search, each keyword and barcode is listed in `searches` with what Poiesz returned (`expected`) and what was stored (`collected`). Set `minItems` to make a bad run fail outright.

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

|                                   | Poiesz Scraper                                       | harvestedge Dutch Supermarkets (all 11) |
| --------------------------------- | ---------------------------------------------------- | --------------------------------------- |
| Price per 1,000                   | $1.50                                                | $5.00                                   |
| Full catalog                      | yes, 9,729 products, checked against Poiesz's totals | no, keyword search                      |
| Deals with start and end dates    | yes                                                  | no                                      |
| EAN barcode and lookup            | yes                                                  | no                                      |
| Unit price, deposit, age check    | yes                                                  | no                                      |
| Ingredients, allergens, nutrition | yes, with `withDetails`                              | no                                      |
| Category tree                     | yes, 3 levels                                        | no                                      |
| Fields                            | 47                                                   | price, product, url, size               |
| Run summary                       | yes                                                  | no                                      |

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

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

- **It is the web shop's assortment.** Poiesz writes that its online assortment can differ from the stores'. Store-only deals are in Poiesz's printed folder. Prices were the same for the stores sampled (1, 13 and 37), so `store` is `null`.
- **Two kinds of deals.** 954 products are in Poiesz's weekly deals list and carry its dates. 190 more carry a deal in the web shop without being in that list: they have the deal without dates. Labels without Poiesz's deal flag are not shown on the website (171, such as Bananen "1 kilo 1.25"), so the actor gives no deal for them.
- **Deal prices follow the shop.** With a strike-through price, the price shown is the deal price and `price` is the strike-through one. `25% korting: 4.39` labels carry the shop's own deal price, which is used. Against the deals list's own prices, 325 of 327 per-item deals agree; on the other 2 the actor gives the price the web shop charges.
- **Multi-buy and weight deals have no single deal price.** `2 voor 3.00`, `1+1 gratis`, `2e halve prijs` and `500 gram 6.00` keep `promoPrice` at `null`, with the label in `promoText`: 659 multi-buy deals in the last run.
- **Deal-only products.** On 58 products the strike-through price equals the price, such as The Bread Office sandwiches "per stuk 3.00": Poiesz shows no regular price for them, so `price` and `promoPrice` are equal.
- **Poiesz's own unit prices.** `unitPrice` is the one Poiesz shows, and follows drained weight where Poiesz uses it: Kramer zuurkool, 520 gram for 0.79, is 1.58 per kg. Poiesz gives no price per piece, so the actor computes it: 4 Pink Lady apples for 3.49 are 0.87 a piece. Spices reach real unit prices above 1,000 per kg, such as Verstegen Saffraan, 0.05 gram for 1.79.
- **Deposit comes on top.** A Hertog Jan crate is 21.32 plus 3.90 deposit, and 2.96 per litre is computed without the deposit.
- **Weighed products.** For the 220 products with `soldByWeight`, the price is for the weight in `sizeText`: Kanzi apples, 500 gram for 1.74 at 3.49 per kg.
- **Organic is read from the name.** Poiesz gives no organic label, so `organic` is set from biologisch, Bio+ or bio in the name or brand, except in household, pet and drugstore groups, where "bio" means biobased cling film.
- **Details come from a file, dated.** With `withDetails`, ingredients, allergens, nutrition and storage come from the details file the actor ships with, read in one full run on 2026-11-05 (`detailsDate`). Products the file does not know are read live in the run. `freshDetails` reads them all live.
- **One barcode per product.** 3 products have none. Barcodes starting with 2 are Poiesz's codes for products weighed in store.
- **No Nutri-Score, stock or quality marks.** Poiesz's data holds none; those fields stay `null`.

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

This actor reads publicly available data only. It collects product data, not personal data. It respects rate limits 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 Poiesz Scraper

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

Poiesz's deals change every Sunday, and run Sunday to Saturday. A run each Sunday keeps a deal list current; a daily or weekly run follows price changes.

#### Does it need proxies?

No. The actor reads Poiesz's web shop API directly, one request at a time and 4 at a time for live details, with no proxy: 10,396 requests in the run that read every detail live, all HTTP 200.

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

#### What are the Poiesz aanbiedingen this week?

Run the actor with `onlyBonus`: on 2026-11-05 it returned 1,144 products on a deal, 954 of them in the weekly deals list valid from 1 to 7 November 2026, with `promoStart` and `promoEnd`.

#### Can I get the Poiesz aanbiedingen of next week?

No. Poiesz's web shop publishes this week's deals only, so the actor gives this week's. Run it on Sunday for the new week.

#### Can I get Poiesz's beer deals?

Yes. Search `bier` with `onlyBonus`, or filter the full catalog on `category` `Bier`, which held 203 products in the last run. Deposit and alcohol percentage come with each beer.

#### Can I get Poiesz's gluten-free or lactose-free products?

Yes, two ways. Poiesz's Bewuste voeding category has Glutenvrij (52 products) and Lactose- en glutenvrij (29) groups: filter the full catalog on `categoryPath`. With `withDetails`, `freeFrom` lists what a product is free from: 381 products free from gluten, 196 from lactose in the last run.

#### Does it give ingredients and allergens?

Yes, with `withDetails`: ingredients on 6,998 products, allergens on 4,202, may-contain allergens on 1,856 and nutrition on 5,857 in the last full run. They come from the actor's details file, dated in `detailsDate` and refreshed with new releases of the actor; products new since then are read live. Set `freshDetails` for details read today for every product.

#### How fresh are the ingredients and allergens?

As fresh as `detailsDate`: the date of the actor's details file (2026-11-05 now), or the run's date for products read live. Recipes and allergens change rarely, but they do change: when you need today's values, for an allergy app for instance, set `freshDetails` and the actor reads every product's details from Poiesz in the run.

#### Is there an official Poiesz API?

Poiesz offers no public API. This actor reads the product API behind the web shop, so it gives the same prices and deals as webwinkel.poiesz-supermarkten.nl.

#### Can I compare Poiesz prices with Albert Heijn, Jumbo, Dirk, PLUS, DekaMarkt, Hoogvliet and Vomar?

Yes. The scrapers for those chains 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`.

### Other scrapers by Sleep Mode Systems

| Actor                                                                   | What it extracts                                                       | Price per 1,000 |              |
| ----------------------------------------------------------------------- | ---------------------------------------------------------------------- | --------------- | ------------ |
| Poiesz Scraper                                                          | Poiesz products: prices, deals with dates, EAN, deposit, ingredients   | $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           |              |
| [Jumbo Scraper](https://apify.com/sleepmodesystems/jumbo)               | Jumbo products: prices, deals with dates, EAN, organic, shelf life     | $1.50           |              |
| [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           |              |
| [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 Poiesz 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 the Poiesz web shop for these words instead of reading the full catalog. Every match is returned, not only the first page. Leave empty for the full catalog.

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

Look up these barcodes instead of reading the full catalog. Poiesz's search does not match barcodes, so the actor reads the catalog (about a minute) and matches them. Leading zeros are optional.

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

Keep only products on a deal (aanbieding) this week, in any mode: the folder deals with their dates, and the web shop's other deals.

## `withDetails` (type: `boolean`):

Add each product's ingredients, allergens (contains, may contain, free from), nutrition per 100 g or ml, and storage. They come from the details file shipped with the actor, read in one full run (date in detailsDate); products the file does not know, such as new ones, are read live. A full run with details takes about 2.5 minutes.

## `freshDetails` (type: `boolean`):

With withDetails: ignore the details file and read every product's details from Poiesz now, one request per product, 4 at a time. Use it when you need today's ingredients and allergens for every product: about 21 minutes on the full catalog, seconds on a search.

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

Stop after this many products. The full Poiesz web shop catalog is about 9,700 products.

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

Fail the run if fewer products were found.

## Actor input object example

```json
{
  "keywords": [],
  "eans": [],
  "onlyBonus": false,
  "withDetails": false,
  "freshDetails": 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/poiesz").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/poiesz").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/poiesz --silent --output-dataset

```

## MCP server setup

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

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/5hScHtiiLfHG9I686/builds/Nnjz5nO4pbequCx3M/openapi.json
