- 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.
* At least one identifier (
itemId, barcode, or sku) must be present for product matching. itemId gives the highest match accuracy and is strongly recommended.
You may add additional attributes as separate columns (CSV / XLSX upload only — see Loading via the API).
Product matching
Retailgrid matches each competitor price observation to a product in your Products dataset using this priority order:itemId— used first when present.barcode(EAN / UPC) — used as fallback whenitemIdis missing.sku— used as a final fallback when neitheritemIdnorbarcodematches.
itemId at minimum — it gives the highest match accuracy and the fewest unmatched rows.
Matching rules are configurable during dataset setup. Custom product codes and composite keys are also supported.
Formatting tips:
- Ensure consistent formatting between datasets.
- Avoid leading/trailing spaces.
- Keep barcode values numeric without formatting.
Competitor scope
By default every competitor here applies to all of your stores. If different stores, pricing zones, or sales channels face different rivals, scope each competitor to where it competes — see Assign competitors to stores, zones, and channels. Scoping drives which competitors per-store pricing rules and competitor-gap metrics use.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 → configure FX conversion rules
Upload competitor prices in the same currency as your product prices.
Time-series behavior
Retailgrid stores Competitor Prices 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
Loading via the API
Competitor prices can also be loaded programmatically:POST /v1/competitor_prices/bulk for JSON records, or POST /v1/imports/competitor_prices for CSV import.
JSON payloads use snake_case field names that differ from the CSV columns:
Validation rules
Upload will fail if:datetime,competitorName, orregularPriceis missing- No product identifier (
itemId,barcode, orsku) is present datetimeformat is invalidregularPriceis empty or non-numeric- Matching with Products dataset fails
- Duplicate identical rows are detected

