Customer Lifetime Value Formula: Calculate CLV
Customer Lifetime Value Formula: Calculate CLV
Use the customer lifetime value formula with Stripe billing data. Sync revenue fields to your CRM, calculate CLV per customer, and automate tracking.
No credit card required
Free 100k syncs every month
Every team knows the customer lifetime value formula. Few teams can actually calculate it with real numbers. The formula requires average revenue per customer, gross margin, and churn rate. Revenue lives in Stripe. Churn rates require comparing billing periods. Margin needs cost data from your support tool. When each input lives in a different system, CLV stays a theoretical exercise on a whiteboard, not a working metric in your CRM.
This guide shows how to extract the exact fields you need from your billing tool, sync them to your CRM, and turn the customer lifetime value formula into a calculated property that updates automatically. For the conceptual overview of CLV, see our complete CLV guide. This article assumes you know what CLV is and want to calculate it from data you already have.
The customer lifetime value formula for SaaS and e-commerce
Two formulas cover most businesses. Both require the same thing: accurate billing data.
SaaS customer lifetime value formula
CLV = Average Revenue Per Account (ARPA) x Gross Margin / Monthly Churn Rate
Component | Where it lives | How to extract it |
|---|---|---|
ARPA | Billing tool (Stripe | Sum all active subscription amounts, divide by customer count |
Gross margin | Finance spreadsheet or accounting tool | (Revenue - cost to serve) / Revenue |
Monthly churn rate | Billing tool (canceled subscriptions / starting count) | Count cancellations per period, divide by starting subscriber count |
Example: 200 customers paying an average of $150/mo, 80% margin, 4% monthly churn. CLV = $150 x 0.80 / 0.04 = $3,000.
E-commerce customer lifetime value formula
CLV = Average Order Value x Purchase Frequency x Average Customer Lifespan
Component | Where it lives | How to extract it |
|---|---|---|
Average order value | Billing tool (Stripe | Total revenue / total orders |
Purchase frequency | Billing tool (charges per customer per year) | Total orders / unique customers over 12 months |
Average customer lifespan | Billing tool (first charge to last charge) | Average time between first and most recent purchase |
Example: $85 average order, 3.2 purchases per year, 2.8-year average lifespan. CLV = $85 x 3.2 x 2.8 = $761.60.
Both formulas share a dependency: the inputs come from your billing tool. If those numbers are six days stale because someone forgot the weekly CSV export, your CLV is wrong before you finish the calculation.
Where to find customer lifetime value data in Stripe, Chargebee, and Recurly
Your billing tool already stores every field the customer lifetime value formula needs. The problem is that these fields stay locked inside the billing tool instead of flowing to the system where your team works.
Stripe fields for CLV calculation:
Stripe field | CLV component | Notes |
|---|---|---|
| ARPA input | Amount in cents. Divide by 100 for dollars. |
| Churn rate input | Values: active, past_due, canceled, trialing, unpaid |
| Customer lifespan | Timestamp of subscription creation |
| Churn date | Null if still active |
| Lifespan start | When the customer record was created |
Sum of | Lifetime revenue | Total amount charged across all successful payments |
| Monthly revenue | Current period charge amount |
Chargebee equivalent fields: subscription.plan_amount, subscription.status, subscription.created_at, subscription.cancelled_at, customer.created_at.
Recurly equivalent fields: subscription.unit_amount, subscription.state, subscription.created_at, subscription.canceled_at, account.created_at.
The pattern is the same across all three: subscription amount, status, creation date, and cancellation date give you ARPA and churn. Charge history gives you lifetime revenue. The question is how to get these fields into the system where your team actually calculates CLV.
Step-by-step: sync billing data to your CRM for customer lifetime value calculation
The enterprise playbook for CLV calculation involves a data warehouse, dbt models, and SQL queries. That approach requires a data engineer and three months of pipeline work. For a team of 20, here is the faster path.
1. Connect your billing tool. In Oneprofile, add Stripe as a source. Use a restricted API key with read access to Customers, Subscriptions, and Charges. A restricted key limits access to only the data types you need. Oneprofile validates the connection before saving.
2. Connect your CRM. Add HubSpot (or Salesforce, Attio) as a destination. Authenticate via OAuth. Grant read/write access to Contacts and Contact Properties.
3. Map billing fields to CRM properties. This is where the CLV formula becomes operational. Map the fields your formula needs:
Stripe field | CRM property | Property type | Purpose |
|---|---|---|---|
|
| Number (currency) | ARPA input |
|
| Dropdown | Churn tracking |
|
| Date | Tenure calculation |
Sum of paid |
| Number (currency) | Historical CLV |
|
| Single-line text | Segmentation |
|
| Date | Retention outreach |
Use email as the matching key. Oneprofile creates custom CRM properties automatically if they do not exist.
4. Set sync mode. Use "Update or Create." Existing CRM contacts get enriched with billing fields. Stripe customers without a CRM record get created as new contacts.
5. Schedule the sync. Every 15 minutes keeps billing data fresh enough for operational use. When a customer upgrades from Free to Team in Stripe, the CRM reflects the change within 15 minutes, not next Monday.
6. Build CLV as a calculated CRM property. With billing fields on the contact record, create calculated properties in your CRM:
Months subscribed: Difference between today and
subscription_start_datein monthsAverage monthly revenue:
lifetime_revenue/ months subscribedEstimated CLV:
monthly_revenuex gross margin / churn rate (use your company-wide churn rate as a constant, or segment by plan tier for higher accuracy)
HubSpot, Salesforce, and Attio all support calculated properties. The formula runs on data that updates automatically.
Automate customer lifetime value tracking with real-time billing sync
Manual CLV tracking breaks for three reasons: exports are late, formulas reference stale data, and nobody owns the update process. Automated sync eliminates all three.
When billing data flows to your CRM on a 15-minute schedule, CLV becomes a living metric:
A customer upgrades from $100/mo to $250/mo. Stripe records the change immediately. Within 15 minutes, the CRM property monthly_revenue updates to $250. The calculated CLV property recalculates. Your success team sees the updated value on the contact record the same day.
A customer's payment fails. Stripe sets subscription.status to past_due. The CRM property updates. Your at-risk segment grows by one. A CRM workflow triggers, notifying the account owner to follow up. No one checked a Stripe dashboard. The data moved itself.
A new customer signs up. Stripe creates a Customer and Subscription. Oneprofile creates a CRM contact with all billing properties populated. The contact enters the CLV calculation from day one, not after someone remembers to update the spreadsheet.
Tracking method | Data freshness | Effort to maintain | CLV accuracy |
|---|---|---|---|
Quarterly CSV export | 0-90 days stale | 2-4 hours per quarter | Low |
Weekly manual update | 0-7 days stale | 30 min per week | Medium |
Automated 15-min sync | 0-15 minutes stale | Zero after setup | High |
The difference between medium and high accuracy compounds over time. A customer who upgraded two weeks ago shows a higher CLV with real-time data and the same CLV as last month with stale data. Multiply that gap across 500 customers and your total customer equity estimate drifts further from reality every day.
Once billing data flows automatically, you can build CRM segments that use CLV operationally: route high-CLV accounts to dedicated success managers, trigger upgrade campaigns for customers approaching plan limits, and flag accounts whose CLV is declining due to downgrades or reduced purchase frequency.
What is the simplest customer lifetime value formula for SaaS?
ARPA times gross margin divided by monthly churn rate. For example, $100 ARPA at 80% margin with 5% churn gives CLV of $1,600. The formula is simple. Getting accurate inputs from your billing tool is the hard part.
Can I calculate CLV from Stripe data alone?
You can calculate a basic CLV using Stripe revenue and churn data. For a profit-adjusted CLV, you also need cost-to-serve data from your support tool and retention signals from your product database.
How do I get Stripe billing data into my CRM for CLV calculation?
Connect Stripe as a source and your CRM as a destination in Oneprofile. Map subscription fields (plan, MRR, tenure, status) to contact properties. Set a 15-minute sync schedule. Done in under 30 minutes.
Do I need a data warehouse to calculate customer lifetime value?
No. If billing fields sync to your CRM automatically, you can calculate CLV per customer using CRM formulas or reports. A warehouse is only necessary for advanced predictive models.
How often should CLV data be updated?
Every time billing data changes. With automated sync, your CRM fields update within 15 minutes of a plan change, payment, or cancellation in Stripe. Manual CSV exports make CLV stale within days.