SaaS Metrics Calculator

Analyze your CAC, LTV, and Payback Period to determine if your marketing is profitable.

1. Acquisition (CAC)
Total Sales & Marketing Spend $
New Customers Acquired
2. Lifetime Value (LTV)
Avg. Monthly Revenue Per User $
Gross Margin %
Monthly Churn Rate %
⚠️ Invalid inputs. Ensure customers, margin, and churn rate are greater than 0.
LTV to CAC Ratio
0.0 : 1
Evaluating...
$0 Customer Acquisition
Cost (CAC)
$0 Customer Lifetime
Value (LTV)
0 Months to Recover
CAC (Payback)

Understanding SaaS Metrics

In a recurring revenue business, you aren't just selling a product once; you are acquiring a stream of revenue. Your success depends on acquiring that stream for less than it's worth.

  • CAC (Customer Acquisition Cost): The total cost of sales and marketing divided by the number of new customers. If you spend $1,000 on ads and get 10 customers, your CAC is $100.
  • LTV (Lifetime Value): The total gross profit a customer will generate before they cancel (churn). Formula: (ARPU × Gross Margin %) ÷ Churn Rate.
  • The LTV:CAC Ratio: This is the ultimate indicator of your marketing efficiency.
    • < 1:1 - You lose money on every customer.
    • 1:1 to 2:1 - Surviving, but growth is expensive and risky.
    • 3:1 - The Industry Gold Standard. A highly profitable, scalable business.
    • > 5:1 - You are likely under-investing in marketing and leaving growth on the table.
  • Payback Period: How many months it takes for a customer's monthly revenue to pay back their initial acquisition cost. Most startups aim for a payback period of under 12 months.
/* --- TABS --- */ .tab-container { display: flex; background: #e2e8f0; border-bottom: 3px solid var(--run-main); } .tab-btn { flex: 1; padding: 18px; font-family: 'Nunito'; font-weight: 900; font-size: 16px; text-transform: uppercase; letter-spacing: 1px; border: none; background: transparent; color: #64748b; cursor: pointer; transition: 0.2s; outline: none; } .tab-btn.active { background: var(--run-main); color: white; } .tab-btn:not(.active):hover { background: #cbd5e1; color: var(--ink); } .tab-content { display: none; } .tab-content.active { display: block; } /* --- INPUT FORM STYLES --- */ .input-pane { padding: 30px; background: var(--run-pale); border-bottom: 2px solid var(--run-main); } .form-row { display: flex; flex-wrap: wrap; gap: 20px; margin-bottom: 20px; justify-content: center; } .input-group { display: flex; flex-direction: column; text-align: left; flex: 1; min-width: 120px; } .input-label { font-family: 'Nunito'; font-weight: 800; font-size: 13px; text-transform: uppercase; color: var(--run-main); margin-bottom: 5px; } .calc-input, .calc-select { padding: 12px 15px; border: 2px solid #cbd5e1; border-radius: 10px; font-family: 'Nunito', sans-serif; font-weight: 800; font-size: 18px; color: var(--ink); outline: none; transition: 0.2s; background: white; width: 100%; text-align: center; } .calc-select { text-align: left; cursor: pointer; } .calc-input:focus, .calc-select:focus { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(225, 29, 72, 0.2); } .time-inputs { display: flex; gap: 10px; } .time-col { display: flex; flex-direction: column; flex: 1; text-align: center; } .time-label { font-family: 'Nunito'; font-size: 11px; font-weight: 800; color: #64748b; text-transform: uppercase; margin-top: 4px; } /* --- RESULTS AREA --- */ .results-bar { padding: 30px; background: white; color: var(--ink); text-align: center; } .res-main-box { background: #f8fafc; padding: 25px 20px; border-radius: 20px; border: 2px dashed #cbd5e1; margin-bottom: 20px;} .res-number-title { font-family: 'Nunito'; font-weight: 800; font-size: 14px; text-transform: uppercase; color: #64748b; margin-bottom: 5px; letter-spacing: 1px; } .res-massive-val { font-family: 'Boogaloo', cursive; font-size: 54px; color: var(--run-main); line-height: 1.1; margin-bottom: 5px; text-shadow: 2px 2px 0px rgba(0,0,0,0.05); transition: color 0.3s ease; } .res-unit { font-family: 'Nunito'; font-weight: 800; font-size: 18px; color: var(--accent); } .stat-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 15px; } .stat-block { display: flex; flex-direction: column; align-items: center; background: white; padding: 15px; border-radius: 16px; border: 1px solid #e2e8f0; box-shadow: 0 4px 6px rgba(0,0,0,0.02); } .stat-val { font-family: 'Boogaloo', cursive; font-size: 28px; color: var(--ink); line-height: 1; } .stat-name { font-family: 'Nunito'; font-weight: 800; font-size: 12px; color: #64748b; text-transform: uppercase; margin-top: 5px; } /* --- INFO CARD --- */ .info-card { margin: 0 auto 30px auto; width: 100%; padding: 30px; background: #fff; border: 2px solid #e2e8f0; border-radius: 20px; } .info-card h2 { font-family: 'Boogaloo', cursive; font-size: 28px; color: var(--run-main); margin-top: 0; } .info-card p, .info-card li { font-family: 'Nunito', sans-serif; color: #475569; line-height: 1.6; font-size: 15px; } /* --- BUTTONS --- */ .btn-3d { display: inline-flex; align-items: center; justify-content: center; padding: 0 45px; min-height: 60px; font-family: 'Nunito', sans-serif; font-weight: 900; font-size: 20px; text-transform: uppercase; letter-spacing: 1px; border-radius: 16px; cursor: pointer; border: none; transition: all 0.1s ease; color: white; margin-bottom: 20px;} .btn-run { background: var(--run-main); box-shadow: 0 6px 0 #172554; } .btn-run:active { transform: translateY(4px); box-shadow: 0 2px 0 #172554; } .btn-blue { background: var(--sky); box-shadow: 0 6px 0 #125594; } .btn-blue:active { transform: translateY(4px); box-shadow: 0 2px 0 #125594; } .share-container { background: white; border: 2px dashed var(--border); border-radius: 16px; padding: 25px; text-align: center; margin: 40px auto; width: 100%; } .share-group { display: flex; justify-content: center; gap: 12px; flex-wrap: wrap; margin-top: 15px; } .btn-share { font-family: 'Nunito', sans-serif; font-weight: 800; font-size: 14px; padding: 12px 24px; border-radius: 50px; border: none; cursor: pointer; color: white; text-transform: uppercase; } .btn-x { background: #0f172a; } .btn-fb { background: #1877f2; } .btn-copy-link { background: #8b5cf6; }

Running Pace & Race Predictor

Calculate your running pace or predict your finish times for upcoming races based on your current fitness.

Distance
Unit
Total Time
Hrs
Min
Sec
Average Pace
08:02
min / mi
05:00 Pace (min/km)
7.46 Speed (mph)
12.00 Speed (km/h)
Recent Race Distance
Finish Time
Hrs
Min
Sec
Predicted Race Times
00:25:00 5K
00:52:05 10K
01:55:18 Half Marathon
03:59:52 Full Marathon

The Runner's Math

Whether you're aiming for a personal best or just tracking a training run, understanding the math behind running is key to hitting your goals.

  • Pace vs. Speed: Speed is how far you travel in an hour (mph or km/h). Pace is the metric runners prefer: how many minutes it takes to complete exactly one mile or one kilometer.
  • The Riegel Formula: The Race Predictor uses a formula created by research engineer Peter Riegel in 1977. It states that a runner's time ($T$) for a new distance ($D$) relates to a recent performance via the equation: $T_2 = T_1 \times (D_2 / D_1)^{1.06}$.
  • Predictor Limits: Riegel's formula assumes you have trained adequately for the target distance. A great 5K time will only predict a great marathon time if you have actually done the long runs required to survive 26.2 miles!