- Competitive positioning analysis
- Price gap and price index calculations
- Dynamic pricing automation
- Promo monitoring
- AI elasticity and competitive pressure modeling
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 Name | Required | Type | Format | Description | Alternative Names | Example |
|---|---|---|---|---|---|---|
productId | ✅ Yes | string | Text | Product identifier linked to your Products dataset | product_id, sku_id, item_id, product_code | P001 |
datetime | ✅ Yes | datetime | YYYY-MM-DD HH:MM:SS | Date & time of price observation | date, timestamp, observed_at, price_date | 2026-02-22 14:35:00 |
competitorName | ✅ Yes | string | Text | Competitor / retailer name | competitor, seller, shop_name, retailer | Bauhaus |
regularPrice | ✅ Yes | float | Dot separator | Competitor regular (non-discounted) price | price, list_price, base_price | 125 |
promoPrice | ⬜ No | float | Dot separator | Competitor promotional price (if applicable) | sale_price, discounted_price, promo_price | 119.99 |
currency | ⬜ No | string | ISO 4217 | Currency code | curr, currency_code | EUR |
url | ⬜ No | string | URL | Source product page | link, product_url, source_url | https://bauhaus.fi/product123 |
barcode | ⬜ No | string | Text | EAN / UPC barcode | ean, ean13, upc, gtin | 5901234123457 |
sku | ⬜ No | string | Text | Competitor SKU | competitor_sku, seller_sku | SKU-1001 |
status | ⬜ No | string | Text | Lifecycle status (active / discontinued) | availability_status, product_status | active |
stock | ⬜ No | float | Numeric | On-hand inventory quantity (if available) | inventory, stock_qty, quantity_available | 125 |
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:productIdbarcode(EAN / UPC)sku- Custom product code
- Combination of multiple fields
- Use
barcode(EAN/UPC) for highest matching accuracy - Ensure consistent formatting between datasets
- Avoid leading/trailing spaces
Price interpretation logic
RetailGrid applies the following logic:- If
promoPriceexists → it is treated as the active selling price - If
promoPriceis empty →regularPriceis 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
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
datetime value.
Do not overwrite history.
Data format requirements
Supported formats:- CSV (recommended)
- XLSX
- UTF-8
- Dot (.) as decimal separator
- One row = one product × one competitor × one timestamp
- Do not combine multiple competitors in one row
- Do not store historical prices in multiple columns
| productId | datetime | competitorName | regularPrice |
|---|
Validation rules
Upload will fail if:- Required fields are missing
datetimeformat is invalidregularPriceis empty or non-numeric- Matching with Products dataset fails
- Duplicate identical rows are detected
Example row
| productId | datetime | competitorName | regularPrice | promoPrice | currency | url | barcode | sku | status | stock |
|---|---|---|---|---|---|---|---|---|---|---|
| P001 | 2026-02-22 14:35:00 | Bauhaus | 125 | 119.99 | EUR | https://bauhaus.fi/product123 | 5901234123457 | SKU-1001 | active | 125 |
