VynnAI

Canadian grocery price history

A price series can show how an observed listing changed. To use it well, keep the retailer identity, province and observation dates together.

Start with the question

For a product-level question, retrieve the history of a retailer SKU in one province. For a broad measure of price movement, use the weekly Canadian Grocery Price Index and its matched-model methodology. A single listing is not a national average.

Vynn collects retailer price observations on a scheduled reference-store panel. A requested lookback window does not guarantee a record on every date or for every product.

Request a product's history

Use a retailer SKU from a resolved product result. Replace RETAILER_SKU below and set VYNN_API_KEY privately in your server environment. Keep keys out of browser code, URLs and shared files.

curl --get 'https://vynn.ai/v1/prices/history' \
  --data-urlencode 'product_id=RETAILER_SKU' \
  --data-urlencode 'province=ON' \
  --data-urlencode 'period=30d' \
  --header "Authorization: Bearer $VYNN_API_KEY"

product_id means the retailer's SKU here. A UPC barcode is not a substitute. The route also accepts an older parameter named upc, but it treats that value as a SKU; it does not resolve a barcode into a product.

The current public route accepts product_id, province and period. It does not accept a banner filter. Inspect each returned observation's banner before using the result as a series for one retailer.

Read the response without filling the gaps

Illustrative response using the API's field names. These sample values are not collected product data.

{
  "sku": "SAMPLE_SKU",
  "product_name": "Sample product",
  "province": "ON",
  "period_days": 30,
  "observations": [
    {
      "date": "2026-08-31",
      "price": 4.49,
      "banner": "Sample retailer — Ontario"
    },
    {
      "date": "2026-09-02",
      "price": 4.79,
      "banner": "Sample retailer — Ontario"
    }
  ]
}

In this example, the observed price is $4.49 on August 31 and $4.79 on September 2. There is no observation for September 1. You cannot infer that day's price, or when the change occurred, from these two records.

What each field tells you
FieldHow to use it
skuThe requested listing identifier. The same text at another retailer is not automatically the same product.
provinceThe requested Canadian scope. It does not make the result representative of every store in that province.
period_daysThe lookback requested, not the number of observed days.
observationsDated prices with a banner where available. An empty array is not a zero price or evidence that the item was unavailable.

Before charting or comparing

  • Keep different returned banners in separate series. Do not join them into one continuous price line.
  • If a banner is null, leave the observation unattributed. Do not assign it to the retailer you expected.
  • Preserve missing dates. Any interpolation is your analysis, not an observed Vynn price.
  • Confirm the product's package size and identity before comparing listings. A similar name alone does not establish equivalence.

This endpoint supplies dates, prices and banner context. It does not return a store identifier for each observation, transaction volume, or a guarantee of historical availability. If your analysis requires exact store-level series, establish that scope before choosing a delivery.