VynnAI

Canadian grocery price data.
Download it. Check it.

Start with 42 real rows from an Ontario export in its original format. Read the fields, open the file, and reproduce the example. No account required.

Ontario export prepared 2026-10-19 · CAD · rows taken unchanged from a 151,482-row file.

This sample keeps its original columns. New exports add UPC Match Status; see the current export columns below. Use the separate data dictionary link above for the sample's original columns.

What the sample holdsRows per store, with promotion and unit-price fields reported
ChainStore codeRowsOn promotionWith unit price
Foodlandfoodland-3237303
Fortinosfortinos-0046401
FreshCofreshco-2912524
Loblawsloblaws-1000201
No Frillsnofrills-0266313
Real Canadian Superstorercss-0512713
Safewaysafeway-4809402
Sobeyssobeys-0637313
Wholesale Clubwholesaleclub-0202202
Your Independent Groceryig-0405312
Zehrszehrs-0500626

Products grouped by store, with their recorded promotion and unit-price fields.

Reproduce this table in Python

Save the CSV and Python script in the same folder. Run the command below with Python 3; no extra packages or API key are needed.

python3 analyse.py observations.csv

The sample's dictionary describes its original export format. Current export columns are listed below. The API reference shows every field.

A grocery price dataset by store and province.

We track 82 stores across 18 chains in every province, plus the Yukon and Northwest Territories, checked 2026-10-23. Collection runs on a nightly schedule. Start with the free Ontario sample above.

Check chains and provinces
Start with a CSVOpen the sample and inspect its fields. For a larger extract, choose the provinces, dates, categories and intended use.
Keep store identityStore Basis distinguishes retailer-confirmed stores from requested stores.
Choose files or requestsUse exports for a defined dataset, or the API reference for repeatable queries.

The product, place, and date.

Keep each price with its product, place and date. The current series starts March 22, 2026; the sample above includes its own Ontario dates.

Read the price history guideWork with grocery promotion data

Product

Name, brand, size, and category fields where available.

Price

Shelf, regular, and sale price where available.

The chain and store

The grocery chain and store details where returned.

The place

Canadian province and location details where returned.

The date

When we collected the price, where returned.

How we collect it

The source of the price and notes for comparing it.

Follow prices through time.

Read the dated prices together with the collection method and store coverage.

Read the collection methodSee which stores we track
Recorded priceA price we saw for a product, chain, province, and date.
Missing priceA day without a recorded price is a gap in collection.
The chain's own product codeUse this code to join records within the same chain.
BarcodeA barcode can help connect the same product across chains when a match is available.

Use the source that matches the question.

Listing prices, official statistics and checkout data each answer a different question.

SourceWhat it containsTypical use
Prices on retailer websitesWhat Vynn saw for a product, chain, province, store, and date.Product-level pricing and promotion analysis.
Official Canadian food-price statisticsMonthly averages and inflation measures for selected categories and products.Economic reports and monthly inflation comparisons.
Point-of-sale dataWhat shoppers bought at checkout, including quantities and sales value where supplied.Sales volumes and basket analysis.

Vynn records online shelf prices, with the store and collection date attached.

Use weekly grocery data in food inflation research

Columns in the dashboard export.

New CSV files from your account have these 25 columns, in this order. Use the sample's own data dictionary for its original columns.

Product NameProduct name as the retailer lists it.
BrandBrand as listed. Blank when the retailer gives none.
UPCBarcode when known. Blank otherwise; the chain's own product code is listed separately.
UPC Match Statussingle_listing: one listing has this barcode at the same chain, province and store, after any category filter. multiple_listings: more than one listing shares it in that group; keep their product codes and prices separate. unknown: the barcode or matching details are missing. This counts listings; it does not confirm that they are the same product.
Retailer SKUThe retailer's own product code for this listing. Not a barcode.
CategoryVynn department, such as Pantry or Snacks. Blank means the product has no published category yet.
BannerGrocery chain name, such as No Frills. Blank when the chain has no published name.
Banner SlugShort, stable chain code for joining files, such as nofrills.
ProvinceProvince of the store listed in this row.
Store IDThe store Vynn requested a price for. Store Basis says whether the retailer confirmed it.
Store Basisobserved: the retailer confirmed the store. requested: the retailer's website did not confirm it, so the price may be the chain's default online price.
Store NameName of the store listed in this row, such as Zehrs Clairfield. Blank when Vynn has no name on file.
Store CityCity of the store listed in this row. Blank when Vynn has no city on file.
Store FSAFirst three characters of the store's postal code, such as N1L. Blank when Vynn has no valid postal code on file.
PriceShelf price collected, in CAD. On promotion, this is the promotional price.
Regular PriceNon-promotional price collected alongside this price. Retailers usually show one only during a promotion. Blank when none was shown or it cannot be tied to this price.
On Promotiontrue or false for this price. Promotion Basis says where the sale flag came from. Blank means not reported or it cannot be tied to this price. Blank does not mean a regular price.
Promotion Basisobserved: the retailer marked the price as on or off promotion. inferred: a Sobeys-family chain showed no sale marker, read as false. Older prices that cannot be classified stay blank; the required sale marker was recorded only after this column was added. Blank when On Promotion is blank.
Unit PriceVynn's comparison price per 100 g, 100 mL, kg or item. The API's unit_price field instead returns the retailer's own unit price. Blank when the package size or item count is unreliable.
Unit Price PerThe unit: 100g, kg, 100mL, or ct.
Unit Price Sourcederived: calculated from the package size. observed: the retailer's own unit price, converted to the same unit.
SizePackage size as listed. Blank when the listed size is not reliable.
Price DateWhen the price was collected, as a UTC timestamp.
FreshnessSet when the file was prepared. current: collected in the 14 days before that. stale: older; keep or filter these rows as you need. unknown: no collection date. For later analysis, use Price Date.
SourceHow the row was collected. v2_sweep is Vynn's scheduled collection.

Try the data yourself.

Review the sample options, or create a free account and make your first query.