• 3 tables
  • 25,937 rows
  • 7 formats
  • synthetic data

Restaurant Sales Dataset for Business Analysis

This is a ready-made synthetic dataset for restaurant sales analysis. It includes data on customers, menu items, and orders, perfect for practicing dashboard creation in tools like Power BI and Excel. A free sample is available, with the full download costing credits.

  • last updated 1 Oct 2026
  • by GoMask
  • Includes 5,000 customer records with segmentation and loyalty tiers.
  • Features 100 distinct menu items with categories and pricing.
  • Contains 21 columns across 3 tables: customers, menu_items, and orders.
  • Data is synthetic, generated by GoMask DataFactory.

At a glance

  • 3tables
  • 25,937rows
  • 21columns
  • Jan 2023 – Dec 2024date range

The 3 tables

preview and data dictionary per table

Customers customers · table · 5,000 rows

Contains information about individual customers.

Preview

First 10 of 5,000 rows of the Customers table
customer_iduuidfirst_namestringlast_namestringemailstringcitystringstatestringcustomer_segmentstringloyalty_tierstringsignup_datedate
d854d530-795b-4610-b761-69fa77e2b699MariaSmith[email protected]PhoenixArizonaConsumerBronze2021-12-14
ad28b45b-9e3d-4818-89d4-5617926bf7d9DavidStewart[email protected]Los AngelesCaliforniaConsumerSilver2023-04-26
f3de899a-5dff-4a8f-a4e6-956a9b3f02b6MariaSullivan[email protected]AustinTexasConsumerSilver2023-12-31
53d9a1fc-5cee-4e70-a86e-4acda530824fMichaelScott[email protected]San AntonioTexasConsumerSilver2020-04-01
edbd3c4b-7c50-4ec7-9dad-b5be040e0dccOliviaSimpson[email protected]PhoenixArizonaConsumerBronze2023-08-26
fdb70afe-d7e4-4a82-9e9f-225c9054d46dJamesStevens[email protected]Los AngelesCaliforniaConsumerBronze2023-11-09
ed603934-b96c-40c3-acd6-cdf891993b51EmmaStone[email protected]San AntonioTexasConsumerSilver2021-11-15
59cc5b1b-b16f-4a3a-bb1e-2e3cc7e7792dWilliamSpencer[email protected]ChicagoIllinoisConsumerBronze2023-02-25
bbbdfd4c-e3cf-41db-9f9a-380601d0260fAvaSterling[email protected]AustinTexasConsumerBronze2023-11-19
3306a2ff-b7c9-4991-8e48-5b6a1c124974AlexanderShaw[email protected]San AntonioTexasConsumerBronze2020-08-08
10 of 5,000 rows · 9 columns

Data dictionary

Data dictionary for the Customers table
columntypedescriptionexamplenull %
customer_iduuidUnique identifier for each customer record.uniqued854d530-795b-4610-b761-69fa77e2b6990%
first_namestringCustomer's first name.Maria0%
last_namestringCustomer's last name.Smith0%
emailstringCustomer's primary email address.unique[email protected]0%
citystringCity of customer residence.Phoenix0%
statestringState of customer residence.Arizona0%
customer_segmentstringCustomer classification segment.Consumer0%
loyalty_tierstringCustomer loyalty program status tier.Bronze0%
signup_datedateDate when customer joined the restaurant loyalty program.2021-12-140%

Menu items menu_items · dimension table · 100 rows

Lists all available menu items with their details.

Preview

First 10 of 100 rows of the Menu items table
item_iduuiditem_namestringcategorystringpricedecimal
9d09235c-fbc1-4575-990a-8b47122ff78bSparkling Raspberry RefresherBeverage10.4
91624274-625a-4846-8d66-c0239b3e7f6eClassic LemonadeBeverage5.7
ef20145a-b122-4bb8-9d17-6b0ee0bc09a9Iced Caramel MacchiatoBeverage15.66
f9eaa4b9-fe8d-453b-8e7b-a280ffa2845eGinger Ale with LimeBeverage14.96
b9ec39e1-6a81-46b5-b39b-c6541dd3c4e9Mint Iced TeaBeverage5.47
c66ae24f-7ff2-4550-b1ee-695281ff640bCold Brew Coffee ConcentrateBeverage17.69
9da35863-7f7a-490e-b4e7-71256cf85ca8Peach Bellini MocktailBeverage6.37
4c3a623e-84e1-4d3c-819a-5f61339b1a5cEspresso TonicBeverage15.06
41c60ae0-1448-4616-b98c-d5c49cdf6ea9Hibiscus Berry CoolerBeverage14.12
44b8bc2b-6546-460a-9ddb-09170213dfa5Lavender Honey LatteBeverage16.37
10 of 100 rows · 4 columns

Data dictionary

Data dictionary for the Menu items table
columntypedescriptionexamplenull %
item_iduuidUnique identifier for each menu item.unique9d09235c-fbc1-4575-990a-8b47122ff78b0%
item_namestringDistinct culinary name of the menu offering.uniqueSparkling Raspberry Refresher0%
categorystringMenu section category for the food or drink item.Beverage0%
pricedecimalStandard catalogue base price in USD.10.40%

Orders orders · fact table · 20,837 rows

Records of customer orders, including item details and pricing.

Preview

First 1 of 20,837 rows of the Orders table
order_iduuidorder_datedatequantityintegerunit_pricedecimaldiscount_percentdecimalline_totaldecimalcustomer_iduuiditem_iduuid
7eaa1554-cc2c-4c4b-8733-a6cfb8a40dd62024-04-08112.31012.31ad28b45b-9e3d-4818-89d4-5617926bf7d9becefc35-9756-44a1-9a35-608b48a31b64
1 of 20,837 rows · 8 columns

Data dictionary

Data dictionary for the Orders table
columntypedescriptionexamplenull %
order_iduuidUnique identifier for the order record.7eba63af-afc6-4dcf-b46a-65d03a2eed7e0%
order_datedateDate when the order was placed.2023-02-280%
quantityintegerNumber of units purchased for the menu item.10%
unit_pricedecimalActual price per item charged for this order, accommodating +/- 10% price variation against base menu price.34.40%
discount_percentdecimalPromotional or loyalty discount percentage applied to this line item.210%
line_totaldecimalNet total price for this order item after discount calculation: quantity * unit_price * (1 - discount_percent / 100).27.180%
customer_iduuidForeign key to customers.customer_id.61558553-cbab-4cdc-9aba-7de7b43c83c70%
item_iduuidForeign key to menu_items.item_id.63bec6bb-c7c3-48aa-bdf2-d9a88e7080da0%

How the tables join

  • orders.customer_id references customers.customer_idmany to one: each Orders row points to one Customers row
  • orders.item_id references menu_items.item_idmany to one: each Orders row points to one Menu items row

Questions to answer with it

  1. What are the most popular menu items by quantity sold?

    Join orders and menu_items, then group by item_name and sum quantity.

    tables: orders, menu_items

  2. Which hours of the day have the highest order volume?

    Extract the hour from order_date, then group by hour and count orders.

    tables: orders

  3. Calculate the average order value per customer.

    Join orders and customers, group by customer_id, and calculate the average of line_total.

    tables: orders, customers

  4. Analyze sales trends by customer segment and loyalty tier.

    Join orders and customers, group by customer_segment and loyalty_tier, and sum line_total.

    tables: orders, customers

Starter SQL

run against this data before publishing

Table names match the SQLite file and the SQL script.

Top 20 Menu Items by Quantity Sold

sql
SELECT mi.item_name, SUM(o.quantity) AS total_quantity
FROM orders o
JOIN menu_items mi ON o.item_id = mi.item_id
GROUP BY mi.item_name
ORDER BY total_quantity DESC
LIMIT 20;

Total Sales per Customer Segment

sql
SELECT c.customer_segment, SUM(o.line_total) AS total_sales
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
GROUP BY c.customer_segment
ORDER BY total_sales DESC
LIMIT 20;

Average Order Value by Loyalty Tier

sql
SELECT c.loyalty_tier, AVG(o.line_total) AS average_order_value
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
GROUP BY c.loyalty_tier
ORDER BY average_order_value DESC
LIMIT 20;

Daily Sales Trend

sql
SELECT order_date, SUM(line_total) AS daily_sales
FROM orders
GROUP BY order_date
ORDER BY order_date
LIMIT 20;

Load it with pandas

python
import pandas as pd

# Unzip the CSV download first: one file per table
customers = pd.read_csv("customers.csv")
menu_items = pd.read_csv("menu_items.csv")
orders = pd.read_csv("orders.csv")

# Join orders to customers
df = orders.merge(customers, left_on="customer_id", right_on="customer_id", how="left", suffixes=("", "_customers"))
print(df.groupby("city").size().sort_values(ascending=False))

Using it in your tool

Excel
Load each table into a separate Excel sheet. Use Power Query to join tables (e.g., orders with menu_items on item_id). Create a PivotTable from the joined data to analyze sales by category or customer segment.
Power BI
Load all tables. Create relationships: orders.customer_id to customers.customer_id, and orders.item_id to menu_items.item_id. Create measures like Total Sales = SUM(orders[line_total]) and Average Order Quantity = AVERAGE(orders[quantity]).
SQL
Load the SQLite or SQL relational download. The primary keys are customer_id, item_id, and order_id. Join tables using these keys, for example, `FROM orders o JOIN customers c ON o.customer_id = c.customer_id`.
Python
Use pandas to load CSV or Parquet files. Join tables using `pd.merge()` and perform aggregations with `.groupby()`. For example: `orders.merge(menu_items, on='item_id').groupby('item_name')['quantity'].sum()`.

Formats available

  • CSV (zip)One CSV file per table, zipped
  • Excel workbookOne worksheet per table
  • SQLite databaseA ready-to-query database file with every table
  • Parquet (zip)One Parquet file per table, zipped
  • SQL scriptCREATE TABLE with primary and foreign keys, then INSERTs
  • CSVA single CSV file
  • JSONA single JSON file

How this data was generated

Synthetic data. Every row was generated: no real people, customers or companies are in this dataset.

Synthetic data generated by GoMask DataFactory from a relational blueprint: keys, links and rules are enforced in code, text columns are filled by a language model. No real people, companies or transactions.

  • Data is synthetically generated using GoMask DataFactory.
  • Customer and order data are correlated to simulate realistic purchasing patterns.
  • Menu item prices have a +/- 10% variation in orders compared to the base price.
  • Checked by an automated quality gate: unique keys, no orphan foreign keys, required columns filled, declared rules and date ranges (realism score 100).

Limitations

  • The dataset is synthetic and does not represent real-world sales data.
  • Does not include external factors like marketing campaigns or competitor pricing.
  • Limited to 3 tables and 21 columns, may not cover all aspects of restaurant operations.
  • Distributions and correlations are modelled, not measured from real records.

blueprint · restaurant-sales-dataset

Scale this dataset

Same tables. As many rows as you need.

Open the blueprint behind these 3 tables in Data Factory: keep the relationships, change a column, and generate it at the size you need.

  • 200,000 rows
  • 1,000,000 rows
Scale this dataset in Data Factory
Tables
customers, menu_items, orders
Licence
yours to use, including commercially
API slug
restaurant-sales-dataset

What should your data show?

Preview 20 rows free
No signup. No card.