Skip to content
Synthetic educational data

SaaS Subscriptions & Customer Churn Dataset

Explore a fictional subscription business through customer history, subscriptions, billing, and payments. Practice retention analysis and learn to separate subscription activity from money collected.

Good for: customer retention, subscription analysis, cohorts, and time-based SQL.

Download this dataset

Choose the version that fits your project. You do not need to download every file.

Preview the data

Explore a sample before downloading. Select a table to see its columns, row count, relationships, and what each row represents.

Plans

One row represents: One row per plan.

Rows in this table
4
Connects to
Subscriptions

This preview shows a sample, not the full download.

Sample rows from plans. This preview is not the full download.
plan_idplan_namemonthly_priceincluded_seats
PLN_STARTERStarter49.005
PLN_GROWTHGrowth199.0020
PLN_SCALEScale799.00100
PLN_ENTERPRISEEnterprise2499.00500

Plans data dictionary

Check identifiers, dates, numeric fields, and missing values before writing a query or building a chart.

ColumnWhat it meansData typeMissing valuesKey or requirement
plan_idStable plan key.text0Required
plan_namePlan display name.text0Required
monthly_priceMonthly recurring price.decimal0Required
included_seatsIncluded user seats.integer0Required
View the full data dictionary

plans

One row represents: One row per plan.

ColumnWhat it meansData typeMissing valuesKey or requirement
plan_idStable plan key.text0Required
plan_namePlan display name.text0Required
monthly_priceMonthly recurring price.decimal0Required
included_seatsIncluded user seats.integer0Required

accounts

One row represents: One row per account.

ColumnWhat it meansData typeMissing valuesKey or requirement
account_idStable account key.text0Required
created_atAccount creation date.date0Required
regionCommercial region.text0Required
segmentSMB, mid_market, or enterprise.text0Required
acquisition_channelFirst-touch channel.text0Required

subscriptions

One row represents: One row per account subscription period.

ColumnWhat it meansData typeMissing valuesKey or requirement
subscription_idStable subscription key.text0Required
account_idOwning account.text0Required
plan_idSubscribed plan.text0Required
started_atService start date.date0Required
ended_atChurn date when ended.date4,035Nullable
statusactive or cancelled.text0Required
seatsPurchased seats.integer0Required
mrrContracted monthly recurring revenue.decimal0Required

invoices

One row represents: One row per subscription billing month.

ColumnWhat it meansData typeMissing valuesKey or requirement
invoice_idStable invoice key.text0Required
subscription_idBilled subscription.text0Required
invoice_dateBilling date.date0Required
due_datePayment due date.date0Required
amount_dueAmount billed.decimal0Required
invoice_statuspaid, open, or void.text0Required

payments

One row represents: One row per payment attempt.

ColumnWhat it meansData typeMissing valuesKey or requirement
payment_idStable payment key.text0Required
invoice_idInvoice attempted.text0Required
attempted_atAttempt date.date0Required
payment_statussucceeded or failed.text0Required
amountAttempted amount.decimal0Required

About the data

Subscription analysis depends on what happened over time, not just an account's current status. This synthetic dataset provides one subscription period per account and monthly billing records for comparing service status with invoices and payments.

Before building a metric, decide whether you are counting accounts, subscriptions, invoices, or payments. Version 1.0.0 does not model reactivations, plan-change history, or multiple subscriptions per account.

What one row represents
Varies by source table
Data covers
Start: 2023-01-01 · End: 2025-12-31
Dataset version
1.0.0
Release published
2026-09-05

How the tables connect

Generated from the same relationship metadata as the table documentation.

Subscriptionsaccount_idAccountsaccount_id

many-to-one

Subscriptionsplan_idPlansplan_id

many-to-one

Invoicessubscription_idSubscriptionssubscription_id

many-to-one

Paymentsinvoice_idInvoicesinvoice_id

many-to-one

Start your first analysis

Open a download, inspect the table, and answer one question. Each example identifies the file and dataset version it uses.

Start with Excel

Use the invoice-level workbook for a billing PivotTable without joining source tables.

Download Excel
File used
saas-subscriptions-v1.0.0-analysis.xlsx
Dataset version
1.0.0
File size
3.7 MB
  1. 01Open "saas-subscriptions-v1.0.0-analysis.xlsx" and select the "SaaS Subscriptions & Customer C" sheet.
  2. 02Check invoice_date and the amount_due and amount_paid number columns.
  3. 03Place invoice_date in Rows grouped by month, invoice_status in Columns, and amount_due in Values.

What you can build

Finished output from this release

How much current MRR comes from each active plan?

How much current MRR comes from each active plan?

plan_nameactive_subscriptionscurrent_mrr
Enterprise223558069
Scale548458912
Growth1313272071
Starter195198389
View the checked SQL
SELECT p.plan_name,
       COUNT(*) AS active_subscriptions,
       ROUND(SUM(s.mrr), 2) AS current_mrr
FROM subscriptions s
JOIN plans p USING (plan_id)
WHERE s.status = 'active'
GROUP BY p.plan_name
ORDER BY current_mrr DESC;

Subscription activity report

Track starts and cancellations in the release. Explain which date makes each event effective.

Customer retention cohorts

Group accounts by a documented starting event and compare how many remain active in later periods.

Billing and payment comparison

Compare invoiced amounts with recorded payments and explain why they do not always describe the same business activity.

Subscription reporting model

Build a repeatable view of subscription status over time and document the rules behind each metric.

Questions about this dataset

Is this data from a real SaaS company?

No. It models a fictional subscription business for learning and testing. Do not use its churn, billing, or retention figures as industry benchmarks.

Can I use it for cohort analysis?

Yes. Use account creation or subscription start as the cohort event and ended_at as the service-end rule. State both choices so someone else can reproduce the calculation.

Source, license, and versions

This dataset represents a fictional business. Its records and patterns were generated for education and testing. Use it to practice analytical methods, not to estimate real-world revenue, churn, conversion rates, or market conditions.

Before you interpret the results

  • This is synthetic educational data generated to model a fictional business. It does not represent a real company or establish industry benchmarks.
  • Synthetic invoices use monthly billing only.
  • MRR excludes usage pricing and tax.
  • No PII is included.

Source, license, and version

Use the version number when sharing your work so others can reproduce it with the same files. Coverage dates describe the records; the release date describes when this package was published.

Maintainer
Analytics Engineering
License
CC BY 4.0
Version
1.0.0
Published
2026-09-05T16:52:40.651Z

Cite this dataset

Analytics Engineering. (2026). SaaS Subscriptions & Customer Churn Dataset (Version 1.0.0) [Data set]. https://www.analyticsengineering.com/datasets/saas-subscriptions.

Found an issue?

Tell us which dataset, version, and file you used, and what you expected to happen. A small example helps us investigate.

Report a dataset issue →

Keep learning

Use each account's subscription period to define active status before calculating churn, retention, or current MRR.

This exercise uses a smaller teaching example, not the full downloadable dataset.