Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

ALDI Scraper

Extract structured data from ALDI — ALDI grocery products and prices across 14 countries — the UK, Ireland, Germany, Austria, Switzerland, Italy, Slovenia, Hungary, Australia, the Netherlands, Belgium, France, Spain and Poland. Every row carries the shelf price, the per-unit comparison price and pack size.

ALDI Scraper on Apify →


🚀 How to use this actor

💚 $5 free Apify credits — every month

No credit card required. No commitment. Cancel anytime.

  1. Click sign up — pick GitHub, Google, or email; takes ~30 seconds
  2. Open this actor — input is pre-filled with a working example
  3. Click Start — export results as JSON, CSV, or Excel

Your $5 monthly platform credit is enough to run this actor right away — and again every month — scraping typically several hundred to several thousand results per run, depending on your input.

Key features

Search with filters — Search by keyword and location. Filter by ↕️ sort by, description format, and more.

Detail enrichment — Fetch full descriptions, structured metadata for each listing.

Incremental mode — Only get new or changed listings since your last run. Content hash per listing — no duplicates, no re-processing.

Change classification — Track unchanged, expired, cross-run repost detection across runs. Build audit trails of how listings evolve over time.

Compact output — Emit core fields only (AI-agent / MCP-friendly). Keeps response size small for LLM workflows.

Description truncation — Cap description length per listing to control output size and cost.

Result cap — Stop after N listings (up to 5.000). Set to 0 for the full catalog.

Export anywhere — Download as JSON, CSV, or Excel. Stream via Apify API, webhooks, or integrations with Make, Zapier, Airbyte, Keboola.

Structured data — Every listing returns the same schema with consistent field naming. All fields always present — null when unavailable, never omitted.


Use cases

Data pipeline automation Integrate with your ETL pipeline to collect structured listings from ALDI on a schedule. Export to CSV, JSON, or directly to your database. Use compact mode to control output size.

Market research Monitor listings, track trends, and analyze market dynamics with structured, deduplicated data from ALDI.

Change monitoring Run daily or hourly in incremental mode to capture only new, updated, or expired listings. Perfect for price-tracking, churn analysis, and alerting pipelines.

AI / LLM training data Structured JSON per listing is ready for RAG pipelines, embeddings, and agent workflows. Compact mode trims tokens for LLM context windows.


Quick start

{
  "query": "milk",
  "countries": [
    "GB",
    "DE"
  ],
  "maxResults": 20
}

Input parameters

Parameter Type Default Description
query string Product search keywords, e.g. "milk", "coffee", "chocolate". Paste a JSON array like ["milk","coffee"] to run several searches in one go. Leave empty to walk the market's entire assortment.
categories array [] Limit to categories, by name as shown on the storefront (e.g. ["Chilled Food","Bakery"]). Names are matched against that market's own category list; anything unmatched is reported and ignored rather than silently widening the run. Leave empty for the whole assortment.
brands array [] Limit to ALDI own-label or supplier brands, by name (e.g. ["COWBELLE","BARISSIMO"]). Leave empty for all brands.
themes array [] Limit to storefront themes — the seasonal and Specialbuys-style groupings (e.g. ["Beauty","Outdoor"]). Leave empty for all.
sortBy enum Order the storefront returns products in. Matters when you cap the run: price_asc with Max Results 100 gives the 100 cheapest products, not an arbitrary 100.
onSaleOnly boolean false Keep only products showing a struck-through was-price.
minPrice integer Keep only products at or above this shelf price, in the market's own currency.
maxPrice integer Keep only products at or below this shelf price, in the market's own currency.
includeUpcomingOffers boolean false Scrape the dated promotion pages instead of the catalogue, for every date the market publishes from today onward. ALDI announces promotions up to two weeks ahead, so this returns prices that are not on the shelf yet.
offerDates array [] Scrape specific promotion dates (YYYY-MM-DD), e.g. ["2026-08-06"]. Combines with Upcoming Promotions. Leave empty to scrape the catalogue instead.
startUrls array [] Paste product-listing or category URLs from the ALDI storefront. Each URL becomes its own task; results are merged and deduped by product across all URLs. When provided AND parseable, start URLs replace the search term and market fields.
countries array Countries to scrape — pick "All countries" for every market at once. Several can be combined to compare the same product across borders in one run; every row is tagged with its country, retail banner and currency. ALDI is two separate companies with separate assortments and separate prices, and Germany is served by BOTH: picking Germany returns the northern and southern ranges, each row labelled with the banner that sells it. Use the banner filter below to take only one. Clear this field entirely and the run stops immediately without scraping anything.
banners array Optional. Keep only products sold under these retail banners. Mostly useful for Germany, where ALDI NORD and ALDI SÜD each serve half the country with different ranges and different prices — leave empty to get both.
companies array Optional. ALDI is two independent companies. Pick one to scrape only its markets: ALDI SÜD covers the UK, Ireland, southern Germany, Austria, Switzerland, Italy, Slovenia, Hungary and Australia; ALDI NORD covers the Netherlands, Belgium, northern Germany, France, Spain and Poland. Leave empty for both. This is the operating company, not the shop sign — most of these markets trade under a plain "ALDI" banner, so the banner filter below cannot express "all of one company".
maxResults integer 25 Maximum total products (0 = unlimited). The largest market lists about 3,700 products.
includeDetails boolean true Fetch each product page for ingredients, the on-pack nutrition table, storage instructions and allergen claims. This data exists only on the ALDI SÜD storefronts (UK, Ireland, southern Germany, Austria, Switzerland, Italy, Slovenia, Hungary, Australia) — the ALDI NORD markets do not publish it at all, so turning this on costs nothing extra there and adds nothing. Off is faster and cheaper.
descriptionMaxLength integer 0 Truncate description to N chars. 0 = no truncation.
compact boolean false Core fields only (for AI-agent/MCP workflows).
incrementalMode boolean false Compare against previous run state. stateKey is optional — defaults to a signature of search inputs (queries, locations, startUrls, country) so different filter sets never share state.
stateKey string Optional. Stable identifier for the tracked search universe. Leave empty to auto-generate from search inputs.
skipReposts boolean false When incremental, skip listings whose content matches an expired listing from a prior run (cross-run duplicate detection).
telegramToken string Telegram bot token (from @BotFather). Required for Telegram notifications.
telegramChatId string Telegram chat or channel ID (e.g. "-100123456789"). Required when telegramToken is set.
discordWebhookUrl string Discord incoming webhook URL. Server Settings → Integrations → Webhooks → New Webhook.
slackWebhookUrl string Slack incoming webhook URL. api.slack.com/messaging/webhooks.
notificationLimit integer 5 Maximum number of listings included in each notification message (1–20).
notifyOnlyChanges boolean false When Incremental Mode is on, only send notifications for NEW and UPDATED listings. Has no effect outside incremental mode.
whatsappAccessToken string WhatsApp Cloud API permanent access token (System User token from Meta Business). Recipient must have messaged the business number within the last 24h (service-conversation window — free since Nov 2024).
whatsappPhoneNumberId string Your WhatsApp Business phone-number ID (numeric, from Meta dashboard). Required when whatsappAccessToken is set.
whatsappTo string Recipient phone in E.164 format without + (e.g. "436641234567"). Recipient must have messaged your business number within last 24h.
webhookUrl string Receives a JSON POST with {metadata, items} after each run. Universal escape hatch for n8n / Make / Zapier / custom backends.
webhookHeaders object Optional JSON object of custom headers (e.g. {"Authorization":"Bearer ..."}).
appConnector string Optional. Pick a connected app under Settings → API & Integrations to receive your results (including any contact details). Best-effort across MCP connectors as Apify expands its catalog.
mcpIssueTeam string Only when the connected app is an issue tracker: the team (name or ID) the summary issue is created under, if that app requires one.
descriptionFormat enum "all" Pick a single description representation. all keeps every variant; text / html / markdown drop the others.
excludeEmptyFields boolean false Drop null, empty-string, and empty-array fields from each record before push. Smaller payloads for AI agents and dashboards.
emitUnchanged boolean false When incremental mode is on, also emit listings whose content has not changed since the last run.
emitExpired boolean false When incremental mode is on, also emit listings that were seen before but are no longer found.

Output fields

Every listing returns the same 68-field schema. Missing values are null — never omitted.

  • sku
  • name
  • brand
  • fullName
  • slug
  • productUrl
  • portalUrl
  • source
  • country
  • banner
  • price
  • priceText
  • currency
  • unitPrice
  • priceUsd
  • priceEur
  • priceGbp
  • unitPriceUsd
  • unitPriceEur
  • unitPriceGbp
  • fxRateDate
  • unitPriceText
  • wasPriceText
  • savingsText
  • onOffer
  • bottleDepositText
  • hasPrice
  • wasPrice
  • unitPriceScale
  • promoLabel
  • regularPriceNote
  • deposit
  • hasDeposit
  • offerValidFrom
  • offerValidUntil
  • upcomingOffers
  • packSize
  • quantityUnit
  • availability
  • inStock
  • discontinued
  • articleType
  • category
  • subcategory
  • categories
  • categoryPath
  • imageUrl
  • galleryUrls
  • description
  • longDescription
  • ingredients
  • storageInstructions
  • nutritionalClaims
  • freeFrom
  • nutrition
  • labels
  • ageRestriction
  • onSaleDate
  • offerDate
  • scrapedDate
  • scrapedAt
  • parseStatus
  • listingId
  • searchQuery
  • contentQuality
  • detailFetched
  • contentHash
  • changeType

Sample output

One object per listing. Here is a real example from a production run:

{
  "sku": "000000000723538001",
  "name": "Technology Accessories",
  "brand": "BAUHN",
  "fullName": "BAUHN Technology Accessories",
  "slug": "bauhn-technology-accessories",
  "productUrl": "https://www.aldi.co.uk/product/bauhn-technology-accessories-000000000723538001",
  "portalUrl": "https://www.aldi.co.uk/product/bauhn-technology-accessories-000000000723538001",
  "source": "www.aldi.co.uk",
  "country": "GB",
  "banner": "ALDI",
  "price": 6.99,
  "priceText": "£6.99"
}

Truncated — full records contain 68 fields. See Output fields for the complete schema.

Try ALDI Scraper now — $5 free credit, no credit card →


Pricing

Pay only for what you extract. No subscription required — Apify's free $5 credit covers thousands of results.

Event Price (USD)
Actor Start $0.01
Result $0.002

See the actor on Apify for current pricing.


FAQ

How do I scrape ALDI? Use this actor on Apify to extract structured data from aldi.co.uk. Configure your search query and filters in the input, then click Start — no coding required.

How do I get ALDI data as JSON, CSV, or Excel? The actor writes each listing to Apify's dataset. Download as JSON, CSV, or Excel from the Console, stream via the API, or push to Make, Zapier, Airbyte, or Keboola.

Is it legal to scrape ALDI? Web scraping of publicly available data is generally legal. This actor only accesses publicly visible information. Always check ALDI's terms of service for your specific use case.

How much does it cost? Pay-per-event pricing — you only pay for listings extracted. Apify's free $5 credit is enough to run thousands of results before you pay anything.

How does incremental mode work? Each listing gets a content hash. On subsequent runs, only new or changed listings are emitted — saving time, compute, and storage. Expired listings can be tracked separately.

Do I need an API key or credentials? No. Just sign up for Apify, paste your input, and click Start. No credit card required.


Related products by Black Falcon Data

Browse all Black Falcon Data actors →


Getting started with Apify

New to Apify? Create a free account with $5 credit — no credit card required.

  1. Sign up — $5 platform credit included
  2. Open ALDI Scraper and configure your input
  3. Click Start — export results as JSON, CSV, or Excel

Need more later? See Apify pricing.


About Black Falcon Data

Black Falcon Data builds production-grade web scrapers for job boards and marketplace data. Browse our full actor catalog at www.blackfalcondata.com.


Last updated: 2026 08

About

Scrape aldi.co.uk and 8 more ALDI storefronts across UK, Ireland, Germany, Austria, Switzerland, Italy, Slovenia, Hungary and Australia. Every product row carries the shelf price, the per-unit comparison price and pack size, plus ingredients and the on-pack nutrition table.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors