Customer Lifecycle, Subscription and Churn Analytics Set (WW)
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.
Row Counts by Table
Counted from the files that ship, not estimated.
| Table | Rows |
|---|---|
| sub_accounts | 42,000 |
| sub_subscriptions | 5,521 |
| sub_mrr_movements | 16,328 |
| sub_churn_events | 2,485 |
| sub_opportunities | 19,661 |
| sub_contacts | 175,031 |
| sub_leads | 49,975 |
| sub_opportunity_stage_history | 99,523 |
| sub_opportunity_contacts | 70,034 |
| sub_quotes | 11,322 |
| sub_activities | 414,423 |
| sub_subscription_items | 11,042 |
| sub_renewals | 3,265 |
| sub_health_scores | 113,939 |
| sub_usage_monthly | 113,939 |
| sub_invoices | 81,967 |
| sub_invoice_lines | 93,443 |
| sub_payments | 81,284 |
| sub_tickets | 114,865 |
| sub_nps_responses | 2,322 |
| sub_monthly_arr | 42 |
| sub_cohort_retention | 630 |
| sub_monthly_pipeline | 42 |
| sub_owner_performance | 21 |
| sub_plan_performance | 6 |
| sub_owners | 36 |
| sub_segments | 3 |
| sub_plans | 6 |
| sub_plan_features | 38 |
| sub_lead_sources | 10 |
| sub_opportunity_stages | 8 |
| sub_loss_reasons | 8 |
| sub_churn_reasons | 10 |
| sub_mrr_movement_types | 5 |
| sub_ticket_categories | 9 |
| sub_health_bands | 5 |
| sub_billing_intervals | 4 |
| sub_industries | 12 |
| sub_countries | 15 |
| sub_activity_types | 9 |
| sub_buying_roles | 8 |
Table Relationships
One parent record and seven child tables, each joined back on the same key.
Schema
Every table ships with typed columns, referential integrity, and documentation.
| Column | Type | Description |
|---|---|---|
| account_id | varchar(16) | Surrogate key for the company. |
| account_number | varchar(16) | Account number as the vendor would hold it. Derived from a keyed hash, not issued in sequence. |
| account_name | varchar(40) | Company name. Every name is an invented compound and the company does not exist. |
| account_domain | varchar(40) | Company domain. Resolved at build time and replaced if it answered, so no live business is named. |
| segment_code | varchar(16) | Segment the account belongs to. |
| country_code | varchar(8) | Country the account is based in. |
| industry_code | varchar(32) | Industry the account operates in. |
+3 more columns in sub_accounts. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| subscription_id | varchar(24) | Surrogate key for the subscription. |
| subscription_number | varchar(16) | Subscription number as it appears on an invoice. |
| account_id | varchar(16) | Customer. |
| opportunity_id | varchar(24) | Deal the subscription came from. |
| plan_code | varchar(24) | Plan subscribed to. |
| billing_interval | varchar(16) | How often the customer is invoiced. |
| started_on | date | Date 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.
| Column | Type | Description |
|---|---|---|
| mrr_movement_id | varchar(24) | Surrogate key for the movement. |
| subscription_id | varchar(24) | Subscription that moved. |
| account_id | varchar(16) | Customer. |
| movement_month | varchar(16) | Month the movement occurred in. |
| movement_type | varchar(16) | New, expansion, reactivation, contraction or churn. |
| mrr_delta_usd | numeric(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_usd | numeric(10,2) | Monthly recurring revenue before the movement. |
+6 more columns in sub_mrr_movements. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| churn_event_id | varchar(24) | Surrogate key for the churn. |
| subscription_id | varchar(24) | Subscription that ended. |
| account_id | varchar(16) | Customer that left. |
| churned_on | date | Date the subscription ended. |
| churn_reason_code | varchar(32) | Why they left. |
| churn_class | varchar(16) | Whether the cause was recoverable, competitive, product related or unavoidable. |
| mrr_lost_usd | numeric(9,2) | Monthly recurring revenue lost. |
+8 more columns in sub_churn_events. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| opportunity_id | varchar(24) | Surrogate key for the opportunity. |
| opportunity_reference | varchar(16) | Reference as a seller would quote it. |
| account_id | varchar(16) | Company being sold to. |
| lead_source_code | varchar(24) | Source the opportunity originated from. |
| owner_id | varchar(16) | Account executive who owns it. |
| annual_contract_value_usd | integer | Annual contract value of the deal. |
| created_on | date | Date the opportunity was created. |
+6 more columns in sub_opportunities. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| contact_id | varchar(16) | Surrogate key for the person. |
| account_id | varchar(16) | Company the person works at. |
| first_name | varchar(16) | First name. The person is generated. |
| last_name | varchar(16) | Last name. |
| job_title | varchar(48) | Job title, consistent with the buying role held. |
| buying_role | varchar(24) | Role the person plays in a purchase decision. |
| work_email | varchar(64) | Work email on the account domain, which reaches nobody. |
+3 more columns in sub_contacts. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| lead_id | varchar(24) | Surrogate key for the lead. |
| account_id | varchar(16) | Company the lead came from. |
| lead_source_code | varchar(24) | Where the lead came from. |
| created_on | date | Date the lead was created. |
| lead_status | varchar(16) | Whether the lead qualified, was unqualified, went to nurture or was a duplicate. |
| qualified_on | date | Date the lead qualified. Empty if it never did. |
| acquisition_cost_usd | integer | Cost attributed to acquiring this lead. |
+2 more columns in sub_leads. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| stage_history_id | varchar(24) | Surrogate key for the stage entry. |
| opportunity_id | varchar(24) | Opportunity that moved. |
| sequence_number | varchar(8) | Position of this entry in the deal history. |
| stage_code | varchar(24) | Stage entered. |
| entered_on | date | Date the stage was entered. |
| days_in_stage | integer | Days spent in the stage before moving again. |
| stage_probability | numeric(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.
| Column | Type | Description |
|---|---|---|
| opportunity_contact_id | varchar(24) | Surrogate key for the committee membership. |
| opportunity_id | varchar(24) | Deal the person is involved in. |
| contact_id | varchar(16) | Person on the committee. |
| buying_role | varchar(24) | Role the person plays on this deal. |
| is_primary | varchar(16) | Y for the main point of contact. |
| influence_on_outcome | numeric(5,2) | How much this role moves the odds of winning, positive or negative. |
| Column | Type | Description |
|---|---|---|
| quote_id | varchar(24) | Surrogate key for the quote. |
| opportunity_id | varchar(24) | Deal quoted. |
| account_id | varchar(16) | Company quoted. |
| version | integer | Quote version. Later versions usually carry deeper discounts. |
| issued_on | date | Date the quote was issued. |
| list_value_usd | integer | Value at list price. |
| discount_rate | numeric(7,4) | Discount applied, as a proportion. |
+3 more columns in sub_quotes. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| activity_id | varchar(24) | Surrogate key for the activity. |
| opportunity_id | varchar(24) | Deal the activity relates to. |
| account_id | varchar(16) | Company involved. |
| activity_type | varchar(32) | Kind of activity logged. |
| activity_date | date | Date of the activity. |
| owner_id | varchar(16) | Employee who logged it. |
| contact_id | varchar(16) | Person involved. |
+2 more columns in sub_activities. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| subscription_item_id | varchar(24) | Surrogate key for the line. |
| subscription_id | varchar(24) | Subscription the line belongs to. |
| plan_code | varchar(24) | Plan the line prices against. |
| item_type | varchar(24) | Whether the line is seats or included usage. |
| quantity | integer | Quantity on the line. |
| unit_price_usd | numeric(7,2) | Price per unit per month. |
| line_mrr_usd | numeric(10,2) | Monthly recurring revenue contributed by the line. |
+1 more columns in sub_subscription_items. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| renewal_id | varchar(24) | Surrogate key for the renewal. |
| subscription_id | varchar(24) | Subscription renewed. |
| account_id | varchar(16) | Customer. |
| renewal_date | date | Date of the renewal. |
| renewed_arr_usd | numeric(11,2) | Annual recurring revenue renewed. |
| renewal_outcome | varchar(16) | Outcome of the renewal. |
| success_owner_id | varchar(16) | Customer success manager who handled it. |
+3 more columns in sub_renewals. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| health_score_id | varchar(24) | Surrogate key for the monthly score. |
| subscription_id | varchar(24) | Subscription scored. |
| account_id | varchar(16) | Customer. |
| score_month | varchar(16) | Month scored. |
| health_score | numeric(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_band | varchar(16) | Band the score falls in. |
| seat_adoption_ratio | numeric(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.
| Column | Type | Description |
|---|---|---|
| usage_id | varchar(24) | Surrogate key for the usage month. |
| subscription_id | varchar(24) | Subscription measured. |
| account_id | varchar(16) | Customer. |
| usage_month | varchar(16) | Month measured. |
| events | integer | Product events in the month. |
| licensed_seats | integer | Seats paid for. |
| active_seats | integer | Seats 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.
| Column | Type | Description |
|---|---|---|
| invoice_id | varchar(24) | Surrogate key for the invoice. |
| subscription_id | varchar(24) | Subscription billed. |
| account_id | varchar(16) | Customer billed. |
| issued_on | date | Date the invoice was issued. |
| due_on | date | Date payment was due. |
| net_amount_usd | numeric(11,2) | Amount before tax. |
| tax_amount_usd | numeric(10,2) | Tax charged. |
+6 more columns in sub_invoices. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| invoice_line_id | varchar(24) | Surrogate key for the invoice line. |
| invoice_id | varchar(24) | Invoice the line belongs to. |
| subscription_id | varchar(24) | Subscription billed. |
| plan_code | varchar(24) | Plan billed. |
| line_type | varchar(24) | Whether the line is the subscription charge or usage overage. |
| quantity | integer | Quantity billed. |
| unit_price_usd | numeric(10,2) | Price per unit. |
+2 more columns in sub_invoice_lines. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| payment_id | varchar(24) | Surrogate key for the payment. |
| invoice_id | varchar(24) | Invoice paid. |
| subscription_id | varchar(24) | Subscription paid for. |
| account_id | varchar(16) | Customer who paid. |
| paid_on | date | Date payment was captured. |
| amount_usd | numeric(11,2) | Amount captured. |
| payment_method | varchar(24) | How the customer paid. |
+3 more columns in sub_payments. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| ticket_id | varchar(24) | Surrogate key for the ticket. |
| subscription_id | varchar(24) | Subscription the ticket relates to. |
| account_id | varchar(16) | Customer who raised it. |
| ticket_category | varchar(16) | What the ticket is about. |
| priority | varchar(16) | Priority the ticket was raised at. |
| opened_on | date | Date the ticket was opened. |
| resolution_hours | numeric(5,1) | Hours taken to resolve. |
+4 more columns in sub_tickets. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| nps_response_id | varchar(24) | Surrogate key for the response. |
| subscription_id | varchar(24) | Subscription the respondent belongs to. |
| account_id | varchar(16) | Customer. |
| responded_on | date | Date of the response. |
| nps_score | integer | Score from zero to ten. |
| nps_class | varchar(16) | Promoter, passive or detractor. |
| Column | Type | Description |
|---|---|---|
| arr_month_id | varchar(16) | Surrogate key for the month row. |
| metric_month | varchar(16) | Month the waterfall covers. |
| opening_mrr_usd | numeric(12,2) | Monthly recurring revenue at the start of the month. |
| new_mrr_usd | numeric(11,2) | Revenue from customers won this month. |
| expansion_mrr_usd | numeric(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_usd | integer | Revenue from customers who returned after leaving. |
| contraction_mrr_usd | numeric(10,2) | Revenue lost to existing customers buying less. Negative. |
+12 more columns in sub_monthly_arr. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| cohort_id | varchar(24) | Surrogate key for the cohort measurement. |
| cohort_month | varchar(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_code | varchar(16) | Segment of the cohort. |
| as_of_month | varchar(16) | Month the measurement is taken at. |
| months_since_start | integer | Age of the cohort at measurement. |
| starting_customers | integer | Customers the cohort started with. |
| retained_customers | integer | Customers still subscribed at this age. |
+5 more columns in sub_cohort_retention. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| pipeline_month_id | varchar(16) | Surrogate key for the month row. |
| metric_month | varchar(16) | Month the metrics cover. |
| opportunities_created | integer | Opportunities created in the month. |
| pipeline_created_usd | integer | Value of pipeline created. |
| opportunities_won | integer | Opportunities won. |
| won_value_usd | integer | Value won. |
| opportunities_lost | integer | Opportunities lost. |
+4 more columns in sub_monthly_pipeline. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| owner_performance_id | varchar(24) | Surrogate key for the summary. |
| owner_id | varchar(16) | Employee summarised. |
| segment_code | varchar(16) | Segment they cover. |
| opportunities | integer | Opportunities owned. |
| won | integer | Opportunities won. |
| win_rate_pct | numeric(7,3) | Win rate achieved. Individual skill genuinely moves this around the segment benchmark. |
| closed_won_value_usd | integer | Value closed. |
+4 more columns in sub_owner_performance. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| plan_performance_id | varchar(24) | Surrogate key for the summary. |
| plan_code | varchar(24) | Plan summarised. |
| subscriptions | integer | Subscriptions ever written on this plan. |
| opening_mrr_usd | numeric(12,2) | Total opening monthly recurring revenue across them. |
| average_opening_mrr_usd | numeric(9,2) | Average opening monthly recurring revenue per subscription. |
| churned_subscriptions | integer | Subscriptions on this plan that ended. |
| churn_rate_pct | numeric(7,3) | Churned as a percentage of subscriptions written. |
+2 more columns in sub_plan_performance. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| owner_id | varchar(16) | Surrogate key for the employee. |
| first_name | varchar(16) | First name. The person is generated. |
| last_name | varchar(16) | Last name. |
| owner_role | varchar(24) | Whether the employee sells or manages customer success. |
| segment_code | varchar(16) | Segment they cover. |
| work_email | varchar(56) | Work email address on the vendor domain. |
| hired_on | date | Date they joined. |
+2 more columns in sub_owners. The full schema ships with the download.
| Column | Type | Description |
|---|---|---|
| segment_code | varchar(16) | Customer segment code. |
| segment_name | varchar(24) | Customer segment name. |
| acv_floor_usd | integer | Lowest annual contract value written in this segment. |
| acv_ceiling_usd | integer | Highest annual contract value written in this segment. |
| benchmark_win_rate | numeric(6,3) | Published win rate this segment is generated against, as a proportion. It falls as deal size rises. |
| median_sales_cycle_days | integer | Published median sales cycle for this segment, which lengthens as deal size rises. |
| monthly_logo_churn | numeric(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.
| Column | Type | Description |
|---|---|---|
| plan_code | varchar(24) | Plan code. |
| plan_name | varchar(24) | Plan name as a customer would see it. |
| segment_code | varchar(16) | Segment the plan is aimed at. |
| list_price_per_seat_month_usd | integer | List price per seat per month before any billing interval discount or regional price index. |
| minimum_seats | integer | Minimum seats the plan can be bought with. |
| included_monthly_events | integer | Product events included each month before usage overage applies. |
| Column | Type | Description |
|---|---|---|
| plan_feature_id | varchar(16) | Surrogate key for the plan and feature pairing. |
| feature_code | varchar(24) | Feature code. |
| feature_name | varchar(48) | Feature name. |
| feature_group | varchar(16) | Whether the feature is security, platform, analytics or support. Feature gating is what makes an upgrade path exist. |
| plan_code | varchar(24) | Plan the feature is included in. |
| Column | Type | Description |
|---|---|---|
| lead_source_code | varchar(24) | Lead source code. |
| lead_source_name | varchar(32) | Lead source name. |
| source_class | varchar(16) | Whether the source is inbound, outbound, paid, referral, partner, events or product led. |
| lead_share | numeric(6,3) | Share of leads from this source, as a proportion. |
| lead_to_opportunity_rate | numeric(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_usd | integer | Acquisition cost attributed to a lead from this source. Zero where the source is organic. |
| Column | Type | Description |
|---|---|---|
| stage_code | varchar(24) | Sales stage code. |
| stage_name | varchar(32) | Sales stage name. |
| stage_order | integer | Position of the stage in the normal forward path. |
| default_probability | numeric(5,2) | Default probability of closing assigned to the stage. |
| Column | Type | Description |
|---|---|---|
| loss_reason_code | varchar(24) | Loss reason code. |
| loss_reason_name | varchar(40) | Why the deal was lost. |
| incidence_share | numeric(6,3) | Share of losses attributable to this reason, as a proportion. |
| loss_class | varchar(16) | Whether the loss was commercial, competitive, product related or simple inertia. The largest bucket is no decision at all rather than a competitor. |
| Column | Type | Description |
|---|---|---|
| churn_reason_code | varchar(32) | Churn reason code. |
| churn_reason_name | varchar(40) | Why the customer left. |
| incidence_share | numeric(6,3) | Share of churn attributable to this reason, as a proportion. |
| churn_class | varchar(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_rate | numeric(5,2) | Rate at which a customer lost for this reason is later won back. |
| Column | Type | Description |
|---|---|---|
| movement_type | varchar(16) | Movement type code. |
| movement_name | varchar(16) | Movement name. |
| sign | integer | Whether the movement adds to or subtracts from recurring revenue. |
| Column | Type | Description |
|---|---|---|
| ticket_category | varchar(24) | Support ticket category code. |
| category_name | varchar(32) | Ticket category name. |
| default_priority | varchar(16) | Priority the category is normally raised at. |
| category_share | numeric(6,3) | Share of tickets in this category, as a proportion. |
| median_resolution_hours | numeric(5,1) | Median hours to resolve, used as the service level target. |
| Column | Type | Description |
|---|---|---|
| health_band | varchar(16) | Health band code. |
| band_name | varchar(16) | Health band name. |
| score_from | numeric(5,2) | Bottom of the health score range this band covers. |
| score_to | numeric(5,2) | Top of the health score range. |
| monthly_churn_hazard | numeric(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. |
| Column | Type | Description |
|---|---|---|
| billing_interval | varchar(16) | Billing interval code. |
| interval_name | varchar(16) | Billing interval name. |
| months_per_invoice | integer | Months covered by one invoice. |
| price_multiplier | numeric(5,2) | Price multiplier for paying further ahead. Annual and multi year billing carry a real discount. |
| usage_share | numeric(6,3) | Share of subscriptions on this interval, as a proportion. |
| Column | Type | Description |
|---|---|---|
| industry_code | varchar(32) | Customer industry code. |
| industry_name | varchar(40) | Customer industry name. |
| account_share | numeric(6,3) | Share of accounts in this industry, as a proportion. |
| usage_intensity | numeric(5,2) | How heavily this industry uses the product relative to the average, which feeds product fit. |
| Column | Type | Description |
|---|---|---|
| country_code | varchar(8) | Two letter country code. |
| country_name | varchar(24) | Country name. |
| region | varchar(16) | Sales region the country reports into. |
| local_currency | varchar(16) | Currency the customer is billed in. |
| account_share | numeric(6,3) | Share of accounts in this country, as a proportion. |
| price_index | numeric(5,2) | Regional price index applied to list pricing. |
| Column | Type | Description |
|---|---|---|
| activity_type | varchar(32) | Sales activity type code. |
| activity_name | varchar(32) | Sales activity type name. |
| activity_share | numeric(6,3) | Share of logged activities of this type, as a proportion. |
| Column | Type | Description |
|---|---|---|
| buying_role | varchar(24) | Buying committee role code. |
| role_name | varchar(24) | Buying committee role name. |
| role_share | numeric(6,3) | Share of committee members holding this role, as a proportion. |
| influence_on_outcome | numeric(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_id | plan_code | billing_interval | started_on | ended_on | subscription_status | seats | opening_mrr_usd | current_mrr_usd | months_observed |
|---|---|---|---|---|---|---|---|---|---|
| SUB-P1ZLT4V5Q9 | starter | annual | 2025-04-23 | 2025-07-01 | churned | 22 | 542.3 | 0 | 3 |
| SUB-LSKXWJBKWI | starter | annual | 2023-07-05 | active | 48 | 493 | 2407.2 | 36 | |
| SUB-DPJ3M4000V | scale | monthly | 2026-05-21 | active | 56 | 4984 | 4984 | 2 |
Version History
| v1.0.0 | 2026-09-02 | v1.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. |