Save-On-Foods & PriceSmart Foods Scraper API - Canada avatar

Save-On-Foods & PriceSmart Foods Scraper API - Canada

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Save-On-Foods & PriceSmart Foods Scraper API - Canada

Save-On-Foods & PriceSmart Foods Scraper API - Canada

Extract product data from Pattison Food Group grocery stores (Save-On-Foods, PriceSmart Foods), including prices, images, package sizes, and normalized unit pricing. Export data in JSON/CSV, run via API, or schedule regular price monitoring.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

JChaw

JChaw

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 hours ago

Last modified

Share

Save-On-Foods & PriceSmart Grocery Price Scraper API

Extract grocery prices and product data from Save-On-Foods and PriceSmart Foods, including product names, current prices, sale prices, unit prices, package sizes, product images, product URLs, weekly deals, and availability.

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

Use it to collect structured Save-On-Foods and PriceSmart Foods product data by search term, category, postal code, or store location, then export results as JSON, CSV, Excel, or through the Apify API.

Who is this for?

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

Features

  • πŸš€ Fast & reliable: Calls the internal Pattison storefrontgateway API directly β€” no slow browser automation, no CAPTCHAs
  • πŸ›’ Two banners, one scraper: Extract data from Save-On-Foods and PriceSmart Foods with a single actor
  • πŸ“Š Complete product data: Names, prices, unit prices, package sizes, images, URLs, and product IDs
  • πŸ’° Sale & promo tracking: Capture was-prices and multi-buy deals
  • πŸ“ Location-aware pricing: Auto-resolve the nearest store by Canadian postal code or specify a store ID (rsid)
  • βš–οΈ 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 Save-On-Foods & PriceSmart Scraper extract?

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

⬇️ Input

FieldTypeRequiredDescription
bannerstringβœ…Store banner: saveonfoods or pricesmart
categoriesstring[]✳️Departments or subcategories to scrape (multi-select dropdown)
categoryUrlsstring[]✳️Custom category IDs for subcategories not in the dropdown
postal_codestring✳️Canadian postal code to auto-resolve the nearest store
locationIdstring✳️Explicit store rsid (takes priority over postal_code)

✳️ At least one of categories or categoryUrls must be provided to choose what to scrape. ✳️ At least one of postal_code or locationId must be provided so the actor knows which store to query. If both are provided, locationId takes priority. The default input ships with postal_code set to V6M 2P8 (Vancouver, BC).

Category selection

The categories dropdown supports 125+ options organized across 14 top-level departments and 111 subcategories:

  • πŸ“ Departments (e.g., fruits-vegetables, bakery) β€” scrapes all subcategories within
  • β”” Subcategories (e.g., dairy-eggs/cheese, bakery/breads) β€” scrapes a single subcategory

When you select a department, the actor automatically queues each of its subcategories for scraping.

Example inputs

Single subcategory:

{
"banner": "saveonfoods",
"categories": ["bakery/breads"]
}

Entire department:

{
"banner": "saveonfoods",
"categories": ["dairy-eggs", "bakery"]
}

Mix of departments and subcategories:

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

Scrape with postal code:

{
"banner": "saveonfoods",
"postal_code": "V6M 2P8",
"categories": ["dairy-eggs", "meat-seafood", "frozen/ice-cream-desserts"]
}

Scrape at a specific store (rsid):

{
"banner": "pricesmart",
"locationId": "2274",
"categories": ["fruits-vegetables/fresh-fruit", "bakery/breads", "pantry/canned-packaged"]
}

Custom category IDs (for subcategories not in the dropdown):

{
"banner": "saveonfoods",
"categoryUrls": ["30683"]
}

⬆️ Output

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

JSON output example

{
"store": "Save-On-Foods",
"name": "Organic Whole Milk 2L",
"price": "5.99",
"unit_price": "$0.30/100ml",
"image_url": "https://assets.shop.saveonfoods.com/products/...",
"product_url": "https://www.saveonfoods.com/sm/planning/rsid/1982/product/...",
"product_id": "00000000123456",
"location": "1982",
"location_name": "Save-On-Foods Marine Drive",
"category": "dairy-eggs/milk-creams",
"selling_type": "by_unit",
"package_size": "2000ml",
"comparable_unit_price": 0.30,
"was_price": null,
"is_on_sale": false,
"multi_buy_deal": null
}

Output fields

FieldDescription
storeStore name (Save-On-Foods or PriceSmart Foods)
nameProduct display name
priceCurrent price (without $ symbol)
unit_priceRaw unit price string from store (e.g., "$0.30/100ml")
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")
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")
locationStore location ID (rsid)
location_nameStore name (e.g., "Save-On-Foods Marine Drive")

πŸͺ Supported stores

BannerStore NameAPI Handler
saveonfoodsSave-On-FoodsPattison Storefront Gateway API
pricesmartPriceSmart FoodsPattison Storefront Gateway API

Both stores are operated by Pattison Food Group and use the same underlying Storefront Gateway API, so the scraper works identically for both.

❓ FAQ

How does the Save-On-Foods & PriceSmart scraper work?

It calls the internal Pattison Storefront Gateway API directly β€” the same API the Save-On-Foods and PriceSmart Foods websites use β€” which is much faster and more reliable than browser-based scraping or Puppeteer automation. The scraper handles pagination automatically, requesting each page until all products are collected.

Is there an official Save-On-Foods or PriceSmart API?

Pattison Food Group does not offer a public API for product or pricing data. This actor gives you a reliable alternative by calling the same internal endpoints used by the Save-On-Foods and PriceSmart Foods websites, so you get fresh, structured grocery data without browser automation.

Scraping publicly available product and price information is generally legal, but you are responsible for complying with each retailer's 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) 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 to scrape them in a single run. Selecting a department automatically queues all of its subcategories.

Which provinces does this cover?

Save-On-Foods and PriceSmart Foods operate primarily in British Columbia, Alberta, Saskatchewan, Manitoba, and Yukon. Postal code resolution works for all major Canadian metro areas served by these banners.

How do I find the location ID (rsid) for my store?

Use the postal_code field instead β€” the actor will automatically resolve the nearest store. Alternatively, browse to your store on saveonfoods.com or pricesmartfoods.com β€” the rsid appears in the URL (e.g., /sm/planning/rsid/1982/). Common Vancouver store IDs:

Save-On-Foods: 1982 (Marine Drive) PriceSmart Foods: 2274

Can I integrate the 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 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 weekly deals.

Scraping more Canadian grocery banners? Pair this actor with our Loblaws scraper for full national coverage:

πŸ“ Your feedback

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