Skip to main content
The Competitor Prices dataset allows you to upload, monitor, and analyze competitor pricing at SKU level over time. This dataset powers:
  • Competitive positioning analysis
  • Price gap and price index calculations
  • Dynamic pricing automation
  • Promo monitoring
  • AI elasticity and competitive pressure modeling
Each row represents:
One competitor price observation for one product at a specific point in time

Dataset structure

Competitor Prices is a time-series dataset. You can upload:
  • Historical snapshots (6–24 months recommended)
  • Daily / weekly price updates
  • Automated feeds (scraping, Google Shopping, APIs)

Data schema

All required and optional fields are listed below.
Field NameRequiredTypeFormatDescriptionAlternative NamesExample
productId✅ YesstringTextProduct identifier linked to your Products datasetproduct_id, sku_id, item_id, product_codeP001
datetime✅ YesdatetimeYYYY-MM-DD HH:MM:SSDate & time of price observationdate, timestamp, observed_at, price_date2026-02-22 14:35:00
competitorName✅ YesstringTextCompetitor / retailer namecompetitor, seller, shop_name, retailerBauhaus
regularPrice✅ YesfloatDot separatorCompetitor regular (non-discounted) priceprice, list_price, base_price125
promoPrice⬜ NofloatDot separatorCompetitor promotional price (if applicable)sale_price, discounted_price, promo_price119.99
currency⬜ NostringISO 4217Currency codecurr, currency_codeEUR
url⬜ NostringURLSource product pagelink, product_url, source_urlhttps://bauhaus.fi/product123
barcode⬜ NostringTextEAN / UPC barcodeean, ean13, upc, gtin5901234123457
sku⬜ NostringTextCompetitor SKUcompetitor_sku, seller_skuSKU-1001
status⬜ NostringTextLifecycle status (active / discontinued)availability_status, product_statusactive
stock⬜ NofloatNumericOn-hand inventory quantity (if available)inventory, stock_qty, quantity_available125
You may add additional attributes as separate columns.

Important note — product matching

Any field can be used for matching with Products data. RetailGrid supports flexible matching logic. You can configure matching based on:
  • productId
  • barcode (EAN / UPC)
  • sku
  • Custom product code
  • Combination of multiple fields
Best practice:
  • Use barcode (EAN/UPC) for highest matching accuracy
  • Ensure consistent formatting between datasets
  • Avoid leading/trailing spaces
Matching rules are configurable during dataset setup.

Price interpretation logic

RetailGrid applies the following logic:
  • If promoPrice exists → it is treated as the active selling price
  • If promoPrice is empty → regularPrice is used
  • If both exist → system calculates:
    • Discount %
    • Promo depth
    • Effective price
    • Price gap vs your price
    • Price index

Currency handling

  • If all data is in one currency → no conversion required
  • If multiple currencies are present → FX conversion rules must be configured
Recommendation:
Upload competitor prices in the same currency as your product prices.

Time-series behavior

Competitor Prices are stored historically. This enables:
  • Price change tracking
  • Promo frequency analysis
  • Volatility scoring
  • Price war detection
  • EDLP vs Hi-Lo classification
  • AI elasticity modeling
Each upload should include a valid datetime value. Do not overwrite history.

Data format requirements

Supported formats:
  • CSV (recommended)
  • XLSX
Encoding:
  • UTF-8
  • Dot (.) as decimal separator
Rules:
  • One row = one product × one competitor × one timestamp
  • Do not combine multiple competitors in one row
  • Do not store historical prices in multiple columns
Correct example:
productIddatetimecompetitorNameregularPrice

Validation rules

Upload will fail if:
  • Required fields are missing
  • datetime format is invalid
  • regularPrice is empty or non-numeric
  • Matching with Products dataset fails
  • Duplicate identical rows are detected

Example row

productIddatetimecompetitorNameregularPricepromoPricecurrencyurlbarcodeskustatusstock
P0012026-02-22 14:35:00Bauhaus125119.99EURhttps://bauhaus.fi/product1235901234123457SKU-1001active125