Hardwood Floor Refinishing Cost Calculator

ANALife Services AuthorityNational Calculator Authority›Hardwood Floor Refinishing Cost 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; } }

Hardwood Floor Refinishing Cost Calculator

Estimate the total cost to sand, stain, and refinish hardwood floors based on square footage, floor condition, finish type, number of coats, and your region.

Floor Area (sq ft)

Floor Condition

Good – light scratches, minor wear Fair – moderate scratches, some stains Poor – deep gouges, heavy staining, cupping

Finish Type

Oil-Based Polyurethane Water-Based Polyurethane Hardwax Oil Acid-Cure / Swedish Finish

Number of Finish Coats

2 coats 3 coats (recommended) 4 coats

Add Stain?

No – natural / clear Yes – custom stain color

Region / Labor Market

Low cost (rural / Midwest / South) Mid cost (suburban / average US) High cost (NYC, SF, Boston, Seattle)

Furniture Moving?

No – room already empty Yes – contractor moves furniture

Calculate Cost

function harCalc() { // ── Collect inputs ────────────────────────────────────────────── var sqft = parseFloat(document.getElementById('har-sqft').value); var condition = document.getElementById('har-condition').value; var finish = document.getElementById('har-finish').value; var coats = parseInt(document.getElementById('har-coats').value); var stain = document.getElementById('har-stain').value; var region = document.getElementById('har-region').value; var furniture = document.getElementById('har-furniture').value;

// ── Validation ────────────────────────────────────────────────── var errors = []; if (isNaN(sqft) || sqft === '') { errors.push('Please enter the floor area.'); } else if (sqft 10000) { errors.push('Floor area cannot exceed 10,000 sq ft.'); }

if (errors.length > 0) { document.getElementById('har-result').style.display = 'block'; document.getElementById('har-result').innerHTML = '' + errors.join('') + '

'; return; }

// ── Base labor rate ($/sq ft) by region ──────────────────────── // Sources: HomeAdvisor, Angi, NWFA 2023 cost surveys var laborBase = { low: 2.50, mid: 3.50, high: 5.00 }[region];

// ── Condition surcharge ($/sq ft) ────────────────────────────── // Poor condition requires extra sanding passes and possible board repair var conditionAdder = { good: 0.00, fair: 0.40, poor: 1.10 }[condition];

// ── Finish material cost ($/sq ft per coat) ──────────────────── // Oil-based poly ~$0.15/sqft/coat; water-based ~$0.20; hardwax ~$0.30; acid-cure ~$0.35 var finishCostPerCoat = { polyurethane: 0.15, water_poly: 0.20, hardwax: 0.30, acid_cure: 0.35 }[finish];

// ── Finish application labor adder ($/sq ft per coat) ────────── // Each additional coat adds buffing + application labor var finishLaborPerCoat = 0.25;

// ── Stain cost ($/sq ft) ─────────────────────────────────────── var stainCost = (stain === 'yes') ? 0.75 : 0.00; // material + extra labor

// ── Furniture moving flat fee ────────────────────────────────── var furnitureFee = (furniture === 'yes') ? Math.min(150 + sqft * 0.10, 600) : 0;

// ── Minimum job fee ──────────────────────────────────────────── var minimumFee = { low: 300, mid: 400, high: 600 }[region];

// ── Core formula ─────────────────────────────────────────────── // Total = sqft × (laborBase + conditionAdder + stainCost // + coats × (finishCostPerCoat + finishLaborPerCoat)) // + furnitureFee // Then apply minimum job fee.

var perSqFt = laborBase + conditionAdder + stainCost + coats * (finishCostPerCoat + finishLaborPerCoat);

var rawTotal = sqft * perSqFt + furnitureFee; var total = Math.max(rawTotal, minimumFee);

// ── Low / High range (±15%) ──────────────────────────────────── var low = total * 0.85; var high = total * 1.15;

// ── Cost per sq ft (effective) ───────────────────────────────── var effectivePerSqFt = total / sqft;

// ── Duration estimate ────────────────────────────────────────── // Typical crew (2 people) does ~400 sq ft/day; drying adds 1 day per coat var workDays = Math.ceil(sqft / 400); var dryDays = coats; // 1 day dry time per coat var totalDays = workDays + dryDays;

// ── Helpers ──────────────────────────────────────────────────── function fmt(n) { return '$' + n.toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ','); } function fmtR(n){ return '$' + Math.round(n).toString().replace(/\B(?=(\d{3})+(?!\d))/g, ','); }

var conditionLabel = { good:'Good', fair:'Fair', poor:'Poor' }[condition]; var finishLabel = { polyurethane:'Oil-Based Polyurethane', water_poly:'Water-Based Polyurethane', hardwax:'Hardwax Oil', acid_cure:'Acid-Cure / Swedish Finish' }[finish]; var regionLabel = { low:'Low-cost region', mid:'Mid-cost region', high:'High-cost region' }[region];

// ── Output ───────────────────────────────────────────────────── var html = '### Estimated Refinishing Cost ' + '' + 'Floor Area' + sqft.toLocaleString() + ' sq ft' + 'Condition' + conditionLabel + '' + 'Finish Type' + finishLabel + '' + 'Finish Coats' + coats + '' + 'Stain' + (stain==='yes'?'Yes':'No') + '' + 'Region' + regionLabel + '' + 'Base Labor Rate' + fmt(laborBase) + ' / sq ft' + 'Condition Surcharge' + fmt(conditionAdder) + ' / sq ft' + 'Finish Cost (' + coats + ' coats)' + fmt(coats * finishCostPerCoat) + ' / sq ft' + 'Finish Application Labor' + fmt(coats * finishLaborPerCoat) + ' / sq ft' + (stain==='yes' ? 'Stain (material + labor)' + fmt(stainCost) + ' / sq ft' : '') + 'Effective Rate' + fmt(effectivePerSqFt) + ' / sq ft' + (furniture==='yes' ? 'Furniture Moving Fee' + fmtR(furnitureFee) + '' : '') + (rawTotal Minimum Job Fee Applied' + fmtR(minimumFee) + '' : '') + 'Estimated Total' + fmtR(total) + '' + 'Typical Range' + fmtR(low) + ' – ' + fmtR(high) + '' + 'Estimated Project Duration~' + totalDays + ' days (incl. dry time)' + '';

document.getElementById('har-result').style.display = 'block'; document.getElementById('har-result').innerHTML = html; }

#### Formula

Per-sq-ft rate = Labor Base Rate + Condition Surcharge + Stain Cost + Coats × (Finish Material Cost/coat + Finish Application Labor/coat)

Raw Total = Floor Area (sq ft) × Per-sq-ft rate + Furniture Moving Fee

Final Total = max(Raw Total, Minimum Job Fee)

Typical Range = Final Total × 0.85  to  Final Total × 1.15

Project Duration = ⌈Area ÷ 400⌉ work days + 1 dry day per coat

#### Assumptions & References

More Calculators

Read Next

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

References