Loblaws, No Frills, Superstore & Maxi Scraper API - Canada avatar

Loblaws, No Frills, Superstore & Maxi Scraper API - Canada

Pricing

from $0.75 / 1,000 results

Go to Apify Store
Loblaws, No Frills, Superstore & Maxi Scraper API - Canada

Loblaws, No Frills, Superstore & Maxi Scraper API - Canada

Scrape grocery prices from 12 Canadian chains: Loblaws, Real Canadian Superstore, No Frills, Zehrs, Fortinos, Valu-mart, Your Independent Grocer, City Market, Provigo, Maxi, Wholesale Club and Atlantic Superstore. Store-level pricing by postal code. JSON, CSV or Excel.

Pricing

from $0.75 / 1,000 results

Rating

5.0

(1)

Developer

JChaw

JChaw

Maintained by Community

Actor stats

4

Bookmarked

105

Total users

16

Monthly active users

5.8 hours

Issues response

an hour ago

Last modified

Share

Canadian Grocery Price Scraper API β€” Loblaws, Superstore, No Frills, Maxi, Provigo, Zehrs & More

Extract grocery prices and product data from 12 Canadian supermarket chains β€” Loblaws, Real Canadian Superstore, No Frills, Zehrs, Fortinos, Valu-mart, Your Independent Grocer, Independent City Market, Provigo, Maxi, Wholesale Club and Atlantic Superstore β€” including product names, current prices, sale prices, unit prices, package sizes, product images, product URLs, PC Optimum offers, and multi-buy deals.

Coverage spans every province: BC, Alberta, Saskatchewan, Manitoba, Ontario, Quebec, New Brunswick, Nova Scotia, PEI, Newfoundland, plus Yukon and the Northwest Territories. Prices are resolved per store, so a Maxi in MontrΓ©al and a Zehrs in Kitchener return their own shelf prices, not a national average.

This Actor is built for Canadian grocery price monitoring, retail analytics, grocery price comparison apps, food inflation research, and automated grocery data pipelines.

Use it to search products, scrape categories, monitor prices by postal code or store location, and export structured grocery data as JSON, CSV, Excel, or through the Apify API.

⚑ Quick start

Search Real Canadian Superstore for a few common items near Vancouver β€” paste this input and run:

{
"banner": "superstore",
"search_terms": ["eggs", "milk", "chicken breast"],
"postal_code": "V5X 0C4"
}

Run in the Apify console

  1. Click Try for free (or Run) on the actor page.
  2. In the Input tab, paste the JSON above β€” switch to the JSON view first if needed.
  3. Click Start. Results stream into the Output tab as they arrive.
  4. Download from Storage β†’ Dataset as JSON, CSV, or Excel.

Run via the API

Get your API token from console.apify.com/settings/integrations, then:

curl -X POST \
"https://api.apify.com/v2/acts/sunny_eternity~loblaws-grocery-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{"banner": "superstore", "search_terms": ["eggs", "milk", "chicken breast"], "postal_code": "V5X 0C4"}'

This synchronous endpoint is best for small test runs. It can timeout on larger scrapes. For scheduled runs, large categories, or recurring monitoring, use the async /runs endpoint and fetch results later from the returned defaultDatasetId. Official JavaScript and Python clients are also available.

Want a larger scrape? Use categories instead of search_terms (e.g., ["fruits-vegetables", "dairy-eggs"]). Replace "V5X 0C4" with your own Canadian postal code. Switch "banner" to any of the 12 supported chains β€” "maxi" and "provigo" for Quebec, "zehrs", "fortinos" or "valumart" for Ontario, "rass" for Atlantic Canada.

Need every Canadian banner in one call? Use the aggregate actor:

Pair this with our other per-retailer scrapers for full coverage:

Who is this for?

  • Developers building grocery price comparison apps
  • Retail analysts monitoring Canadian grocery prices
  • CPG brands tracking competitor pricing and promotions
  • Researchers studying food inflation and grocery affordability
  • Data teams building product price databases
  • Agencies and consultants creating retail dashboards
  • Indie hackers building shopping, deal, or price alert tools

Features

  • πŸš€ Fast & reliable: No slow browser automation, no CAPTCHAs β€” get clean structured data in seconds
  • πŸ›’ Twelve chains, one scraper: Superstore, No Frills, Loblaws, Zehrs, Fortinos, Valu-mart, Your Independent Grocer, City Market, Provigo, Maxi, Wholesale Club and Atlantic Superstore
  • 🍁 Nationwide: Every province plus Yukon and the NWT β€” including Quebec (Maxi, Provigo) and Atlantic Canada (Atlantic Superstore)
  • πŸ“Š Complete product data: Names, prices, unit prices, package sizes, images, URLs, and product IDs
  • πŸ’° Sale & promo tracking: Capture was-prices, multi-buy deals, and PC Optimum points offers
  • πŸ“ Location-aware pricing: Auto-resolve the nearest store by Canadian postal code or specify a store ID
  • βš–οΈ Normalized unit prices: Get comparable $/100g or $/100ml pricing across products
  • πŸ“ Multiple export formats: Download scraped data as JSON, CSV, or Excel
  • πŸ”Œ Integrations: Connect with Zapier, Make, Google Sheets, webhooks, and the Apify API

What data does the Canadian Grocery Scraper extract?

🏷️ Product nameπŸ’² Price & sale price
πŸ“¦ Package size (e.g., 500g)πŸ“Š Unit price (e.g., $0.66/100g)
πŸ–ΌοΈ Product image URLπŸ”— Product page URL
πŸ†” Product IDπŸ“ Store location ID
βš–οΈ Selling type (by weight/by unit)πŸ“ˆ Comparable unit price (normalized)
🏷️ Multi-buy dealsπŸ’Ž PC Optimum offers

⬇️ Input

FieldTypeRequiredDescription
bannerstringβœ…Store banner β€” see Supported stores for all 12
categoriesstring[]❌Departments or subcategories to scrape (multi-select dropdown)
categoryUrlsstring[]❌Custom category URLs for subcategories not in the dropdown
search_termsstring[]❌Keyword search queries (e.g., "milk", "organic eggs"); when combined with categories, acts as a name filter instead of a separate search call
postal_codestring❌Canadian postal code to auto-resolve the nearest store
locationIdstring❌Explicit store location ID (takes priority over postal_code)
group_variantsboolean❌Merge package-size variants of the same product into one row with a variants column (default: false)
on_sale_onlyboolean❌Only output products with is_on_sale: true β€” a wasPrice, deal, promotion, or sale badge (default: false)

At least one of categories, categoryUrls, or search_terms must be provided.

Category selection

The categories dropdown supports 130+ options organized by department:

  • πŸ“ Departments (e.g., fruits-vegetables, deli) β€” scrapes all subcategories within
  • β”” Subcategories (e.g., deli/deli-meat, bakery/bread) β€” scrapes a single subcategory
  • all β€” scrapes the entire store across all departments

When you select a department, the actor dynamically discovers all its subcategories via the store's API and queues each one for scraping.

Example inputs

Single subcategory:

{
"banner": "superstore",
"categories": ["bakery/bread"]
}

Entire department:

{
"banner": "superstore",
"categories": ["deli", "bakery"]
}

Mix of departments and subcategories:

{
"banner": "superstore",
"categories": ["meat", "dairy-eggs/cheese", "frozen-food/frozen-pizza"]
}

Full store scrape with location:

{
"banner": "superstore",
"categories": ["all"],
"postal_code": "V6M 2P8"
}

Search terms only:

{
"banner": "superstore",
"search_terms": ["organic eggs", "oat milk"]
}

Category + keyword filter:

{
"banner": "superstore",
"categories": ["dairy-eggs"],
"search_terms": ["cheese", "yogurt"]
}

Note: When categories (or categoryUrls) and search_terms are both provided, the search terms act as keyword filters on the category results rather than triggering separate search API calls. Only products whose names contain at least one of the specified terms are returned. Use search_terms alone (without categories) for a dedicated search query.

Sale items only (whole store):

{
"banner": "superstore",
"categories": ["all"],
"on_sale_only": true
}

Custom URL (for L4 subcategories not in dropdown):

{
"banner": "superstore",
"categoryUrls": ["https://www.realcanadiansuperstore.ca/en/food/fruits-vegetables/fresh-vegetables/lettuce-leafy-vegetables/c/29612"]
}

⬆️ Output

Results are stored in a dataset accessible from the Output or Storage tab. Export as JSON, CSV, or Excel.

JSON output example

{
"store": "Real Canadian Superstore",
"name": "Bananas",
"price": "0.69",
"unit_price": "454 g, $0.15/100g",
"image_url": "https://assets.shop.loblaws.ca/products/...",
"product_url": "https://www.realcanadiansuperstore.ca/bananas/p/...",
"product_id": "21023456",
"location": "1517",
"location_name": "Real Canadian Superstore Marine Drive",
"location_postal_code": "V5X 0C4",
"location_coordinates": { "lat": 49.2088, "lng": -123.1076 },
"category": "fresh-fruits",
"selling_type": "by_weight",
"package_size": "454g",
"parsed_package_size": {
"size": 454,
"unit": "g"
},
"normalized_package_size": {
"size": 454,
"unit": "g"
},
"parsed_unit_price": {
"value": 0.15,
"quantity": 100,
"unit": "g",
"unit_type": "weight"
},
"comparable_unit_price": 0.15,
"was_price": 0.89,
"is_on_sale": true,
"multi_buy_deal": "2 for $1.00",
"pc_optimum_offer": "1000 points"
}

Output fields

FieldDescription
storeChain name (Real Canadian Superstore, Maxi, Zehrs, …)
nameProduct display name
priceCurrent price (without $ symbol)
unit_priceRaw unit price string from store (e.g., "454 g, $0.15/100g")
product_urlDirect link to product page
locationStore ID the prices came from
location_nameStore name, when resolved from a postal code
location_postal_codeStore postal code, when resolved from a postal code
location_coordinatesStore latitude/longitude, when resolved from a postal code
selling_typeby_weight or by_unit β€” how the product is priced
package_sizePackage size as string (e.g., "500g", "2l")
parsed_unit_priceStructured unit price with value, quantity, and unit
comparable_unit_priceNormalized price per 100g or 100ml for comparison
was_pricePrevious price before sale (null if not on sale)
is_on_saleWhether the product currently has a deal
multi_buy_dealMulti-buy promotion text (e.g., "2 for $5.00")
pc_optimum_offerPC Optimum loyalty points offer, if any

πŸͺ Supported stores

BannerStore NameProvinces
superstoreReal Canadian SuperstoreBC, AB, SK, MB, ON, YT
nofrillsNo FrillsBC, AB, SK, MB, ON, NB, NS, PE, NL
loblawLoblawsBC, AB, ON
zehrsZehrsON
fortinosFortinosON
valumartValu-martON, QC
independentYour Independent GrocerBC, AB, SK, ON, NB, NS, PE, NL, YT, NT
independentcitymarketIndependent City MarketON
provigoProvigoQC
maxiMaxiQC, NB
wholesaleclubWholesale ClubBC, AB, SK, MB, ON, QC, NB, NS, NL
rassAtlantic SuperstoreNB, NS, PE

The scraper works identically across all twelve banners: same input, same output fields, same categories. Each banner prices independently, so the same SKU can differ by a dollar or more between them.

rass is Atlantic Superstore's internal banner code ("Real Atlantic SuperStore"). The actor also accepts "atlantic" and "atlantic superstore" as aliases, along with common alternates for the other banners ("loblaws", "rcss", "no frills", "valu-mart", "yig").

πŸ”§ Environment variables

None. Postal-code resolution uses the retailers' own public store directory, so the actor needs no API keys or credentials of any kind.

❓ FAQ

Is there an official Loblaws API?

Loblaws does not offer a public API for product or pricing data. This actor gives you a reliable, structured alternative β€” fresh grocery data without the maintenance overhead of building your own scraper.

Can I compare the same product across banners?

Yes. Run the actor once per banner with the same search_terms and the same region, and compare on product_id β€” Loblaw banners share a product catalogue, so an identical product_id is genuinely the same SKU at a different chain. For a ready-made cross-chain comparison with match scoring, use the Canadian Grocery Price Comparison actor instead.

Scraping publicly available product and price information is generally legal, but you are responsible for complying with Loblaws' terms of service and any applicable laws in your jurisdiction. Use the data responsibly and avoid excessive request volume.

How much does it cost to run?

The actor runs on Apify's pay-per-usage model. Small scrapes (a few categories or search terms) typically fit within Apify's free tier credits. Larger full-store scrapes scale with the number of products and API calls.

Can I scrape multiple categories at once?

Yes! Select multiple departments or subcategories in the categories dropdown, or use "all" to scrape the entire store. You can also combine categories with search terms in a single run.

How does category selection work?

Selecting a department (e.g., "Deli") scrapes all of its subcategories automatically. The actor queues every subcategory under the chosen department, so you get the full department's products in one run.

How do I find the location ID for my store?

You usually don't need one β€” give the actor a postal_code and it resolves the nearest store of that banner from the retailer's own store directory, then reports the store's name, address and coordinates on every output row.

Pass locationId only when you want one specific store. A few examples:

Real Canadian Superstore: 1517 (Vancouver Marine Dr), 1520 (Vancouver Grandview Hwy) No Frills: 3641 (Vancouver Denman), 3410 (Vancouver Fraser) Loblaws: 1000 (Toronto Queen St) Maxi: 7234 (MontrΓ©al Mt-Royal Ouest) Β· Provigo: 7907 (MontrΓ©al Parc) Zehrs: 0560 (Kitchener Laurentian) Β· Fortinos: 2265 (Hamilton Dundurn) Atlantic Superstore: 0315 (Oromocto NB)

Which banner should I pick for my region?

Quebec is Maxi and Provigo. Atlantic Canada is Atlantic Superstore (rass), No Frills and Your Independent Grocer. Ontario has the widest choice: Loblaws, Superstore, No Frills, Zehrs, Fortinos, Valu-mart, City Market and Your Independent Grocer. Western Canada is Superstore, No Frills, Your Independent Grocer and Wholesale Club.

If you ask for a postal code outside a banner's footprint, the actor tells you which provinces that banner actually operates in rather than silently returning a store from another province.

Can I integrate the Loblaws scraper with other tools?

Yes! Use Apify integrations to connect with Zapier, Make, Google Sheets, Airbyte, and more. You can also trigger runs via webhooks or the Apify API and export scraped data as JSON, CSV, or Excel.

Can I schedule recurring Loblaws scrapes?

Yes β€” use Apify's built-in scheduler to run the actor daily, weekly, or on any cron schedule. This is ideal for tracking grocery price history over time or monitoring sales and PC Optimum offers.

πŸ“ Your feedback

We're always working on improving the performance of our Actors. If you've got any technical feedback for the Canadian Grocery Scraper or found a bug, please create an issue on the Actor's Issues tab.