# Lidl Scraper — European Grocery Prices & Weekly Offers (`studio-amba/lidl-scraper`) Actor

Scrape product data from Lidl's online store. Extract grocery items, weekly offers, prices, categories, and product details from Lidl across 30+ European countries. No login or cookies required.

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

## Lidl Scraper — European Grocery Products, Prices & Weekly Offers

Scrape product data from **Lidl's online store** across 30+ European countries. Extract product names, prices, brands, weekly offers, discounts, stock status, and category information. No login or cookies required.

### What does Lidl Scraper do?

This scraper uses Lidl's internal search API to collect structured product data at scale. It supports all Lidl country stores and returns clean, structured JSON output.

**Key features:**
- Search products by keyword across any Lidl country store
- Extract current prices and original/strikethrough prices for discount tracking
- Get discount percentages for weekly offers and promotions
- Monitor stock availability for any product
- Support for 30+ European countries with a single actor
- Sort by relevance, price, discount, rating, or popularity

### Use cases

- **Price monitoring** — Track grocery prices over time across Lidl stores
- **Weekly offers tracking** — Get notified about new Lidl deals and discounts
- **Competitor analysis** — Compare Lidl prices with other European grocery chains
- **Market research** — Analyze product assortment across different countries
- **Deal hunting** — Find the biggest discounts automatically with discount sorting

### Supported countries

Belgium, Netherlands, Germany, France, Austria, Poland, Italy, Spain, United Kingdom, Czech Republic, Portugal, Denmark, Sweden, Finland, Hungary, Romania, Bulgaria, Greece, Croatia, Slovenia, Slovakia, Lithuania, Latvia, Estonia, Ireland, Luxembourg, Switzerland, Cyprus, Malta, Serbia.

### Input parameters

| Parameter | Type | Description |
|-----------|------|-------------|
| `searchQuery` | string | Search term (e.g. "chocolade", "laptop"). Leave empty for all products. |
| `country` | string | Country code (BE, NL, DE, FR, etc.). Default: BE. |
| `categoryUrl` | string | Direct URL to a Lidl category page (optional). |
| `sort` | string | Sort order: relevance, price, discount, newest, rating, best selling. |
| `maxResults` | number | Maximum products to scrape (default: 100, max: 10,000). |
| `proxyConfiguration` | object | Proxy settings (datacenter proxies usually work). |

### Output example

```json
{
    "name": "PARKSIDE\u00ae Klein werkgereedschap",
    "brand": "PARKSIDE\u00ae",
    "price": 1.99,
    "currency": "EUR",
    "originalPrice": 4.99,
    "discountPercentage": 60,
    "category": "Assortiment/Klussen/Handgereedschap",
    "imageUrl": "https://www.lidl.be/assets/gcp123abc.jpg",
    "description": "<ul><li>Ergonomic grip</li></ul>",
    "inStock": true,
    "productId": "100401099",
    "country": "BE",
    "url": "https://www.lidl.be/p/nl-BE/parkside-klein-werkgereedschap/p100401099",
    "scrapedAt": "2026-04-07T12:00:00.000Z"
}
````

### Output fields

| Field | Type | Description |
|-------|------|-------------|
| `name` | string | Full product name including brand |
| `brand` | string | Brand name (SILVERCREST, LIVARNO, PARKSIDE, etc.) |
| `price` | number | Current selling price |
| `currency` | string | Currency code (EUR, GBP, etc.) |
| `originalPrice` | number | Price before discount (null if no discount) |
| `discountPercentage` | number | Discount percentage (null if no discount) |
| `category` | string | Full category path |
| `imageUrl` | string | Main product image URL |
| `description` | string | Product description (HTML) |
| `inStock` | boolean | Whether the product is available online |
| `productId` | string | Lidl internal product ID |
| `country` | string | Country code this product was scraped from |
| `url` | string | Full URL to the product page |
| `scrapedAt` | string | ISO 8601 timestamp |

### Tips

- **Weekly offers**: Use `sort: percentageDiscount-desc` to find the biggest current discounts
- **New arrivals**: Use `sort: firstOnlineDate-desc` to see what's new
- **Price comparison**: Run the same search across multiple countries to compare prices
- **Large exports**: Set `maxResults: 10000` to export full product catalogs
- **Datacenter proxies** are usually sufficient — Lidl's API is not heavily protected

### Pricing

This actor is free to use. You only pay for Apify platform usage (compute and proxy costs).

### Changelog

- **v0.1** (2026-04-07) — Initial release with search API support for 30 countries

# Actor input Schema

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

Search term (e.g. 'chocolade', 'laptop', 'grill'). Leave empty to browse all products.

## `country` (type: `string`):

Which Lidl country store to scrape.

## `categoryUrl` (type: `string`):

Direct URL to a Lidl category page (e.g. 'https://www.lidl.be/c/aanbiedingen/a10006065'). Overrides search query if provided.

## `sort` (type: `string`):

How to sort results.

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

Maximum number of products to scrape. Lidl returns up to 48 per page.

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

Proxy settings. Datacenter proxies usually work fine for Lidl.

## Actor input object example

```json
{
  "searchQuery": "chocolade",
  "country": "BE",
  "sort": "relevancy",
  "maxResults": 100
}
```

# 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": "chocolade"
};

// Run the Actor and wait for it to finish
const run = await client.actor("studio-amba/lidl-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": "chocolade" }

# Run the Actor and wait for it to finish
run = client.actor("studio-amba/lidl-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": "chocolade"
}' |
apify call studio-amba/lidl-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Lidl Scraper — European Grocery Prices & Weekly Offers",
        "description": "Scrape product data from Lidl's online store. Extract grocery items, weekly offers, prices, categories, and product details from Lidl across 30+ European countries. No login or cookies required.",
        "version": "0.1",
        "x-build-id": "wV5SWBmBaDTS26P4G"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/studio-amba~lidl-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-studio-amba-lidl-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~lidl-scraper/runs": {
            "post": {
                "operationId": "runs-sync-studio-amba-lidl-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~lidl-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-studio-amba-lidl-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 term (e.g. 'chocolade', 'laptop', 'grill'). Leave empty to browse all products."
                    },
                    "country": {
                        "title": "Country",
                        "enum": [
                            "BE",
                            "NL",
                            "DE",
                            "FR",
                            "AT",
                            "PL",
                            "IT",
                            "ES",
                            "GB",
                            "CZ",
                            "PT",
                            "DK",
                            "SE",
                            "FI",
                            "HU",
                            "RO",
                            "BG",
                            "GR",
                            "HR",
                            "SI",
                            "SK",
                            "LT",
                            "LV",
                            "EE",
                            "IE",
                            "LU",
                            "CH",
                            "CY",
                            "MT",
                            "RS"
                        ],
                        "type": "string",
                        "description": "Which Lidl country store to scrape.",
                        "default": "BE"
                    },
                    "categoryUrl": {
                        "title": "Category URL",
                        "type": "string",
                        "description": "Direct URL to a Lidl category page (e.g. 'https://www.lidl.be/c/aanbiedingen/a10006065'). Overrides search query if provided."
                    },
                    "sort": {
                        "title": "Sort By",
                        "enum": [
                            "relevancy",
                            "price",
                            "price-desc",
                            "percentageDiscount-desc",
                            "firstOnlineDate-desc",
                            "ratingScore-desc",
                            "sh_carts-desc"
                        ],
                        "type": "string",
                        "description": "How to sort results.",
                        "default": "relevancy"
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of products to scrape. Lidl returns up to 48 per page.",
                        "default": 100
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. Datacenter proxies usually work fine for Lidl."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
