Beginner12 columnsUp to 10,000 rows Fictional data

Sweet Shop Sales dataset

Two years of orders from a fictional chain of Indian sweet shops, with Diwali and Raksha Bandhan rushes.

Made the moment you click and sent straight to you. Nothing is saved on our server.

About this dataset

This is the kind of file a small business owner actually keeps: one row per bill, covering eight shops in eight cities from April 2024 to March 2026 (two Indian financial years). Each order records what was bought, how many, the price, any discount, the GST rate applied in this fictional data, and how the customer paid.

It is a good first dataset because every question you can ask of it has a business answer. Which shop sells the most? Do gift boxes only sell at Diwali? Are corporate orders worth the discount? You can answer all of those with a pivot table in Excel or a few lines of Pandas, and then build a dashboard on top.

Good for practising: Excel pivot tables, Pandas groupby, Time series, Power BI.

What's built into the data

The rows are random, but they follow rules, so there is something real to find. These are the patterns to look for:

  • Sales jump in the two to three weeks before Diwali, with smaller rises before Raksha Bandhan and Holi.
  • Weekends are about a third busier than weekdays.
  • Gift boxes and hampers sell far more during festival weeks, and corporate customers order them in bulk (10–60 boxes) with a 10–15% discount.
  • Mumbai and Delhi are the busiest shops; UPI is the most common way to pay.
  • net_amount = quantity × unit_price × (1 − discount) × (1 + GST), rounded to paise, so you can check the arithmetic yourself.

Columns

ColumnTypeDescription
order_idID (text)Bill number, unique per order.
order_dateDateDate of the sale (1 Apr 2024 – 31 Mar 2026).
store_cityCategoryCity of the shop that made the sale.
productCategoryItem sold, with pack size.
categoryCategoryDry fruit sweets, Milk & flour sweets, Namkeen, Bakery or Gift boxes.
quantityWhole numberNumber of packs.
unit_priceAmount (₹)Price per pack in rupees, before discount and tax.
discount_pctWhole numberDiscount given, in percent (0, 5, 10 or 15).
gst_pctWhole numberGST rate applied in this fictional data, in percent.
net_amountAmount (₹)Amount paid in rupees after discount and GST.
payment_modeCategoryUPI, Cash, Card or Wallet.
customer_typeCategoryWalk-in, Online or Corporate.

Preview: the first 8 rows

A sample with seed 2026. Your download will have different values but the same columns and patterns.

order_idorder_datestore_cityproductcategoryquantityunit_pricediscount_pctgst_pctnet_amountpayment_modecustomer_type
ORD-1000012024-06-25PatnaMasala Peanuts 200gNamkeen370512223.44CashWalk-in
ORD-1000022024-07-08PuneMotichoor Ladoo 500gMilk & flour sweets126055259.35CardWalk-in
ORD-1000032024-09-25IndoreAloo Bhujia 400gNamkeen1110012123.2CardOnline
ORD-1000042025-04-03LucknowMasala Peanuts 200gNamkeen2701012141.12UPICorporate
ORD-1000052025-04-11LucknowMysore Pak 500gMilk & flour sweets128005294.0UPIWalk-in
ORD-1000062025-05-17AhmedabadPlum Cake 500gBakery2350018826.0CashWalk-in
ORD-1000072025-06-23AhmedabadPlum Cake 500gBakery33505181177.05UPIWalk-in
ORD-1000082025-12-10PuneMysore Pak 500gMilk & flour sweets2280105529.2CardOnline

Practice exercises

  1. Build a pivot table of net sales by month and shop. Which month is the biggest in each financial year?
  2. Plot daily sales as a line chart and mark the festival weeks. How much bigger is Diwali than an ordinary week?
  3. Recalculate net_amount from the other columns and confirm it matches. Then find the total GST collected per category.
  4. Compare corporate and walk-in customers: average order value, share of gift boxes, and total discount given.
  5. Find the top three products in each city by revenue (Pandas: groupby + nlargest; SQL: a window function).
  6. Build a one-page Power BI or Excel dashboard: total sales, sales by month, sales by city and payment mode split.

Stuck on one? Each exercise uses ideas from the lessons below, and trying it with the messy option on turns it into a cleaning exercise as well.

Load it straight into Python

You don't have to download first. Pandas can read the link directly, in Jupyter, Google Colab or a script. Keep the seed so you get the same data every time you run the notebook:

import pandas as pd

url = "https://beeprotonai.info/resources/datasets/sweet-shop-sales/download/?rows=1000&seed=42"
df = pd.read_csv(url, parse_dates=["order_date"])
df.head()

For SQL practice, download the SQL format and run it against an empty database, for example sqlite3 practice.db < sweet-shop-sales-1000-rows-seed42.sql or mysql -u root -p practice < sweet-shop-sales-1000-rows-seed42.sql (use your file's name). It creates a table called sweet_shop_sales and fills it.

About the data

Everything in this file is invented. Names are random pairings of common first names and surnames, email addresses use example.com (reserved for examples, so it can never reach anyone), and phone numbers start with +91 00, which no real Indian mobile number does. Any resemblance to a real person or business is coincidence. Dates run from 1 April 2024 to 31 March 2026 unless a column says otherwise. Use it freely for learning, teaching and projects, including commercial ones, with no attribution required (CC0).

Lessons that go with it

More datasets

See all 14 datasets →