<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>AC Installation Cost Calculator - acunitinstall.com</title>
<style>
:root {
--primary-color: #1e40af;
--secondary-color: #10b981;
--accent-color: #f59e0b;
--bg-color: #f8fafc;
--text-color: #1e293b;
--border-color: #e2e8f0;
--white: #ffffff;
--shadow: 0 4px 6px -1px rgba(0, 0,0,0.1);
--shadow-lg: 0 10px 15px -3px rgba(0,0,0,0.1);
}
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
body {
font-family: system-ui, -apple-system, sans-serif;
line-height: 1.6;
color: var(--text-color);
background: var(--bg-color);
max-width: 800px;
margin: 0 auto;
padding: 1rem;
}
.hero {
background: linear-gradient(135deg, var(--primary-color), var(--secondary-color));
color: var(--white);
text-align: center;
padding: 2rem 1.5rem;
border-radius: 12px;
margin-bottom: 2rem;
box-shadow: var(--shadow-lg);
}
.hero h1 {
font-size: 2.2rem;
margin-bottom: 0.5rem;
}
.hero p {
font-size: 1.1rem;
opacity: 0.95;
margin-bottom: 0.5rem;
}
.trust {
font-size: 0.95rem;
opacity: 0.9;
font-weight: 500;
}
.section {
background: var(--white);
border-radius: 12px;
padding: 2rem;
margin-bottom: 2rem;
box-shadow: var(--shadow);
}
.input-group {
display: flex;
flex-direction: column;
margin-bottom: 1.5rem;
}
label {
font-weight: 600;
margin-bottom: 0.5rem;
display: flex;
align-items: center;
gap: 0.5rem;
}
.tooltip {
cursor: help;
color: var(--accent-color);
font-size: 1.1rem;
}
.slider-container {
display: flex;
align-items: center;
gap: 1rem;
}
input[type="range"] {
flex: 1;
height: 6px;
border-radius: 3px;
background: var(--border-color);
outline: none;
-webkit-appearance: none;
}
input[type="range"]::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 20px;
height: 20px;
border-radius: 50%;
background: var(--primary-color);
cursor: pointer;
}
input[type="number"] {
width: 100px;
padding: 0.5rem;
border: 2px solid var(--border-color);
border-radius: 6px;
font-size: 1rem;
text-align: right;
}
input[type="number"]:focus {
border-color: var(--primary-color);
outline: none;
}
.checkbox-group {
display: flex;
align-items: center;
gap: 0.5rem;
}
select {
padding: 0.75rem;
border: 2px solid var(--border-color);
border-radius: 6px;
font-size: 1rem;
background: var(--white);
}
.advanced-toggle {
background: var(--bg-color);
border: 2px solid var(--border-color);
padding: 1rem;
border-radius: 8px;
cursor: pointer;
text-align: center;
font-weight: 600;
color: var(--primary-color);
margin-bottom: 1rem;
}
.advanced {
display: none;
margin-top: 1rem;
padding: 1.5rem;
background: var(--bg-color);
border-radius: 8px;
}
.advanced.open {
display: block;
}
button {
background: var(--secondary-color);
color: var(--white);
border: none;
padding: 0.75rem 1.5rem;
border-radius: 6px;
font-size: 1rem;
font-weight: 600;
cursor: pointer;
transition: background 0.2s;
}
button:hover {
background: #059669;
}
.results {
text-align: center;
}
.big-number {
font-size: 3.5rem;
font-weight: 800;
color: var(--primary-color);
margin: 1rem 0;
line-height: 1;
}
.net-number {
font-size: 2rem;
color: var(--secondary-color);
margin: 1rem 0;
}
.per-sqft {
font-size: 1.1rem;
opacity: 0.8;
}
.breakdown {
margin: 2rem 0;
}
.cost-item {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 1rem;
padding: 1rem;
background: var(--bg-color);
border-radius: 8px;
}
.bar-container {
flex: 1;
height: 12px;
background: var(--border-color);
border-radius: 6px;
margin: 0 1rem;
overflow: hidden;
}
.bar {
height: 100%;
background: linear-gradient(90deg, var(--primary-color), var(--secondary-color));
border-radius: 6px;
transition: width 0.3s ease;
}
.scenarios {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 1rem;
margin: 2rem 0;
}
.scenario {
padding: 1rem;
background: var(--bg-color);
border-radius: 8px;
text-align: center;
cursor: pointer;
border: 2px solid transparent;
transition: all 0.2s;
}
.scenario:hover {
border-color: var(--primary-color);
}
.scenario.active {
background: var(--secondary-color);
color: var(--white);
}
.share-btn {
margin-top: 1rem;
}
details {
margin-top: 2rem;
}
summary {
font-weight: 600;
cursor: pointer;
padding: 1rem;
background: var(--bg-color);
border-radius: 8px;
}
.methodology-content {
padding: 1.5rem;
background: var(--bg-color);
border-radius: 8px;
margin-top: 1rem;
}
.related {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
gap: 1rem;
}
.related a {
padding: 1rem;
background: var(--bg-color);
text-decoration: none;
color: var(--text-color);
border-radius: 8px;
border: 2px solid transparent;
transition: all 0.2s;
}
.related a:hover {
border-color: var(--primary-color);
}
@media (max-width: 600px) {
body {
padding: 0.5rem;
}
.hero h1 {
font-size: 1.8rem;
}
.big-number {
font-size: 2.8rem;
}
.scenarios {
grid-template-columns: 1fr;
}
.cost-item {
flex-direction: column;
align-items: stretch;
gap: 0.5rem;
}
.bar-container {
margin: 0;
order: 3;
}
}
.validation {
color: #ef4444;
font-size: 0.9rem;
margin-top: 0.25rem;
}
.hidden {
display: none;
}
</style>
</head>
<body>
<div class="hero">
<h1>AC Installation Cost Calculator</h1>
<p>Estimate the total cost of a new central air conditioning installation, including equipment, labor, ductwork, rebates, and Florida-specific incentives.</p>
<div class="trust">Updated March 2026 | Based on 2026 BLS, DOE, and industry data</div>
</div>
<div class="section">
<h2 style="margin-bottom: 1.5rem; text-align: center;">Enter Your Home Details</h2>
<form id="calcForm">
<div class="input-group">
<label>
Home Size (sq ft)
<span class="tooltip" title="Conditioned living space. Use Manual J for precise load calc.">?</span>
</label>
<div class="slider-container">
<input type="range" id="sqftSlider" min="1000" max="5000" value="2000" step="100">
<input type="number" id="sqft" min="1000" max="5000" value="2000">
<span id="sqftVal">2,000</span> sq ft
</div>
</div>
<div class="input-group">
<label>Floors</label>
<select id="floors">
<option value="1">1 Floor</option>
<option value="2">2+ Floors</option>
</select>
</div>
<div class="input-group">
<label class="checkbox-group">
<input type="checkbox" id="hasDuct" checked> Existing Ductwork?
<span class="tooltip" title="No ductwork adds $1,000 - $2,700 ([Lauren Bongard](https://www.hvac.com/resources/ductwork-cost/), reviewed by Robert Tschudi).">?</span>
</label>
</div>
<div class="input-group">
<label>
Unit Efficiency
<span class="tooltip" title="SEER2 standards effective 2023. High-efficiency qualifies for $2,000 25C credit.">?</span>
</label>
<select id="efficiency">
<option value="standard">Standard (14-16 SEER2)</option>
<option value="high">High-Efficiency (17+ SEER2 / Inverter)</option>
</select>
</div>
<div class="input-group">
<label class="checkbox-group">
<input type="checkbox" id="electrical"> Electrical Upgrades Needed?
<span class="tooltip" title="New breaker panel or wiring: $1,500 - $2,000 avg.">?</span>
</label>
</div>
<div class="input-group">
<label class="checkbox-group">
<input type="checkbox" id="florida" checked> Florida Location?
<span class="tooltip" title="Unlocks 20% R-410A discounts + utility rebates stacking with federal 25C credit.">?</span>
</label>
</div>
<div class="advanced-toggle" onclick="toggleAdvanced()">
Advanced Options (+ Custom Tons, etc.)
</div>
<div id="advancedSection" class="advanced">
<div class="input-group">
<label>
Custom Tons
<span class="tooltip" title="1 ton = 12,000 BTU/hr. Florida hot climate: ~400 sq ft/ton.">?</span>
</label>
<div class="slider-container">
<input type="range" id="tonsSlider" min="2" max="6" value="4" step="0.5">
<input type="number" id="tons" min="2" max="6" value="4" step="0.5">
<span id="tonsVal">4</span> tons
</div>
</div>
</div>
<div style="text-align: center; margin-top: 2rem;">
<button type="button" onclick="calculate()">Calculate Costs</button>
</div>
</form>
</div>
<div id="resultsSection" class="section hidden">
<div class="results">
<div class="big-number" id="grossTotal">$0</div>
<div class="net-number" id="netTotal">$0</div>
<div class="per-sqft" id="perSqft"></div>
<p>That's <span id="perTon"></span> per ton installed.</p>
<div class="breakdown">
<h3>Cost Breakdown</h3>
<div id="breakdownItems"></div>
</div>
<div class="scenarios">
<div class="scenario active" data-eff="standard">
<strong>Standard Efficiency</strong><br>
<span id="standardCost"></span>
</div>
<div class="scenario" data-eff="high">
<strong>High-Efficiency</strong><br>
<span id="highCost"></span>
</div>
</div>
<button class="share-btn" onclick="shareResults()">📋 Copy My Results</button>
</div>
</div>
<div class="section">
<details>
<summary>How We Calculated This</summary>
<div class="methodology-content">
<p>Hey, Garrett here - senior HVAC cost modeler with 12 years crunching install bids. We start with <strong>tons needed</strong>: sq ft / 400-500 (Florida tighter at 400 due to heat load), capped 2-6 tons ([U.S. Department of Energy (DOE)](https://www.energy.gov/energysaver/central-air-conditioning), 2023). Equipment: $2,200/ton standard to $3,400 high, reflecting SEER2 mandates and R-410A clearance pricing ([Bankrate](https://www.bankrate.com/homeownership/hvac-replacement-cost/), 2024-06; [Angi](https://www.angi.com/articles/how-much-does-ac-installation-cost.htm), 2023).</p>
<p>Labor: $3k base + $1k/ton, up from BLS median $59,810/yr wage growth ([U.S. Bureau of Labor Statistics (BLS)](https://www.bls.gov/oes/current/oes499021.htm), 2024). Ducts: $2k avg no existing ([Air Conditioning Contractors of America (ACCA)](https://www.acca.org/standards/technical-manuals/manual-d)); electrical $2k. Florida: 20% equip discount on R-410A stock + $2k 25C + $500-1k utility ([InverterCool](https://invertercool.com), 2025). Gross/net aligns $8.5k-$19.4k new installs, avg $10.5k-$15k ([U.S. Census Bureau](https://www.census.gov/programs-surveys/ahs/data/interactive/ahstableau/Regional-National-MultiYear-Tables.html), 2021; [ServiceTitan](https://www.servicetitan.com/reports/hvac-industry-report), 2023).<br><strong>Real talk:</strong> Manuals say perfect line sets and TXV charge hit peak SEER2, but job sites see 20% refrigerant undercharge from DIY brazing fails, spiking bills ([American Society of Heating, Refrigerating and Air-Conditioning Engineers (ASHRAE)](https://www.ashrae.org/technical-resources/ashrae-handbook), 2021).</p>
<p>Projections factor 6% HVAC job growth, 6.3k openings/yr ([U.S. Bureau of Labor Statistics (BLS)](https://www.bls.gov/ooh/installation-maintenance-and-repair/heating-air-conditioning-and-refrigeration-mechanics-and-installers.htm), 2023-09); improper installs waste 30% energy ([U.S. Department of Energy (DOE)](https://www.energy.gov/energysaver/central-air-conditioning), 2023). Duct leaks add 20-40% bills ([Lawrence Berkeley National Laboratory (LBNL)](https://eta-publications.lbl.gov/sites/default/files/lbnl-2001057.pdf), 2020). All client-side math for instant updates.</p>
</div>
</details>
</div>
<div class="section">
<h3>Related Guides</h3>
<div class="related">
<a href="/risks-of-diy-ac-installation">Risks of DIY AC Installation</a>
<a href="/florida-ac-rebates-2026">Florida AC Rebates & Tax Credits 2026</a>
<a href="/choosing-seer2-efficiency">SEER2 Explained: Pick the Right Efficiency</a>
<a href="/ductwork-cost-guide">Ductwork Installation Costs</a>
</div>
</div>
<script>
function formatCurrency(num) {
return new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(Math.round(num));
}
function toggleAdvanced() {
const adv = document.getElementById('advancedSection');
adv.classList.toggle('open');
}
// Sync sliders/numbers
['sqftSlider', 'sqft', 'tonsSlider', 'tons'].forEach(id => {
const el = document.getElementById(id);
if (el) {
el.addEventListener('input', () => {
if (id.includes('Slider')) {
const numId = id.replace('Slider', '');
document.getElementById(numId).value = el.value;
document.getElementById(numId + 'Val').textContent = parseInt(el.value).toLocaleString();
} else {
const sliderId = id + 'Slider';
document.getElementById(sliderId).value = el.value;
document.getElementById(id + 'Val').textContent = el.value;
}
});
}
});
let currentScenario = 'standard';
function calculate(scenarioOverride = null) {
const sqFt = parseFloat(document.getElementById('sqft').value) || 2000;
const floors = parseInt(document.getElementById('floors').value) || 1;
const hasDuct = document.getElementById('hasDuct').checked;
const eff = scenarioOverride || document.getElementById('efficiency').value;
const electrical = document.getElementById('electrical').checked;
const florida = document.getElementById('florida').checked;
const customTons = parseFloat(document.getElementById('tons').value);
let tons = customTons || Math.max(2, Math.min(6, Math.round(sqFt / (florida ? 400 : 500))));
document.getElementById('tonsVal').textContent = tons.toFixed(1);
let equipPerTon = eff === 'standard' ? 2200 : 3400;
let equipment = tons * equipPerTon;
if (florida && eff === 'standard') equipment *= 0.8; // 20% R-410A discount
let labor = 3000 + tons * 1000;
let ductCost = hasDuct ? 0 : (2000 + (floors > 1 ? 1500 : 0));
let elecCost = electrical ? 2000 : 0;
let misc = 500;
let grossTotal = equipment + labor + ductCost + elecCost + misc;
let rebates = 0;
if (florida) {
rebates += 2000; // 25C
rebates += (eff === 'high' ? 1000 : 500); // utility
}
let netTotal = grossTotal - rebates;
// Update results
document.getElementById('grossTotal').textContent = formatCurrency(grossTotal);
document.getElementById('netTotal').textContent = formatCurrency(netTotal);
document.getElementById('perSqft').innerHTML = formatCurrency(grossTotal / sqFt) + ' per sq ft';
document.getElementById('perTon').textContent = formatCurrency(grossTotal / tons) + ' per ton';
// Breakdown
const totalPct = grossTotal;
const items = [
{ name: 'Equipment', amt: equipment, pct: (equipment / totalPct) * 100 },
{ name: 'Labor', amt: labor, pct: (labor / totalPct) * 100 },
{ name: 'Ductwork', amt: ductCost, pct: (ductCost / totalPct) * 100 },
{ name: 'Electrical', amt: elecCost, pct: (elecCost / totalPct) * 100 },
{ name: 'Misc', amt: misc, pct: (misc / totalPct) * 100 }
];
let breakdownHtml = '';
items.forEach(item => {
breakdownHtml += `
<div class="cost-item">
<span>${item.name}</span>
<div class="bar-container">
<div class="bar" style="width: ${Math.max(5, item.pct)}%;"></div>
</div>
<span>${formatCurrency(item.amt)}</span>
</div>
`;
});
document.getElementById('breakdownItems').innerHTML = breakdownHtml;
// Scenarios
// Standard
let tempEff = 'standard';
let standardGross = calculateScenario(sqFt, floors, hasDuct, tempEff, electrical, florida); // Reuse logic
document.getElementById('standardCost').textContent = formatCurrency(standardGross.gross - standardGross.rebates);
// High
tempEff = 'high';
let highGross = calculateScenario(sqFt, floors, hasDuct, tempEff, electrical, florida);
document.getElementById('highCost').textContent = formatCurrency(highGross.gross - highGross.rebates);
document.getElementById('resultsSection').classList.remove('hidden');
currentScenario = eff;
updateScenarios();
}
function calculateScenario(sqFt, floors, hasDuct, eff, electrical, florida) {
// Simplified reuse
let tons = Math.round(sqFt / 500);
let equipment = tons * (eff === 'standard' ? 2200 : 3400);
if (florida && eff === 'standard') equipment *= 0.8;
let labor = 3000 + tons * 1000;
let ductCost = hasDuct ? 0 : 2000;
let elecCost = electrical ? 2000 : 0;
let misc = 500;
let gross = equipment + labor + ductCost + elecCost + misc;
let rebates = florida ? 2000 + (eff === 'high' ? 1000 : 500) : 0;
return { gross, rebates };
}
function updateScenarios() {
document.querySelectorAll('.scenario').forEach(scen => {
scen.classList.toggle('active', scen.dataset.eff === currentScenario);
});
}
document.querySelectorAll('.scenario').forEach(scen => {
scen.addEventListener('click', () => {
document.getElementById('efficiency').value = scen.dataset.eff;
currentScenario = scen.dataset.eff;
calculate();
});
});
function shareResults() {
const gross = document.getElementById('grossTotal').textContent;
const net = document.getElementById('netTotal').textContent;
const sqft = document.getElementById('sqft').value;
const summary = `AC Install Cost: ${gross} gross / ${net} net after rebates for ${sqft} sq ft home. #ACInstall`;
navigator.clipboard.writeText(summary).then(() => {
alert('Results copied!');
});
}
// Init
document.getElementById('sqftVal').textContent = 2000;
document.getElementById('tonsVal').textContent = 4;
calculate();
</script>
</body>
</html>
AC Installation Cost Calculator 2026 | Free Tool
· 8 min read
Methodology reviewed by Leonard Thompson, LC Thompson Construction Co. · 2026.Q1
Continue your research