Customer Lifecycle, Subscription and Churn Analytics Set (WW)

SUBCHN994· 1.5M records · 41 tables · v1.0.0 · Updated 2026-09-02
Telecommunications Software Subscription and Customer Lifecycle Dataset API
CSV JSON SQLsaas-metricscustomer-churnnet-revenue-retentionarr-waterfallsubscription-analyticscustomer-health-scoresales-pipelinecohort-retentionrevenue-operationsb2b-saas

Overview

SUBCHN994 follows a synthetic business-to-business software vendor end to end: lead, buying committee, opportunity, quote, close, onboarding, subscription, usage, support, renewal, expansion, contraction and churn. Forty-one linked tables and 113,939 subscription-months of usage, health and billing. The recurring revenue waterfall reconciles by construction. Opening plus new plus expansion plus reactivation, less contraction, less churn, equals closing, exactly, in every one of the 42 months. That is the first identity anyone who works in software finance checks, and it holds here because recurring revenue only ever changes by emitting a movement row: the movements are the balance rather than a commentary on it. The three customer segments pull in opposite directions, and that tension is the point. Win rate falls as deal size rises, sales cycles lengthen from about five weeks to about five months, and buying committees grow from two people to thirteen, while retention moves the other way: small business loses around three percent of customers a month and enterprise around half a percent, so net revenue retention runs from below par at the small end to near one hundred and twenty at the large. A dataset that applies one churn rate and one win rate across the whole book has erased the only interesting question in the business model. Expansion, not retention, is what carries the model, which is why gross and net revenue retention are reported separately and the gap between them is left visible. Churn carries its reason and its class, so the recoverable causes are separable from a customer that ceased trading or was acquired and was never going to be saved. Every subscription-month carries a health score that is a deliberately imperfect estimate of how well the product actually fits the business: usage decays before a customer leaves, which is what makes health a leading indicator, and the noise is what stops it being a perfect one. Failed card payments are modelled as their own churn path, because involuntary churn has a completely different remedy. Identifiers come from keyed hashes, so no column runs 0001, 0002, 0003.

Analytics

Four entries from the packaged tables, with the performance the dataset records for them. Every value below is read from the shipped files.

Recurring revenueARRthe waterfall reconciles to the penny
$432.48MAnnual recurring revenue
122.4%Net revenue retention
Recurring revenue, million USDRecurring revenue, million USD
1 / 4

Row Counts by Table

Counted from the files that ship, not estimated.

TableRows
sub_accounts42,000
sub_subscriptions5,521
sub_mrr_movements16,328
sub_churn_events2,485
sub_opportunities19,661
sub_contacts175,031
sub_leads49,975
sub_opportunity_stage_history99,523
sub_opportunity_contacts70,034
sub_quotes11,322
sub_activities414,423
sub_subscription_items11,042
sub_renewals3,265
sub_health_scores113,939
sub_usage_monthly113,939
sub_invoices81,967
sub_invoice_lines93,443
sub_payments81,284
sub_tickets114,865
sub_nps_responses2,322
sub_monthly_arr42
sub_cohort_retention630
sub_monthly_pipeline42
sub_owner_performance21
sub_plan_performance6
sub_owners36
sub_segments3
sub_plans6
sub_plan_features38
sub_lead_sources10
sub_opportunity_stages8
sub_loss_reasons8
sub_churn_reasons10
sub_mrr_movement_types5
sub_ticket_categories9
sub_health_bands5
sub_billing_intervals4
sub_industries12
sub_countries15
sub_activity_types9
sub_buying_roles8

Table Relationships

One parent record and seven child tables, each joined back on the same key.

70%
Loading diagram

Schema

Every table ships with typed columns, referential integrity, and documentation.

sub_accounts· Rows: 42,000
ColumnTypeDescription
account_idvarchar(16)Surrogate key for the company.
account_numbervarchar(16)Account number as the vendor would hold it. Derived from a keyed hash, not issued in sequence.
account_namevarchar(40)Company name. Every name is an invented compound and the company does not exist.
account_domainvarchar(40)Company domain. Resolved at build time and replaced if it answered, so no live business is named.
segment_codevarchar(16)Segment the account belongs to.
country_codevarchar(8)Country the account is based in.
industry_codevarchar(32)Industry the account operates in.

+3 more columns in sub_accounts. The full schema ships with the download.

sub_subscriptions· Rows: 5,521
ColumnTypeDescription
subscription_idvarchar(24)Surrogate key for the subscription.
subscription_numbervarchar(16)Subscription number as it appears on an invoice.
account_idvarchar(16)Customer.
opportunity_idvarchar(24)Deal the subscription came from.
plan_codevarchar(24)Plan subscribed to.
billing_intervalvarchar(16)How often the customer is invoiced.
started_ondateDate the subscription started. May be before the extract window, in which case the subscription is observed from the first month of it.

+10 more columns in sub_subscriptions. The full schema ships with the download.

sub_mrr_movements· Rows: 16,328
ColumnTypeDescription
mrr_movement_idvarchar(24)Surrogate key for the movement.
subscription_idvarchar(24)Subscription that moved.
account_idvarchar(16)Customer.
movement_monthvarchar(16)Month the movement occurred in.
movement_typevarchar(16)New, expansion, reactivation, contraction or churn.
mrr_delta_usdnumeric(9,2)Change in monthly recurring revenue. SIGNED: churn and contraction are negative, and flooring them at zero would silently delete every downward movement from the waterfall.
mrr_before_usdnumeric(10,2)Monthly recurring revenue before the movement.

+6 more columns in sub_mrr_movements. The full schema ships with the download.

sub_churn_events· Rows: 2,485
ColumnTypeDescription
churn_event_idvarchar(24)Surrogate key for the churn.
subscription_idvarchar(24)Subscription that ended.
account_idvarchar(16)Customer that left.
churned_ondateDate the subscription ended.
churn_reason_codevarchar(32)Why they left.
churn_classvarchar(16)Whether the cause was recoverable, competitive, product related or unavoidable.
mrr_lost_usdnumeric(9,2)Monthly recurring revenue lost.

+8 more columns in sub_churn_events. The full schema ships with the download.

sub_opportunities· Rows: 19,661
ColumnTypeDescription
opportunity_idvarchar(24)Surrogate key for the opportunity.
opportunity_referencevarchar(16)Reference as a seller would quote it.
account_idvarchar(16)Company being sold to.
lead_source_codevarchar(24)Source the opportunity originated from.
owner_idvarchar(16)Account executive who owns it.
annual_contract_value_usdintegerAnnual contract value of the deal.
created_ondateDate the opportunity was created.

+6 more columns in sub_opportunities. The full schema ships with the download.

sub_contacts· Rows: 175,031
ColumnTypeDescription
contact_idvarchar(16)Surrogate key for the person.
account_idvarchar(16)Company the person works at.
first_namevarchar(16)First name. The person is generated.
last_namevarchar(16)Last name.
job_titlevarchar(48)Job title, consistent with the buying role held.
buying_rolevarchar(24)Role the person plays in a purchase decision.
work_emailvarchar(64)Work email on the account domain, which reaches nobody.

+3 more columns in sub_contacts. The full schema ships with the download.

sub_leads· Rows: 49,975
ColumnTypeDescription
lead_idvarchar(24)Surrogate key for the lead.
account_idvarchar(16)Company the lead came from.
lead_source_codevarchar(24)Where the lead came from.
created_ondateDate the lead was created.
lead_statusvarchar(16)Whether the lead qualified, was unqualified, went to nurture or was a duplicate.
qualified_ondateDate the lead qualified. Empty if it never did.
acquisition_cost_usdintegerCost attributed to acquiring this lead.

+2 more columns in sub_leads. The full schema ships with the download.

sub_opportunity_stage_history· Rows: 99,523
ColumnTypeDescription
stage_history_idvarchar(24)Surrogate key for the stage entry.
opportunity_idvarchar(24)Opportunity that moved.
sequence_numbervarchar(8)Position of this entry in the deal history.
stage_codevarchar(24)Stage entered.
entered_ondateDate the stage was entered.
days_in_stageintegerDays spent in the stage before moving again.
stage_probabilitynumeric(5,2)Probability assigned to the stage at the time.

+1 more columns in sub_opportunity_stage_history. The full schema ships with the download.

sub_opportunity_contacts· Rows: 70,034
ColumnTypeDescription
opportunity_contact_idvarchar(24)Surrogate key for the committee membership.
opportunity_idvarchar(24)Deal the person is involved in.
contact_idvarchar(16)Person on the committee.
buying_rolevarchar(24)Role the person plays on this deal.
is_primaryvarchar(16)Y for the main point of contact.
influence_on_outcomenumeric(5,2)How much this role moves the odds of winning, positive or negative.
sub_quotes· Rows: 11,322
ColumnTypeDescription
quote_idvarchar(24)Surrogate key for the quote.
opportunity_idvarchar(24)Deal quoted.
account_idvarchar(16)Company quoted.
versionintegerQuote version. Later versions usually carry deeper discounts.
issued_ondateDate the quote was issued.
list_value_usdintegerValue at list price.
discount_ratenumeric(7,4)Discount applied, as a proportion.

+3 more columns in sub_quotes. The full schema ships with the download.

sub_activities· Rows: 414,423
ColumnTypeDescription
activity_idvarchar(24)Surrogate key for the activity.
opportunity_idvarchar(24)Deal the activity relates to.
account_idvarchar(16)Company involved.
activity_typevarchar(32)Kind of activity logged.
activity_datedateDate of the activity.
owner_idvarchar(16)Employee who logged it.
contact_idvarchar(16)Person involved.

+2 more columns in sub_activities. The full schema ships with the download.

sub_subscription_items· Rows: 11,042
ColumnTypeDescription
subscription_item_idvarchar(24)Surrogate key for the line.
subscription_idvarchar(24)Subscription the line belongs to.
plan_codevarchar(24)Plan the line prices against.
item_typevarchar(24)Whether the line is seats or included usage.
quantityintegerQuantity on the line.
unit_price_usdnumeric(7,2)Price per unit per month.
line_mrr_usdnumeric(10,2)Monthly recurring revenue contributed by the line.

+1 more columns in sub_subscription_items. The full schema ships with the download.

sub_renewals· Rows: 3,265
ColumnTypeDescription
renewal_idvarchar(24)Surrogate key for the renewal.
subscription_idvarchar(24)Subscription renewed.
account_idvarchar(16)Customer.
renewal_datedateDate of the renewal.
renewed_arr_usdnumeric(11,2)Annual recurring revenue renewed.
renewal_outcomevarchar(16)Outcome of the renewal.
success_owner_idvarchar(16)Customer success manager who handled it.

+3 more columns in sub_renewals. The full schema ships with the download.

sub_health_scores· Rows: 113,939
ColumnTypeDescription
health_score_idvarchar(24)Surrogate key for the monthly score.
subscription_idvarchar(24)Subscription scored.
account_idvarchar(16)Customer.
score_monthvarchar(16)Month scored.
health_scorenumeric(7,4)Health score between zero and one. It is a deliberately imperfect estimate of how well the product fits the business, so it predicts churn well and not perfectly.
health_bandvarchar(16)Band the score falls in.
seat_adoption_rationumeric(7,4)Active seats as a proportion of licensed seats. The single most informative input to health.

+3 more columns in sub_health_scores. The full schema ships with the download.

sub_usage_monthly· Rows: 113,939
ColumnTypeDescription
usage_idvarchar(24)Surrogate key for the usage month.
subscription_idvarchar(24)Subscription measured.
account_idvarchar(16)Customer.
usage_monthvarchar(16)Month measured.
eventsintegerProduct events in the month.
licensed_seatsintegerSeats paid for.
active_seatsintegerSeats actually used. The gap between licensed and active is where contraction and churn come from.

+4 more columns in sub_usage_monthly. The full schema ships with the download.

sub_invoices· Rows: 81,967
ColumnTypeDescription
invoice_idvarchar(24)Surrogate key for the invoice.
subscription_idvarchar(24)Subscription billed.
account_idvarchar(16)Customer billed.
issued_ondateDate the invoice was issued.
due_ondateDate payment was due.
net_amount_usdnumeric(11,2)Amount before tax.
tax_amount_usdnumeric(10,2)Tax charged.

+6 more columns in sub_invoices. The full schema ships with the download.

sub_invoice_lines· Rows: 93,443
ColumnTypeDescription
invoice_line_idvarchar(24)Surrogate key for the invoice line.
invoice_idvarchar(24)Invoice the line belongs to.
subscription_idvarchar(24)Subscription billed.
plan_codevarchar(24)Plan billed.
line_typevarchar(24)Whether the line is the subscription charge or usage overage.
quantityintegerQuantity billed.
unit_price_usdnumeric(10,2)Price per unit.

+2 more columns in sub_invoice_lines. The full schema ships with the download.

sub_payments· Rows: 81,284
ColumnTypeDescription
payment_idvarchar(24)Surrogate key for the payment.
invoice_idvarchar(24)Invoice paid.
subscription_idvarchar(24)Subscription paid for.
account_idvarchar(16)Customer who paid.
paid_ondateDate payment was captured.
amount_usdnumeric(11,2)Amount captured.
payment_methodvarchar(24)How the customer paid.

+3 more columns in sub_payments. The full schema ships with the download.

sub_tickets· Rows: 114,865
ColumnTypeDescription
ticket_idvarchar(24)Surrogate key for the ticket.
subscription_idvarchar(24)Subscription the ticket relates to.
account_idvarchar(16)Customer who raised it.
ticket_categoryvarchar(16)What the ticket is about.
priorityvarchar(16)Priority the ticket was raised at.
opened_ondateDate the ticket was opened.
resolution_hoursnumeric(5,1)Hours taken to resolve.

+4 more columns in sub_tickets. The full schema ships with the download.

sub_nps_responses· Rows: 2,322
ColumnTypeDescription
nps_response_idvarchar(24)Surrogate key for the response.
subscription_idvarchar(24)Subscription the respondent belongs to.
account_idvarchar(16)Customer.
responded_ondateDate of the response.
nps_scoreintegerScore from zero to ten.
nps_classvarchar(16)Promoter, passive or detractor.
sub_monthly_arr· Rows: 42
ColumnTypeDescription
arr_month_idvarchar(16)Surrogate key for the month row.
metric_monthvarchar(16)Month the waterfall covers.
opening_mrr_usdnumeric(12,2)Monthly recurring revenue at the start of the month.
new_mrr_usdnumeric(11,2)Revenue from customers won this month.
expansion_mrr_usdnumeric(10,2)Revenue added by existing customers buying more. This is what carries the business model, and it is larger than new business.
reactivation_mrr_usdintegerRevenue from customers who returned after leaving.
contraction_mrr_usdnumeric(10,2)Revenue lost to existing customers buying less. Negative.

+12 more columns in sub_monthly_arr. The full schema ships with the download.

sub_cohort_retention· Rows: 630
ColumnTypeDescription
cohort_idvarchar(24)Surrogate key for the cohort measurement.
cohort_monthvarchar(16)Month the cohort started. May be before the extract window, which is what gives the set anything old enough to measure at twenty four months.
segment_codevarchar(16)Segment of the cohort.
as_of_monthvarchar(16)Month the measurement is taken at.
months_since_startintegerAge of the cohort at measurement.
starting_customersintegerCustomers the cohort started with.
retained_customersintegerCustomers still subscribed at this age.

+5 more columns in sub_cohort_retention. The full schema ships with the download.

sub_monthly_pipeline· Rows: 42
ColumnTypeDescription
pipeline_month_idvarchar(16)Surrogate key for the month row.
metric_monthvarchar(16)Month the metrics cover.
opportunities_createdintegerOpportunities created in the month.
pipeline_created_usdintegerValue of pipeline created.
opportunities_wonintegerOpportunities won.
won_value_usdintegerValue won.
opportunities_lostintegerOpportunities lost.

+4 more columns in sub_monthly_pipeline. The full schema ships with the download.

sub_owner_performance· Rows: 21
ColumnTypeDescription
owner_performance_idvarchar(24)Surrogate key for the summary.
owner_idvarchar(16)Employee summarised.
segment_codevarchar(16)Segment they cover.
opportunitiesintegerOpportunities owned.
wonintegerOpportunities won.
win_rate_pctnumeric(7,3)Win rate achieved. Individual skill genuinely moves this around the segment benchmark.
closed_won_value_usdintegerValue closed.

+4 more columns in sub_owner_performance. The full schema ships with the download.

sub_plan_performance· Rows: 6
ColumnTypeDescription
plan_performance_idvarchar(24)Surrogate key for the summary.
plan_codevarchar(24)Plan summarised.
subscriptionsintegerSubscriptions ever written on this plan.
opening_mrr_usdnumeric(12,2)Total opening monthly recurring revenue across them.
average_opening_mrr_usdnumeric(9,2)Average opening monthly recurring revenue per subscription.
churned_subscriptionsintegerSubscriptions on this plan that ended.
churn_rate_pctnumeric(7,3)Churned as a percentage of subscriptions written.

+2 more columns in sub_plan_performance. The full schema ships with the download.

sub_owners· Rows: 36
ColumnTypeDescription
owner_idvarchar(16)Surrogate key for the employee.
first_namevarchar(16)First name. The person is generated.
last_namevarchar(16)Last name.
owner_rolevarchar(24)Whether the employee sells or manages customer success.
segment_codevarchar(16)Segment they cover.
work_emailvarchar(56)Work email address on the vendor domain.
hired_ondateDate they joined.

+2 more columns in sub_owners. The full schema ships with the download.

sub_segments· Rows: 3
ColumnTypeDescription
segment_codevarchar(16)Customer segment code.
segment_namevarchar(24)Customer segment name.
acv_floor_usdintegerLowest annual contract value written in this segment.
acv_ceiling_usdintegerHighest annual contract value written in this segment.
benchmark_win_ratenumeric(6,3)Published win rate this segment is generated against, as a proportion. It falls as deal size rises.
median_sales_cycle_daysintegerPublished median sales cycle for this segment, which lengthens as deal size rises.
monthly_logo_churnnumeric(7,4)Published monthly customer churn rate for this segment, as a proportion. This is the level the book is calibrated to land on.

+4 more columns in sub_segments. The full schema ships with the download.

sub_plans· Rows: 6
ColumnTypeDescription
plan_codevarchar(24)Plan code.
plan_namevarchar(24)Plan name as a customer would see it.
segment_codevarchar(16)Segment the plan is aimed at.
list_price_per_seat_month_usdintegerList price per seat per month before any billing interval discount or regional price index.
minimum_seatsintegerMinimum seats the plan can be bought with.
included_monthly_eventsintegerProduct events included each month before usage overage applies.
sub_plan_features· Rows: 38
ColumnTypeDescription
plan_feature_idvarchar(16)Surrogate key for the plan and feature pairing.
feature_codevarchar(24)Feature code.
feature_namevarchar(48)Feature name.
feature_groupvarchar(16)Whether the feature is security, platform, analytics or support. Feature gating is what makes an upgrade path exist.
plan_codevarchar(24)Plan the feature is included in.
sub_lead_sources· Rows: 10
ColumnTypeDescription
lead_source_codevarchar(24)Lead source code.
lead_source_namevarchar(32)Lead source name.
source_classvarchar(16)Whether the source is inbound, outbound, paid, referral, partner, events or product led.
lead_sharenumeric(6,3)Share of leads from this source, as a proportion.
lead_to_opportunity_ratenumeric(6,3)Rate at which leads from this source become opportunities. A referral converts several times better than paid search, and nobody can scale it.
cost_per_lead_usdintegerAcquisition cost attributed to a lead from this source. Zero where the source is organic.
sub_opportunity_stages· Rows: 8
ColumnTypeDescription
stage_codevarchar(24)Sales stage code.
stage_namevarchar(32)Sales stage name.
stage_orderintegerPosition of the stage in the normal forward path.
default_probabilitynumeric(5,2)Default probability of closing assigned to the stage.
sub_loss_reasons· Rows: 8
ColumnTypeDescription
loss_reason_codevarchar(24)Loss reason code.
loss_reason_namevarchar(40)Why the deal was lost.
incidence_sharenumeric(6,3)Share of losses attributable to this reason, as a proportion.
loss_classvarchar(16)Whether the loss was commercial, competitive, product related or simple inertia. The largest bucket is no decision at all rather than a competitor.
sub_churn_reasons· Rows: 10
ColumnTypeDescription
churn_reason_codevarchar(32)Churn reason code.
churn_reason_namevarchar(40)Why the customer left.
incidence_sharenumeric(6,3)Share of churn attributable to this reason, as a proportion.
churn_classvarchar(16)Whether the cause was recoverable, competitive, product related or unavoidable. A customer that ceased trading was never going to be saved by a success manager, and separating those is what makes a churn number actionable.
win_back_ratenumeric(5,2)Rate at which a customer lost for this reason is later won back.
sub_mrr_movement_types· Rows: 5
ColumnTypeDescription
movement_typevarchar(16)Movement type code.
movement_namevarchar(16)Movement name.
signintegerWhether the movement adds to or subtracts from recurring revenue.
sub_ticket_categories· Rows: 9
ColumnTypeDescription
ticket_categoryvarchar(24)Support ticket category code.
category_namevarchar(32)Ticket category name.
default_priorityvarchar(16)Priority the category is normally raised at.
category_sharenumeric(6,3)Share of tickets in this category, as a proportion.
median_resolution_hoursnumeric(5,1)Median hours to resolve, used as the service level target.
sub_health_bands· Rows: 5
ColumnTypeDescription
health_bandvarchar(16)Health band code.
band_namevarchar(16)Health band name.
score_fromnumeric(5,2)Bottom of the health score range this band covers.
score_tonumeric(5,2)Top of the health score range.
monthly_churn_hazardnumeric(7,4)Monthly churn hazard observed in this band. Health SCALES the segment churn benchmark rather than replacing it, so the book still lands on the published rate.
sub_billing_intervals· Rows: 4
ColumnTypeDescription
billing_intervalvarchar(16)Billing interval code.
interval_namevarchar(16)Billing interval name.
months_per_invoiceintegerMonths covered by one invoice.
price_multipliernumeric(5,2)Price multiplier for paying further ahead. Annual and multi year billing carry a real discount.
usage_sharenumeric(6,3)Share of subscriptions on this interval, as a proportion.
sub_industries· Rows: 12
ColumnTypeDescription
industry_codevarchar(32)Customer industry code.
industry_namevarchar(40)Customer industry name.
account_sharenumeric(6,3)Share of accounts in this industry, as a proportion.
usage_intensitynumeric(5,2)How heavily this industry uses the product relative to the average, which feeds product fit.
sub_countries· Rows: 15
ColumnTypeDescription
country_codevarchar(8)Two letter country code.
country_namevarchar(24)Country name.
regionvarchar(16)Sales region the country reports into.
local_currencyvarchar(16)Currency the customer is billed in.
account_sharenumeric(6,3)Share of accounts in this country, as a proportion.
price_indexnumeric(5,2)Regional price index applied to list pricing.
sub_activity_types· Rows: 9
ColumnTypeDescription
activity_typevarchar(32)Sales activity type code.
activity_namevarchar(32)Sales activity type name.
activity_sharenumeric(6,3)Share of logged activities of this type, as a proportion.
sub_buying_roles· Rows: 8
ColumnTypeDescription
buying_rolevarchar(24)Buying committee role code.
role_namevarchar(24)Buying committee role name.
role_sharenumeric(6,3)Share of committee members holding this role, as a proportion.
influence_on_outcomenumeric(5,2)How much the role moves the odds of winning. A detractor moves them against the deal.

Sample Data

A snapshot of real rows from the dataset (values are fully synthetic).

subscription_idplan_codebilling_intervalstarted_onended_onsubscription_statusseatsopening_mrr_usdcurrent_mrr_usdmonths_observed
SUB-P1ZLT4V5Q9starterannual2025-04-232025-07-01churned22542.303
SUB-LSKXWJBKWIstarterannual2023-07-05active484932407.236
SUB-DPJ3M4000Vscalemonthly2026-05-21active56498449842

Version History

v1.0.02026-09-02v1.0.0 - first release. Forty-one tables, 113,939 subscription-months across 42 months. Lead to churn for a synthetic business software vendor, with win rate, sales cycle, buying committee size, logo churn and net revenue retention calibrated separately per segment against published benchmarks, and a recurring revenue waterfall that reconciles to the penny in every month.