Lidl Scraper
Pricing
from $1.49 / 1,000 products
Lidl Scraper
Scrape Lidl products and prices from 32 country sites: price, normal price, unit price, Lidl Plus price, discounts, stock, ratings, category and images. Full catalog or keyword search, with price-change monitoring.
Pricing
from $1.49 / 1,000 products
Rating
0.0
(0)
Developer
ParseBird
Maintained by CommunityActor stats
1
Bookmarked
3
Total users
2
Monthly active users
8 days ago
Last modified
Categories
Share
Lidl Scraper
Lidl Scraper extracts product and price data from Lidl's online shops in 32 countries, from Germany, France and the UK to Poland, Italy and the US, by keyword search or as a full national catalog.
| Get the current price, struck-through normal price, unit price, Lidl Plus app price, discount, stock, rating, category, images and product link for every Lidl product, filter by category, brand, price or offers, and output only the prices that changed since your last run. |
Copy to your AI assistant
Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this actor.
Lidl Scraper (Apify actor parsebird/lidl-scraper) scrapes products and prices from Lidl country websites via their site search: DE lidl.de, FR lidl.fr, GB lidl.co.uk, PL lidl.pl, IT lidl.it, ES lidl.es, NL lidl.nl, BE lidl.be, AT lidl.at, CH lidl.ch, CZ lidl.cz, SK lidl.sk, HU lidl.hu, PT lidl.pt, IE lidl.ie, XI lidl-ni.co.uk (Northern Ireland), SE lidl.se, DK lidl.dk, FI lidl.fi, BG lidl.bg, RO lidl.ro, HR lidl.hr, SI lidl.si, GR lidl-hellas.gr, CY lidl.com.cy, MT lidl.com.mt, LT lidl.lt, LV lidl.lv, EE lidl.ee, RS lidl.rs, LU lidl.lu, US lidl.com. Call it with the Apify API client: client.actor("parsebird/lidl-scraper").call(run_input={"countries": ["DE"], "query": "milch", "maxResults": 50}). Inputs: countries (array of country codes above, default ["DE"]); query (string keyword in the site's language, empty = whole catalog); maxResults (integer per country, default 200, 0 = no limit); category (string, category name or path in the site's language, e.g. "Essen & Trinken" or "Essen & Trinken/Wein, Bier & Spirituosen"); brands (array of brand names, OR); minPrice, maxPrice (numbers, local currency); onlyOffers, inStockOnly, newOnly (booleans); assortment ("all", "store", "online"); sortBy ("relevance", "price_asc", "price_desc", "newest", "rating", "bestseller", "discount"); language ("default", or "fr"/"nl" for BE, "de"/"fr"/"it" for CH, "en"/"el" for CY); compact (boolean, core fields only); incrementalMode (boolean), stateKey (string), emitUnchanged (boolean), emitExpired (boolean, needs empty query); proxyConfiguration (optional). Output: one row per product with country, countryName, language, productId, erpNumber, ian, ians, name, title, brand, category, categories, price, priceNormal, recommendedPrice, isOnOffer, discountPercent, discountAmount, discountText, discountFromRecommendedPrice, currency, secondaryCurrency, unitPrice, unitPriceUnit, unitPriceText, packageAmount, packageUnit, packagingText, lidlPlusPrice, lidlPlusOldPrice, lidlPlusLabel, lidlPlusDetails, priceValidFrom, priceValidUntil, isOnline, isInStore, inStoreNow, onlineAvailable, inStock, availability, availabilityText, availabilityBadges, deliveryCost, rating, ratingCount, ribbons, attributes, ageRestricted, productType, description, imageUrl, images, url, searchQuery, scrapedAt, and in incremental mode changeType (NEW, UPDATED, UNCHANGED, REAPPEARED, EXPIRED), firstSeenAt, lastSeenAt, previousPrice, expiredAt. API docs: https://apify.com/parsebird/lidl-scraper/api. Get a token: https://console.apify.com/settings/integrations
What is Lidl Scraper?
Lidl Scraper turns Lidl's country websites into structured product data. Pick one or more countries, type a keyword such as milch, kaffee or parkside, or leave the search empty to get the whole national assortment. Each product comes back with its current price, normal price, unit price (per kg or litre), Lidl Plus price, discount, stock status, rating, category path, images and product page link.
It works as a Lidl API alternative: no account, no login, no browser. To try it, keep the example input (Germany, milch, 50 products), click Start, and download your Lidl product data as JSON, CSV or Excel a few seconds later.
What can Lidl Scraper do?
- 🌍 32 Lidl country sites in one actor. Germany, France, Poland, Spain, the Netherlands, Belgium, Czechia and Slovakia run full online shops. The other sites list their in-store weekly offers and store assortment.
- 🔎 Search by keyword or scrape whole catalogs. An empty search returns every product a country lists. Lidl's site search stops at 10,000 products, so bigger catalogs (Germany, Czechia, Slovakia) are split into price ranges automatically and you still get all of them.
- 🏷️ Filter like the shop. Category (by name, in the site's language), brand, price range, offers only, in stock only, new products only, and sold in stores or sold online.
- 💶 All the prices Lidl shows. Current price, struck-through normal price, recommended retail price, discount, unit price, pack size, and the Lidl Plus app price with its conditions.
- 🔔 Price monitoring. Incremental mode compares with your previous run and outputs only products that are new, changed price, offer or stock, or came back. Products that disappeared can be reported as expired.
- 🗣️ Languages. Belgium in Dutch or French, Switzerland in German, French or Italian, Cyprus in English or Greek.
- 🤖 Compact output with only the shopping essentials, for AI agents, spreadsheets and dashboards.
As an Apify Actor it also gives you scheduling for daily or weekly price tracking, a REST API, integrations with Google Sheets, Zapier, Make, Slack and webhooks, and exports to JSON, CSV, Excel, XML and HTML.
Which Lidl countries can you scrape?
Product counts are what each site listed when we tested on 28 October 2026. Lidl changes its range every week.
| Code | Site | Type | Products |
|---|---|---|---|
DE | lidl.de | Online shop + stores | ~12,800 |
CZ | lidl.cz | Online shop + stores | over 10,000 |
SK | lidl.sk | Online shop + stores | over 10,000 |
NL | lidl.nl | Online shop + stores | ~9,600 |
FR | lidl.fr | Online shop + stores | ~9,500 |
BE | lidl.be | Online shop + stores | ~8,800 |
PL | lidl.pl | Online shop + stores | ~8,600 |
ES | lidl.es | Online shop + stores | ~6,200 |
US | lidl.com | Store products | ~4,200 |
HU | lidl.hu | Store products | ~980 |
CH | lidl.ch | Store products | ~890 |
RS | lidl.rs | Store products | ~780 |
BG | lidl.bg | Store products | ~660 |
GB | lidl.co.uk | Store products | ~570 |
SI | lidl.si | Store products | ~500 |
CY | lidl.com.cy | Store products | ~460 |
IT | lidl.it | Store products | ~410 |
SE | lidl.se | Store products | ~380 |
RO | lidl.ro | Store products | ~370 |
GR | lidl-hellas.gr | Store products | ~370 |
AT | lidl.at | Store products | ~350 |
FI | lidl.fi | Store products | ~340 |
HR | lidl.hr | Store products | ~320 |
MT | lidl.com.mt | Store products | ~320 |
IE | lidl.ie | Store products | ~310 |
XI | lidl-ni.co.uk (Northern Ireland) | Store products | ~280 |
PT | lidl.pt | Store products | ~210 |
DK | lidl.dk | Store products | ~160 |
LT | lidl.lt | Store products | ~50 |
LU | lidl.lu | Store products | ~40 |
LV | lidl.lv | Store products | ~40 |
EE | lidl.ee | Store products | ~30 |
You can also type UK for Great Britain and NI for Northern Ireland.
What data can you extract from Lidl?
In standard mode every row has all the fields below. A value Lidl doesn't show for that product is null, never left out.
| Field | Description |
|---|---|
country, countryName, language | Lidl site the row comes from and the language of its texts |
productId, erpNumber, ian, ians | Lidl product number (the p… number in product URLs) and Lidl's IAN article numbers |
name, title, brand | Full product name, name without brand, and brand |
category, categories | Category path, as text and as a list |
price, priceNormal, recommendedPrice | Current price, normal (struck-through) price, and recommended retail price when Lidl shows one |
isOnOffer, discountPercent, discountAmount, discountText | Whether the product is discounted, and by how much |
unitPrice, unitPriceUnit, unitPriceText | Price per kg, litre or piece, e.g. 1 l = 7.99 |
packageAmount, packageUnit, packagingText | Pack size, e.g. 0.75 l or 2 l/опаковка |
lidlPlusPrice, lidlPlusLabel, lidlPlusDetails | Lidl Plus app price, its label (e.g. SAVE £0.50) and conditions (e.g. Regular price £1.29) |
priceValidFrom, priceValidUntil | Start and end of the current price, when the site gives them |
isOnline, isInStore, inStoreNow, onlineAvailable, inStock | Sales channel and stock status |
availability, availabilityText, availabilityBadges | Lidl's availability labels with dates, e.g. In store from 29.10 |
deliveryCost | Standard delivery charge for online-shop products |
rating, ratingCount | Average customer rating and number of ratings |
ribbons, attributes, ageRestricted | Badges like "Top Kundenbewertungen", product attributes, age-restricted flag |
description | Product highlights as plain text |
imageUrl, images, url | Main image, all images, and product page link |
changeType, firstSeenAt, lastSeenAt, previousPrice, expiredAt | Incremental mode only |
How to scrape Lidl
- Open Lidl Scraper in Apify Console and sign in (or create a free Apify account).
- Pick one or more Countries, for example Germany.
- Type a Search keyword in the site's language, such as
kaffee, or leave it empty to scrape the whole catalog. - Optionally set a Category, Brands, a price range, or turn on Offers only.
- Set Max products per country (
0= no limit) and click Start. - When the run finishes, open the Output tab and export the data as JSON, CSV, Excel, XML or HTML, or fetch it through the API.
Input parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
countries | array | No | ["DE"] | Lidl country codes, see the table above |
query | string | No | — | Keyword in the site's language; empty = whole catalog |
maxResults | integer | No | 200 | Products per country; 0 = no limit. In incremental mode: changed products per run |
category | string | No | — | Category name or path in the site's language, e.g. Food & Drink or Essen & Trinken/Wein, Bier & Spirituosen |
brands | array | No | — | Brand names, combined with OR |
minPrice, maxPrice | number | No | — | Price range in local currency |
onlyOffers | boolean | No | false | Only discounted products |
inStockOnly | boolean | No | false | Leave out products sold out online |
newOnly | boolean | No | false | Only products Lidl marks as new |
assortment | string | No | all | all, store (sold in stores) or online (sold online) |
sortBy | string | No | relevance | relevance, price_asc, price_desc, newest, rating, bestseller, discount |
language | string | No | default | fr/nl for Belgium, de/fr/it for Switzerland, en/el for Cyprus |
compact | boolean | No | false | Core fields only, same price |
incrementalMode | boolean | No | false | Output only changes since the previous run |
stateKey | string | No | auto | Name of the saved state, one per monitor |
emitUnchanged | boolean | No | false | Also output unchanged products |
emitExpired | boolean | No | false | Output products that disappeared (needs an empty keyword) |
proxyConfiguration | object | No | none | Optional; the actor switches to Apify Proxy by itself if Lidl refuses requests |
Examples
Search a keyword in Germany:
{ "countries": ["DE"], "query": "milch", "maxResults": 50 }
Full French catalog:
{ "countries": ["FR"], "maxResults": 0 }
This week's discounted food in the UK and Ireland:
{ "countries": ["GB", "IE"], "category": "Food & Drink", "onlyOffers": true, "maxResults": 0 }
Daily price monitor for Germany:
{ "countries": ["DE"], "maxResults": 0, "incrementalMode": true, "stateKey": "lidl-de-tracker", "emitExpired": true }
Output example
A discounted wine from lidl.de:
{"country": "DE","countryName": "Germany","language": "de_DE","productId": "100360529","erpNumber": "100360529","ian": "182721","name": "ALMA MORA Select Reserve Malbec Argentinien trocken, Rotwein 2024","brand": "ALMA MORA","category": "Kategorien/Weinwelt/Weinart/Rotwein","price": 5.99,"priceNormal": 9.99,"recommendedPrice": null,"isOnOffer": true,"discountPercent": 40.0,"discountAmount": 4.0,"currency": "EUR","unitPrice": 7.99,"unitPriceUnit": "l","unitPriceText": "1 l = 7.99","packageAmount": 0.75,"packageUnit": "l","lidlPlusPrice": null,"priceValidFrom": "2026-09-30T22:00Z","priceValidUntil": "2026-10-31T22:59:59Z","isOnline": true,"isInStore": false,"inStock": true,"availability": "AVAILABLE_ONLINE","availabilityText": "lieferbar","deliveryCost": 5.95,"rating": 4.7,"ratingCount": 3,"description": "Alma Mora Select Reserve Malbec — Kräftiger argentinischer Rotwein für Grillgerichte und deftige Speisen\n- Kräftige Fruchtaromen von Pflaume und Blaubeere\n- ...","imageUrl": "https://www.lidl.de/assets/gcpdcffa2951620462cb69bc62d22d6815c.jpg","url": "https://www.lidl.de/p/alma-mora-select-reserve-malbec-argentinien-trocken-rotwein-2024/p100360529","scrapedAt": "2026-10-28T11:43:49.674Z"}
An in-store product with a Lidl Plus price from lidl.co.uk:
{"country": "GB","productId": "11031007","name": "Breadsticks","category": "Food","price": 0.99,"priceNormal": 0.99,"isOnOffer": false,"currency": "GBP","lidlPlusPrice": 0.79,"lidlPlusLabel": "SAVE £0.50","lidlPlusDetails": ["Regular price £1.29 (£7.37/kg)", "175 g | £3.95/kg"],"isOnline": false,"isInStore": true,"availability": "IN_STORE_FROM_DATE_FUTURE","availabilityText": "In store from 29.10","url": "https://www.lidl.co.uk/p/breadsticks/p11031007"}
Rows are shortened here; the full row has every field from the data table.
How to monitor Lidl prices with incremental mode
Turn on Incremental mode and give the monitor a State key such as lidl-de-tracker. Then schedule the run daily or weekly.
- The first run outputs every product as
NEWand saves its state. - Later runs read the same selection again and output only products that are
NEW,UPDATED(price, normal price, offer, discount, unit price, Lidl Plus price, offer end date or stock changed) orREAPPEARED.UPDATEDrows includepreviousPrice. - With an empty keyword and Output expired products on, products that are gone are output once as
EXPIRED. - Max products per country caps how many changed products one run outputs. The rest come out in the next runs.
- State is saved per country and per state key, so one key can track several countries.
Use cases
- Grocery price monitoring. Track Lidl's prices and offers in one or several countries every day.
- Competitor analysis for retailers. Compare your prices with Lidl's on the same brands and categories.
- Weekly offers tracking. Collect each week's in-store offers and Lidl Plus deals from the UK, Ireland, Italy or any other country.
- Price-per-unit research. Use unit prices to compare products and pack sizes across countries.
- Market and inflation research. Build a history of shelf prices across 32 European and US markets.
- Product catalogs and feeds. Get names, images, descriptions and categories for comparison sites and apps.
How does Lidl Scraper work?
- For each country it calls the Lidl site's own product search, the one behind the search box on lidl.de, lidl.fr and the other sites, and reads 60 products per request.
- Categories, brands, price ranges and "new" are passed to the site's search filters, so only matching products are downloaded.
- When a selection has more than 10,000 products, the most Lidl's search will page through, it is split into price ranges that each fit, and the parts are joined without duplicates.
- Each product is converted into one flat row with the same fields in every country.
- In incremental mode, each product's prices and stock are compared with the saved state from the previous run.
On the Apify platform a full German catalog (about 12,800 products) takes about 6 minutes, the French catalog about 3 minutes, and a keyword search a few seconds.
How much does it cost to scrape Lidl?
Lidl Scraper uses pay-per-event pricing. You pay for each product row saved to your dataset, and compute and proxy costs are included in the event price.
| Event | Free plan | Bronze | Silver | Gold |
|---|---|---|---|---|
| Product (per 1,000) | $1.99 | $1.79 | $1.59 | $1.49 |
What that means in practice, on the free plan:
- 50 products for a keyword: about $0.10
- All UK store products listed on lidl.co.uk (~570): about $1.13
- The whole German catalog (~12,800 products): about $25.47
- Incremental mode: you pay only for the changed products a run outputs, not for every product it checks.
Compact mode has the same price. You can set a maximum cost per run in Apify Console; the actor stops when it is reached. Apify's free plan comes with monthly platform credit you can spend on this actor.
How to use the Lidl API with Python and JavaScript
Use the Apify API with the official clients. Get your token in Console → Settings → Integrations.
Python (apify-client):
from apify_client import ApifyClientclient = ApifyClient("<YOUR_API_TOKEN>")run = client.actor("parsebird/lidl-scraper").call(run_input={"countries": ["DE", "FR"],"query": "kaffee","maxResults": 100,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["country"], item["name"], item["price"], item["unitPriceText"])
JavaScript (apify-client):
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });const run = await client.actor('parsebird/lidl-scraper').call({countries: ['GB'],onlyOffers: true,maxResults: 0,});const { items } = await client.dataset(run.defaultDatasetId).listItems();items.forEach((p) => console.log(p.name, p.price, p.lidlPlusPrice));
The full API reference for this actor is on the API tab. Results can also go straight to Google Sheets, Zapier, Make, Slack or your own webhook after each run.
Is it legal to scrape Lidl?
Lidl Scraper only collects public product information that anyone can see on Lidl's websites without logging in: product names, prices, availability and images. It does not collect personal data. Web scraping of publicly available data is generally legal, but you should check the website's terms of use and the laws that apply to you, especially if you plan to republish the data. Read more in Apify's article Is web scraping legal?
Other grocery and retail scrapers
| Actor | What it scrapes |
|---|---|
| Tesco UK & Ireland Scraper | Tesco grocery products and Clubcard prices |
| ALDI Australia Scraper | ALDI Australia products and prices |
| Carrefour MAF Scraper | Carrefour and HyperMax stores in the Middle East, Africa and Asia |
| Walmart Product Scraper | Walmart products and prices |
| Target Product Scraper | Target products and prices |
| BAUHAUS Product Scraper | BAUHAUS DIY products and prices |
FAQ
Do I need a Lidl account or the Lidl Plus app? No. The actor reads the public websites. Lidl Plus prices are shown on the sites, so they are included without an account.
Why does my country return only a few hundred products? Outside Germany, France, Poland, Spain, the Netherlands, Belgium, Czechia and Slovakia, Lidl's websites don't run an online shop. They show the current and upcoming in-store offers and part of the store range, so that's what the actor returns.
What language should my keyword and category be in?
The site's language: milch on lidl.de, lait on lidl.fr, milk on lidl.co.uk. If a category name isn't found, the log lists that site's main categories. Lidl's search also matches related products, the same way the site's search box does.
What's the difference between price, priceNormal and lidlPlusPrice?
price is what everyone pays today. priceNormal is the struck-through price when the product is discounted, otherwise the same as price. lidlPlusPrice is the price with the Lidl Plus app. Some in-store offers (for example in the UK, Italy and Poland) only have a Lidl Plus price, so price is null and the regular price, when the site shows it, is in lidlPlusDetails.
Is ian the product's EAN barcode?
No. ian is Lidl's own article number (IAN), which Lidl prints on products and in recall notices. The product search doesn't include EAN/GTIN barcodes, so the actor doesn't output them.
Can I scrape several countries in one run?
Yes. Add several codes to Countries. Max products per country applies to each one, and every row has its country.
Why is the order slightly different from the website?
Within a sort order, Lidl sorts product groups and bundles by its own reference price. For catalogs over 10,000 products the actor reads one price range at a time, so relevance order applies within each range.
Can I run it on a schedule? Yes. Create a schedule in Apify Console, for example every morning, and combine it with incremental mode to get only the changes.
Something doesn't work or a field is missing. What should I do? Open an issue on the Issues tab with the input you used. We read every report.