Website Traffic (Analytics) dataset
Daily sessions, users, bounce rate and conversions by page, traffic source and device.
About this dataset
An export like the ones you get from a web analytics tool: one row per day for a combination of page, traffic source and device, with sessions, users, new users, bounce rate, average session length and conversions (sign-ups or enquiries).
It is made for building dashboards and spotting trends: growth over two years, weekday against weekend, mobile against desktop, and which channels actually bring people who convert.
Good for practising: Dashboards, Time series, Funnel analysis, 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:
- Traffic grows steadily, ending about 80% higher than it started.
- Weekends get about 20% fewer sessions than weekdays.
- Organic search brings the most visits; social has the highest bounce rate and email the lowest.
- Desktop sessions last longer than mobile ones.
- The /pricing and /contact pages convert far better than blog pages, and email and paid search visitors convert better than the rest.
Columns
| Column | Type | Description |
|---|---|---|
date | Date | Day the visits happened. |
page | Category | Landing page path. |
traffic_source | Category | Organic Search, Direct, Social, Referral, Email or Paid Search. |
device | Category | Mobile, Desktop or Tablet. |
sessions | Whole number | Visits. |
users | Whole number | Distinct visitors. |
new_users | Whole number | First-time visitors. |
bounce_rate_pct | Decimal | Percent of sessions that viewed only one page. |
avg_session_sec | Whole number | Average session length in seconds. |
conversions | Whole number | Sign-ups or enquiries. |
Preview: the first 8 rows
A sample with seed 2026. Your download will have different values but the same columns and patterns.
| date | page | traffic_source | device | sessions | users | new_users | bounce_rate_pct | avg_session_sec | conversions |
|---|---|---|---|---|---|---|---|---|---|
| 2024-04-01 | /blog/excel-tips | Mobile | 82 | 72 | 34 | 30.4 | 103 | 4 | |
| 2024-04-02 | /pricing | Paid Search | Tablet | 2 | 2 | 1 | 56.1 | 53 | 0 |
| 2024-04-03 | /courses/sql | Social | Mobile | 145 | 111 | 89 | 68.7 | 128 | 2 |
| 2024-04-04 | /contact | Paid Search | Tablet | 3 | 3 | 2 | 68.7 | 87 | 1 |
| 2024-04-05 | /pricing | Social | Mobile | 123 | 94 | 75 | 72.5 | 68 | 6 |
| 2024-04-06 | /courses/pandas | Direct | Mobile | 178 | 159 | 69 | 40.6 | 52 | 2 |
| 2024-04-07 | /contact | Organic Search | Mobile | 209 | 180 | 142 | 43.3 | 92 | 15 |
| 2024-04-08 | /contact | Paid Search | Tablet | 1 | 1 | 1 | 39.3 | 67 | 0 |
Practice exercises
- Plot total sessions per week. Add a 4-week rolling average to see the trend.
- Compare conversion rate (conversions ÷ sessions) by traffic source and by device.
- Which pages bring the most traffic, and which bring the most conversions? Are they the same pages?
- Build a dashboard with a date slicer: sessions, users, bounce rate and conversions, with month-on-month change.
- Group by weekday and show the weekly cycle. On which day should a new blog post go out?
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/website-traffic/download/?rows=1000&seed=42"
df = pd.read_csv(url, parse_dates=["date"])
df.head()
For SQL practice, download the SQL format and run it against an empty database, for example sqlite3 practice.db < website-traffic-1000-rows-seed42.sql or mysql -u root -p practice < website-traffic-1000-rows-seed42.sql (use your file's name). It creates a table called website_traffic 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 …
Customer List (CRM)Customer records with contact details, segment, orders and spend: ideal for cleaning, deduplication and …
Stock Register (Inventory)Monthly stock register for five warehouses: opening, received, issued, closing, reorder level and value.
Daily City WeatherSimulated daily temperature, rain, humidity and AQI for Indian cities, with monsoon and winter …