Calculate Your Customer Acquisition Cost & LTV

This CAC/LTV calculator helps startups, SaaS companies, and growth-focused businesses understand their unit economics. Enter your marketing and sales spend, customer acquisition numbers, revenue per customer, and retention rates to calculate: Customer Acquisition Cost (CAC), Customer Lifetime Value (LTV), CAC:LTV Ratio, and CAC Payback Period. Get instant analysis with industry benchmarks and specific recommendations for improving your unit economics. Perfect for founders, marketing directors, and investors evaluating business health.

ROI Calculator

Try the Quiz

💰 What's Your Customer Acquisition Cost Costing You?
How much do you spend to acquire customers?
10000/month
10000 /month
0100000
15000/month
15000 /month
0100000
$25,000
How many customers do you acquire?
51customers
51 customers
1500
$490
📊 Your CAC is in the typical range
How much is each customer worth?
200/month
200 /month
102000
24months
24 months
160
$4,800
Here's your CAC analysis
🏆 Excellent - Highly Efficient
LTV:CAC Ratio = 9.8:1
🏆 Above 5:1 - Excellent! You might be under-investing in growth
2.5 months
$300,000
Enter your details to receive your CAC optimization report
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
export function cacCalculatorQuiz(form: FormTs) {
form.setTitle(() => '💰 What\'s Your Customer Acquisition Cost Costing You?');
 
// ============ CALCULATOR STATE ============
const inputs = form.state<Record<string, number>>({
monthlyMarketingSpend: 10000,
monthlySalesSpend: 15000,
newCustomersPerMonth: 50,
avgCustomerLifetime: 24,
avgMonthlyRevenue: 200,
churnRate: 5
});
 
const updateInput = (key: string, value: number) => {
inputs.update(current => ({ ...current, [key]: value }));
};
 
// ============ CALCULATIONS ============
const getCAC = () => {
const i = inputs();
const totalAcquisitionCost = i.monthlyMarketingSpend + i.monthlySalesSpend;
return i.newCustomersPerMonth > 0 ? totalAcquisitionCost / i.newCustomersPerMonth : 0;
};
 
const getLTV = () => {
const i = inputs();
return i.avgMonthlyRevenue * i.avgCustomerLifetime;
};
 
const getLTVtoCACRatio = () => {
const cac = getCAC();
const ltv = getLTV();
return cac > 0 ? ltv / cac : 0;
};
 
const getPaybackMonths = () => {
const cac = getCAC();
const i = inputs();
return i.avgMonthlyRevenue > 0 ? cac / i.avgMonthlyRevenue : 0;
};
 
const getAnnualCAC = () => {
const i = inputs();
return (i.monthlyMarketingSpend + i.monthlySalesSpend) * 12;
};
 
const getHealthStatus = (): 'critical' | 'concerning' | 'healthy' | 'excellent' => {
const ratio = getLTVtoCACRatio();
if (ratio >= 5) return 'excellent';
if (ratio >= 3) return 'healthy';
if (ratio >= 1) return 'concerning';
return 'critical';
};
 
const getHealthLabel = () => {
const status = getHealthStatus();
const labels = {
critical: '🚨 Critical - Losing Money',
concerning: '⚠️ Concerning - Needs Improvement',
healthy: '✅ Healthy - Good Balance',
excellent: '🏆 Excellent - Highly Efficient'
};
return labels[status];
};
 
const getHealthColor = () => {
const status = getHealthStatus();
const colors = {
critical: '#dc2626',
concerning: '#ea580c',
healthy: '#16a34a',
excellent: '#7c3aed'
};
return colors[status];
};
 
const getPotentialSavings = () => {
const ratio = getLTVtoCACRatio();
if (ratio >= 3) return 0;
// Calculate how much CAC should be reduced to reach 3:1 ratio
const targetCAC = getLTV() / 3;
const currentCAC = getCAC();
const savingsPerCustomer = currentCAC - targetCAC;
const i = inputs();
return savingsPerCustomer * i.newCustomersPerMonth * 12;
};
 
const formatCurrency = (value: number) => {
return new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
maximumFractionDigits: 0
}).format(value);
};
 
// ============ COMPLETION SCREEN ============
form.configureCompletionScreen({
type: 'text',
title: () => `${getHealthLabel()}`,
message: () => {
const ratio = getLTVtoCACRatio().toFixed(1);
const cac = formatCurrency(getCAC());
const savings = getPotentialSavings();
if (savings > 0) {
return `Your LTV:CAC ratio is ${ratio}:1 with a CAC of ${cac}. You could save ${formatCurrency(savings)}/year by optimizing to the benchmark 3:1 ratio. Download your detailed analysis for specific recommendations.`;
}
return `Your LTV:CAC ratio is ${ratio}:1 with a CAC of ${cac}. Your unit economics are solid! Download your report to learn how to maintain and improve further.`;
}
});
 
// ============ PAGES SETUP ============
const pages = form.addPages('quiz-pages', {
heightMode: 'current-page'
});
 
// ============ PAGE 1: Acquisition Costs ============
const page1 = pages.addPage('acquisition-costs', { mobileBreakpoint: 500 });
 
page1.addRow(row => {
row.addTextPanel('header1', {
label: 'Step 1 of 5: Acquisition Costs',
computedValue: () => 'How much do you spend to acquire customers?',
customStyles: {
fontSize: '0.9rem',
color: '#6b7280',
marginBottom: '1rem'
}
});
});
 
page1.addSpacer({ height: '24px' });
 
page1.addRow(row => {
row.addSlider('monthlyMarketingSpend', {
label: 'Monthly Marketing Spend',
tooltip: 'Include ads, content, SEO, events, tools',
isRequired: true,
min: 0,
max: 100000,
step: 1000,
unit: '/month',
defaultValue: 10000,
onValueChange: (val) => {
if (val != null) updateInput('monthlyMarketingSpend', val);
}
});
});
 
page1.addRow(row => {
row.addSlider('monthlySalesSpend', {
label: 'Monthly Sales Spend',
tooltip: 'Include salaries, commissions, tools, travel',
isRequired: true,
min: 0,
max: 100000,
step: 1000,
unit: '/month',
defaultValue: 15000,
onValueChange: (val) => {
if (val != null) updateInput('monthlySalesSpend', val);
}
});
});
 
page1.addRow(row => {
row.addTextPanel('totalSpend', {
label: '💵 Total Monthly Acquisition Spend',
computedValue: () => formatCurrency(inputs().monthlyMarketingSpend + inputs().monthlySalesSpend),
customStyles: {
fontSize: '1.2rem',
fontWeight: '700',
color: '#dc2626',
textAlign: 'center',
padding: '15px',
background: '#fef2f2',
borderRadius: '8px'
}
});
});
 
// ============ PAGE 2: New Customers ============
const page2 = pages.addPage('new-customers', { mobileBreakpoint: 500 });
 
page2.addRow(row => {
row.addTextPanel('header2', {
label: 'Step 2 of 5: Customer Acquisition',
computedValue: () => 'How many customers do you acquire?',
customStyles: {
fontSize: '0.9rem',
color: '#6b7280',
marginBottom: '1rem'
}
});
});
 
page2.addSpacer({ height: '24px' });
 
page2.addRow(row => {
row.addSlider('newCustomersPerMonth', {
label: 'New Customers Per Month',
isRequired: true,
min: 1,
max: 500,
step: 5,
unit: 'customers',
defaultValue: 50,
onValueChange: (val) => {
if (val != null) updateInput('newCustomersPerMonth', val);
}
});
});
 
page2.addRow(row => {
row.addTextPanel('cacResult', {
label: '🎯 Your Customer Acquisition Cost (CAC)',
computedValue: () => formatCurrency(getCAC()),
customStyles: () => {
const cac = getCAC();
const color = cac > 500 ? '#dc2626' : cac > 200 ? '#ca8a04' : '#16a34a';
return {
fontSize: '1.5rem',
fontWeight: '700',
color: color,
textAlign: 'center',
padding: '20px',
background: '#f9fafb',
borderRadius: '12px',
border: `2px solid ${color}`
};
}
});
});
 
page2.addRow(row => {
row.addTextPanel('cacContext', {
computedValue: () => {
const cac = getCAC();
if (cac > 500) return '⚠️ Your CAC is higher than most B2B benchmarks';
if (cac > 200) return '📊 Your CAC is in the typical range';
return '✅ Your CAC is lower than average - good efficiency!';
},
customStyles: {
fontSize: '0.9rem',
color: '#6b7280',
textAlign: 'center',
marginTop: '10px'
}
});
});
 
// ============ PAGE 3: Customer Value ============
const page3 = pages.addPage('customer-value', { mobileBreakpoint: 500 });
 
page3.addRow(row => {
row.addTextPanel('header3', {
label: 'Step 3 of 5: Customer Lifetime Value',
computedValue: () => 'How much is each customer worth?',
customStyles: {
fontSize: '0.9rem',
color: '#6b7280',
marginBottom: '1rem'
}
});
});
 
page3.addSpacer({ height: '24px' });
 
page3.addRow(row => {
row.addSlider('avgMonthlyRevenue', {
label: 'Average Revenue Per Customer (Monthly)',
isRequired: true,
min: 10,
max: 2000,
step: 10,
unit: '/month',
defaultValue: 200,
onValueChange: (val) => {
if (val != null) updateInput('avgMonthlyRevenue', val);
}
});
});
 
page3.addRow(row => {
row.addSlider('avgCustomerLifetime', {
label: 'Average Customer Lifetime',
tooltip: 'How many months does a typical customer stay?',
isRequired: true,
min: 1,
max: 60,
step: 1,
unit: 'months',
defaultValue: 24,
onValueChange: (val) => {
if (val != null) updateInput('avgCustomerLifetime', val);
}
});
});
 
page3.addRow(row => {
row.addTextPanel('ltvResult', {
label: '💎 Customer Lifetime Value (LTV)',
computedValue: () => formatCurrency(getLTV()),
customStyles: {
fontSize: '1.5rem',
fontWeight: '700',
color: '#059669',
textAlign: 'center',
padding: '20px',
background: '#ecfdf5',
borderRadius: '12px',
border: '2px solid #6ee7b7'
}
});
});
 
// ============ PAGE 4: Results ============
const page4 = pages.addPage('results', { mobileBreakpoint: 500 });
 
page4.addRow(row => {
row.addTextPanel('header4', {
label: 'Step 4 of 5: Your Unit Economics',
computedValue: () => 'Here\'s your CAC analysis',
customStyles: {
fontSize: '0.9rem',
color: '#6b7280',
marginBottom: '1rem'
}
});
});
 
page4.addSpacer({ height: '24px' });
 
page4.addRow(row => {
row.addTextPanel('healthStatus', {
computedValue: () => getHealthLabel(),
customStyles: () => ({
fontSize: '1.3rem',
fontWeight: '800',
textAlign: 'center',
color: getHealthColor(),
padding: '15px',
background: '#f9fafb',
borderRadius: '12px',
border: `3px solid ${getHealthColor()}`
})
});
});
 
page4.addRow(row => {
row.addTextPanel('ratioDisplay', {
computedValue: () => {
const ratio = getLTVtoCACRatio();
return `LTV:CAC Ratio = ${ratio.toFixed(1)}:1`;
},
customStyles: {
fontSize: '1.5rem',
fontWeight: '700',
textAlign: 'center',
color: '#1e40af',
marginTop: '15px'
}
});
});
 
page4.addRow(row => {
row.addTextPanel('ratioContext', {
computedValue: () => {
const ratio = getLTVtoCACRatio();
if (ratio >= 5) return '🏆 Above 5:1 - Excellent! You might be under-investing in growth';
if (ratio >= 3) return '✅ 3:1 to 5:1 - Healthy range for sustainable growth';
if (ratio >= 1) return '⚠️ 1:1 to 3:1 - Below benchmark, optimize acquisition';
return '🚨 Below 1:1 - You\'re losing money on each customer!';
},
customStyles: {
fontSize: '0.9rem',
color: '#4b5563',
textAlign: 'center',
padding: '10px',
background: '#f3f4f6',
borderRadius: '6px',
marginTop: '10px'
}
});
});
 
page4.addRow(row => {
row.addTextPanel('paybackLabel', {
label: '⏱️ CAC Payback Period',
computedValue: () => `${getPaybackMonths().toFixed(1)} months`,
customStyles: {
fontSize: '1rem',
padding: '12px',
background: '#dbeafe',
borderRadius: '8px',
textAlign: 'center',
marginTop: '15px'
}
}, '1fr');
 
row.addTextPanel('annualCacLabel', {
label: '📅 Annual CAC Spend',
computedValue: () => formatCurrency(getAnnualCAC()),
customStyles: {
fontSize: '1rem',
padding: '12px',
background: '#fee2e2',
borderRadius: '8px',
textAlign: 'center',
marginTop: '15px'
}
}, '1fr');
});
 
const savingsSection = page4.addSubform('savingsSection', {
title: '💰 Optimization Opportunity',
isVisible: () => getPotentialSavings() > 0,
isCollapsible: false,
customStyles: {
marginTop: '1rem',
padding: '15px',
background: '#fef3c7',
borderRadius: '8px',
border: '2px solid #fcd34d'
}
});
 
savingsSection.addRow(row => {
row.addTextPanel('savingsAmount', {
computedValue: () => `Potential Annual Savings: ${formatCurrency(getPotentialSavings())}`,
customStyles: {
fontSize: '1.1rem',
fontWeight: '700',
color: '#92400e',
textAlign: 'center'
}
});
});
 
savingsSection.addRow(row => {
row.addTextPanel('savingsContext', {
computedValue: () => 'By optimizing your CAC to reach the benchmark 3:1 LTV:CAC ratio',
customStyles: {
fontSize: '0.85rem',
color: '#92400e',
textAlign: 'center'
}
});
});
 
// ============ PAGE 5: Lead Capture ============
const page5 = pages.addPage('lead-capture', { mobileBreakpoint: 500 });
 
page5.addRow(row => {
row.addTextPanel('header5', {
label: 'Step 5 of 5: Get Your Report',
computedValue: () => 'Enter your details to receive your CAC optimization report',
customStyles: {
fontSize: '0.9rem',
color: '#6b7280',
marginBottom: '1rem'
}
});
});
 
page5.addSpacer({ height: '24px' });
 
page5.addRow(row => {
row.addTextbox('name', {
label: 'Your Name',
isRequired: true,
placeholder: 'Jordan Marketing'
}, '1fr');
 
row.addEmail('email', {
label: 'Work Email',
isRequired: true,
placeholder: 'jordan@company.com'
}, '1fr');
});
 
page5.addRow(row => {
row.addTextbox('company', {
label: 'Company Name',
placeholder: 'Growth Co.'
}, '1fr');
 
row.addDropdown('businessModel', {
label: 'Business Model',
options: [
{ id: 'saas', name: 'SaaS' },
{ id: 'ecommerce', name: 'E-commerce' },
{ id: 'services', name: 'Services' },
{ id: 'marketplace', name: 'Marketplace' },
{ id: 'other', name: 'Other' }
],
placeholder: 'Select model'
}, '1fr');
});
 
page5.addRow(row => {
row.addCheckboxList('consent', {
options: [
{ id: 'report', name: '📄 Send me the detailed CAC analysis report', isRequired: true },
{ id: 'tips', name: '💡 Send me CAC optimization tips' },
{ id: 'consultation', name: '📞 I\'d like a free growth strategy call' }
],
defaultValue: ['report'],
orientation: 'vertical'
});
});
 
// ============ PDF REPORT ============
form.configurePdf('cac-report', pdf => {
pdf.configure({
filename: 'cac-analysis-report.pdf',
pageSize: 'A4',
allowUserDownload: true,
downloadButtonLabel: '📄 Download CAC Report',
header: {
title: 'Customer Acquisition Cost Analysis',
subtitle: 'Unit Economics Report'
},
footer: {
text: 'Generated by FormTs CAC Calculator',
showPageNumbers: true
}
});
 
pdf.addSection('Executive Summary', section => {
section.addRow(row => {
row.addField('Health Status', getHealthLabel());
row.addField('LTV:CAC Ratio', `${getLTVtoCACRatio().toFixed(1)}:1`);
});
section.addRow(row => {
row.addField('CAC', formatCurrency(getCAC()));
row.addField('LTV', formatCurrency(getLTV()));
});
section.addRow(row => {
row.addField('Payback Period', `${getPaybackMonths().toFixed(1)} months`);
row.addField('Annual CAC Spend', formatCurrency(getAnnualCAC()));
});
});
 
pdf.addSection('Your Inputs', section => {
const i = inputs();
section.addTable(
['Metric', 'Value'],
[
['Monthly Marketing Spend', formatCurrency(i.monthlyMarketingSpend)],
['Monthly Sales Spend', formatCurrency(i.monthlySalesSpend)],
['New Customers/Month', `${i.newCustomersPerMonth}`],
['Avg Revenue/Customer', `${formatCurrency(i.avgMonthlyRevenue)}/month`],
['Avg Customer Lifetime', `${i.avgCustomerLifetime} months`]
]
);
});
 
pdf.addPageBreak();
 
pdf.addSection('Optimization Recommendations', section => {
const ratio = getLTVtoCACRatio();
if (ratio < 3) {
section.addText('🎯 PRIORITY: Improve LTV:CAC Ratio');
section.addSpacer(5);
section.addText('To reduce CAC:');
section.addText('• Optimize ad targeting and creative');
section.addText('• Improve conversion rate optimization (CRO)');
section.addText('• Invest in organic channels (SEO, content)');
section.addText('• Implement referral programs');
section.addSpacer(10);
section.addText('To increase LTV:');
section.addText('• Reduce churn with better onboarding');
section.addText('• Upsell/cross-sell existing customers');
section.addText('• Improve customer success programs');
} else {
section.addText('✅ Your unit economics are healthy!');
section.addSpacer(5);
section.addText('Consider:');
section.addText('• Scaling acquisition spend');
section.addText('• Testing new channels');
section.addText('• Expanding to new markets');
}
});
 
pdf.addSection('Benchmarks by Industry', section => {
section.addTable(
['Industry', 'Typical CAC', 'Target LTV:CAC'],
[
['SaaS (SMB)', '$200-$500', '3:1 to 5:1'],
['SaaS (Enterprise)', '$1,000-$5,000', '3:1 to 5:1'],
['E-commerce', '$10-$50', '3:1+'],
['B2B Services', '$500-$2,000', '3:1 to 4:1'],
['Marketplace', '$20-$100', '2:1 to 3:1']
]
);
});
});
 
// ============ SUBMIT BUTTON ============
form.configureSubmitButton({
label: () => `💰 Get My Report (${getLTVtoCACRatio().toFixed(1)}:1 Ratio)`
});
 
form.configureSubmitBehavior({
sendToServer: true
});
}
 

Frequently Asked Questions

What is a good CAC:LTV ratio?

A healthy CAC:LTV ratio is typically 3:1 or higher, meaning customer lifetime value is at least 3x the cost to acquire them. Below 3:1 may indicate unsustainable unit economics, while above 5:1 might suggest under-investment in growth.

What costs should I include in CAC?

Include all marketing costs (ads, content, events, tools), sales costs (salaries, commissions, tools), and related overhead. Some businesses also include a portion of customer success costs for initial onboarding.

How do I calculate customer lifetime value?

LTV = Average Revenue Per Customer × Gross Margin × Average Customer Lifespan. For subscription businesses, lifespan is often calculated as 1/churn rate. This calculator handles the math for you.

What is CAC payback period?

CAC payback period is how long it takes to recover the cost of acquiring a customer through their gross margin contribution. Ideally under 12 months for healthy businesses, under 18 months for enterprise SaaS.

Can I customize this calculator for my business model?

Yes! Click 'Open in Editor' to customize the inputs, calculations, and benchmarks to match your specific business model (e-commerce, SaaS, marketplace, etc.).