Choose an Ecommerce Dataset You Can Explain—and Publish
Compare four ecommerce datasets, choose the right row structure, and prepare a sourced public table without exposing customer-level data.

If you want to publish an ecommerce analysis, choose the dataset by the question—and by what you can legally share. Order records, website events and national sales estimates describe different things. They should not become interchangeable “ecommerce revenue” tables.
For a first public-data project, UCI Online Retail is a practical starting point: it provides a downloadable workbook, documented fields and a license permitting redistribution with attribution. A useful result is a monthly, country-level table with explicit transaction filters—not a public copy of customer-level records.
Four datasets for different questions
| Dataset | Coverage and structure | Useful public-table project | Main limitation |
|---|---|---|---|
| UCI Online Retail | One UK retailer, December 2010–December 2011; invoice-item records | Monthly quantities and line values by customer country | Historical, single-retailer data; cancellations need explicit treatment |
| Brazilian E-Commerce Public Dataset by Olist | About 100,000 orders from 2016–2018; multiple related tables | Delivery performance by month or region | Joins can multiply records; license restricts commercial use |
| Google GA4 ecommerce sample | Obfuscated website events, November 2020–January 2021 | Daily event counts or an event-analysis demonstration | Placeholder values and limited internal consistency |
| U.S. Census quarterly ecommerce report | National quarterly retail estimates | Ecommerce sales and share of total retail over time | Aggregate estimates, not orders; revisions and adjustment status matter |
UCI Online Retail: transaction analysis
UCI’s original dataset contains 541,909 records covering December 1, 2010 through December 9, 2011. The retailer mainly sold gifts, and many customers were wholesalers. Fields include InvoiceNo, StockCode, Quantity, InvoiceDate, UnitPrice, CustomerID and Country; unit prices are in sterling.
Read each row as an item within an invoice, not an entire order. UCI documents invoice codes beginning with c as cancellations. A row count therefore is not an order count, and a sum of positive transactions is not automatically net revenue.
UCI lists the dataset under CC BY 4.0. When republishing or adapting it, provide appropriate credit, link to the license and indicate your changes, as required by the license terms.
Olist: orders, delivery and related tables
Olist’s original Kaggle listing describes anonymized commercial data from multiple Brazilian marketplaces. It includes order status, payment, freight, customer location, product attributes and reviews. An order can contain multiple items fulfilled by different sellers.
That structure makes Olist useful for learning joins, but unsafe for an indiscriminate merge. Before attaching item or payment records to orders, inspect each table’s key and relationship. For an order-level output, aggregate any one-to-many tables to one row per order before joining, then confirm that the output still has one row per order.
For repeat-customer analysis, the listing distinguishes customer_id, assigned separately for each order, from customer_unique_id, which identifies customers across purchases.
The listed license is CC BY-NC-SA 4.0. Its terms require attribution, prohibit commercial use and require shared adaptations to use the same license. Do not assume that public availability permits republication in a commercial project.
Google GA4 sample: website events
Google’s documented sample covers November 1, 2020 through January 31, 2021 in BigQuery. Access requires a Google Cloud project with the BigQuery API enabled; Google says Sandbox mode can support exploration within its limitations.
Use this for practicing event queries, not reporting verified store performance. Google warns that obfuscation introduces placeholders and limits internal consistency, and that the sample cannot be compared with the Google Merchandise Store demo account. Check applicable reuse terms before republishing an extract.
U.S. Census: market-level context
The Census quarterly report provides U.S. retail ecommerce estimates, including seasonally adjusted and unadjusted figures. The adjusted figures are not adjusted for price changes. Keep adjustment status and units in your public table rather than combining unlike series.
As of October 19, 2026, the page carries a September 28 notice that its report no longer contains the most up-to-date estimates; revised figures are scheduled for the November 19 release. Record the release vintage, and do not present that report as the latest revised series.
Turn UCI’s workbook into a publishable table
Use a defined analysis view: non-cancellation rows with positive quantity and positive unit price. This is a deliberate subset, not a complete accounting statement.
1. Preserve the source and define the rules
Keep the original workbook unchanged. In a working copy:
- Preserve invoice, product and customer identifiers as text.
- Parse invoice dates explicitly, then derive a
monthfield such as2011-01. Do not assign a timezone without source documentation. - Flag cancellation codes case-insensitively.
- Inspect blanks, duplicate-looking rows, nonpositive quantities and nonpositive prices before filtering. Document how you handle missing grouping fields or invalid dates.
- Calculate
line_value_gbp = Quantity × UnitPricefor retained rows.
Keep a count of rows excluded by each rule. State whether these counts overlap or represent sequential filtering steps. Do not silently remove repeated invoice-product combinations: repetition alone does not establish that a record is erroneous.
2. Aggregate to one row per month and country
Here is a proposed output schema, not a measured result:
| Column | Definition |
|---|---|
month |
Invoice year and month |
country |
Customer country as documented by UCI |
invoice_count |
Distinct retained invoice numbers within the group |
line_count |
Retained source rows |
units |
Sum of retained quantities |
positive_line_value_gbp |
Sum of retained quantity × unit price |
coverage_note |
Full or partial calendar-month coverage |
Use month + country as the composite key and test it for duplicates. See primary keys for published CSV datasets for checks that make later releases comparable.
Label December 2011 as partial: the source ends on December 9. Do not compare its total with full months without accounting for that coverage. Call the value column “positive line value,” not net sales, profit or audited revenue.
3. Publish the reviewed summary, not the working data
Export one clean table with a single header row, numeric amount fields and no totals mixed into the records. Reopen the export and reconcile row counts and totals with the working summary.
Exclude customer identifiers, precise customer locations, review text and unnecessary row-level records. Aggregation reduces detail but is not an automatic privacy guarantee; review small groups and sensitive combinations before upload.
TablePage supports CSV, TSV, XLSX and XLS uploads and generates public dataset pages with filterable tables. Upload only the reviewed public file, then check its displayed headers, dates, numeric fields and filters before sharing the link.
Beside the table or its embed, document the original source, creator, license, coverage dates, retrieval date, row definition and exclusion rules. For this UCI project, credit Daqing Chen, Online Retail (2015), UCI Machine Learning Repository, link to the dataset and CC BY 4.0 license, and describe your filtering and aggregation. Readers should be able to tell exactly what a total includes—and why it differs from the original workbook.