- You operate multiple physical stores
- You sell across different markets (countries)
- You manage multiple sales channels (Online / Marketplace / Wholesale)
- Prices, costs, tax rates, or stock differ per store
One product in one specific store (or market / channel)
When to use store-level data
Use this dataset if:- Prices vary by store
- Unit cost differs by warehouse or region
- Stock is managed per store
- Tax rates vary by country
- Some products are active in certain stores only
Data schema
| Field Name | Required | Type | Format | Description | Alternative Names | Example |
|---|---|---|---|---|---|---|
productId | ✅ Yes | string | Text | Product identifier (must match Products dataset) | product_id, sku_id, item_id | P001 |
storeId | ✅ Yes | string | Text | Store / market / sales channel identifier | store_code, market_id, channel_id, location_id | FI-HELSINKI |
price | ✅ Yes | float | Dot separator | Current selling price | selling_price, current_price | 119.99 |
unit_cost | ⬜ No | float | Dot separator | Cost per unit | cost, purchase_cost, landed_cost | 75 |
status | ⬜ No | string | Text | Product status in this store (active / discontinued / out_of_stock) | availability_status, lifecycle_status | active |
stock | ⬜ No | float | Numeric | Available inventory units | inventory, stock_qty, quantity_available | 42 |
regular_price | ⬜ No | float | Dot separator | Non-discounted base price | list_price, base_price | 129.99 |
tax_rate | ⬜ No | float | Percentage (0–1 or 0–100) | VAT or sales tax rate | vat, vat_rate, tax | 24 |
currency | ⬜ No | string | ISO 4217 | Currency code | currency_code | EUR |
price_effective_date | ⬜ No | datetime | YYYY-MM-DD | Date when price becomes effective | effective_from, valid_from | 2026-02-01 |
Matching logic
productIdmust match the Products datasetstoreIdmust match the Stores dataset (if configured)
- Exact match
- Composite keys (productId + storeId)
- Custom identifiers
Price interpretation logic
RetailGrid applies the following logic:-
If
regular_priceexists andprice<regular_price→ product is considered on promotion -
Margin is calculated as:
-
If
tax_rateis provided, gross/net calculations are supported
Store / market / channel flexibility
storeId can represent:
- Physical store
- Country
- Warehouse
- Online shop
- Marketplace (Amazon, Zalando, etc.)
- B2B vs B2C channel
Currency handling
If multiple stores use different currencies:- Currency must be provided
- FX conversion rules must be configured
Keep price and cost in the same currency per row.
Time handling
This dataset is typically a current snapshot, not time-series. Ifprice_effective_date is provided:
- Future price simulations become possible
- Scheduled price changes can be modeled
Data format requirements
Supported formats:- CSV (recommended)
- XLSX
- UTF-8
- Dot (.) as decimal separator
- One row = one product × one store
- Do not duplicate identical product-store combinations
- Use consistent storeId formatting
Validation rules
Upload will fail if:productIdis missingstoreIdis missingpriceis missing or non-numeric- Matching with Products dataset fails
Example row
| productId | storeId | price | unit_cost | status | stock | regular_price | tax_rate | currency | price_effective_date |
|---|---|---|---|---|---|---|---|---|---|
| P001 | FI-HELSINKI | 119.99 | 75 | active | 42 | 129.99 | 24 | EUR | 2026-02-01 |
How RetailGrid uses store-level data
This dataset powers:Margin analysis per store
- Store-level profitability
- Margin leakage detection
Local price optimization
- Dynamic pricing by store
- Market-based pricing
Assortment strategy
- Store-specific availability
- Stock-based pricing decisions
Promotion strategy
- Local promo activation
- Regional discount benchmarking
Advanced recommendations
For best results:- Always provide
unit_costfor margin optimization - Keep store identifiers consistent
- Provide stock for AI-driven replenishment signals
- Include tax_rate for cross-country operations
