Sales sample data

An orders dataset built to survive a pivot table: enough rows, a clean time axis, categories that repeat, and revenue that varies the way real revenue does.

Generate sales data →Excel & Sheets guide

The schema

Column          Field type              Options
------------------------------------------------------------
order_id        Row Number
order_date      Date                    from 2024-01-01, sequential
customer_name   Full Name
region          Custom List             North America, Europe, APAC, LATAM
country         Country
product         Custom List             your real product names
category        Custom List             Hardware, Software, Services
quantity        Integer                 min 1, max 12
unit_price      Price                   min 9.99, max 899.00
currency        Currency Code
status          Custom List             paid, pending, refunded, cancelled
sales_rep       Custom List             8–12 repeating names
order_id,order_date,region,product,quantity,unit_price,currency,status
1,2024-01-01,Europe,Standing Desk,2,349.00,EUR,paid
2,2024-01-01,North America,License Pack,1,129.99,USD,paid
3,2024-01-02,APAC,Onboarding,1,899.00,USD,pending

Getting a chart that looks like a business

Most generated sales data produces a flat, noisy line, because every column is an independent uniform draw. Four adjustments fix that:

  • Sequential dates. Set the Date field's order to sequential so rows spread evenly across the period. Random dates leave gaps and pile-ups that make a daily chart unreadable.
  • Weighted categories. Repeat values inside a Custom List. Real revenue is concentrated — a handful of products and one or two regions dominate. An even split across four regions is the least realistic thing a sales dataset can do.
  • Skewed order values. Number (Normal Dist.) for quantity or price gives you a believable middle with genuine outliers, rather than as many twelve-unit orders as single-unit ones.
  • A status mix that reflects reality. Repeat paid a dozen times against one refunded and one cancelled. A dataset that is 25% refunds will make every dashboard you build look wrong.

Line totals

Quantity and unit price as independent columns are fine until something has to sum them. If your dashboard needs a line_total, do not generate it as a third random column — it will not equal quantity × unit price, and the first person to check will lose trust in the whole dataset. Use a Formula field so the total is derived from the other two columns in the same row. The same applies to tax, discount and net totals: derive them, never draw them.

Currencies

A Currency Code column alongside a Price column is realistic and slightly dangerous: summing revenue across mixed currencies without conversion produces a meaningless number, and dashboards do it constantly. That makes it a genuinely useful thing to have in a test dataset — if your BI tool happily adds euros to yen, you have found a real bug. If you want simple totals instead, pin the currency to a single value with a one-item Custom List.

Sizing

For a pivot table or a dashboard demo, 5,000 to 20,000 rows is the sweet spot: enough for grouping to be meaningful, small enough to recalculate instantly. Go to 100,000 when you are testing load performance, refresh time or the point at which a chart stops rendering. Spreadsheet row limits matter here — the Excel guide covers them.

Export targets

CSV for Excel, Sheets, Power BI and Tableau. TSV if product names contain commas and you would rather not deal with quoting. SQL to seed an orders table directly — see PostgreSQL or MySQL. JSON if the dashboard reads from a mock API instead of a file.

Common questions

How do I make the revenue chart look realistic?

Set the date field to sequential order, weight categories by repeating values in a Custom List, and use the Number (Normal Dist.) field for order values. Independent uniform draws produce a flat, noisy line that looks nothing like real revenue.

How do I get line totals that actually add up?

Use a Formula field so line_total is computed from quantity and unit_price in the same row. A separately generated column will not match, and anyone who checks will stop trusting the dataset.

How many rows should I generate?

Around 5,000 to 20,000 for dashboards and pivots — enough for grouping to be meaningful and small enough to recalculate instantly. Use the full 100,000 for load and refresh testing.

Can I use my own product names?

Yes. Put them in a Custom List field, repeating the ones that should appear more often. The built-in Product Name field is there for when you do not care about the specific names.

Should I mix currencies?

Only deliberately. Mixed currencies without conversion make totals meaningless — which is useful if you are testing whether your BI tool notices, and unhelpful if you just want a clean demo. Pin to one currency with a single-item Custom List for the latter.

Related