Historical retail research · analyzed 24 October 2026
What retail invoices can—and cannot—tell you.
We analyzed 541,909 invoice lines from one UK retailer. This is historical evidence from 2010–2011. It is not today's consumer demand or a discount forecast.
Source and observation dates
Online Retail, UCI Machine Learning Repository, Daqing Chen (2015), DOI 10.24432/C5BW33. Licensed under CC BY 4.0. The source covers 1 December 2010 to 9 December 2011 and includes wholesale customers. Our aggregate tables are an adaptation, not a new UCI dataset.
Every source row reconciled
| Step, in this order | Invoice lines |
|---|---|
| All source lines | 541,909 |
| Cancelled invoice | 9,288 |
| Other non-positive quantity | 1,336 |
| Non-positive price | 1,181 |
| Code outside the merchandise-shaped format | 4,321 |
| Retained positive invoice lines | 525,783 |
Exclusions are mutually exclusive. We retain stock codes of five digits followed by up to two capital letters. This is an explicit code filter, not independent verification that every retained code is merchandise. Cancellations are excluded rather than matched against original invoices.
A few products account for much of the value
The retained lines contain 3,789 product codes. The top 379 codes by calculated gross invoice value account for about 61.30% of that value. This describes one historical sample. It does not show which products are slow-moving today.
Calculated positive invoice value is £10,240,335.01. That is quantity × positive unit price, not net sales, profit or cash received. Product prices are normalized to six GBP decimal places to remove spreadsheet serialization artifacts. Fractional-penny values remain possible. Aggregation uses exact decimal arithmetic.
Download and reproduce
- Download the 3,789-row product aggregate (CSV) · nine columns, no customer identifiers.
- Read counts, checksums and method (JSON).
- Download the complete source workbook from UCI (ZIP, about 23 MB).
The aggregate is not the full 541,909-row workbook. Reproduction script: scripts/measure-retail-concentration.py. Workbook SHA-256: 43465a06f2ccf7c8b5bd2892bc7defb52f97487934fe93b16ae4c3936424676d.
What is missing
There are no product costs, stock-on-hand counts, impressions, conversion rates or reliable promotion labels. We cannot infer profit, dead stock, sell-through or how a discount changes demand. Differences in unit prices can have many causes.
Test a promotion using your own recent sales, stock and costs →