Subfloor Repair Cost Estimator

ANALife Services AuthorityNational Calculator Authority›Subfloor Repair Cost Estimator

.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; } }

Subfloor Repair Cost Estimator

Estimate the total cost to repair or replace damaged subfloor based on area, damage severity, material choice, and local labor rates.

Room Length (ft)

Room Width (ft)

Estimated Damage Coverage (%)

Percentage of the room's subfloor that needs repair or replacement.

Subfloor Material

OSB (Oriented Strand Board) – ~$0.65/sq ft Plywood 1/2" – ~$0.90/sq ft Plywood 3/4" – ~$1.20/sq ft Concrete Patch – ~$2.50/sq ft

Damage Severity

Minor (surface rot, small soft spots) – patch only Moderate (partial panel replacement) Severe (full panel + joist inspection/sistering)

Labor Rate ($/hr)

Typical range: $45–$100/hr depending on region and contractor.

Existing Floor Covering Removal?

No – subfloor already exposed Yes – carpet/vinyl removal needed (~$1.00/sq ft) Yes – hardwood/tile removal needed (~$2.50/sq ft)

Joist Sistering / Structural Repair?

No Yes – minor (1–3 joists, ~$150 flat) Yes – moderate (4–8 joists, ~$400 flat) Yes – extensive (9+ joists, ~$900 flat)

Waste / Cut Factor (%)

Typically 10–15% for standard rooms; higher for irregular shapes.

Calculate

function subCalc() { var length = parseFloat(document.getElementById('sub_length').value); var width = parseFloat(document.getElementById('sub_width').value); var damagePct = parseFloat(document.getElementById('sub_damage_pct').value); var material = document.getElementById('sub_material').value; var damageLevel = document.getElementById('sub_damage_level').value; var laborRate = parseFloat(document.getElementById('sub_labor_rate').value); var removalOpt = parseInt(document.getElementById('sub_floor_removal').value); var joistOpt = parseInt(document.getElementById('sub_joist_repair').value); var wastePct = parseFloat(document.getElementById('sub_waste_factor').value);

var resultDiv = document.getElementById('sub_result');

// --- Validation --- if (isNaN(length) || length Please enter a valid room length (> 0 ft).'; return; } if (isNaN(width) || width Please enter a valid room width (> 0 ft).'; return; } if (isNaN(damagePct) || damagePct 100) { resultDiv.innerHTML = 'Damage coverage must be between 1% and 100%.'; return; } if (isNaN(laborRate) || laborRate Please enter a valid labor rate (≥ $20/hr).'; return; } if (isNaN(wastePct) || wastePct 30) { resultDiv.innerHTML = 'Waste factor must be between 5% and 30%.'; return; }

// --- Material cost per sq ft --- var materialCostPerSqFt = { osb: 0.65, plywood_half: 0.90, plywood_threequarter: 1.20, concrete_patch: 2.50 }; var matCost = materialCostPerSqFt[material];

// --- Labor hours per sq ft by damage level --- // Minor: 0.05 hr/sqft (patch & screw), Moderate: 0.10 hr/sqft, Severe: 0.18 hr/sqft var laborHrsPerSqFt = { minor: 0.05, moderate: 0.10, severe: 0.18 }; var laborHrs = laborHrsPerSqFt[damageLevel];

// --- Damage severity multiplier on material (minor uses less material – patch only) --- var damageMaterialMult = { minor: 0.30, moderate: 1.00, severe: 1.00 }; var matMult = damageMaterialMult[damageLevel];

// --- Core area calculations --- var totalRoomSqFt = length * width; var damagedSqFt = totalRoomSqFt * (damagePct / 100); var materialSqFt = damagedSqFt * (1 + wastePct / 100) * matMult;

// --- Material cost --- var totalMaterialCost = materialSqFt * matCost;

// --- Labor cost --- var totalLaborHours = damagedSqFt * laborHrs; var totalLaborCost = totalLaborHours * laborRate;

// --- Floor removal cost (applied to full room area if selected) --- var removalCostPerSqFt = [0, 1.00, 2.50]; var removalCost = totalRoomSqFt * removalCostPerSqFt[removalOpt];

// --- Joist repair flat cost --- var joistCosts = [0, 150, 400, 900]; var joistCost = joistCosts[joistOpt];

// --- Fasteners, adhesive, misc supplies (~8% of material cost, min $25) --- var suppliesCost = Math.max(totalMaterialCost * 0.08, 25);

// --- Subtotal & contingency (10%) --- var subtotal = totalMaterialCost + totalLaborCost + removalCost + joistCost + suppliesCost; var contingency = subtotal * 0.10; var totalCost = subtotal + contingency;

// --- Cost per sq ft of repaired area --- var costPerSqFt = damagedSqFt > 0 ? totalCost / damagedSqFt : 0;

// --- Low / High range (±15%) --- var lowEstimate = totalCost * 0.85; var highEstimate = totalCost * 1.15;

// --- Material label --- var matLabels = { osb: 'OSB', plywood_half: 'Plywood 1/2"', plywood_threequarter: 'Plywood 3/4"', concrete_patch: 'Concrete Patch' }; var damageLabels = { minor: 'Minor', moderate: 'Moderate', severe: 'Severe' };

resultDiv.innerHTML = '### Subfloor Repair Cost Estimate ' + '' + 'Total Room Area' + totalRoomSqFt.toFixed(1) + ' sq ft' + 'Damaged Area to Repair' + damagedSqFt.toFixed(1) + ' sq ft (' + damagePct + '%)' + 'Material Needed (w/ ' + wastePct + '% waste)' + materialSqFt.toFixed(1) + ' sq ft' + '' + 'Material Cost (' + matLabels[material] + ' @ $' + matCost.toFixed(2) + '/sq ft)$' + totalMaterialCost.toFixed(2) + '' + 'Labor Cost (' + totalLaborHours.toFixed(1) + ' hrs @ $' + laborRate.toFixed(0) + '/hr)$' + totalLaborCost.toFixed(2) + '' + (removalCost > 0 ? 'Floor Covering Removal$' + removalCost.toFixed(2) + '' : '') + (joistCost > 0 ? 'Joist Sistering / Structural Repair$' + joistCost.toFixed(2) + '' : '') + 'Fasteners, Adhesive & Supplies$' + suppliesCost.toFixed(2) + '' + 'Contingency (10%)$' + contingency.toFixed(2) + '' + '' + 'Estimated Total Cost$' + totalCost.toFixed(2) + '' + 'Cost per Repaired Sq Ft$' + costPerSqFt.toFixed(2) + '/sq ft' + 'Likely Range: $' + lowEstimate.toFixed(2) + ' – $' + highEstimate.toFixed(2) + ' (±15%)' + ''; }

#### Formula

Damaged Area = Room Length × Room Width × (Damage % ÷ 100) Material Needed = Damaged Area × (1 + Waste % ÷ 100) × Damage Severity Material Multiplier Material Cost = Material Needed × Material Unit Cost ($/sq ft) Labor Hours = Damaged Area × Labor Hours per Sq Ft (by severity) Labor Cost = Labor Hours × Labor Rate ($/hr) Supplies Cost = max(Material Cost × 8%, $25) Subtotal = Material + Labor + Removal + Joist Repair + Supplies Total Cost = Subtotal × 1.10 (10% contingency) Cost per Sq Ft = Total Cost ÷ Damaged Area

Labor hours per sq ft by severity: Minor = 0.05 hr, Moderate = 0.10 hr, Severe = 0.18 hr. Minor damage uses only 30% of material quantity (patch compound vs. full panel replacement).

#### Assumptions & References

More Calculators

Read Next

Study Time Planner ANA › Life Services Authority › National Calculator Authority › Study Time Planner .calc-container { max-width: 640px; margin:...

References