Janitorial Contract Bid Price Calculator
ANA›Life Services Authority›National Calculator Authority›Janitorial Contract Bid Price Calculator
.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }
Janitorial Contract Bid Price Calculator
Calculate a competitive and profitable bid price for janitorial contracts based on labor costs, supplies, overhead, and desired profit margin.
Total Square Footage to Clean
Cleaning Frequency (visits per month)
Cleaning Rate (sq ft per hour per worker)
Hourly Labor Cost per Worker ($ incl. taxes & benefits)
Number of Workers per Visit
Monthly Supplies & Equipment Cost ($)
Overhead Rate (% of labor cost, e.g. 20 for 20%)
Desired Profit Margin (% of total bid, e.g. 15 for 15%)
Calculate Bid Price
function janCalc() { var resultDiv = document.getElementById('jan-result');
var sqft = parseFloat(document.getElementById('jan-sqft').value); var freq = parseFloat(document.getElementById('jan-freq').value); var rate = parseFloat(document.getElementById('jan-rate').value); var wage = parseFloat(document.getElementById('jan-wage').value); var workers = parseFloat(document.getElementById('jan-workers').value); var supplies = parseFloat(document.getElementById('jan-supplies').value); var overhead = parseFloat(document.getElementById('jan-overhead').value); var profit = parseFloat(document.getElementById('jan-profit').value);
// Validation if (isNaN(sqft) || sqft Please enter a valid square footage greater than 0.'; return; } if (isNaN(freq) || freq Please enter a valid cleaning frequency (at least 1 visit/month).'; return; } if (isNaN(rate) || rate Please enter a valid cleaning rate (sq ft per hour) greater than 0.'; return; } if (isNaN(wage) || wage Please enter a valid hourly labor cost greater than 0.'; return; } if (isNaN(workers) || workers Please enter a valid number of workers (at least 1).'; return; } if (isNaN(supplies) || supplies Please enter a valid monthly supplies cost (0 or more).'; return; } if (isNaN(overhead) || overhead 200) { resultDiv.innerHTML = 'Please enter a valid overhead rate between 0% and 200%.'; return; } if (isNaN(profit) || profit = 100) { resultDiv.innerHTML = 'Please enter a valid profit margin between 0% and 99%.'; return; }
// --- Core Calculations ---
// Hours per visit per worker = sqft / rate var hoursPerVisit = sqft / rate;
// Total labor hours per month = hours per visit × workers × frequency var totalLaborHours = hoursPerVisit * workers * freq;
// Monthly labor cost = total labor hours × hourly wage var monthlyLaborCost = totalLaborHours * wage;
// Monthly overhead cost = labor cost × (overhead% / 100) var monthlyOverheadCost = monthlyLaborCost * (overhead / 100);
// Total direct costs = labor + supplies + overhead var totalDirectCosts = monthlyLaborCost + supplies + monthlyOverheadCost;
// Bid price using margin formula: Bid = Direct Costs / (1 - profit% / 100) // This ensures profit% is a true margin on the bid price, not just a markup var monthlyBidPrice = totalDirectCosts / (1 - profit / 100);
// Annual bid price var annualBidPrice = monthlyBidPrice * 12;
// Per-visit cost var costPerVisit = monthlyBidPrice / freq;
// Per sq ft per month var costPerSqFt = monthlyBidPrice / sqft;
// Profit dollars var monthlyProfit = monthlyBidPrice - totalDirectCosts;
// Format currency function fmt(n) { return '$' + n.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ','); } function fmtH(n) { return n.toFixed(2); }
resultDiv.innerHTML = '### Bid Price Results ' + '' + 'Hours per Visit (per worker)' + fmtH(hoursPerVisit) + ' hrs' + 'Total Labor Hours / Month' + fmtH(totalLaborHours) + ' hrs' + 'Monthly Labor Cost' + fmt(monthlyLaborCost) + '' + 'Monthly Supplies Cost' + fmt(supplies) + '' + 'Monthly Overhead Cost (' + overhead.toFixed(1) + '%)' + fmt(monthlyOverheadCost) + '' + 'Total Direct Costs / Month' + fmt(totalDirectCosts) + '' + 'Monthly Profit (' + profit.toFixed(1) + '% margin)' + fmt(monthlyProfit) + '' + '📅 Monthly Bid Price' + fmt(monthlyBidPrice) + '' + '📅 Annual Bid Price' + fmt(annualBidPrice) + '' + 'Cost per Visit' + fmt(costPerVisit) + '' + 'Cost per Sq Ft / Month$' + costPerSqFt.toFixed(4) + '' + ''; }
#### Formulas Used
1. Hours per Visit (per worker): Hours per Visit = Square Footage ÷ Cleaning Rate (sq ft/hr)
2. Total Monthly Labor Hours: Total Labor Hours = Hours per Visit × Number of Workers × Visits per Month
3. Monthly Labor Cost: Labor Cost = Total Labor Hours × Hourly Labor Cost
4. Monthly Overhead Cost: Overhead Cost = Labor Cost × (Overhead Rate ÷ 100)
5. Total Direct Costs: Direct Costs = Labor Cost + Supplies Cost + Overhead Cost
6. Monthly Bid Price (Margin-Based): Bid Price = Direct Costs ÷ (1 − Profit Margin ÷ 100) This ensures the profit % is a true margin on the selling price, not just a markup on cost.
7. Annual Bid Price: Annual Bid = Monthly Bid Price × 12
#### Assumptions & References
- The cleaning rate (sq ft per hour) varies by facility type: offices ~3,000–4,000 sq ft/hr, medical facilities ~1,500–2,500 sq ft/hr, industrial ~4,000–5,000 sq ft/hr (ISSA Cleaning Industry standards).
- Hourly labor cost should include gross wages, payroll taxes (FICA ~7.65%), workers’ compensation insurance, and any benefits — typically 25–35% above base wage.
- Overhead covers insurance (general liability, bonding), vehicle costs, management time, uniforms, and administrative expenses — typically 15–30% of labor.
- Profit margin for janitorial contracts typically ranges from 10–20% for competitive markets (BSCAI — Building Service Contractors Association International).
- The margin formula Bid = Cost ÷ (1 − margin) is the industry-standard method to ensure the desired profit percentage is achieved on the final price, not just added as a markup.
More Calculators
- English Proficiency Level Estimator (CEFR)
- Floor Leveling Compound Calculator
- Gutter Repair Cost Estimator
- Hardwood Floor Refinishing Coverage Calculator
- Rainwater Runoff Calculator
- Greenhouse Gas Emissions Calculator
- EV Charger Cost Estimator
- AI Project Scope & Token Cost Estimator
- AI Contractor vs Human Contractor Cost Calculator
- Contractor Markup vs. Margin Calculator
- Labor vs. Materials Cost Ratio Calculator
- Project Timeline & Delay Cost Calculator
Read Next
Study Time Planner Authority Network America › Life Services Authority › National Calculator Authority .calc-container { max-width: 640px;...