Customer List (CRM) dataset
Customer records with contact details, segment, orders and spend: ideal for cleaning, deduplication and RFM.
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
| Column | Type | Description |
|---|---|---|
customer_id | ID (text) | Customer number. |
full_name | Text | Fictional name. |
email | Always @example.com, so it can never reach anyone. | |
phone | Phone | Deliberately invalid: +91 00xxx xxxxx. |
city | Category | Customer's city. |
state | Category | State or union territory of that city. |
signup_date | Date | Date the account was created. |
segment | Category | Consumer, Small Business or Corporate. |
total_orders | Whole number | Number of orders placed. |
total_spend | Amount (₹) | Total spent across all orders, in rupees. |
last_order_date | Date | Most recent order; empty if they never ordered. |
is_active | TRUE / FALSE | True if they ordered in the last 180 days. |
preferred_channel | Category | Website, 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_id | full_name | phone | city | state | signup_date | segment | total_orders | total_spend | last_order_date | is_active | preferred_channel | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| CUST00001 | Varun Fernandes | varun.fernandes571@example.com | +91 00650 48288 | Udaipur | Rajasthan | 2024-07-15 | Small Business | 7 | 34796.34 | 2025-05-08 | FALSE | Website |
| CUST00002 | Gaurav Reddy | gaurav_reddy265@example.com | +91 00964 65045 | Mumbai | Maharashtra | 2025-04-13 | Consumer | 3 | 3043.49 | 2026-01-05 | TRUE | Mobile app |
| CUST00003 | Nandini Gill | nandinig906@example.com | +91 00334 25992 | Mumbai | Maharashtra | 2025-11-11 | Consumer | 1 | 364.97 | 2026-02-28 | TRUE | Mobile app |
| CUST00004 | Abhishek Sandhu | abhisheks10@example.com | +91 00133 29640 | Jaipur | Rajasthan | 2025-10-26 | Consumer | 2 | 2760.12 | 2026-03-24 | TRUE | Mobile app |
| CUST00005 | Rashmi Gill | rashmi.gill991@example.com | +91 00535 72802 | Kochi | Kerala | 2025-04-04 | Small Business | 3 | 20387.46 | 2026-01-15 | TRUE | Phone |
| CUST00006 | Aditi Bose | aditib707@example.com | +91 00837 27676 | Hyderabad | Telangana | 2024-10-17 | Consumer | 5 | 6152.64 | 2024-12-07 | FALSE | Mobile app |
| CUST00007 | Amit Agarwal | amit.agarwal533@example.com | +91 00926 35781 | Siliguri | West Bengal | 2025-08-30 | Consumer | 1 | 1045.54 | 2026-02-26 | TRUE | Mobile app |
| CUST00008 | Jasleen Kumar | jasleen.kumar237@example.com | +91 00105 22205 | Delhi | Delhi | 2025-03-22 | Consumer | 19 | 18193.17 | 2026-03-27 | TRUE | Store |
Practice exercises
- Count customers by state and segment. Which state has the most corporate customers?
- Split the full name into first and last name, and pull the domain out of the email address.
- Build an RFM table: recency (days since last order), frequency (orders) and monetary (spend), each scored 1–5.
- Turn on the messy option, then find and remove duplicate customers and standardise the city names.
- 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
Two years of orders from a fictional chain of Indian sweet shops, with Diwali …
Employee & Attrition RecordsAn HR file of employees with salary, satisfaction, overtime and whether they left: built …
Student Exam ResultsMarks in five subjects with attendance and study hours, plus totals, percentage, result and …
Stock Register (Inventory)Monthly stock register for five warehouses: opening, received, issued, closing, reorder level and value.
Website Traffic (Analytics)Daily sessions, users, bounce rate and conversions by page, traffic source and device.
Daily City WeatherSimulated daily temperature, rain, humidity and AQI for Indian cities, with monsoon and winter …