SaaS Metrics Benchmarking Tool — Compare Your Numbers
*{margin:0;padding:0;box-sizing:border-box}
:root{--bg:#0a0c14;--card:#141824;--card2:#1c2030;--accent:#6c8cff;--accent2:#4ecdc4;--text:#d8dbe6;--muted:#6b7194;--border:#252a3d;--green:#4ade80;--red:#f87171;--orange:#fb923c;--yellow:#facc15}
body{font-family:-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;background:var(--bg);color:var(--text);line-height:1.5;min-height:100vh}
.header{background:linear-gradient(135deg,#141824 0%,#0d1020 100%);border-bottom:2px solid var(--accent);padding:2rem 1.5rem;text-align:center}
.header h1{font-size:1.8rem;color:#fff;margin-bottom:.3rem}
.header h1 span{color:var(--accent)}
.header p{color:var(--muted);font-size:.9rem}
.container{max-width:900px;margin:2rem auto;padding:0 1.5rem}
.section{background:var(--card);border:1px solid var(--border);border-radius:12px;padding:1.5rem;margin-bottom:1.2rem}
.section h2{font-size:1rem;color:var(--accent2);margin-bottom:1rem}
.input-row{display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin-bottom:1rem}
.input-group label{display:block;font-size:.8rem;color:var(--muted);margin-bottom:.3rem;font-weight:500}
.input-group input{width:100%;padding:.6rem;border-radius:8px;border:1px solid var(--border);background:var(--bg);color:var(--text);font-size:.9rem;outline:none;transition:border .2s}
.input-group input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(108,140,255,.15)}
.results{display:grid;grid-template-columns:1fr 1fr;gap:1rem;margin-top:.5rem}
.result{background:var(--card2);border-radius:10px;padding:1rem;text-align:center}
.result .metric{font-size:.75rem;color:var(--muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:.3rem}
.result .value{font-size:1.4rem;font-weight:700;color:#fff}
.result .bench{font-size:.75rem;margin-top:.3rem;padding:.2rem .5rem;border-radius:4px;display:inline-block}
.bench-good{background:rgba(74,222,128,.15);color:var(--green)}
.bench-warn{background:rgba(250,204,21,.15);color:var(--yellow)}
.bench-bad{background:rgba(248,113,113,.15);color:var(--red)}
.gauge-wrap{margin-top:1rem;text-align:center}
.gauge{position:relative;width:200px;height:100px;margin:0 auto;overflow:hidden}
.gauge-bg{position:absolute;width:200px;height:200px;border-radius:50%;background:conic-gradient(from 270deg,var(--red) 0deg,var(--yellow) 72deg,var(--green) 144deg,var(--border) 180deg);mask:radial-gradient(farthest-side,transparent 55%,#000 56%);-webkit-mask:radial-gradient(farthest-side,transparent 55%,#000 56%)}
.gauge-cover{position:absolute;bottom:0;left:50%;transform:translateX(-50%);width:160px;height:80px;background:var(--card);border-radius:80px 80px 0 0}
.gauge-needle{position:absolute;bottom:0;left:50%;width:4px;height:90px;background:#fff;border-radius:2px;transform-origin:bottom center;transition:transform .8s cubic-bezier(.34,1.56,.64,1);box-shadow:0 0 6px rgba(255,255,255,.3)}
.gauge-center{position:absolute;bottom:-8px;left:50%;transform:translateX(-50%);width:16px;height:16px;background:#fff;border-radius:50%;box-shadow:0 2px 8px rgba(0,0,0,.3)}
.gauge-labels{display:flex;justify-content:space-between;padding:0 1rem;margin-top:.3rem;font-size:.7rem;color:var(--muted)}
.score-text{font-size:2rem;font-weight:800;color:#fff;text-align:center;margin-top:.5rem}
.score-sub{text-align:center;font-size:.75rem;color:var(--muted)}
.alert-box{border-radius:8px;padding:.8rem 1rem;margin-top:1rem;font-size:.85rem;line-height:1.5}
.alert-good{background:rgba(74,222,128,.08);border:1px solid rgba(74,222,128,.2)}
.alert-warn{background:rgba(250,204,21,.08);border:1px solid rgba(250,204,21,.2)}
.alert-bad{background:rgba(248,113,113,.08);border:1px solid rgba(248,113,113,.2)}
.btn{background:var(--accent);color:#fff;border:none;padding:.7rem 1.5rem;border-radius:8px;font-size:.9rem;font-weight:600;cursor:pointer;width:100%;margin-top:.8rem;transition:opacity .2s}
.btn:hover{opacity:.85}
.footer{text-align:center;padding:2rem 1rem;color:var(--muted);font-size:.8rem}
@media(max-width:600px){.input-row,.results{grid-template-columns:1fr}}
scores.push({name:'LTV:CAC Ratio',val:ltvRatio.toFixed(1)+'×',bench:ltvRatio>=BENCH.ltv_cac.good?'Healthy':ltvRatio>=BENCH.ltv_cac.avg?'Below Avg':'Unhealthy',cls:ltvRatio>=BENCH.ltv_cac.good?'bench-good':ltvRatio>=BENCH.ltv_cac.avg?'bench-warn':'bench-bad',score:Math.round(ltvScore)});
const nrrScore=nrr>=120?100:nrr>=BENCH.nrr.good?60+40*(nrr-BENCH.nrr.good)/(20):nrr>=BENCH.nrr.avg?30+30*(nrr-BENCH.nrr.avg)/(BENCH.nrr.good-BENCH.nrr.avg):Math.max(0,30*nrr/BENCH.nrr.avg);
scores.push({name:'Net Rev Retention',val:nrr+'%',bench:nrr>=BENCH.nrr.good?'Expansion':nrr>=100?'Retention':'Contraction',cls:nrr>=BENCH.nrr.good?'bench-good':nrr>=100?'bench-warn':'bench-bad',score:Math.round(nrrScore)});
const overall=Math.round(scores.reduce((a,b)=>a+b.score,0)/scores.length);
const needle=document.getElementById('needle');
const angle=-90+(overall/100)*180;
needle.style.transform=`translateX(-50%) rotate(${angle}deg)`;
const BENCH={
churn:{good:3,avg:5.5,unit:'%',lower:true},
cac_payback:{good:12,avg:18,unit:' months',lower:true},
ltv_cac:{good:3,avg:1.5,unit:'×',lower:false},
nrr:{good:110,avg:95,unit:'%',lower:false},
function benchmark(){
const mrr=parseFloat(document.getElementById('mrr').value)||0;
const churn=parseFloat(document.getElementById('churn').value)||0;
const cac=parseFloat(document.getElementById('cac').value)||1;
const ltv=parseFloat(document.getElementById('ltv').value)||0;
const mau=parseFloat(document.getElementById('mau').value)||1;
const nrr=parseFloat(document.getElementById('nrr').value)||0;
const arpu=mrr/mau;
const cacPayback=cac/(arpu*(1-churn/100))||999;
const ltvRatio=ltv/cac;
let scores=[];
const churnScore=churn<=BENCH.churn.good?100:churn<=BENCH.churn.avg?50+50*(BENCH.churn.avg-churn)/(BENCH.churn.avg-BENCH.churn.good):Math.max(0,50*(BENCH.churn.avg*1.5-churn)/(BENCH.churn.avg*0.5));
scores.push({name:'Churn Rate',val:churn+'%',bench:churn<=BENCH.churn.good?'Excellent':churn<=BENCH.churn.avg?'Average':'Needs Work',cls:churn<=BENCH.churn.good?'bench-good':churn<=BENCH.churn.avg?'bench-warn':'bench-bad',score:Math.round(churnScore)});
const paybackScore=cacPayback<=BENCH.cac_payback.good?100:cacPayback<=BENCH.cac_payback.avg?50+50*(BENCH.cac_payback.avg-cacPayback)/(BENCH.cac_payback.avg-BENCH.cac_payback.good):Math.max(0,50*(BENCH.cac_payback.avg*2-cacPayback)/(BENCH.cac_payback.avg));
const overallLabel=overall>=80?'Excellent — Top 20% of SaaS companies':overall>=60?'Good — Room for growth':overall>=40?'Needs Work — Key metrics below avg':'Critical — Major improvements needed';
const grid=document.getElementById('resultsGrid');
grid.innerHTML=scores.map(s=>`${s.name}${s.val}${s.bench}`).join('');
let recs=[];
const recBox=document.getElementById('recommendations');
recBox.innerHTML=recs.map(r=>`=80?'alert-good':overall>=50?'alert-warn':'alert-bad'}" style='margin-top:.5rem'>${r}`).join('');
📊 SaaS Metrics Benchmarking
Compare your key SaaS metrics against industry averages. Get instant feedback & recommendations.
📈 Enter Your Metrics
}
scores.push({name:'CAC Payback',val:cacPayback.toFixed(1)+' mo',bench:cacPayback<=BENCH.cac_payback.good?'Excellent':cacPayback<=BENCH.cac_payback.avg?'Average':'Too Long',cls:cacPayback<=BENCH.cac_payback.good?'bench-good':cacPayback=5?100:ltvRatio>=BENCH.ltv_cac.good?60+40*(ltvRatio-BENCH.ltv_cac.good)/(5-BENCH.ltv_cac.good):ltvRatio>=BENCH.ltv_cac.avg?30+30*(ltvRatio-BENCH.ltv_cac.avg)/(BENCH.ltv_cac.good-BENCH.ltv_cac.avg):Math.max(0,30*ltvRatio/BENCH.ltv_cac.avg);
document.getElementById(’scoreDisplay‘).textContent=overall;
document.getElementById(’scoreLabel‘).textContent=overallLabel;
document.getElementById(‚resultSection‘).style.display=’block‘;
if(churn>5)recs.push(‚📉 Focus on retention: churn above 5% is hurting growth. Invest in onboarding, customer success, and product stickiness.‘);
if(cacPayback>18)recs.push(‚⏱️ CAC payback too long: optimize acquisition channels, improve conversion rates, or increase pricing.‘);
if(ltvRatio<1.5)recs.push('⚠️ LTV:CAC below healthy range: you may be acquiring unprofitable customers. Review segment targeting.');
if(nrr=80)recs.push(‚🚀 Strong metrics overall! Consider scaling acquisition spend to capitalize on healthy unit economics.‘);
}
Schreibe einen Kommentar