# Ekoplaza Scraper (`sleepmodesystems/ekoplaza`) Actor

Ekoplaza product API alternative: all ~5,900 ekoplaza.nl organic products with price, unit price, EAN, this week's and next week's aanbiedingen with dates and deal price, ingredients, allergens, nutrition, vegan, Ekoscope score and certifications. Checked against Ekoplaza's own total. No proxy.

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

Ekoplaza Scraper extracts products from Ekoplaza, the organic supermarket (https://www.ekoplaza.nl): prices, unit prices, **this week's and next week's deals (aanbiedingen) with their dates and deal price**, an EAN barcode on every product, **full ingredients, allergens in three levels, nutrition**, vegan, vegetarian, organic certifications, country of origin and Ekoplaza's own Ekoscope score. Every full run checks itself against Ekoplaza's own product total: the last run read 5,937 of 5,937.

**Price: $2.00 per 1,000 products. A full run reads all 5,937 products in 40 seconds to 2.5 minutes on Apify, with no proxy.**

### What does the Ekoplaza Scraper extract?

| Data          | Fields                                                                             | Filled in last full run                                              |
| ------------- | ---------------------------------------------------------------------------------- | -------------------------------------------------------------------- |
| Identity      | `externalId`, `articleNumber`, `name`, `brand`, `ean`, `gtins`                     | 100% id, name and barcode, 98.5% brand                               |
| Size          | `sizeText`, `quantity`, `unit`                                                     | 5,936 of 5,937                                                       |
| Price         | `price`, `currency`, `unitPrice`, `unitPriceUnit`                                  | 100% price, 5,936 unit prices                                        |
| Deals         | `promoPrice`, `promoText`, `promoType`, `promoStart`, `promoEnd`                   | 558 deals this week (9.4%), all with dates; 413 with a deal price    |
| Labels        | `organic`, `vegan`, `vegetarian`, `ekoscope`, `badges`, `origin`, `ageRestriction` | 4,822 organic, 4,354 vegan, 5,072 vegetarian, 4,483 Ekoscope scores  |
| Product facts | `description`, `ingredients`, `allergens`, `mayContain`, `freeFrom`, `nutrition`   | 99.9% ingredients, 50.4% allergens, 84.3% free-from, 74.7% nutrition |
| Category      | `categoryPath`, `categoryIds`, `category`                                          | 100%, up to 3 levels                                                 |
| Links, stock  | `url`, `imageUrl`, `inStock`, `availabilityLabel`                                  | 100% url and stock code, 99.3% image                                 |
| Run           | `priceDate`, `detailsDate`, `searchTerm`, `scrapedAt`                              | 100%                                                                 |

Last full run: 2026-11-05, 5,937 products in 13 requests, all HTTP 200; on Apify the same read took 39 seconds in one run and 144 seconds in another, as Ekoplaza's search speed varies.

### Who uses the Ekoplaza Scraper?

- **Price comparison sites** add Ekoplaza's organic range to Albert Heijn, Jumbo, Dirk, PLUS, DekaMarkt, Hoogvliet, Vomar and Poiesz, matched on `ean`.
- **Deal and folder apps** publish Ekoplaza's aanbiedingen of this week and, with `nextWeek`, of next week before it starts.
- **Allergy and diet apps** read `allergens`, `mayContain` and `freeFrom` (24 allergens per product), full `ingredients`, `nutrition`, `vegan` and `vegetarian`.
- **Organic brands** follow their products' price, deals and Ekoscope score at the largest Dutch organic chain.
- **Sustainability researchers** compare Ekoscope scores, certifications (EU-BIO, Demeter, Fair Trade) and `origin` across 5,937 products.
- **Market analysts** track an organic chain's prices and deal share week by week.
- **Developers** who need an Ekoplaza product API without maintaining one call this actor from JavaScript, Python or REST.

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

#### Ekoplaza Scraper cost examples

| Scenario                                      | Products | Cost   |
| --------------------------------------------- | -------- | ------ |
| Small test, `maxItems: 100`                   | 100      | $0.20  |
| Keyword search, `keywords: ["glutenvrij"]`    | 129      | $0.26  |
| Next week's deals, `nextWeek` and `onlyBonus` | 467      | $0.93  |
| This week's deals, `onlyBonus: true`          | 558      | $1.12  |
| Full catalog                                  | 5,937    | $11.87 |
| Full catalog every week, 4 runs a month       | 23,748   | $47.50 |

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.

### How do you configure the Ekoplaza 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.                                                  |
| `nextWeek`     | boolean          | `false` | Prices and deals as on the coming Wednesday, when Ekoplaza's deal week starts.              |
| `freshDetails` | boolean          | `false` | Read every product's barcode, ingredients, allergens and nutrition live, not from the file. |
| `maxItems`     | integer          | 100000  | Stop after this many products; a smaller catalog read also stops reading early.             |
| `minItems`     | integer          | 1       | Fail the run when it stores fewer products: a guard for scheduled runs.                     |

### How do you scrape the full Ekoplaza assortiment with the Ekoplaza Scraper?

Leave every field empty. The actor reads Ekoplaza's category tree and its whole catalog, 500 products a request: 13 requests for 5,937 products, between 40 seconds and 2.5 minutes on Apify.

```json
{}
```

### How do you get the Ekoplaza aanbiedingen of this week with the Ekoplaza Scraper?

Set `onlyBonus`. The run of 2026-11-05 returned 558 deals: 413 VAN-VOOR ACTIE deals with a lower price, 18.6% off on average and up to 30%, plus 144 multi-buys such as 2DE HALVE PRIJS (89) and 2 VOOR 6.00 (35). Ekoplaza's deal week runs Wednesday to Tuesday: `promoStart` 2026-11-04, `promoEnd` 2026-11-10.

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

### How do you get the Ekoplaza aanbiedingen of next week with the Ekoplaza Scraper?

Set `nextWeek`, and `onlyBonus` for the deals only. Ekoplaza puts next week's deals online during the current week; the actor reads them and each deal's price. The run of Thursday 2026-11-05 returned 467 deals for Wednesday 2026-11-11: 431 VAN-VOOR ACTIE deals from 11 to 17 November with their deal price, 19.6% off on average and up to 50% (Kaki, 4.77, next week 3.75), plus 36 deals that keep running. That is 500 requests and about 3 minutes. `priceDate` shows the day the prices hold for.

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

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

Give one or more words. The actor runs Ekoplaza's search and pages through every result: `glutenvrij` found 129 products in 2 requests. Ekoplaza's search is broad: `vegan` matches 5,162 of 5,937 products, so for vegan products run the full catalog and filter on `vegan`.

```json
{
    "keywords": ["glutenvrij", "havermout"]
}
```

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

Give a list of barcodes; leading zeros are optional. Ekoplaza's search does not match barcodes, so the actor reads the catalog (13 requests) and matches the barcode of every product: 3 of 3 found in the run of 2026-11-05. A barcode Ekoplaza does not sell is reported in the run summary with `expected: 0` and costs nothing.

```json
{
    "eans": ["8711521118229", "08721055374541", "8721225230868"]
}
```

### Where do the ingredients and allergens of the Ekoplaza Scraper come from?

Ekoplaza gives a product's barcode, ingredients, allergens and nutrition only in its full product record, 200 products a request at about 55 milliseconds a product. The actor ships with a details file of every product, read in one full run (`detailsDate`, 2026-11-05 for the current file: 5,937 products), and reads live only the products the file does not know, such as new ones. So a full run with every detail takes no longer than one without.

Set `freshDetails` to read every product's details from Ekoplaza in the run: 49 more requests, 2 to 7 minutes on the full catalog. Use it when you need today's ingredients and allergens for every product.

```json
{
    "freshDetails": true
}
```

### Which fields does the Ekoplaza Scraper output?

Source: **Ekoplaza** = Ekoplaza'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 `ekoplaza`.                                                                      |
| `store`             | Fixed    | Always `null`: the web shop's prices.                                                   |
| `externalId`        | Ekoplaza | Ekoplaza's product id, as text.                                                         |
| `articleNumber`     | Ekoplaza | Ekoplaza's article number, such as `0001232834`.                                        |
| `ean`               | Ekoplaza | Barcode: EAN-13 on 5,826 products, UPC-A on 72, EAN-8 on 39.                            |
| `gtins`             | Ekoplaza | The barcode as a one-element list. Kept for the same field on other chains.             |
| `name`              | Ekoplaza | Product name as the web shop shows it.                                                  |
| `brand`             | Ekoplaza | Brand; `null` where Ekoplaza lists none.                                                |
| `sizeText`          | Ekoplaza | Size as Ekoplaza gives it: `80 Gram`, `75 cl`, `3 stuks`.                               |
| `packCount`         | Fixed    | Always `null` on Ekoplaza.                                                              |
| `quantity`          | Derived  | Size as a number, in `unit`; centilitres become ml.                                     |
| `unit`              | Derived  | `g`, `kg`, `ml`, `l` or `stuk`.                                                         |
| `price`             | Ekoplaza | Regular price in EUR.                                                                   |
| `currency`          | Fixed    | Always `EUR`.                                                                           |
| `unitPrice`         | Derived  | Regular price per kg, litre or piece, computed from price and size.                     |
| `unitPriceUnit`     | Derived  | `kg`, `l` or `stuk`.                                                                    |
| `promoPrice`        | Ekoplaza | Deal price of a VAN-VOOR ACTIE in EUR; `null` for multi-buys and without a deal.        |
| `promoText`         | Ekoplaza | Ekoplaza's deal name: `VAN-VOOR ACTIE`, `2DE HALVE PRIJS`, `2 VOOR 6.00`, `2+1 GRATIS`. |
| `promoType`         | Derived  | `price` or `multibuy`, from the deal name.                                              |
| `promoLabels`       | Fixed    | Always `null` on Ekoplaza.                                                              |
| `promoStart`        | Ekoplaza | First day of the deal (YYYY-MM-DD).                                                     |
| `promoEnd`          | Ekoplaza | Last day of the deal, inclusive; `null` for deals without an end.                       |
| `organic`           | Derived  | `true` with an organic certification (Biologisch, Bio-Dynamisch).                       |
| `vegan`             | Ekoplaza | Ekoplaza's vegan flag.                                                                  |
| `vegetarian`        | Ekoplaza | Ekoplaza's vegetarian flag.                                                             |
| `nutriScore`        | Fixed    | Always `null`: Ekoplaza gives none.                                                     |
| `ekoscope`          | Ekoplaza | Ekoscope, Ekoplaza's own sustainability score from 0 to 10.                             |
| `badges`            | Ekoplaza | Certifications: `EU-BIO`, `Biologisch`, `Demeter`, `Fair Trade`, `Natrue`.              |
| `origin`            | Ekoplaza | Country of origin as a code: `NL`, `DE`, `BE`.                                          |
| `shelfLifeDays`     | Ekoplaza | Days the product keeps, when Ekoplaza gives it.                                         |
| `ageRestriction`    | Derived  | `18` for products Ekoplaza marks as containing alcohol.                                 |
| `soldByWeight`      | Ekoplaza | `true` for products weighed in store.                                                   |
| `detailsDate`       | Derived  | Date the details were read: the details file's date, or the run's date when read live.  |
| `description`       | Ekoplaza | Ekoplaza's product description.                                                         |
| `ingredients`       | Ekoplaza | Ingredients, in full from the product label.                                            |
| `allergens`         | Ekoplaza | Allergens the product contains (Bevat).                                                 |
| `mayContain`        | Ekoplaza | Allergens it may contain (Kan bevatten).                                                |
| `freeFrom`          | Ekoplaza | Allergens Ekoplaza states it is free from.                                              |
| `nutrition`         | Ekoplaza | `per` (`100 gram`, `100 ml`) and `values`, a list of `name` and `value`.                |
| `categoryPath`      | Ekoplaza | Category, sub-category and leaf, joined with `/`.                                       |
| `categoryIds`       | Ekoplaza | Ekoplaza's ids of the category path, as text.                                           |
| `category`          | Ekoplaza | Top category.                                                                           |
| `url`               | Derived  | Product page on ekoplaza.nl.                                                            |
| `imageUrl`          | Ekoplaza | Product image.                                                                          |
| `inStock`           | Derived  | `false` when the web shop lists the product as out of stock.                            |
| `availabilityLabel` | Ekoplaza | Ekoplaza's stock code: `in_stock`, `limited_stock` or `out_of_stock`.                   |
| `priceDate`         | Derived  | The day the prices and deals hold for: today, or next Wednesday with `nextWeek`.        |
| `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).                                              |

#### Ekoplaza Scraper output example

Vivani Pure chocolade 85%, from the full run of 2026-11-05, on a VAN-VOOR ACTIE this week. The description is shortened here.

```json
{
    "chain": "ekoplaza",
    "store": null,
    "externalId": "232834",
    "articleNumber": "0001232834",
    "ean": "4044889005264",
    "gtins": ["4044889005264"],
    "name": "Pure chocolade 85% Santo Domingo",
    "brand": "Vivani",
    "sizeText": "80 Gram",
    "packCount": null,
    "quantity": 80,
    "unit": "g",
    "price": 3.49,
    "currency": "EUR",
    "unitPrice": 43.63,
    "unitPriceUnit": "kg",
    "promoPrice": 2.96,
    "promoText": "VAN-VOOR ACTIE",
    "promoType": "price",
    "promoLabels": null,
    "promoStart": "2026-11-04",
    "promoEnd": "2026-11-10",
    "organic": true,
    "vegan": true,
    "vegetarian": true,
    "nutriScore": null,
    "ekoscope": 5,
    "badges": ["EU-BIO", "Biologisch"],
    "origin": "DE",
    "shelfLifeDays": null,
    "ageRestriction": null,
    "soldByWeight": false,
    "detailsDate": "2026-11-05",
    "description": "Deze krachtige, bitterzoete pure chocolade maakt indruk met haar intense, verfijnde smaak. Gemaakt met de fijnste biologische cacao uit de Dominicaanse Republiek…",
    "ingredients": "cocoamassa*, cacaoboter*, ruwe rietsuiker*. Cacao: ten minste 85%. Kan noten, gluten en melkbestanddelen bevatten.*van biologische landbouw.",
    "allergens": ["Cacao"],
    "mayContain": ["Gluten", "Melk", "Lactose", "Maïs", "Noten", "Koriander"],
    "freeFrom": [
        "Glutamaat",
        "Ei",
        "Kippenvlees",
        "Peulvruchten",
        "Aardnoten (pinda’s)",
        "Rundvlees",
        "Soja",
        "Zwaveldioxide en sulfieten",
        "Varkensvlees",
        "Selderij",
        "Schaaldieren",
        "Vis",
        "Sesam",
        "Lupine",
        "Wortel",
        "Mosterd",
        "Weekdieren"
    ],
    "nutrition": {
        "per": "100 gram",
        "values": [
            { "name": "Energie", "value": "2547 kJ" },
            { "name": "Energie", "value": "608 kcal" },
            { "name": "Eiwit totaal", "value": "10.1 gram" },
            { "name": "Koolhydraten totaal", "value": "17.6 gram" },
            { "name": "Suikers", "value": "14.2 gram" },
            { "name": "Vet totaal", "value": "53 gram" },
            { "name": "Vet verzadigd", "value": "32.2 gram" },
            { "name": "Voedingsvezel", "value": "11.9 gram" },
            { "name": "Zout", "value": "0.01 gram" }
        ]
    },
    "categoryPath": "Chips, koek, snoep, chocolade/Chocolade/Pure chocolade",
    "categoryIds": ["537", "562", "569"],
    "category": "Chips, koek, snoep, chocolade",
    "url": "https://www.ekoplaza.nl/nl/producten/product/pure-chocolade-85-santo-domingo-0001232834",
    "imageUrl": "https://www.ekoplaza.nl/api/media/aspos/Product/Front/201016/58f06cbb-9da2-409d-ad43-c44e6ded59ec.800x580.webp?ot=.jpg",
    "inStock": true,
    "availabilityLabel": "in_stock",
    "priceDate": "2026-11-05",
    "searchTerm": null,
    "scrapedAt": "2026-11-05T20:34:51.349Z"
}
```

### How does the Ekoplaza 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 22 categories shortened to 2:

```json
{
    "mode": "catalog",
    "onlyBonus": false,
    "nextWeek": false,
    "freshDetails": false,
    "priceDate": "2026-11-05",
    "itemsPushed": 5937,
    "distinctIds": 5937,
    "productsRead": 5937,
    "catalogTotal": 5937,
    "dealsThisWeek": 558,
    "nextWeekProducts": null,
    "nextWeekDeals": null,
    "nextWeekPricesRead": 0,
    "detailsFromFile": 5937,
    "detailsRead": 0,
    "detailsFileDate": "2026-11-05",
    "detailsMissing": 0,
    "barcodesMissing": 0,
    "stoppedAtChargeLimit": false,
    "blocked": false,
    "eanCatalogScan": false,
    "durationSec": 30,
    "requests": 13,
    "statusCodes": { "200": 13 },
    "errors": [],
    "retries": [],
    "categories": [
        { "id": 10, "name": "Aardappel, groente, fruit", "listed": 202, "collected": 202 },
        { "id": 610, "name": "Glutenvrij", "listed": 130, "collected": 68 }
    ],
    "searches": []
}
```

`listed` is Ekoplaza's own count for a category, and a product can be in several (Glutenvrij and Pasta); `collected` counts the products whose `categoryPath` starts there. A run is suspect when `productsRead` is below `catalogTotal`, when `blocked` is `true`, when `detailsMissing` or `errors` are not empty, or, with `nextWeek`, when `nextWeekDeals` is 0. Set `minItems` to make a bad run fail outright.

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

- **Banners are not deals.** 653 products carried a "15% korting" to "30% korting" banner without a discount or a lower price; the website shows no deal for them. The actor takes deals from Ekoplaza's active discounts, with their dates. Against each deal's own price record, 25 of 25 sampled deal prices agreed.
- **Multi-buys have no deal price.** `2DE HALVE PRIJS`, `2 VOOR 6.00` and `2+1 GRATIS` keep `promoPrice` at `null`, with the deal in `promoText`. `2 VOOR 6.00` (35 products) runs without an end date.
- **Ekoplaza's deal week runs Wednesday to Tuesday.** With `nextWeek`, the prices and deals are those of the coming Wednesday; deals that keep running stay, deals that end on Tuesday are left out.
- **Allergens in three levels.** Ekoplaza gives 24 allergens per product, each marked as contained (`allergens`), possibly contained (`mayContain`) or free from (`freeFrom`), as on its product pages. Gerookte kipfilet: contains Kippenvlees, may contain 12 others.
- **Full ingredients.** Ekoplaza's ingredients field stops at 60 characters; the actor takes the full text from the product label (up to 1,977 characters). 24 ingredient texts are exactly 60 characters and may be the shortened field.
- **The details are dated.** Ingredients, allergens, nutrition and barcodes come from the actor's details file (`detailsDate`). Recipes change rarely, but they do: set `freshDetails` for today's values.
- **Ekoscope runs from 0 to 10.** It is Ekoplaza's own score for sustainability; 1,454 products have none.
- **Organic is read from the certifications.** 4,822 products carry Biologisch or Bio-Dynamisch; 143 carry "Niet-biologisch" and 804 "Non-food".
- **Unit prices are computed.** Ekoplaza gives no unit price in its data, so `unitPrice` is the regular price over the size: saffron reaches 14,790 per kg (1 gram for 14.79).
- **Ekoplaza's search is broad.** `vegan` matches 5,162 of 5,937 products; filter the full catalog on `vegan` for vegan products.
- **Prices are the web shop's.** No store is chosen; stores can differ.

### Is it legal to use the Ekoplaza 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 Ekoplaza Scraper

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

Ekoplaza's deals change every Wednesday. A run each Wednesday keeps a deal list current, and a run with `nextWeek` from the Wednesday before gives the coming week's deals in advance.

#### Does it need proxies?

No. The actor reads Ekoplaza's website API directly, one request at a time, with no proxy: every request of every run on 2026-11-05 answered 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 Ekoplaza aanbiedingen this week?

Run the actor with `onlyBonus`: on 2026-11-05 it returned 558 deals valid from 4 to 10 November 2026, 413 of them with a lower price.

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

Yes. Set `nextWeek` and `onlyBonus`: on 2026-11-05 the actor returned 467 deals for the week from Wednesday 11 November, 431 of them with their deal price.

#### Can I get Ekoplaza's glutenvrije producten?

Yes. Search `glutenvrij` (129 products), or run the full catalog and filter `freeFrom` on Gluten: 3,736 products in the last run are free from gluten.

#### Can I get Ekoplaza's vegan products, such as vegan kaas?

Yes: filter the full catalog on `vegan`, which Ekoplaza sets on 4,354 products, and on `categoryPath` for a group such as cheese. Keyword search is too broad for this.

#### What is the Ekoscope?

Ekoplaza's own score from 0 to 10 for how sustainably a product is made, shown on its website. The actor gives it in `ekoscope` for 4,483 products; 5 is the most common score.

#### Is there an official Ekoplaza API?

Ekoplaza offers no public API. This actor reads the API behind its website, so it gives the same prices and deals as ekoplaza.nl.

#### Can I compare Ekoplaza prices with other Dutch supermarkets?

Yes. The scrapers for Albert Heijn, Jumbo, Dirk, PLUS, DekaMarkt, Hoogvliet, Vomar and Poiesz 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 |              |
| ----------------------------------------------------------------------- | ---------------------------------------------------------------------- | --------------- | ------------ |
| Ekoplaza Scraper                                                        | Ekoplaza products: prices, next week's deals, EAN, allergens, Ekoscope | $2.00           | 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           |              |
| [Poiesz Scraper](https://apify.com/sleepmodesystems/poiesz)             | Poiesz products: prices, deals with dates, EAN, deposit, ingredients   | $1.50           |              |
| [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 Ekoplaza 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 Ekoplaza for these words instead of reading the full catalog. Every result 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. Ekoplaza's search does not match barcodes, so the actor reads the catalog and matches every product's barcode. Leading zeros are optional.

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

Keep only products on a deal (aanbieding), in any mode: this week's, or next week's with nextWeek.

## `nextWeek` (type: `boolean`):

Give the deals of the coming Wednesday, when Ekoplaza's deal week starts, with their deal price, instead of today's. Ekoplaza publishes next week's deals during the current week.

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

Barcodes, ingredients, allergens and nutrition come from the details file shipped with the actor (date in detailsDate); products it does not know are read live. Set this to read every product's details from Ekoplaza now: about 6 minutes more on the full catalog.

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

Stop after this many products. The full Ekoplaza catalog is about 5,900 products.

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

Fail the run if fewer products were found.

## Actor input object example

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

```

## MCP server setup

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

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/FeG44kaUcSE2fjNG3/builds/OReee2d2vbA6gbCXu/openapi.json
