# Edeka Scraper — German Grocery Products, Prices & EANs (`studio-amba/edeka-scraper`) Actor

Scrape products, prices, EANs, unit prices and weekly offers from edeka24.de, EDEKA's German online shop. Search by keyword or browse a category. No login or cookies.

- **URL**: https://apify.com/studio-amba/edeka-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

## Edeka Scraper — German Grocery Products, Prices & EANs

Scrape the product catalog of [edeka24.de](https://www.edeka24.de), the national online shop of EDEKA — Germany's largest supermarket group. Get product names, prices, EAN barcodes, unit prices, weekly offers, brands and stock status as clean structured JSON. No login, no cookies, no browser automation.

Search by keyword or browse a category. Built for price monitoring, competitor analysis, assortment tracking and market research.

### What it does

This actor reads the edeka24.de online shop directly, including the machine-readable product data embedded in each product page (GoodRelations RDFa). You get the same prices a shopper sees, plus the EAN barcode and Germany's legally-required "lowest price in the last 30 days" note.

- **Keyword search** — pass a term (`kaffee`, `nudeln`, `schokolade`) and get matching products.
- **Category browse** — pass a category path (e.g. `Lebensmittel/Beilagen/Nudeln`) to pull a whole department.
- **Offers** — use the `reduzierte-artikel` category to scrape current reduced items with their discount and validity dates.

> Note on scope: `edeka24.de` is EDEKA's national shipping shop (groceries, drinks, drugstore, wine). It is not the regional click-and-collect fresh-produce shops on edeka.de — those are not covered.

### Output

Each product is one record:

```json
{
  "name": "Barilla Nudeln Fusilli 500G",
  "brand": "Barilla",
  "ean": "8076802085981",
  "sku": "128840007",
  "price": 1.29,
  "currency": "EUR",
  "unit": "500G",
  "unitPrice": "2,58 €/kg",
  "promotionPrice": 1.29,
  "lowestPrice30d": "2,19 €",
  "offerValidUntil": "2026-06-25T11:24:04Z",
  "category": "Nudeln",
  "url": "https://www.edeka24.de/Lebensmittel/Beilagen/Nudeln/Barilla-Nudeln-Fusilli-500G.html",
  "imageUrl": "https://www.edeka24.de/out/pictures/generated/product/1/400_400_90/barilla_nudeln_fusilli_500_g.jpg",
  "inStock": true,
  "scrapedAt": "2026-06-24T09:30:00.000Z"
}
````

#### Fields

| Field | Description |
|-------|-------------|
| `name` | Product name |
| `brand` | Brand / manufacturer (derived from the product name) |
| `ean` | EAN-13 barcode |
| `sku` | edeka24 article number |
| `price` | Current price as a number |
| `currency` | Always `EUR` |
| `unit` | Pack size (e.g. `500G`, `1L`) |
| `unitPrice` | Base price (Grundpreis, e.g. `2,58 €/kg`) |
| `promotionPrice` | Sale price when the product is discounted, otherwise `null` |
| `lowestPrice30d` | Lowest price in the last 30 days (German price-display law) |
| `offerValidUntil` | Offer validity date when present |
| `category` | Product category |
| `url` | Link to the product page |
| `imageUrl` | Product image URL |
| `inStock` | Whether the product is available |
| `scrapedAt` | ISO timestamp of the scrape |

### How to scrape Edeka data

1. Open the actor and set your **Search Query** (for example `kaffee`) — or leave it empty and set a **Category Path** to browse a department.
2. Set **Max Results** to the number of products you want.
3. Keep the default **Proxy Configuration** (a German proxy is recommended for correct prices and offers).
4. Click **Start**. When the run finishes, download the dataset as JSON, CSV or Excel, or pull it from the API.

#### Input example

```json
{
  "searchQuery": "kaffee",
  "maxResults": 100,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyCountry": "DE" }
}
```

#### Browsing a category or offers

```json
{
  "category": "Lebensmittel/Beilagen/Nudeln",
  "maxResults": 500,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyCountry": "DE" }
}
```

Use `"category": "reduzierte-artikel"` to scrape current offers with discount and validity dates. Category paths are visible in the edeka24.de URLs.

### Common use cases

- **Price monitoring** — track EDEKA prices over time and compare against other German grocers.
- **Promotion tracking** — capture reduced items, discounts and offer windows.
- **Assortment analysis** — see which products and brands a category carries, keyed by EAN.
- **Market research** — build a dataset of German grocery prices and barcodes for analysis.

### Tips

- For a full category, set a higher **Max Results** and use the **Category Path** input.
- The EAN barcode makes it easy to match edeka24 products against other retailers' catalogs.
- Prices change often; run on a schedule to keep your data fresh.

### FAQ

**Does this need a login?**
No. The actor only reads public catalog data. No account, password or cookies are required.

**Does it include the EAN barcode?**
Yes. Each product page exposes its EAN-13, which this actor extracts.

**Is this the full EDEKA assortment?**
It is the edeka24.de national online shop (shipping goods, drinks, drugstore, wine). Fresh produce sold via regional click-and-collect shops is not part of this catalog.

**Is this legal?**
The actor collects publicly available product information. You are responsible for using the data in line with EDEKA's terms and applicable law.

### Disclaimer

This actor is an independent tool and is not affiliated with, endorsed by, or connected to EDEKA or edeka24.de. All product data belongs to its respective owners.

# Actor input Schema

## `searchQuery` (type: `string`):

Search for products by name or keyword (e.g., 'kaffee', 'nudeln', 'schokolade'). Leave empty and set a Category to browse a category instead.

## `category` (type: `string`):

Browse a category instead of searching. Use the edeka24.de category path, e.g. 'Lebensmittel/Beilagen/Nudeln' or 'reduzierte-artikel' for current offers. When set, Search Query is ignored.

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

Maximum number of products to return.

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

Proxy settings. The default Apify Proxy works fine — edeka24.de has no geo lock or anti-bot.

## Actor input object example

```json
{
  "searchQuery": "kaffee",
  "maxResults": 20,
  "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 = {
    "searchQuery": "kaffee",
    "maxResults": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/edeka-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 = {
    "searchQuery": "kaffee",
    "maxResults": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/edeka-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 '{
  "searchQuery": "kaffee",
  "maxResults": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call studio-amba/edeka-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Edeka Scraper — German Grocery Products, Prices & EANs",
        "description": "Scrape products, prices, EANs, unit prices and weekly offers from edeka24.de, EDEKA's German online shop. Search by keyword or browse a category. No login or cookies.",
        "version": "0.1",
        "x-build-id": "HWfUkwM52v1SScBw1"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/studio-amba~edeka-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-studio-amba-edeka-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~edeka-scraper/runs": {
            "post": {
                "operationId": "runs-sync-studio-amba-edeka-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~edeka-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-studio-amba-edeka-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": {
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Search for products by name or keyword (e.g., 'kaffee', 'nudeln', 'schokolade'). Leave empty and set a Category to browse a category instead."
                    },
                    "category": {
                        "title": "Category Path",
                        "type": "string",
                        "description": "Browse a category instead of searching. Use the edeka24.de category path, e.g. 'Lebensmittel/Beilagen/Nudeln' or 'reduzierte-artikel' for current offers. When set, Search Query is ignored."
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 5000,
                        "type": "integer",
                        "description": "Maximum number of products to return.",
                        "default": 50
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. The default Apify Proxy works fine — edeka24.de has no geo lock or anti-bot."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
