# Foodbag Belgium Scraper — Weekly Menu & Dishes (`studio-amba/foodbag-scraper`) Actor

Scrape Foodbag.be weekly menus — dish names in Dutch and French, prices per portion, nutrition values, cooking times, dietary tags, sold-out status, and images. Works for current and upcoming weeks. No login or cookies required.

- **URL**: https://apify.com/studio-amba/foodbag-scraper.md
- **Developed by:** [Studio Amba](https://apify.com/studio-amba) (community)
- **Categories:** E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Foodbag Belgium Scraper -- Weekly Menus, Dishes, Prices & Nutrition

Extract the full weekly menu from [Foodbag.be](https://www.foodbag.be) -- the Belgian meal kit delivery service. Every dish with names in Dutch and French, prices per portion, nutrition values, cooking times, dietary tags, chef info, protein options, and sold-out status. No login, no cookies, no API key required.

### What is Foodbag Scraper?

Foodbag is one of Belgium's leading meal kit companies. Every week they publish a new menu of 40+ dishes across their formulas (Original, Veggie, Quick & Easy, Sana, Kant&Klaar / Heat & Eat, and a la carte). The menu is fully bilingual (Dutch and French) and includes rich structured data per dish: nutrition breakdowns per portion and per 100g, cooking times, allergen-free tags, premium supplements, and per-persons pricing.

This actor scrapes the public weekly menu pages and returns one clean JSON item per dish. What you can build with it:

- **Menu monitoring** -- track which dishes Foodbag rotates in and out week over week, and which formulas they push.
- **Competitive intelligence** -- rival meal kit services (HelloFresh, Marley Spoon) and food retailers monitor Foodbag's dish selection, pricing per portion, supplements, and dietary trend adoption in the Belgian market.
- **Nutritional analysis** -- dietitians and health tech companies analyse commercial meal kit nutrition profiles using the per-portion and per-100g values on every dish.
- **Price tracking** -- follow the standard box price ladder (1 to 6 persons), a la carte pricing, and per-dish supplements over time.
- **Meal planning apps** -- combine this actor with our [HelloFresh Belgium Scraper](https://apify.com/studio-amba/hellofresh-scraper) to compare Belgian meal kit menus side by side.

### What data does Foodbag Scraper extract?

Each dish contains:

- **Dish names** -- in Dutch (`nameNL`) and French (`nameFR`), always both
- **Subtitle** -- short description in your selected language
- **Tag** -- highlight label like "Klassieker" or "Nieuw"
- **Prices** -- price per portion in euros (standard 2-person box), base price, premium supplement, and the full box price ladder per persons count including a la carte prices
- **Nutrition** -- energy (kcal), fat, saturated fat, carbs, sugar, fiber, protein, and salt -- per portion and per 100g
- **Cooking time** -- total preparation time in minutes
- **Chef** -- the Foodbag chef who created the dish
- **Dietary tags** -- allergen-free labels like "Zonder gluten" or "Sans lactose"
- **Protein options** -- add-on or swap proteins with their own prices and sizes
- **Availability** -- persons counts offered (1-6), sold-out status per portion size
- **Image** -- high-resolution dish photo
- **Week** -- menu week code (e.g. `W29Y2026`) and week start date

### How to scrape Foodbag data

1. Open the actor on Apify and click **Try for free**.
2. Leave the input as-is to get the current week's menu, or set a specific week.
3. Click **Start** and wait for the run to finish (typically under a minute).
4. Download the dataset as JSON, CSV, or Excel.

#### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `week` | String | No | Week in `W{week}Y{year}` format, e.g. `"W29Y2026"`. Use `"current"` or leave empty for the current week. Foodbag publishes about 4 weeks ahead. |
| `language` | String | No | `"nl"` (default) or `"fr"`. Controls subtitle, tags, and product names. Dish names are always returned in both languages. |
| `maxResults` | Integer | No | Maximum dishes to return (default: 100). A weekly menu has around 40 dishes. |
| `proxyConfiguration` | Object | No | Proxy settings. Foodbag is low anti-bot; the default datacenter proxies work fine. |

#### Example input

```json
{
    "week": "current",
    "language": "nl",
    "maxResults": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
}
````

**Tips:**

- Leave `week` empty or set `"current"` -- the actor follows Foodbag's own redirect to the active menu week.
- Future weeks work as soon as Foodbag publishes them (usually 4 weeks ahead). If a week does not exist yet, the run fails with a clear message instead of returning an empty dataset.
- Prices are converted to euros. `pricePerPortion` is based on the standard 2-person box and includes the dish supplement, so it matches what you see on the site.
- Schedule the actor weekly (Monday morning) to build a historical archive of Foodbag menus.

### Output

One item per dish:

```json
{
    "dishId": "a0MJv00000Ea8biMAB",
    "week": "W29Y2026",
    "nameNL": "Traiteur stoofvlees met frietjes",
    "nameFR": "Carbonnades du traiteur et frites",
    "subtitle": "en een fris slaatje",
    "tag": "Klassieker",
    "imageUrl": "https://s3.eu-west-2.amazonaws.com/smartmat-production/a1MJv00000Joq5JMAR_920x920.jpg",
    "pricePerPortion": 8.05,
    "basePricePerPortion": 5.06,
    "supplementPerPortion": 2.99,
    "priceVariants": [
        { "persons": 1, "boxPrice": 6.2, "aLaCartePrice": 6.51 },
        { "persons": 2, "boxPrice": 10.12, "aLaCartePrice": 10.4 },
        { "persons": 4, "boxPrice": 18.2, "aLaCartePrice": 18.72 }
    ],
    "personsAvailable": [1, 2, 3, 4, 5, 6],
    "nutrition": {
        "perPortion": { "energy": 525.72, "protein": 40.4, "fat": 5.99, "carbs": 72.13, "sugar": 20.18, "fiber": 11.29, "salt": 4.08, "saturated_fat": 1.43 },
        "per100g": { "energy": 64.39, "protein": 4.95, "fat": 0.73, "carbs": 8.83, "sugar": 2.47, "fiber": 1.38, "salt": 0.5, "saturated_fat": 0.18 }
    },
    "cookingTime": 30,
    "chef": "Chef Caroline",
    "primaryTags": [],
    "dietaryTags": ["Zonder noten"],
    "proteinOptions": [
        { "productName": "stoofvlees", "portionAmount": 1, "price": 10.75, "sizeQuantity": 500, "sizeUnit": "g", "available": true }
    ],
    "isALaCarte": true,
    "soldOut": false,
    "soldOutPersons": [],
    "weekStartDate": "2026-07-13",
    "url": "https://www.foodbag.be/nl/menu/W29Y2026",
    "scrapedAt": "2026-07-03T09:00:00.000Z"
}
```

### FAQ

#### Does this actor need my Foodbag login?

No. It only reads the public weekly menu pages that anyone can open in a browser. No cookies, no account, no API key.

#### How current is the data?

Live. Every run fetches the menu page at that moment, so prices, sold-out flags, and dish lineups reflect the site in real time.

#### Which weeks can I scrape?

The current week plus roughly 4 upcoming weeks -- whatever Foodbag has published. Past weeks are removed from the site and cannot be scraped.

#### What do the price fields mean exactly?

Foodbag prices meals per box formula and persons count, not per individual dish. `priceVariants` gives the standard box price and a la carte price per persons count. `basePricePerPortion` divides the standard 2-person box by two, and `pricePerPortion` adds the dish's premium supplement on top. Premium dishes (like fresh traiteur meals) carry a `supplementPerPortion` above 0.

#### Is it legal to scrape Foodbag?

This actor collects only publicly available product data -- no personal information. Review Foodbag's terms of service and consult a legal professional for your specific use case.

#### Can I get the menu in French?

Yes. Set `language` to `"fr"` and subtitles, tags, and product names come back in French. Dish names are always included in both Dutch and French regardless of this setting.

### Related actors

- [HelloFresh Belgium Scraper](https://apify.com/studio-amba/hellofresh-scraper) -- weekly recipes, ingredients, and nutrition from HelloFresh Belgium

### Support

Found an issue or need an extra field? Open an issue on the actor's page and we'll fix it quickly. We maintain a large catalog of European scrapers and ship fixes fast.

# Actor input Schema

## `week` (type: `string`):

Week to scrape in W{week}Y{year} format (e.g. 'W29Y2026'). Use 'current' or leave empty for the current week. Foodbag publishes about 4 weeks ahead.

## `language` (type: `string`):

Language for subtitle, tags, and product names. Dish names are always returned in both Dutch and French.

## `maxResults` (type: `integer`):

Maximum number of dishes to return.

## `proxyConfiguration` (type: `object`):

Proxy settings. Foodbag.be is low anti-bot; datacenter proxies work.

## Actor input object example

```json
{
  "week": "current",
  "language": "nl",
  "maxResults": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# 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 = {
    "week": "current",
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/foodbag-scraper").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 = {
    "week": "current",
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/foodbag-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "week": "current",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call studio-amba/foodbag-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=studio-amba/foodbag-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Foodbag Belgium Scraper — Weekly Menu & Dishes",
        "description": "Scrape Foodbag.be weekly menus — dish names in Dutch and French, prices per portion, nutrition values, cooking times, dietary tags, sold-out status, and images. Works for current and upcoming weeks. No login or cookies required.",
        "version": "0.1",
        "x-build-id": "4LnFUPbmNr8jduIGH"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/studio-amba~foodbag-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-studio-amba-foodbag-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/studio-amba~foodbag-scraper/runs": {
            "post": {
                "operationId": "runs-sync-studio-amba-foodbag-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/studio-amba~foodbag-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-studio-amba-foodbag-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "week": {
                        "title": "Week",
                        "type": "string",
                        "description": "Week to scrape in W{week}Y{year} format (e.g. 'W29Y2026'). Use 'current' or leave empty for the current week. Foodbag publishes about 4 weeks ahead."
                    },
                    "language": {
                        "title": "Language",
                        "enum": [
                            "nl",
                            "fr"
                        ],
                        "type": "string",
                        "description": "Language for subtitle, tags, and product names. Dish names are always returned in both Dutch and French.",
                        "default": "nl"
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum number of dishes to return.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. Foodbag.be is low anti-bot; datacenter proxies work."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
