Beginner13 columnsUp to 10,000 rows Fictional data

Customer List (CRM) dataset

Customer records with contact details, segment, orders and spend: ideal for cleaning, deduplication and RFM.

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

About this dataset

A CRM export from a fictional online store: who the customer is, how to reach them, where they live, when they signed up, which segment they belong to, how many orders they have placed and how much they have spent.

Contact details are fake by design. Every email address is on example.com, a domain reserved for examples that can never receive mail, and every phone number starts with +91 00, which no Indian mobile number can. That makes the file safe for practising cleaning, deduplication, lookups and customer segmentation without touching anyone's real data.

Good for practising: Data cleaning, Segmentation, VLOOKUP / XLOOKUP, SQL.

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:

  • About one customer in eight signed up but never ordered; their last_order_date is empty.
  • Corporate and small-business customers order less often but spend far more per order than consumers.
  • is_active is True only when the last order was within 180 days of 31 March 2026.
  • Customers who have been around longer tend to have more orders.

Columns

ColumnTypeDescription
customer_idID (text)Customer number.
full_nameTextFictional name.
emailEmailAlways @example.com, so it can never reach anyone.
phonePhoneDeliberately invalid: +91 00xxx xxxxx.
cityCategoryCustomer's city.
stateCategoryState or union territory of that city.
signup_dateDateDate the account was created.
segmentCategoryConsumer, Small Business or Corporate.
total_ordersWhole numberNumber of orders placed.
total_spendAmount (₹)Total spent across all orders, in rupees.
last_order_dateDateMost recent order; empty if they never ordered.
is_activeTRUE / FALSETrue if they ordered in the last 180 days.
preferred_channelCategoryWebsite, Mobile app, Store or Phone.

Preview: the first 8 rows

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

customer_idfull_nameemailphonecitystatesignup_datesegmenttotal_orderstotal_spendlast_order_dateis_activepreferred_channel
CUST00001Varun Fernandesvarun.fernandes571@example.com+91 00650 48288UdaipurRajasthan2024-07-15Small Business734796.342025-05-08FALSEWebsite
CUST00002Gaurav Reddygaurav_reddy265@example.com+91 00964 65045MumbaiMaharashtra2025-04-13Consumer33043.492026-01-05TRUEMobile app
CUST00003Nandini Gillnandinig906@example.com+91 00334 25992MumbaiMaharashtra2025-11-11Consumer1364.972026-02-28TRUEMobile app
CUST00004Abhishek Sandhuabhisheks10@example.com+91 00133 29640JaipurRajasthan2025-10-26Consumer22760.122026-03-24TRUEMobile app
CUST00005Rashmi Gillrashmi.gill991@example.com+91 00535 72802KochiKerala2025-04-04Small Business320387.462026-01-15TRUEPhone
CUST00006Aditi Boseaditib707@example.com+91 00837 27676HyderabadTelangana2024-10-17Consumer56152.642024-12-07FALSEMobile app
CUST00007Amit Agarwalamit.agarwal533@example.com+91 00926 35781SiliguriWest Bengal2025-08-30Consumer11045.542026-02-26TRUEMobile app
CUST00008Jasleen Kumarjasleen.kumar237@example.com+91 00105 22205DelhiDelhi2025-03-22Consumer1918193.172026-03-27TRUEStore

Practice exercises

  1. Count customers by state and segment. Which state has the most corporate customers?
  2. Split the full name into first and last name, and pull the domain out of the email address.
  3. Build an RFM table: recency (days since last order), frequency (orders) and monetary (spend), each scored 1–5.
  4. Turn on the messy option, then find and remove duplicate customers and standardise the city names.
  5. Load the SQL file and write queries for: top 10 customers by spend, customers who never ordered, and spend by channel.

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/customers/download/?rows=1000&seed=42"
df = pd.read_csv(url, parse_dates=["signup_date", "last_order_date"])
df.head()

For SQL practice, download the SQL format and run it against an empty database, for example sqlite3 practice.db < customers-1000-rows-seed42.sql or mysql -u root -p practice < customers-1000-rows-seed42.sql (use your file's name). It creates a table called customers 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 →