============================================================ */ (function(){ 'use strict'; function init(){ var root = document.getElementById('zssb'); if(!root) return; /* ── State ──────────────────────────────────────── */ var s1Type = 'sleeper'; // 'sleeper' or 'offduty' var s2Type = 'sleeper'; /* ── Toggle button setup ────────────────────────── */ function setupToggle(slpId, offId, callback){ var slpBtn = document.getElementById(slpId); var offBtn = document.getElementById(offId); if(!slpBtn || !offBtn) return; slpBtn.addEventListener('click', function(){ slpBtn.classList.add('active'); offBtn.classList.remove('active'); callback('sleeper'); }); offBtn.addEventListener('click', function(){ offBtn.classList.add('active'); slpBtn.classList.remove('active'); callback('offduty'); }); } setupToggle('zssb-s1-sleeper', 'zssb-s1-offduty', function(t){ s1Type = t; }); setupToggle('zssb-s2-sleeper', 'zssb-s2-offduty', function(t){ s2Type = t; }); /* ── Format decimal hours → "Xh Ym" ─────────────── */ function fmtHrs(h){ if(isNaN(h) || h < 0) return '0h 0m'; var hh = Math.floor(h); var mm = Math.round((h - hh) * 60); if(mm === 60){ hh++; mm = 0; } if(hh === 0 && mm === 0) return '0h 0m'; if(hh === 0) return mm + 'm'; if(mm === 0) return hh + 'h'; return hh + 'h ' + mm + 'm'; } /* ── Add decimal hours to a time string ─────────── */ function addHrs(timeStr, hrs){ if(!timeStr || timeStr === '') return null; var parts = timeStr.split(':'); if(parts.length < 2) return null; var totalMins = parseInt(parts[0], 10) * 60 + parseInt(parts[1], 10) + Math.round(hrs * 60); totalMins = ((totalMins % 1440) + 1440) % 1440; var h = Math.floor(totalMins / 60); var m = totalMins % 60; return (h < 10 ? '0' : '') + h + ':' + (m < 10 ? '0' : '') + m; } /* ── Convert 24hr "HH:MM" → 12hr "H:MM AM/PM" ─── */ function to12hr(t24){ if(!t24) return null; var p = t24.split(':'); var h = parseInt(p[0], 10); var m = p[1]; var ampm = h >= 12 ? 'PM' : 'AM'; h = h % 12; if(h === 0) h = 12; return h + ':' + m + ' ' + ampm; } /* ── Warning helpers ─────────────────────────────── */ function showWarn(msg){ var w = document.getElementById('zssb-warn'); var wm = document.getElementById('zssb-wmsg'); if(w && wm){ wm.textContent = msg; w.classList.add('show'); } } function hideWarn(){ var w = document.getElementById('zssb-warn'); if(w) w.classList.remove('show'); } /* ── Status bar progress ─────────────────────────── */ function setStatus(step){ var pills = ['zssb-pill-1', 'zssb-pill-2', 'zssb-pill-3']; for(var i = 0; i < pills.length; i++){ var el = document.getElementById(pills[i]); if(el){ el.classList[i < step ? 'add' : 'remove']('active'); } } } /* ════════════════════════════════════════════════ MAIN CALCULATION — FMCSA 49 CFR §395.1(g) ════════════════════════════════════════════════ */ function calc(){ hideWarn(); setStatus(2); /* Read inputs */ var drivenBefore = parseFloat(document.getElementById('zssb-driven').value) || 0; var drivenBetween = parseFloat(document.getElementById('zssb-driven-between').value) || 0; var s1h = parseFloat(document.getElementById('zssb-s1-hrs').value) || 0; var s1m = parseFloat(document.getElementById('zssb-s1-min').value) || 0; var s2h = parseFloat(document.getElementById('zssb-s2-hrs').value) || 0; var s2m = parseFloat(document.getElementById('zssb-s2-min').value) || 0; var s1Start = document.getElementById('zssb-s1-start').value; var s2Start = document.getElementById('zssb-s2-start').value; /* Convert to decimal hours */ var split1 = s1h + (s1m / 60); var split2 = s2h + (s2m / 60); /* ── Validation ────────────────────────────────── */ if(split1 <= 0 && split2 <= 0){ showWarn('Please enter the duration for at least one split rest period.'); return; } if(split1 < 0 || split2 < 0){ showWarn('Rest period durations cannot be negative.'); return; } if(drivenBefore < 0 || drivenBetween < 0){ showWarn('Driving hours cannot be negative.'); return; } var totalDriven = drivenBefore + drivenBetween; if(totalDriven > 11){ showWarn('Total hours driven (' + totalDriven.toFixed(2) + ' hrs) exceeds the 11-hour driving limit.'); return; } /* ── FMCSA Split Sleeper Berth Logic ───────────── RULE 1: Combined rest >= 10 hours RULE 2: The longer period must be >= 7 hrs AND in sleeper berth RULE 3: The shorter period must be >= 2 hrs (sleeper or off-duty) ─────────────────────────────────────────────────── */ var totalRest = split1 + split2; var combinedOk = totalRest >= 10; var longSplit = Math.max(split1, split2); var shortSplit = Math.min(split1, split2); var longIsS1 = split1 >= split2; var longType = longIsS1 ? s1Type : s2Type; /* Long split: must be >= 7 hrs AND sleeper berth */ var longOk = (longSplit >= 7) && (longType === 'sleeper'); /* Short split: must be >= 2 hrs (any type) */ var shortOk = (shortSplit >= 2); /* Single-split detection (only one period entered) */ var oneSplit = (split1 > 0 && split2 === 0) || (split1 === 0 && split2 > 0); var isCompliant = false; var reason = ''; if(oneSplit){ isCompliant = false; reason = 'Only one split period entered. Please enter both Split 1 and Split 2 durations to check full FMCSA compliance.'; } else { var failReasons = []; if(!longOk){ if(longSplit < 7){ failReasons.push('Longer split (' + fmtHrs(longSplit) + ') is under the required 7-hour minimum.'); } else { failReasons.push('Longer split (' + fmtHrs(longSplit) + ') must be in the sleeper berth, not off-duty.'); } } if(!shortOk){ failReasons.push('Shorter split (' + fmtHrs(shortSplit) + ') is under the required 2-hour minimum.'); } if(!combinedOk){ failReasons.push('Combined rest (' + fmtHrs(totalRest) + ') is under the 10-hour minimum required.'); } isCompliant = longOk && shortOk && combinedOk; if(isCompliant){ reason = 'Both splits meet FMCSA requirements. Your 14-hour clock is paused during both rest periods and restarts at the end of Split 2.'; } else { reason = failReasons.join(' '); } } /* ── Remaining drive time ───────────────────────── */ var driveRemaining = Math.max(0, 11 - totalDriven); /* ── Timeline data (if start times provided) ──── */ var timelineData = null; if(s1Start && s1Start !== ''){ var s1End = addHrs(s1Start, split1); var midDrive = s2Start && s2Start !== '' ? s2Start : (s1End ? addHrs(s1End, drivenBetween) : null); var s2End = midDrive ? addHrs(midDrive, split2) : null; timelineData = { s1Start: to12hr(s1Start), s1End: to12hr(s1End), s2Start: s2Start && s2Start !== '' ? to12hr(s2Start) : (midDrive ? to12hr(midDrive) : null), s2End: to12hr(s2End), resumeTime: s2End ? to12hr(s2End) : null }; } /* ── Render results ──────────────────────────────── */ renderResults(isCompliant, reason, { split1: split1, split2: split2, totalRest: totalRest, longSplit: longSplit, shortSplit: shortSplit, longOk: longOk, shortOk: shortOk, combinedOk: combinedOk, longType: longType, drivenBefore: drivenBefore, drivenBetween: drivenBetween, totalDriven: totalDriven, driveRemaining:driveRemaining, s1Type: s1Type, s2Type: s2Type, oneSplit: oneSplit }, timelineData); setStatus(3); } /* ════════════════════════════════════════════════ RENDER RESULTS ════════════════════════════════════════════════ */ function renderResults(isCompliant, reason, d, tl){ /* Element refs */ var resEl = document.getElementById('zssb-res'); var banner = document.getElementById('zssb-banner'); var bannerStatus= document.getElementById('zssb-banner-status'); var bannerReason= document.getElementById('zssb-banner-reason'); var bannerSvg = document.getElementById('zssb-banner-svg'); var cardsEl = document.getElementById('zssb-cards'); var breakdownEl = document.getElementById('zssb-breakdown'); var timelineEl = document.getElementById('zssb-timeline'); var tlWrap = document.getElementById('zssb-timeline-wrap'); /* ── Compliance Banner ──────────────────────────── */ if(d.oneSplit){ banner.className = 'compliance-banner non-compliant'; bannerStatus.textContent = 'Incomplete — Enter Both Splits'; bannerSvg.innerHTML = ''; } else if(isCompliant){ banner.className = 'compliance-banner compliant'; bannerStatus.textContent = '✅ FMCSA Compliant — Valid Split'; bannerSvg.innerHTML = ''; } else { banner.className = 'compliance-banner non-compliant'; bannerStatus.textContent = '❌ Non-Compliant — Invalid Split'; bannerSvg.innerHTML = ''; } bannerReason.textContent = reason; /* ── Summary Cards ──────────────────────────────── */ var cards = []; if(!d.oneSplit){ cards.push({ v: fmtHrs(d.split1), u: d.s1Type === 'sleeper' ? 'SLEEPER' : 'OFF-DUTY', n: 'Split 1 Duration', cls: d.s1Type === 'sleeper' ? 'blue' : 'orange' }); cards.push({ v: fmtHrs(d.split2), u: d.s2Type === 'sleeper' ? 'SLEEPER' : 'OFF-DUTY', n: 'Split 2 Duration', cls: d.s2Type === 'sleeper' ? 'blue' : 'orange' }); cards.push({ v: fmtHrs(d.totalRest), u: 'TOTAL REST', n: 'Combined Off-Duty', cls: d.combinedOk ? 'green' : 'red' }); cards.push({ v: fmtHrs(d.driveRemaining), u: 'REMAINING', n: 'Drive Time Left', cls: d.driveRemaining > 4 ? 'green' : (d.driveRemaining > 2 ? 'orange' : 'red') }); } cardsEl.innerHTML = cards.map(function(c){ return '
' + '
' + c.v + '
' + '
' + c.u + '
' + '
' + c.n + '
' + '
'; }).join(''); /* ── Breakdown Table ────────────────────────────── */ var rows = []; if(!d.oneSplit){ rows.push({lbl: 'Split 1 (' + (d.s1Type === 'sleeper' ? 'Sleeper Berth' : 'Off-Duty') + ')', val: fmtHrs(d.split1), cls: ''}); rows.push({lbl: 'Split 2 (' + (d.s2Type === 'sleeper' ? 'Sleeper Berth' : 'Off-Duty') + ')', val: fmtHrs(d.split2), cls: ''}); rows.push({lbl: 'Combined Rest Total', val: fmtHrs(d.totalRest) + (d.totalRest >= 10 ? ' ✓' : ' ✗ (Need ≥10h)'), cls: d.combinedOk ? 'ok' : 'fail'}); rows.push({lbl: 'Longer Split ≥7 hrs in Sleeper Berth', val: d.longOk ? '✓ Pass' : '✗ Fail', cls: d.longOk ? 'ok' : 'fail'}); rows.push({lbl: 'Shorter Split ≥2 hrs (any type)', val: d.shortOk ? '✓ Pass' : '✗ Fail', cls: d.shortOk ? 'ok' : 'fail'}); rows.push({lbl: 'Hours Driven Before Split 1', val: fmtHrs(d.drivenBefore), cls: 'info'}); rows.push({lbl: 'Hours Driven Between Splits', val: fmtHrs(d.drivenBetween), cls: 'info'}); rows.push({lbl: 'Total Hours Driven', val: fmtHrs(d.totalDriven) + ' / 11 hrs max', cls: d.totalDriven < 11 ? 'ok' : 'fail'}); rows.push({lbl: 'Drive Time Remaining After Splits', val: fmtHrs(d.driveRemaining), cls: d.driveRemaining > 0 ? 'ok' : 'fail'}); rows.push({lbl: '14-Hour Clock Paused During Splits', val: isCompliant ? 'Yes — Both periods excluded' : 'Not applicable (fix issues above)', cls: isCompliant ? 'ok' : 'fail'}); } breakdownEl.innerHTML = rows.map(function(r){ return '
' + '' + r.lbl + '' + '' + r.val + '' + '
'; }).join(''); /* ── Timeline ───────────────────────────────────── */ if(!d.oneSplit){ tlWrap.style.display = 'block'; var items = []; items.push({ dot: 'drive', label: 'Started Driving', desc: 'Drove ' + fmtHrs(d.drivenBefore) + ' before first rest period.' }); items.push({ dot: 'sleep', label: 'Split 1 Begins' + (tl && tl.s1Start ? ' at ' + tl.s1Start : ''), desc: fmtHrs(d.split1) + ' ' + (d.s1Type === 'sleeper' ? 'in Sleeper Berth' : 'Off-Duty') + (tl && tl.s1End ? ' → Ends: ' + tl.s1End : '') }); if(d.drivenBetween > 0){ items.push({ dot: 'drive', label: 'Resumed Driving Between Splits', desc: 'Drove ' + fmtHrs(d.drivenBetween) + ' between the two rest periods.' }); } items.push({ dot: 'sleep', label: 'Split 2 Begins' + (tl && tl.s2Start ? ' at ' + tl.s2Start : ''), desc: fmtHrs(d.split2) + ' ' + (d.s2Type === 'sleeper' ? 'in Sleeper Berth' : 'Off-Duty') + (tl && tl.s2End ? ' → Ends: ' + tl.s2End : '') }); if(isCompliant){ items.push({ dot: 'done', label: '14-Hour Clock Restarts' + (tl && tl.resumeTime ? ' at ' + tl.resumeTime : ''), desc: 'Both splits complete. ' + fmtHrs(d.driveRemaining) + ' drive time remaining.' }); } else { items.push({ dot: 'off', label: 'Non-Compliant — Cannot Resume', desc: 'Fix the split issues above before resuming driving.' }); } timelineEl.innerHTML = items.map(function(it){ return '
' + '
' + '
' + '
' + it.label + '
' + '
' + it.desc + '
' + '
'; }).join(''); } else { tlWrap.style.display = 'none'; } /* ── Show results panel ─────────────────────────── */ resEl.classList.add('show'); setTimeout(function(){ resEl.scrollIntoView({ behavior: 'smooth', block: 'nearest' }); }, 100); } /* ════════════════════════════════════════════════ RESET ════════════════════════════════════════════════ */ function resetAll(){ /* Clear number inputs */ var numIds = ['zssb-driven', 'zssb-driven-between', 'zssb-s1-hrs', 'zssb-s1-min', 'zssb-s2-hrs', 'zssb-s2-min']; numIds.forEach(function(id){ var el = document.getElementById(id); if(el) el.value = ''; }); /* Clear time inputs */ ['zssb-s1-start', 'zssb-s2-start'].forEach(function(id){ var el = document.getElementById(id); if(el) el.value = ''; }); /* Reset toggle states */ s1Type = 'sleeper'; s2Type = 'sleeper'; ['zssb-s1-sleeper', 'zssb-s2-sleeper'].forEach(function(id){ var el = document.getElementById(id); if(el) el.classList.add('active'); }); ['zssb-s1-offduty', 'zssb-s2-offduty'].forEach(function(id){ var el = document.getElementById(id); if(el) el.classList.remove('active'); }); /* Hide warning and results */ hideWarn(); var resEl = document.getElementById('zssb-res'); if(resEl) resEl.classList.remove('show'); setStatus(1); } /* ── Event Listeners ──────────────────────────────── */ var calcBtn = document.getElementById('zssb-btn'); if(calcBtn) calcBtn.addEventListener('click', calc); var rstBtn = document.getElementById('zssb-reset'); if(rstBtn) rstBtn.addEventListener('click', resetAll); /* Enter key triggers calculation */ var numFields = ['zssb-driven', 'zssb-driven-between', 'zssb-s1-hrs', 'zssb-s1-min', 'zssb-s2-hrs', 'zssb-s2-min']; numFields.forEach(function(id){ var el = document.getElementById(id); if(el) el.addEventListener('keydown', function(e){ if(e.key === 'Enter') calc(); }); }); } /* end init() */ /* ── Safe DOM-ready execution ───────────────────────── */ if(document.readyState === 'loading'){ document.addEventListener('DOMContentLoaded', init); } else { init(); } })();
Keto Weight Loss Calculator
Get your daily macros, calorie target & weight loss timeline — free & instant.
Personal Details
Biological Sex
Age
Current Weight
Goal Weight
Height
Activity Level
Target Weekly Loss Rate
Keto Macro Split
!
Please fill in all fields with valid values.
Your Keto Plan
Formulas, References & Disclaimers
  • BMR (Male): (10×kg)+(6.25×cm)−(5×age)+5 — Mifflin-St Jeor Equation
  • BMR (Female): (10×kg)+(6.25×cm)−(5×age)−161 — Mifflin-St Jeor Equation
  • TDEE: BMR × Activity Multiplier
  • Keto Calorie Target: TDEE − Daily Deficit (0.45 kg/wk ≈ 500 kcal deficit/day)
  • Fat: Fat% × Calories ÷ 9  |  Protein: Protein% × Calories ÷ 4  |  Net Carbs: capped at 20g minimum
  • 1 kg of body fat ≈ 7,700 kcal deficit. 1 lb ≈ 3,500 kcal.
  • Results are estimates for healthy adults. Consult a doctor or dietitian before starting a ketogenic diet, especially if you have a medical condition.
  • Source: Mifflin MD et al. (1990), Journal of the American Dietetic Association — ZoCalculator.com

Keto Weight Loss Calculator: Find Your Macros & Timeline Instantly

Losing weight on keto isn’t guesswork — it’s math. This keto weight loss calculator tells you exactly how many calories and macros (fat, protein, and carbs) your body needs daily to enter ketosis and shed fat at your target pace. Whether you’re just starting the ketogenic diet or fine-tuning an existing plan, this free tool gives you a personalized, data-driven starting point in seconds.


What This Calculator Tells You

Plug in your details and the keto calculator for weight loss instantly outputs:

  • Daily calorie target — your keto weight loss calorie calculator result based on your goal
  • Fat intake (grams/day) — the dominant macro on a ketogenic plan (~65–75% of calories)
  • Protein intake (grams/day) — calibrated to protect lean muscle during fat loss
  • Net carb limit (grams/day) — typically 20–50g to maintain ketosis
  • Estimated weekly & monthly weight loss rate — your personal weight loss projection on keto
  • Keto weight loss timeline — a projected date to reach your goal weight based on your deficit

How the Calculator Works (The Formula & Logic)

The keto macro calculator for weight loss follows a three-step calculation process grounded in established nutritional science.

Step 1 — Calculate Your BMR (Basal Metabolic Rate) Your BMR is the number of calories your body burns at complete rest. We use the Mifflin-St Jeor Equation:

Men: BMR = (10 × weight in kg) + (6.25 × height in cm) − (5 × age) + 5 Women: BMR = (10 × weight in kg) + (6.25 × height in cm) − (5 × age) − 161

Step 2 — Calculate Your TDEE (Total Daily Energy Expenditure) Your TDEE accounts for your activity level:

TDEE = BMR × Activity Multiplier

Activity LevelMultiplier
Sedentary (desk job, little exercise)× 1.2
Lightly Active (1–3 days/week exercise)× 1.375
Moderately Active (3–5 days/week)× 1.55
Very Active (6–7 days/week hard training)× 1.725
Extra Active (athlete/physical job)× 1.9

Step 3 — Apply Your Calorie Deficit & Calculate Keto Macros

Keto Calorie Target = TDEE − Daily Deficit (A 500 kcal/day deficit ≈ ~0.45 kg or 1 lb of fat loss per week)

Once your calorie target is set, macros are split as follows:

Fat = ~70% of total calories ÷ 9 Protein = ~25% of total calories ÷ 4 Net Carbs = ~5% of total calories ÷ 4 (or capped at 20–50g)

This is the core logic behind how to calculate keto macros for weight loss accurately.


Standard Keto Macro Ratios & Weight Loss Rate Classifications

Keto Macro Ratio Ranges

GoalFat %Protein %Net Carbs %
Standard Keto (Fat Loss)65–75%20–30%5%
Therapeutic Keto75–80%15–20%5%
High-Protein Keto60–65%30–35%5%
Lazy Keto (Carb-Only Focus)VariesVaries<50g/day

Expected Weight Loss Rate on Keto

Calorie DeficitWeekly LossMonthly Loss
250 kcal/day~0.25 kg (0.5 lb)~1 kg (2 lbs)
500 kcal/day~0.45 kg (1 lb)~2 kg (4 lbs)
750 kcal/day~0.7 kg (1.5 lbs)~3 kg (6 lbs)
1,000 kcal/day~0.9 kg (2 lbs)~3.6 kg (8 lbs)

Note: A deficit above 1,000 kcal/day is not recommended without medical supervision.


Step-by-Step Practical Example

Let’s walk through a real example to show how to calculate macros for keto weight loss manually.

The Person: Sarah, 35 years old, female, 80 kg, 165 cm tall, lightly active. Goal: lose 10 kg.

Step 1 — Calculate BMR:

BMR = (10 × 80) + (6.25 × 165) − (5 × 35) − 161 BMR = 800 + 1,031.25 − 175 − 161 = 1,495 kcal/day

Step 2 — Calculate TDEE:

TDEE = 1,495 × 1.375 = 2,056 kcal/day

Step 3 — Apply 500 kcal Deficit & Split Macros:

Keto Calorie Target = 2,056 − 500 = 1,556 kcal/day

Fat = 70% of 1,556 = 1,089 kcal ÷ 9 = ~121g fat/day Protein = 25% of 1,556 = 389 kcal ÷ 4 = ~97g protein/day Net Carbs = 5% of 1,556 = 78 kcal ÷ 4 = ~20g net carbs/day

Keto Weight Loss Timeline:

At ~0.45 kg/week, losing 10 kg = approximately 22 weeks (~5.5 months)

This is exactly what the keto expected weight loss calculator on ZoCalculator.com computes for you automatically.


How to Use Zo Calculator’s Keto Weight Loss Tool

Using the free keto weight loss calculator on ZoCalculator.com takes less than a minute:

  1. Enter your sex — biological sex affects the BMR formula used
  2. Enter your age — metabolism adjusts with age
  3. Enter your current weight — in kg or lbs (toggle available)
  4. Enter your height — in cm or ft/in
  5. Select your activity level — choose the option that best matches your typical week
  6. Enter your goal weight — this powers the keto weight loss timeline calculator
  7. Choose your weekly loss rate — conservative (0.25 kg/wk) to aggressive (1 kg/wk)
  8. Hit Calculate — your daily fat, protein, carb targets, calorie goal, and projected timeline appear instantly

No sign-up. No paywall. This is a completely free keto macro calculator for weight loss, available any time.


Practical Applications and Real-World Uses

The keto diet calculator for weight loss isn’t just for gym enthusiasts. Here’s who benefits most:

  • Keto beginners who need a clear, personalized macro starting point before committing to the diet
  • People plateauing on keto who want to recalculate macros as their weight changes over time
  • Fitness coaches & dietitians who use a macro calculator for keto weight loss as a fast client planning tool
  • Athletes doing cyclical or targeted keto who need to dial in protein intake to preserve performance
  • Individuals tracking a keto weight loss timeline ahead of an event like a wedding or health milestone
  • Caregivers managing therapeutic ketogenic diets for epilepsy or metabolic conditions (under medical guidance)

Important Notes & Technical Limitations

Transparency matters. Here’s what this weight loss calculator on keto assumes and where it has limits:

  1. Formulas are population-based estimates. The Mifflin-St Jeor equation is widely validated but is an average model — individual metabolic rates can vary by ±10–15%.
  2. Results are for educational and planning purposes only. This tool is not a substitute for advice from a registered dietitian, doctor, or certified nutrition coach.
  3. Water weight is not modeled separately. Most keto users lose 1–3 kg of water weight in the first 1–2 weeks; the calculator projects fat loss only, so early results may exceed the projection.
  4. Macros may need adjustment over time. As you lose weight, your TDEE decreases. Recalculate your keto macros for weight loss every 4–6 weeks or after every 5 kg lost for best accuracy.

Helpful References & Sources


🙋 Frequently Asked Questions (FAQs)

How do I calculate my macros for keto weight loss?

To calculate macros for keto weight loss, you first find your TDEE (calories burned per day based on your BMR and activity level), then subtract a calorie deficit (typically 500 kcal/day for steady loss). You then split those remaining calories into roughly 70% fat, 25% protein, and 5% net carbs. Our free keto macro calculator for weight loss does all of this automatically — just enter your stats and goal.

What is a realistic keto weight loss timeline?

A realistic keto weight loss timeline depends on your starting weight, calorie deficit, and consistency. Most people lose 0.5–1 kg per week on a well-maintained ketogenic diet after the initial water weight drop in week one. Using the keto weight loss timeline calculator on ZoCalculator.com, you can enter your goal weight and target pace to see a projected date to reach it.

How many calories should I eat on keto to lose weight?

Your keto calorie target for weight loss is your TDEE minus your chosen deficit. For most people, this falls between 1,400–1,800 kcal/day depending on size and activity. The keto weight loss calorie calculator on this page personalizes this number for your body — there is no universal answer.

Is 20g of carbs per day required for keto?

20g of net carbs per day is the standard threshold used to reliably induce ketosis in most people, particularly beginners. However, some individuals can maintain ketosis at 30–50g net carbs depending on their activity level and metabolic sensitivity. The keto diet calculator for weight loss on this page defaults to 20g but you can adjust based on your personal response to the diet.

What’s the difference between total carbs and net carbs on keto?

Net carbs are calculated by subtracting fiber (and sometimes sugar alcohols) from total carbs: Net Carbs = Total Carbs − Fiber. Fiber is not digested and does not raise blood sugar, so it doesn’t count toward your keto carb limit. When you calculate macros for keto weight loss, always track net carbs, not total carbs.

Can I use this calculator if I’m doing lazy keto?

Yes. Lazy keto focuses only on keeping net carbs under 50g per day without tracking other macros strictly. You can use the keto diet weight loss calculator to get your calorie and carb target, and simply ignore the fat/protein split if you prefer that approach. Just note that tracking all macros typically produces faster and more predictable results.

How often should I recalculate my keto macros?

You should recalculate your keto macros for weight loss every 4–6 weeks, or whenever you’ve lost more than 4–5 kg. As your body weight drops, your BMR decreases, meaning you’ll need fewer calories to maintain the same deficit. Using a weight loss projection calculator on keto without updating your numbers can stall progress.

Why am I not losing weight on keto even with a calorie deficit?

There are several reasons the scale might stall despite a calculated deficit: hidden carbs preventing full ketosis, underestimated calorie intake, too much stress (high cortisol), poor sleep, or a miscalculated activity level. Revisit your numbers using the keto calculator weight loss tool, double-check your food logging accuracy, and consider adjusting your deficit or activity multiplier.

Is the keto macro calculator the same for men and women?

The calorie and macro calculation uses different BMR formulas for men and women (Mifflin-St Jeor), so the outputs will naturally differ. Men generally have higher BMRs due to greater average lean muscle mass, meaning their calorie and fat targets will be higher. The macro ratios (70/25/5 split) remain the same across sexes — only the total amounts differ.

Can this tool calculate macros for weight loss on keto for someone with a medical condition?

This tool provides general nutritional estimates for healthy adults and is designed for educational and planning purposes only. If you have diabetes, kidney disease, epilepsy, or any other metabolic condition, you should consult a doctor or registered dietitian before starting keto. Therapeutic ketogenic diets — such as those used for epilepsy management — require precise medical supervision beyond what any free online calculator can provide.


Explore Related Calculators on Zo Calculator