Loblaws Grocery Price Scraper - Canada avatar

Loblaws Grocery Price Scraper - Canada

Pricing

from $0.75 / 1,000 results

Go to Apify Store
Loblaws Grocery Price Scraper - Canada

Loblaws Grocery Price Scraper - Canada

Scrape Loblaws, Real Canadian Superstore & No Frills product data, prices, PC Optimum offers & deals. Fast, no-code Loblaws scraper. Export JSON/CSV.

Pricing

from $0.75 / 1,000 results

Rating

5.0

(1)

Developer

JChaw

JChaw

Maintained by Community

Actor stats

1

Bookmarked

38

Total users

5

Monthly active users

3 hours ago

Last modified

Share

πŸ›’ What is Loblaws Grocery Scraper?

Loblaws Grocery Scraper lets you extract product and pricing data from Canadian grocery stores, helping you track prices, compare deals, and build grocery price databases with just a few clicks.

  • Track grocery prices: Extract product names, prices, unit prices, and images to monitor price changes over time
  • Compare across stores: Scrape Real Canadian Superstore and No Frills to find the best deals
  • Build price databases: Automate data collection for grocery price comparison apps or research
  • Analyze unit pricing: Get normalized $/100g or $/100ml pricing for apples-to-apples comparison
  • Location-aware pricing: Specify a postal code or store ID for location-specific pricing
  • Promotional tracking: Capture sale prices, multi-buy deals, and PC Optimum offers

The scraper uses the internal Loblaws API directly, bypassing the need for slow browser automation and providing fast, reliable data extraction.

What data does Loblaws 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: superstore or nofrills
categoriesstring[]❌Departments or subcategories to scrape (multi-select dropdown)
categoryUrlsstring[]❌Custom category URLs for subcategories not in the dropdown
search_termsstring[]❌Search terms to query (e.g., "milk", "organic eggs")
postal_codestring❌Canadian postal code to auto-resolve the nearest store
locationIdstring❌Explicit store location ID (takes priority over postal_code)

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"]
}

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",
"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
storeStore name (Real Canadian Superstore or No Frills)
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
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 NameAPI Handler
superstoreReal Canadian SuperstoreLoblaws API
nofrillsNo FrillsLoblaws API

Both stores use the same underlying Loblaws API (PC Express BFF), so the scraper works identically for both.

πŸ”§ Environment variables

VariableRequiredDescription
BULLSEYE_API_KEY❌API key for postal code β†’ store ID resolution
BULLSEYE_CLIENT_ID❌Client ID for postal code β†’ store ID resolution

These are only needed if you use the postal_code input field. If you always specify locationId directly, they are not required.

❓ FAQ

How does it work?

It calls the internal Loblaws BFF API directly (the same API their website uses), which is much faster and more reliable than browser-based scraping. The scraper handles pagination automatically, requesting each page until all products are collected.

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 discovery work?

When you select a department (e.g., "Deli"), the actor calls the Loblaws API with the L2 department ID. The API returns a navigation tree containing all L3 subcategories (Deli Meat, Deli Cheese, etc.). Each subcategory is then scraped individually to collect all products.

How do I find the location ID for my store?

Use the postal_code field instead β€” the actor will automatically resolve the nearest store. Alternatively, common Vancouver store IDs:

Real Canadian Superstore: 1517 (Marine Dr), 1520 (Grandview Hwy) No Frills: 3641 (Denman), 3410 (Fraser), 3671 (Alma), 9532 (Hastings E)

Can I integrate this with other tools?

Yes! Use Apify integrations to connect with Zapier, Make, Google Sheets, and more. You can also use webhooks or the Apify API to trigger actions when scraping completes.

πŸ“ Your feedback

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