Aldi Weekly Ad Scraper avatar

Aldi Weekly Ad Scraper

Pricing

from $1.80 / 1,000 weekly ad offers

Go to Apify Store
Aldi Weekly Ad Scraper

Aldi Weekly Ad Scraper

Scrape ALDI US weekly ads and ALDI Finds by ZIP code. Export sale price, regular price, brand, size, stock, and images from the public circular — an Aldi weekly ad API alternative for Python, Node.js, and MCP.

Pricing

from $1.80 / 1,000 weekly ad offers

Rating

0.0

(0)

Developer

Andrej Kiva

Andrej Kiva

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

21 hours ago

Last modified

Share

Aldi Weekly Ad Scraper — ZIP Grocery Prices

Disclaimer: Unofficial tool — not affiliated with, sponsored by, or endorsed by ALDI or Instacart. Data is read from publicly accessible aldi.us circular pages only. No login. You are responsible for complying with applicable law and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

This Aldi weekly ad scraper turns the public US weekly circular and ALDI Finds flyer into a structured Apify dataset, scoped to a store ZIP code. Export sale price, regular price, brand, size, stock, and images as JSON or CSV — an Aldi weekly ad API alternative for Python, Node.js, and MCP.

It is not a full 13k-SKU grocery catalog. Pair it with a marketplace scraper when you need online comps rather than ZIP-local advertised specials.

Grocery weekly adsUS mass retailEU Lidl leafletsMarketplace comps
Aldi Weekly Ad Scraper ◄── you are hereWalmart ScraperLidl Weekly Offers ScraperAmazon Search Scraper · Tractor Supply Product Scraper

When to use this Actor

  • Aldi weekly ad scrape for one US ZIP (this week’s sale circular / flyer)
  • ALDI Finds scraper for limited-run SKUs, plus an optional next-week preview
  • Grocery price monitoring on advertised ALDI prices, percent-off badges, and unit price
  • Deal aggregators / meal-planning feeds that need ZIP-local ALDI offers
  • CPG / private-label research on ALDI exclusive brands in the circular
  • Scheduler jobs that refresh after Wednesday when the new ad drops

When not to use this Actor

  • Full aisle catalog dumps — this Actor is the weekly circular, not every SKU
  • Aldi Australia, UK, Ireland, or Germany (Nord/Süd / Hofer) — US aldi.us only
  • Checkout, cart, Instacart account, or login automation
  • Store-locator crawls as a primary job — pass a ZIP; the Actor resolves the store
  • Amazon search — use Amazon Search Scraper

Key Features

  • ZIP-scoped grocery prices — ALDI US prices differ by store; every row is stamped with ZIP, store name, city, and state
  • Weekly ad + ALDI Finds — sale circular (~150–250 items) and limited-run Finds, including next-week preview when published
  • Sale fields — current price, regular price, dollar off, percent off, unit price, on-sale flag
  • Stock + images — ZIP-local availability, product URL, and primary image
  • Fast HTTP — public storefront JSON via Chrome TLS impersonation; no headless browser
  • Simple input — ZIP in, offers out; optional keyword and price filters

Use Cases

Use caseWhat you getWhy it helps
Weekly ad trackerprice, regularPrice, discountPercent, weekRefresh the circular after Wednesday
ZIP comparisonzipCode, storeId, storeNameSame SKU, different stores
ALDI Finds calendarisAldiFinds, collection, next-week toggleLimited-run SKUs that rotate weekly
Deal / meal-planning appsTitle, brand, size, image, product URLPopulate a grocery deals feed
Private-label researchisStoreBrand, brand, dietary badgesTrack exclusive brands on promotion

Input Parameters

ParameterTypeDefaultDescription
zipCodeString60174Required 5-digit US ZIP
includeThisWeekBooleantrueThis week’s weekly ad (sale circular)
includeAldiFindsBooleantrueThis week’s ALDI Finds
includeNextWeekBooleanfalseUpcoming ALDI Finds preview
keywordStringemptyOptional title/brand substring filter
minPrice / maxPriceNumberUSD shelf-price bounds
onSaleOnlyBooleanfalseKeep rows marked as sale vs regular
maxItemsInteger200Max dataset rows; 0 = all selected circulars
requestDelaySecsNumber0.2Delay between HTTP requests
proxyConfigurationObjectUS proxyApify Proxy — US recommended

Input Example — this week’s ad + Finds

{
"zipCode": "60174",
"includeThisWeek": true,
"includeAldiFinds": true,
"includeNextWeek": false,
"maxItems": 200
}

Input Example — next-week Finds preview

{
"zipCode": "10001",
"includeThisWeek": false,
"includeAldiFinds": false,
"includeNextWeek": true,
"maxItems": 0
}

Input Example — keyword filter

{
"zipCode": "60174",
"keyword": "milk",
"onSaleOnly": true,
"maxItems": 50
}

Output Format

Each dataset row is one circular offer at the requested ZIP.

FieldTypeDescription
productIdStringALDI product id
titleStringProduct name
brandStringBrand (null when the circular omits it)
isStoreBrandBooleanALDI exclusive label
size / unitStringPack size / pricing unit
priceNumberCurrent USD price
regularPriceNumberPre-sale price when discounted
discount / discountPercentNumberDollar off / percent off
pricePerUnitStringUnit-price string when shown
isOnSaleBooleanSale badge or regular > current
inStock / stockLevelBoolean / StringZIP-scoped availability
collectionStringweekly-specials, aldi-finds, or upcoming-aldi-finds
weekStringthis_week or next_week
isAldiFindsBooleanFinds circular
zipCodeStringRequested ZIP
storeId / storeNameStringResolved ALDI location
storeCity / storeStateStringCity and state
productUrlStringPublic product URL
imageUrlStringPrimary image
dietaryAttributesArrayStorefront badges
scrapedAtStringUTC timestamp

Output Example

{
"source": "aldi.us",
"productId": "19115493",
"title": "USDA Choice Black Angus Petite Sirloin Steak, per lb",
"brand": null,
"isStoreBrand": false,
"price": 11.69,
"regularPrice": 12.99,
"discount": 1.3,
"discountPercent": 10,
"priceCurrency": "USD",
"isOnSale": true,
"inStock": true,
"collection": "weekly-specials",
"week": "this_week",
"isAldiFinds": false,
"zipCode": "60174",
"storeId": "20785",
"storeName": "ALDI - BAT 43 - St. Charles",
"productUrl": "https://www.aldi.us/store/aldi/products/19115493-black-angus-choice-petite-sirloin-steak-per-lb",
"scrapedAt": "2026-09-20T13:03:42Z"
}

Integration examples

Node.js

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawloop/aldi-weekly-ad-scraper').call({
zipCode: '60174',
includeThisWeek: true,
includeAldiFinds: true,
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.slice(0, 5));

Python

from apify_client import ApifyClient
client = ApifyClient(token="YOUR_TOKEN")
run = client.actor("crawloop/aldi-weekly-ad-scraper").call(run_input={
"zipCode": "60174",
"includeThisWeek": True,
"includeAldiFinds": True,
"maxItems": 50,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item.get("title"), item.get("price"), item.get("zipCode"))

cURL

curl -X POST "https://api.apify.com/v2/acts/crawloop~aldi-weekly-ad-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"zipCode":"60174","includeThisWeek":true,"includeAldiFinds":true,"maxItems":50}'

MCP and AI assistants

Use this Actor from AI tools via Apify MCP. Connect your Apify account, then call this Actor by its Store ID crawloop/aldi-weekly-ad-scraper.

Example prompts:

  • "Run Aldi Weekly Ad Scraper for ZIP 60174 and return the top 20 sale rows as JSON"
  • "Scrape this week's ALDI Finds for ZIP 10001 and summarize brands, prices, and percent off"
  • "Chain Aldi Weekly Ad Scraper then Amazon Search Scraper to compare an ALDI Finds SKU vs Amazon listings"

Suite next step

After ZIP-local ALDI circular prices, run Walmart Scraper for ZIP-local mass-retail comps, Lidl Weekly Offers Scraper for European Lidl leaflets, Amazon Search Scraper for online comps on the same SKUs, or Tractor Supply Product Scraper for US rural-retail catalog prices.

FAQ

Why do I have to pass a ZIP?
ALDI US prices and assortment are store-specific. A price without a store is not a fact. The ZIP selects the store; it is not a post-filter.

Weekly ad vs ALDI Finds?
The weekly ad is the sale circular (collection=weekly-specials). ALDI Finds are limited-run items for the current week. Toggle includeNextWeek for the preview when ALDI has published it (typically Wednesday).

Can I scrape Aldi with Python or Node.js?
Yes. Use the Apify client examples above, or call the Actor from an AI assistant via MCP. The dataset is JSON — title, sale price, regular price, brand, size, stock, ZIP, and product URL.

What if the ZIP has no nearby store?
The run fails with a clear status message. No offer rows are written.

Is this the full grocery catalog?
No. It is the circular (plus Finds). Keyword search across every SKU is out of scope.

Are filtered-out rows charged as results?
No. Only dataset offers that pass your keyword / price / sale filters are charged as results.

US only?
Yes. This Actor reads the public US storefront. Other country catalogs are out of scope.

Notes

  • Prefer US Apify Proxy. Switch to RESIDENTIAL US if GraphQL returns 403.
  • Circulars usually refresh Wednesday. Next-week Finds can be empty earlier in the week.
  • Duplicate products that appear in both the weekly ad and ALDI Finds keep the Finds row.
  • Some weekly-ad rows omit brand; title, price, and product URL still populate.