{"product_id":"saas-ltv","title":"SaaS Lifetime Value Calculator","description":"\u003cstyle\u003e\n.sltv-calculator {\n  --ink: #0f172a;\n  --muted: #475569;\n  --border: #e2e8f0;\n  --surface: #ffffff;\n  --tint: #f8fafc;\n  --primary: #1d4ed8;\n  --accent: #c2410c;\n  --accent-hover: #9a3412;\n  --chart-1: #1e40af;\n  --chart-2: #0d9488;\n  --chart-3: #7c3aed;\n  --chart-4: #be185d;\n  --chart-5: #334155;\n  width: 100%;\n  max-width: 1200px;\n  margin: 0 auto;\n  color: var(--ink);\n  background: var(--surface);\n  border: 1px solid var(--border);\n  border-radius: 8px;\n  box-shadow: 0 1px 2px rgba(15,23,42,.06);\n  font-family: -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif;\n  font-size: 15px;\n  line-height: 1.55;\n  overflow-wrap: anywhere;\n  container-type: inline-size;\n  container-name: sltv;\n}\n.sltv-calculator,\n.sltv-calculator *,\n.sltv-calculator *::before,\n.sltv-calculator *::after { box-sizing: border-box; }\n.sltv-calculator * { min-width: 0; }\n.sltv-calculator h2,\n.sltv-calculator h3,\n.sltv-calculator p { margin-top: 0; }\n.sltv-calculator button,\n.sltv-calculator input { font: inherit; }\n.sltv-calculator button,\n.sltv-calculator input,\n.sltv-calculator a { touch-action: manipulation; }\n.sltv-calculator a { color: var(--primary); text-underline-offset: 2px; font-weight: 600; }\n.sltv-calculator a:hover { color: #1e3a8a; text-decoration-thickness: 2px; }\n.sltv-calculator :focus-visible { outline: 3px solid rgba(29,78,216,.38); outline-offset: 2px; }\n.sltv-calculator [hidden] { display: none !important; }\n.sltv-header {\n  padding: 24px;\n  border-bottom: 1px solid var(--border);\n  border-radius: 8px 8px 0 0;\n  background: linear-gradient(180deg,#ffffff 0%,#f8fafc 100%);\n}\n.sltv-title { margin-bottom: 8px; font-size: 24px; line-height: 1.25; font-weight: 700; letter-spacing: -.02em; }\n.sltv-subtitle { max-width: 800px; margin-bottom: 16px; color: var(--muted); }\n.sltv-pills { display: flex; flex-wrap: wrap; gap: 8px; }\n.sltv-pill {\n  display: inline-flex;\n  align-items: center;\n  gap: 6px;\n  min-height: 32px;\n  padding: 5px 10px;\n  border: 1px solid var(--border);\n  border-radius: 999px;\n  background: var(--surface);\n  color: var(--muted);\n  font-size: 13px;\n  font-weight: 500;\n  white-space: nowrap;\n}\n.sltv-pill strong { color: var(--ink); font-variant-numeric: tabular-nums; }\n.sltv-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  gap: 8px;\n  padding: 16px 24px;\n  border-bottom: 1px solid var(--border);\n  background: var(--surface);\n}\n.sltv-button {\n  display: inline-flex;\n  align-items: center;\n  justify-content: center;\n  gap: 10px;\n  min-height: 44px;\n  padding: 10px 16px;\n  border: 1px solid var(--border);\n  border-radius: 6px;\n  background: var(--surface);\n  color: var(--ink);\n  font-weight: 650;\n  cursor: pointer;\n  box-shadow: 0 1px 2px rgba(15,23,42,.06);\n  transition: background .15s ease, border-color .15s ease, box-shadow .15s ease;\n}\n.sltv-button:hover { border-color: #cbd5e1; background: var(--tint); box-shadow: 0 2px 5px rgba(15,23,42,.10); }\n.sltv-button-primary { padding: 12px 18px; border-color: var(--accent); background: var(--accent); color: #ffffff; white-space: nowrap; }\n.sltv-button-primary:hover,\n.sltv-button-primary:active { border-color: var(--accent-hover); background: var(--accent-hover); color: #ffffff; }\n.sltv-button svg { width: 20px; height: 20px; flex: 0 0 auto; fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }\n.sltv-workspace { display: grid; grid-template-columns: minmax(0,.95fr) minmax(0,1.05fr); gap: 24px; padding: 24px; background: var(--tint); }\n.sltv-panel,\n.sltv-section { border: 1px solid var(--border); border-radius: 8px; background: var(--surface); box-shadow: 0 1px 2px rgba(15,23,42,.04); }\n.sltv-panel { padding: 20px; }\n.sltv-section { margin: 0 24px 24px; padding: 20px; }\n.sltv-panel-heading,\n.sltv-section-heading { margin-bottom: 16px; font-size: 18px; line-height: 1.35; font-weight: 650; }\n.sltv-section-intro { margin: -8px 0 16px; color: var(--muted); font-size: 13px; font-weight: 500; }\n.sltv-mode-fieldset { margin: 0 0 20px; padding: 0; border: 0; }\n.sltv-mode-legend { margin-bottom: 8px; padding: 0; font-size: 14px; font-weight: 600; }\n.sltv-segmented { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 4px; padding: 4px; border: 1px solid var(--border); border-radius: 6px; background: var(--tint); }\n.sltv-segmented-item { position: relative; }\n.sltv-segmented-item input { position: absolute; width: 1px; height: 1px; opacity: 0; }\n.sltv-segmented-item label { display: flex; align-items: center; justify-content: center; min-height: 40px; padding: 7px 10px; border-radius: 4px; color: var(--muted); font-size: 13px; font-weight: 650; text-align: center; cursor: pointer; }\n.sltv-segmented-item input:checked + label { background: var(--surface); color: var(--primary); box-shadow: 0 1px 2px rgba(15,23,42,.10); }\n.sltv-segmented-item input:focus-visible + label { outline: 3px solid rgba(29,78,216,.35); outline-offset: 1px; }\n.sltv-fields { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 16px; }\n.sltv-field { display: flex; flex-direction: column; gap: 6px; }\n.sltv-field-full { grid-column: 1 \/ -1; }\n.sltv-label { font-size: 14px; font-weight: 600; color: var(--ink); }\n.sltv-input { width: 100%; min-height: 44px; padding: 9px 12px; border: 1px solid #cbd5e1; border-radius: 6px; background: #ffffff; color: var(--ink); font-size: 15px; font-variant-numeric: tabular-nums; }\n.sltv-input:hover { border-color: #94a3b8; }\n.sltv-input[aria-invalid=\"true\"] { border-color: #b91c1c; box-shadow: 0 0 0 1px #b91c1c; }\n.sltv-help,\n.sltv-error { min-height: 38px; font-size: 13px; font-weight: 500; line-height: 1.45; }\n.sltv-help { color: var(--muted); }\n.sltv-error { min-height: 0; color: #991b1b; }\n.sltv-results { display: flex; flex-direction: column; gap: 16px; }\n.sltv-primary-result { padding: 20px; border: 1px solid #bfdbfe; border-radius: 8px; background: #eff6ff; }\n.sltv-primary-label { margin-bottom: 4px; color: #1e3a8a; font-size: 13px; font-weight: 650; }\n.sltv-primary-value { font-size: 30px; line-height: 1.2; font-weight: 700; letter-spacing: -.02em; font-variant-numeric: tabular-nums; }\n.sltv-primary-note { margin: 8px 0 0; color: var(--muted); font-size: 13px; font-weight: 500; }\n.sltv-result-grid { display: grid; grid-template-columns: repeat(2,minmax(0,1fr)); gap: 12px; }\n.sltv-result-card { padding: 14px; border: 1px solid var(--border); border-radius: 6px; background: var(--surface); }\n.sltv-result-label { margin-bottom: 5px; color: var(--muted); font-size: 13px; font-weight: 600; }\n.sltv-result-value { font-size: 20px; line-height: 1.3; font-weight: 700; font-variant-numeric: tabular-nums; }\n.sltv-result-detail { margin-top: 4px; color: var(--muted); font-size: 13px; font-weight: 500; }\n.sltv-live { padding: 10px 12px; border-radius: 6px; background: var(--tint); color: var(--muted); font-size: 13px; font-weight: 500; }\n.sltv-breakdown-cluster { display: grid; grid-template-columns: minmax(250px,330px) minmax(280px,460px); justify-content: center; align-items: center; gap: 24px; }\n.sltv-chart-visual { width: 100%; }\n.sltv-breakdown-svg,\n.sltv-line-svg { display: block; width: 100%; height: auto; overflow: visible; }\n.sltv-chart-empty { padding: 14px; border: 1px dashed #cbd5e1; border-radius: 6px; background: var(--tint); color: var(--muted); font-size: 13px; font-weight: 500; text-align: center; }\n.sltv-legend { display: grid; gap: 8px; }\n.sltv-legend-row { display: grid; grid-template-columns: 14px minmax(110px,max-content) max-content max-content; align-items: center; justify-content: start; gap: 8px 12px; font-size: 13px; font-weight: 500; }\n.sltv-swatch { width: 12px; height: 12px; border-radius: 3px; }\n.sltv-legend-value,\n.sltv-legend-percent { font-variant-numeric: tabular-nums; white-space: nowrap; }\n.sltv-legend-value { color: var(--ink); font-weight: 650; }\n.sltv-legend-percent { color: var(--muted); }\n.sltv-chart-caption,\n.sltv-table-note { margin-top: 16px; padding: 10px 12px; border: 1px solid var(--border); border-radius: 6px; background: var(--tint); color: var(--muted); font-size: 13px; font-weight: 500; }\n.sltv-line-card { display: grid; gap: 16px; }\n.sltv-line-legend { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 10px 20px; margin-top: 16px; }\n.sltv-line-legend-item { display: inline-grid; grid-template-columns: 18px max-content max-content; align-items: center; gap: 8px; font-size: 13px; font-weight: 500; }\n.sltv-line-key { width: 18px; height: 4px; border-radius: 999px; }\n.sltv-line-legend-value { color: var(--muted); font-variant-numeric: tabular-nums; white-space: nowrap; }\n.sltv-safe-stack .sltv-breakdown-cluster { grid-template-columns: minmax(0,1fr); gap: 20px; }\n.sltv-safe-stack .sltv-line-legend,\n.sltv-safe-stack .sltv-legend { margin-top: 20px; }\n.sltv-safe-stack .sltv-chart-caption { margin-top: 20px; }\n.sltv-table-overflow { width: 100%; overflow-x: auto; overscroll-behavior-inline: contain; border: 1px solid var(--border); border-radius: 6px; }\n.sltv-table { width: 100%; min-width: 720px; border-collapse: collapse; font-variant-numeric: tabular-nums; }\n.sltv-table th,\n.sltv-table td { padding: 10px 12px; border-bottom: 1px solid var(--border); text-align: right; white-space: nowrap; }\n.sltv-table th:first-child,\n.sltv-table td:first-child { text-align: left; }\n.sltv-table th { background: #0f2747; color: #ffffff; font-size: 13px; font-weight: 650; }\n.sltv-table td { font-size: 13px; }\n.sltv-table tbody tr:last-child td { border-bottom: 0; }\n.sltv-table tbody tr:hover td { background: #f8fafc; }\n.sltv-compact-table .sltv-table { min-width: 360px; }\n.sltv-safe-table-stack .sltv-table-note { margin-top: 20px; }\n.sltv-education { padding: 8px 24px 24px; }\n.sltv-education-inner { max-width: 900px; }\n.sltv-education h2 { margin: 24px 0 10px; font-size: 20px; line-height: 1.35; font-weight: 700; }\n.sltv-education h3 { margin: 18px 0 8px; font-size: 18px; line-height: 1.4; font-weight: 650; }\n.sltv-education p { margin-bottom: 12px; color: #334155; }\n.sltv-education ul { margin: 0 0 14px; padding-left: 22px; }\n.sltv-education li { margin-bottom: 8px; color: #334155; }\n.sltv-sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }\n@media (max-width: 899px) { .sltv-workspace { grid-template-columns: minmax(0,1fr); } }\n@media (max-width: 639px) {\n  .sltv-header,\n  .sltv-workspace,\n  .sltv-toolbar { padding-left: 16px; padding-right: 16px; }\n  .sltv-section { margin-left: 16px; margin-right: 16px; padding: 16px; }\n  .sltv-education { padding-left: 16px; padding-right: 16px; }\n  .sltv-fields,\n  .sltv-result-grid,\n  .sltv-breakdown-cluster { grid-template-columns: minmax(0,1fr); }\n  .sltv-legend-row { grid-template-columns: 14px minmax(96px,max-content) max-content; }\n  .sltv-legend-percent { grid-column: 2 \/ -1; }\n  .sltv-chart-caption,\n  .sltv-table-note { margin-top: 12px; }\n}\n@media (max-width: 380px) {\n  .sltv-toolbar .sltv-button { width: 100%; }\n  .sltv-segmented { grid-template-columns: minmax(0,1fr); }\n  .sltv-line-legend { width: 100%; justify-content: flex-start; }\n  .sltv-line-legend-item { width: 100%; grid-template-columns: 18px minmax(0,1fr); align-items: start; }\n  .sltv-line-legend-value { grid-column: 2; }\n}\n@container sltv (max-width: 899px) { .sltv-workspace { grid-template-columns: minmax(0,1fr); } }\n@container sltv (max-width: 639px) {\n  .sltv-header,\n  .sltv-workspace,\n  .sltv-toolbar { padding-left: 16px; padding-right: 16px; }\n  .sltv-section { margin-left: 16px; margin-right: 16px; padding: 16px; }\n  .sltv-education { padding-left: 16px; padding-right: 16px; }\n  .sltv-fields,\n  .sltv-result-grid,\n  .sltv-breakdown-cluster { grid-template-columns: minmax(0,1fr); }\n  .sltv-legend-row { grid-template-columns: 14px minmax(96px,max-content) max-content; }\n  .sltv-legend-percent { grid-column: 2 \/ -1; }\n  .sltv-chart-caption,\n  .sltv-table-note { margin-top: 12px; }\n}\n@container sltv (max-width: 380px) {\n  .sltv-toolbar .sltv-button { width: 100%; }\n  .sltv-segmented { grid-template-columns: minmax(0,1fr); }\n  .sltv-line-legend { width: 100%; justify-content: flex-start; }\n  .sltv-line-legend-item { width: 100%; grid-template-columns: 18px minmax(0,1fr); align-items: start; }\n  .sltv-line-legend-value { grid-column: 2; }\n}\n@media (prefers-reduced-motion: reduce) { .sltv-button { transition: none; } }\n\u003c\/style\u003e\n\u003cdiv class=\"sltv-calculator\" data-calculator-root\u003e\n  \u003cdiv class=\"sltv-header\"\u003e\n    \u003ch2 class=\"sltv-title\"\u003eSaaS Customer Lifetime Value Calculator\u003c\/h2\u003e\n    \u003cp class=\"sltv-subtitle\"\u003eEstimate gross-profit lifetime value from monthly account revenue, margin, churn, and account expansion, then inspect the contribution breakdown and modeled monthly path.\u003c\/p\u003e\n    \u003cdiv class=\"sltv-pills\" aria-label=\"Live calculator summary\"\u003e\n      \u003cspan class=\"sltv-pill\"\u003eARPA \u003cstrong data-sltv-pill=\"arpa\"\u003e$250.00\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"sltv-pill\"\u003eLifetime \u003cstrong data-sltv-pill=\"lifetime\"\u003e25.00 mo\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"sltv-pill\"\u003eGross margin \u003cstrong data-sltv-pill=\"margin\"\u003e65.00%\u003c\/strong\u003e\u003c\/span\u003e\n      \u003cspan class=\"sltv-pill\"\u003eGross Profit LTV \u003cstrong data-sltv-pill=\"ltv\"\u003e$4,062.50\u003c\/strong\u003e\u003c\/span\u003e\n    \u003c\/div\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"sltv-toolbar\" aria-label=\"Calculator actions\"\u003e\n    \u003cbutton class=\"sltv-button sltv-button-primary\" type=\"button\" data-sltv-action=\"download\"\u003e\n      \u003csvg viewbox=\"0 0 24 24\" aria-hidden=\"true\"\u003e\u003cpath d=\"M12 3v12\"\u003e\u003c\/path\u003e\u003cpath d=\"m7 10 5 5 5-5\"\u003e\u003c\/path\u003e\u003cpath d=\"M5 21h14\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n      \u003cspan\u003eDownload Excel\u003c\/span\u003e\n    \u003c\/button\u003e\n    \u003cbutton class=\"sltv-button\" type=\"button\" data-sltv-action=\"reset\"\u003e\n      \u003csvg viewbox=\"0 0 24 24\" aria-hidden=\"true\"\u003e\u003cpath d=\"M3 12a9 9 0 1 0 3-6.7\"\u003e\u003c\/path\u003e\u003cpath d=\"M3 4v6h6\"\u003e\u003c\/path\u003e\u003c\/svg\u003e\n      \u003cspan\u003eReset\u003c\/span\u003e\n    \u003c\/button\u003e\n  \u003c\/div\u003e\n  \u003cdiv class=\"sltv-workspace\"\u003e\n    \u003csection class=\"sltv-panel\" aria-labelledby=\"sltv-input-heading\"\u003e\n      \u003ch3 class=\"sltv-panel-heading\" id=\"sltv-input-heading\"\u003eInputs\u003c\/h3\u003e\n      \u003cfieldset class=\"sltv-mode-fieldset\"\u003e\n        \u003clegend class=\"sltv-mode-legend\"\u003eHow should ARPA be entered?\u003c\/legend\u003e\n        \u003cdiv class=\"sltv-segmented\"\u003e\n          \u003cdiv class=\"sltv-segmented-item\"\u003e\n            \u003cinput type=\"radio\" name=\"sltv-arpa-mode\" id=\"sltv-mode-direct\" value=\"direct\" checked\u003e\n            \u003clabel for=\"sltv-mode-direct\"\u003eEnter ARPA\u003c\/label\u003e\n          \u003c\/div\u003e\n          \u003cdiv class=\"sltv-segmented-item\"\u003e\n            \u003cinput type=\"radio\" name=\"sltv-arpa-mode\" id=\"sltv-mode-derived\" value=\"derived\"\u003e\n            \u003clabel for=\"sltv-mode-derived\"\u003eUse MRR ÷ customers\u003c\/label\u003e\n          \u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/fieldset\u003e\n      \u003cdiv class=\"sltv-fields\"\u003e\n        \u003cdiv class=\"sltv-field sltv-field-full\" data-sltv-group=\"direct\"\u003e\n          \u003clabel class=\"sltv-label\" for=\"sltv-arpa\"\u003eAverage revenue per account (monthly)\u003c\/label\u003e\n          \u003cinput class=\"sltv-input\" id=\"sltv-arpa\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" value=\"$250.00\" data-sltv-field=\"arpa\" aria-describedby=\"sltv-arpa-help sltv-arpa-error\"\u003e\n          \u003cdiv class=\"sltv-help\" id=\"sltv-arpa-help\"\u003eAverage monthly recurring revenue generated by one active customer account.\u003c\/div\u003e\n          \u003cdiv class=\"sltv-error\" id=\"sltv-arpa-error\" data-sltv-error=\"arpa\"\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"sltv-field\" data-sltv-group=\"derived\" hidden\u003e\n          \u003clabel class=\"sltv-label\" for=\"sltv-customers\"\u003eActive customers\u003c\/label\u003e\n          \u003cinput class=\"sltv-input\" id=\"sltv-customers\" type=\"text\" inputmode=\"numeric\" autocomplete=\"off\" value=\"25\" data-sltv-field=\"customers\" aria-describedby=\"sltv-customers-help sltv-customers-error\"\u003e\n          \u003cdiv class=\"sltv-help\" id=\"sltv-customers-help\"\u003eCurrent paying customer accounts included in MRR.\u003c\/div\u003e\n          \u003cdiv class=\"sltv-error\" id=\"sltv-customers-error\" data-sltv-error=\"customers\"\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"sltv-field\" data-sltv-group=\"derived\" hidden\u003e\n          \u003clabel class=\"sltv-label\" for=\"sltv-mrr\"\u003eMonthly recurring revenue\u003c\/label\u003e\n          \u003cinput class=\"sltv-input\" id=\"sltv-mrr\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" value=\"$6,250.00\" data-sltv-field=\"mrr\" aria-describedby=\"sltv-mrr-help sltv-mrr-error\"\u003e\n          \u003cdiv class=\"sltv-help\" id=\"sltv-mrr-help\"\u003eRecurring subscription revenue from the same customer base.\u003c\/div\u003e\n          \u003cdiv class=\"sltv-error\" id=\"sltv-mrr-error\" data-sltv-error=\"mrr\"\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"sltv-field\"\u003e\n          \u003clabel class=\"sltv-label\" for=\"sltv-margin\"\u003eGross margin\u003c\/label\u003e\n          \u003cinput class=\"sltv-input\" id=\"sltv-margin\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" value=\"65.00%\" data-sltv-field=\"margin\" aria-describedby=\"sltv-margin-help sltv-margin-error\"\u003e\n          \u003cdiv class=\"sltv-help\" id=\"sltv-margin-help\"\u003eRevenue remaining after direct service-delivery costs, from 0% to 100%.\u003c\/div\u003e\n          \u003cdiv class=\"sltv-error\" id=\"sltv-margin-error\" data-sltv-error=\"margin\"\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"sltv-field\"\u003e\n          \u003clabel class=\"sltv-label\" for=\"sltv-churn\"\u003eMonthly customer churn\u003c\/label\u003e\n          \u003cinput class=\"sltv-input\" id=\"sltv-churn\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" value=\"4.00%\" data-sltv-field=\"churn\" aria-describedby=\"sltv-churn-help sltv-churn-error\"\u003e\n          \u003cdiv class=\"sltv-help\" id=\"sltv-churn-help\"\u003eShare of active customer accounts expected to cancel each month.\u003c\/div\u003e\n          \u003cdiv class=\"sltv-error\" id=\"sltv-churn-error\" data-sltv-error=\"churn\"\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n        \u003cdiv class=\"sltv-field sltv-field-full\"\u003e\n          \u003clabel class=\"sltv-label\" for=\"sltv-expansion\"\u003eMonthly account expansion\u003c\/label\u003e\n          \u003cinput class=\"sltv-input\" id=\"sltv-expansion\" type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" value=\"$0.00\" data-sltv-field=\"expansion\" aria-describedby=\"sltv-expansion-help sltv-expansion-error\"\u003e\n          \u003cdiv class=\"sltv-help\" id=\"sltv-expansion-help\"\u003eFixed monthly increase in revenue per surviving account from upgrades, seats, or usage.\u003c\/div\u003e\n          \u003cdiv class=\"sltv-error\" id=\"sltv-expansion-error\" data-sltv-error=\"expansion\"\u003e\u003c\/div\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/section\u003e\n    \u003csection class=\"sltv-panel sltv-results\" aria-labelledby=\"sltv-result-heading\"\u003e\n      \u003ch3 class=\"sltv-panel-heading\" id=\"sltv-result-heading\"\u003eLive results\u003c\/h3\u003e\n      \u003cdiv class=\"sltv-primary-result\"\u003e\n        \u003cdiv class=\"sltv-primary-label\"\u003eGross Profit LTV\u003c\/div\u003e\n        \u003cdiv class=\"sltv-primary-value\" data-sltv-output=\"ltv\"\u003e$4,062.50\u003c\/div\u003e\n        \u003cp class=\"sltv-primary-note\" data-sltv-output=\"interpretation\"\u003eEstimated gross profit from one average customer account over a 25.00-month modeled lifetime.\u003c\/p\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"sltv-result-grid\"\u003e\n        \u003cdiv class=\"sltv-result-card\"\u003e\n\u003cdiv class=\"sltv-result-label\"\u003eExpected lifetime\u003c\/div\u003e\n\u003cdiv class=\"sltv-result-value\" data-sltv-output=\"lifetime\"\u003e25.00 months\u003c\/div\u003e\n\u003cdiv class=\"sltv-result-detail\"\u003eCalculated as 1 ÷ monthly churn.\u003c\/div\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"sltv-result-card\"\u003e\n\u003cdiv class=\"sltv-result-label\"\u003eRevenue LTV\u003c\/div\u003e\n\u003cdiv class=\"sltv-result-value\" data-sltv-output=\"revenueLtv\"\u003e$6,250.00\u003c\/div\u003e\n\u003cdiv class=\"sltv-result-detail\"\u003eCustomer revenue before direct service costs.\u003c\/div\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"sltv-result-card\"\u003e\n\u003cdiv class=\"sltv-result-label\"\u003eBase subscription value\u003c\/div\u003e\n\u003cdiv class=\"sltv-result-value\" data-sltv-output=\"baseLtv\"\u003e$4,062.50\u003c\/div\u003e\n\u003cdiv class=\"sltv-result-detail\"\u003eStarting ARPA × lifetime × gross margin.\u003c\/div\u003e\n\u003c\/div\u003e\n        \u003cdiv class=\"sltv-result-card\"\u003e\n\u003cdiv class=\"sltv-result-label\"\u003eExpansion contribution\u003c\/div\u003e\n\u003cdiv class=\"sltv-result-value\" data-sltv-output=\"expansionLtv\"\u003e$0.00\u003c\/div\u003e\n\u003cdiv class=\"sltv-result-detail\"\u003eIncremental gross profit from account growth.\u003c\/div\u003e\n\u003c\/div\u003e\n      \u003c\/div\u003e\n      \u003cdiv class=\"sltv-live\" aria-live=\"polite\" data-sltv-live\u003eGross Profit LTV is $4,062.50.\u003c\/div\u003e\n    \u003c\/section\u003e\n  \u003c\/div\u003e\n  \u003csection class=\"sltv-section sltv-chart-card\" data-sltv-chart-card=\"breakdown\" aria-labelledby=\"sltv-breakdown-heading\"\u003e\n    \u003ch3 class=\"sltv-section-heading\" id=\"sltv-breakdown-heading\"\u003eLTV contribution breakdown\u003c\/h3\u003e\n    \u003cp class=\"sltv-section-intro\" data-sltv-breakdown-intro\u003eThe current estimate is entirely supported by the base subscription contribution.\u003c\/p\u003e\n    \u003cdiv class=\"sltv-breakdown-cluster\"\u003e\n      \u003cdiv class=\"sltv-chart-visual\" data-sltv-breakdown-visual\u003e\u003c\/div\u003e\n      \u003cdiv class=\"sltv-breakdown-detail\"\u003e\n        \u003cdiv class=\"sltv-legend\" data-sltv-breakdown-legend\u003e\u003c\/div\u003e\n        \u003cdiv class=\"sltv-table-overflow sltv-compact-table\" data-sltv-breakdown-table-wrap\u003e\n          \u003ctable class=\"sltv-table\" aria-label=\"LTV contribution data\"\u003e\n            \u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eContribution\u003c\/th\u003e\n\u003cth\u003eAmount\u003c\/th\u003e\n\u003cth\u003eShare\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n            \u003ctbody data-sltv-breakdown-table\u003e\u003c\/tbody\u003e\n          \u003c\/table\u003e\n        \u003c\/div\u003e\n      \u003c\/div\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"sltv-chart-caption\" data-sltv-breakdown-caption\u003eBase subscription value is $4,062.50 and account expansion adds $0.00.\u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003csection class=\"sltv-section sltv-chart-card sltv-line-card\" data-sltv-chart-card=\"projection\" aria-labelledby=\"sltv-chart-heading\"\u003e\n    \u003ch3 class=\"sltv-section-heading\" id=\"sltv-chart-heading\"\u003eMonthly account economics\u003c\/h3\u003e\n    \u003cp class=\"sltv-section-intro\"\u003eThe lines show revenue per active account and gross profit per active account across the modeled customer lifetime.\u003c\/p\u003e\n    \u003cdiv class=\"sltv-chart-visual\" data-sltv-line-visual\u003e\u003c\/div\u003e\n    \u003cdiv class=\"sltv-line-legend\" data-sltv-line-legend\u003e\u003c\/div\u003e\n    \u003cdiv class=\"sltv-chart-caption\" data-sltv-line-caption\u003eWith no monthly expansion, both per-account series remain level throughout the modeled lifetime.\u003c\/div\u003e\n    \u003cdiv class=\"sltv-table-overflow sltv-compact-table\" data-sltv-line-summary-wrap\u003e\n      \u003ctable class=\"sltv-table\" aria-label=\"Chart endpoint data\"\u003e\n        \u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eSeries\u003c\/th\u003e\n\u003cth\u003eMonth 1\u003c\/th\u003e\n\u003cth\u003eFinal modeled month\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n        \u003ctbody data-sltv-line-summary\u003e\u003c\/tbody\u003e\n      \u003c\/table\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003csection class=\"sltv-section sltv-table-card\" data-sltv-table-card aria-labelledby=\"sltv-table-heading\"\u003e\n    \u003ch3 class=\"sltv-section-heading\" id=\"sltv-table-heading\"\u003eLifetime value projection\u003c\/h3\u003e\n    \u003cp class=\"sltv-section-intro\"\u003eEach row allocates the closed-form LTV model across full months plus a fractional final month when needed.\u003c\/p\u003e\n    \u003cdiv class=\"sltv-table-overflow\" data-sltv-projection-wrap\u003e\n      \u003ctable class=\"sltv-table\" aria-label=\"SaaS lifetime value projection\"\u003e\n        \u003cthead\u003e\u003ctr\u003e\n\u003cth\u003eMonth\u003c\/th\u003e\n\u003cth\u003eModeled fraction\u003c\/th\u003e\n\u003cth\u003eAverage revenue rate\u003c\/th\u003e\n\u003cth\u003eRevenue contribution\u003c\/th\u003e\n\u003cth\u003eGross profit contribution\u003c\/th\u003e\n\u003cth\u003eCumulative LTV\u003c\/th\u003e\n\u003c\/tr\u003e\u003c\/thead\u003e\n        \u003ctbody data-sltv-projection-body\u003e\u003c\/tbody\u003e\n      \u003c\/table\u003e\n    \u003c\/div\u003e\n    \u003cdiv class=\"sltv-table-note\" data-sltv-projection-note\u003eThe projection contains 25 modeled rows and reconciles to the $4,062.50 Gross Profit LTV result.\u003c\/div\u003e\n  \u003c\/section\u003e\n  \u003csection class=\"sltv-education\" aria-labelledby=\"sltv-education-heading\"\u003e\n    \u003cdiv class=\"sltv-education-inner\"\u003e\n      \u003ch2 id=\"sltv-education-heading\"\u003eWhat does this SaaS LTV calculator estimate?\u003c\/h2\u003e\n      \u003cp\u003eThis calculator estimates the gross-profit lifetime value of one average SaaS customer account. It starts with monthly average revenue per account, estimates how long an account remains active from monthly customer churn, adds optional fixed-dollar account expansion, and applies gross margin. The headline result is therefore a gross-profit contribution estimate rather than a revenue total, cash-flow forecast, valuation, or guarantee of individual customer behavior.\u003c\/p\u003e\n      \u003cp\u003eUse the result as a consistent unit-economics metric alongside customer acquisition cost, CAC payback, cohort retention, net revenue retention, and actual expansion performance. The model intentionally excludes sales commissions, overhead, taxes, financing costs, discounting, and irregular contract timing. For broader definitions, see Stripe’s \u003ca href=\"https:\/\/stripe.com\/resources\/more\/saas-metrics\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eguide to SaaS metrics\u003c\/a\u003e and Investopedia’s \u003ca href=\"https:\/\/www.investopedia.com\/terms\/c\/customerlifetimevalue.asp\" target=\"_blank\" rel=\"noopener noreferrer\"\u003ecustomer lifetime value overview\u003c\/a\u003e.\u003c\/p\u003e\n      \u003ch2\u003eHow should each input be used?\u003c\/h2\u003e\n      \u003ch3\u003eAverage revenue per account\u003c\/h3\u003e\n      \u003cp\u003eChoose “Enter ARPA” when you know the monthly recurring revenue generated by one active account. Enter a monthly dollar value, not annual contract value. Higher ARPA increases both Revenue LTV and Gross Profit LTV directly. Use a representative recent period and keep the customer unit consistent: accounts, workspaces, or paying organizations should not be mixed with seats unless seats are actually billed as separate customers.\u003c\/p\u003e\n      \u003ch3\u003eMRR and active customers\u003c\/h3\u003e\n      \u003cp\u003eChoose “Use MRR ÷ customers” when total monthly recurring revenue and the active account count are easier to obtain than ARPA. Both fields are required in this mode. MRR should include recurring subscription revenue for the same population represented by the customer count, while excluding taxes, pass-through charges, and one-time services. The calculator divides MRR by customers, so a zero customer count is invalid. Higher MRR raises ARPA; a larger customer count with unchanged MRR lowers it.\u003c\/p\u003e\n      \u003ch3\u003eGross margin\u003c\/h3\u003e\n      \u003cp\u003eGross margin is the percentage of revenue remaining after direct service-delivery costs such as hosting, infrastructure, payment processing, and support costs classified within cost of revenue. Enter a percentage from 0% to 100%. A 100% margin makes Gross Profit LTV equal Revenue LTV, while a lower margin reduces the headline result without changing expected lifetime. Do not substitute operating margin, which also reflects sales, research, and general overhead.\u003c\/p\u003e\n      \u003ch3\u003eMonthly customer churn\u003c\/h3\u003e\n      \u003cp\u003eCustomer churn is the percentage of accounts that cancel in a typical month. It is the most sensitive assumption because expected lifetime is calculated as one divided by churn expressed as a decimal. At 4% monthly churn, expected lifetime is 25 months; at 2%, it is 50 months. Churn must be above zero because zero churn would imply an unbounded lifetime in this simplified formula. Use customer churn rather than revenue churn unless revenue-weighted customer behavior is specifically what you intend to model. Investopedia’s \u003ca href=\"https:\/\/www.investopedia.com\/terms\/c\/churnrate.asp\" target=\"_blank\" rel=\"noopener noreferrer\"\u003echurn-rate explanation\u003c\/a\u003e provides additional measurement context.\u003c\/p\u003e\n      \u003ch3\u003eMonthly account expansion\u003c\/h3\u003e\n      \u003cp\u003eAccount expansion is a fixed dollar increase in monthly ARPA for each successive month. It can represent added seats, upgrades, add-ons, or usage growth within a surviving account. Enter zero for a flat-ARPA model. A higher value increases LTV more strongly when churn is low because the account remains active long enough for repeated expansion to compound arithmetically. Do not enter company-wide expansion MRR; use the average monthly increase per account.\u003c\/p\u003e\n      \u003ch2\u003eHow are the results calculated?\u003c\/h2\u003e\n      \u003cp\u003eExpected lifetime equals 1 divided by monthly churn. Revenue LTV is the sum of an arithmetic revenue sequence over that lifetime: starting ARPA is earned in the first month, and each later month adds the fixed expansion amount. Gross Profit LTV multiplies the resulting revenue total by gross margin. In formula terms, Gross Profit LTV equals 0.5 × lifetime × [2 × ARPA + expansion × (lifetime − 1)] × gross margin.\u003c\/p\u003e\n      \u003cp\u003eRevenue LTV shows the modeled customer revenue before direct service costs. Base subscription value isolates the contribution from starting ARPA. Expansion contribution isolates the value created by the monthly expansion assumption. Those two gross-profit components always add to the headline result. A zero or negative displayed result after Reset means there is not enough valid positive input data to draw a conclusion.\u003c\/p\u003e\n      \u003ch2\u003eHow should the charts and projection table be read?\u003c\/h2\u003e\n      \u003cp\u003eThe contribution donut uses the same base and expansion values shown in the result cards. When expansion is zero, the base component is explicitly shown as 100%. A large expansion share can be attractive, but it also means more of the estimate depends on future upgrades or usage that have not yet occurred. The monthly line chart compares revenue per active account with gross profit per active account; the vertical gap represents direct cost of revenue.\u003c\/p\u003e\n      \u003cp\u003eThe projection table reconciles the closed-form formula into monthly rows. “Modeled fraction” is one for a complete month and may be less than one in the final row when expected lifetime is fractional. “Average revenue rate” is the average ARPA represented by that interval, “Revenue contribution” is the interval’s modeled revenue, “Gross profit contribution” applies margin, and “Cumulative LTV” should equal the headline result in the final row. The downloadable workbook uses the same current-state model, tables, and assumptions.\u003c\/p\u003e\n      \u003ch2\u003eWhat are the main interpretation risks?\u003c\/h2\u003e\n      \u003cul\u003e\n        \u003cli\u003eMixing annual revenue with monthly churn overstates value by roughly twelve times.\u003c\/li\u003e\n        \u003cli\u003eUsing a short recent churn window can produce an unstable lifetime estimate, especially for small customer bases.\u003c\/li\u003e\n        \u003cli\u003eAssuming expansion without cohort evidence can make LTV look more dependable than it is.\u003c\/li\u003e\n        \u003cli\u003eUsing revenue instead of gross profit can overstate the economic amount available to recover acquisition and operating costs.\u003c\/li\u003e\n        \u003cli\u003eTreating average LTV as a promise ignores variation by plan, channel, geography, and customer cohort.\u003c\/li\u003e\n      \u003c\/ul\u003e\n      \u003cp\u003eRecalculate LTV by customer segment and cohort when possible, and compare modeled results with realized gross profit. The U.S. Securities and Exchange Commission’s \u003ca href=\"https:\/\/www.sec.gov\/oiea\/investor-alerts-and-bulletins\/how-read-10-k10-q\" target=\"_blank\" rel=\"noopener noreferrer\"\u003eguidance on reading company filings\u003c\/a\u003e is also useful when validating how public SaaS businesses define revenue, cost of revenue, and customer metrics. This calculator is educational and does not provide financial, accounting, tax, or investment advice.\u003c\/p\u003e\n    \u003c\/div\u003e\n  \u003c\/section\u003e\n\u003c\/div\u003e","brand":"FinancialModelsLab","offers":[{"title":"Default Title","offer_id":49909480685811,"sku":"saas-ltv","price":0.0,"currency_code":"USD","in_stock":true}],"thumbnail_url":"\/\/cdn.shopify.com\/s\/files\/1\/0522\/6191\/2762\/files\/saas-ltv.webp?v=1783935376","url":"https:\/\/financialmodelslab.com\/products\/saas-ltv","provider":"Financial Models Lab","version":"1.0","type":"link"}