# Vynn free export sample

42 rows from a real Ontario, all-categories dashboard export prepared October 19,
2026. The CSV keeps the 24 columns the dashboard export builder wrote at that
time. New exports add UPC Match Status. That status was not recorded in this
historical sample, so it is not added retroactively.
See https://vynn.ai/data#export-columns for the current 25-column dictionary.
The original dictionary below describes this file. The JSON holds
the same rows plus the source details. Prices are in Canadian dollars.

## Provenance and selection

Source: an Ontario, all-categories export of 151,482 rows, built read-only
against the live database by Vynn's export code. observations.json records the
backend code version, row count and the SHA-256 of the full export. The full export stays private.

Rows are kept exactly as the export wrote them, including real banner, store
and city names. Only current rows from banners Vynn is collecting are eligible.
They are the rows first picked for the October 17, 2026 sample, in a fixed hash
order with at most three rows per category, twelve per banner and one per
product code. All 42 were still current in this export. They show a spread of
categories, stores and blank cells.
They are not a random sample or a basket, and cannot estimate province-wide
prices or grocery inflation. Categories are Vynn's own classification and can
be wrong for a single product.

## Files

- observations.csv: the sample rows for spreadsheets and Python.
- observations.json: the same rows plus version, selection and source details.
- analyse.py: dependency-free Python example; accepts the CSV path as argument.
- walkthrough.ipynb: the same analysis in a Jupyter notebook.

Download the CSV and Python file into the same directory, then run:

    python3 analyse.py observations.csv

The script counts rows, rows on promotion and rows with a unit price for each
store. Blank cells are counted as blank, never filled.

## Data dictionary

A blank cell means the value is unknown. It is never filled with a guess.

| Column | Meaning |
| --- | --- |
| Product Name | Product name as the retailer lists it. |
| Brand | Brand as listed. Blank when the retailer gives none. |
| UPC | Barcode (GTIN) when known. Blank otherwise; the retailer's own product code is in Retailer SKU. |
| Retailer SKU | The retailer's own product code for this listing. Not a barcode. |
| Category | Vynn department, such as Pantry or Snacks. Blank means the product has no published category yet. |
| Banner | Store banner name, such as No Frills. Blank when the banner has no published name. |
| Banner Slug | Short, stable banner code for joining files, such as nofrills. |
| Province | Province of the store in Store ID. |
| Store ID | The store Vynn collected the price for. Store Basis says whether the retailer confirmed it. |
| Store Basis | observed: the retailer confirmed the store. requested: the retailer's website did not confirm it, so the price may be the banner's default online price. |
| Store Name | Name of the store in Store ID, such as Zehrs Clairfield. Blank when Vynn has no name on file. |
| Store City | City of the store in Store ID. Blank when Vynn has no city on file. |
| Store FSA | First three characters of the postal code of the store in Store ID, such as N1L. Blank when Vynn has no valid postal code on file. |
| Price | Shelf price collected, in CAD. On promotion, this is the promotional price. |
| Regular Price | Non-promotional price from the same sighting as Price. Retailers usually show one only during a promotion. Blank when that sighting did not show one, or when it cannot be tied to this price. |
| On Promotion | true or false for the sighting behind Price. Promotion Basis says where it came from. Blank means not reported, or it cannot be tied to this price. Blank is not a regular price. |
| Promotion Basis | observed: the retailer marked the sighting as on or off promotion. inferred: a Sobeys-family banner showed no sale marker, read as false. Older sightings that Vynn could not classify stay blank, because the sale marker they need is recorded only from collections after this column was added. Blank when On Promotion is blank. |
| Unit Price | Vynn's comparison unit price on a common basis (per 100 g, 100 mL, kg or ct), not the retailer's raw unit price that the /v1 API returns as unit_price. Blank when the size or pack count cannot be trusted. |
| Unit Price Per | The unit: 100g, kg, 100mL, or ct. |
| Unit Price Source | derived: computed from the package size. observed: the retailer's own unit price, converted to the same basis. |
| Size | Package size as listed. Blank when the listed size is not reliable. |
| Price Date | When the price was collected, as a UTC timestamp. |
| Freshness | Set when the export 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. |
| Source | How the row was collected. v2_sweep is Vynn's scheduled collection. |

## Use and citation

Provided for evaluation of Vynn's data structure and the accompanying example.
This sample does not grant access to or redistribution rights for Vynn's full
dataset. Production use and broader extracts follow the applicable Vynn terms
and agreed licence. See https://vynn.ai/terms and https://vynn.ai/pricing.

Citation: Vynn.AI, Canadian grocery export sample, version 2026-10, Ontario
export prepared October 19, 2026. https://vynn.ai/data
Include an access date and describe any further transformation.
