Skip to main content

Air Quality Index (AQI) Calculator

ANALife Services AuthorityNational Calculator Authority›Air Quality Index (AQI) 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; } }

Air Quality Index (AQI) Calculator

Calculate the AQI for major air pollutants using the US EPA linear interpolation method. Enter the measured concentration for one or more pollutants to find the overall AQI and health category.

PM2.5 – Fine Particulate Matter (µg/m³, 24-hr avg)

PM10 – Coarse Particulate Matter (µg/m³, 24-hr avg)

Ozone O₃ (ppm, 8-hr avg)

Carbon Monoxide CO (ppm, 8-hr avg)

Sulfur Dioxide SO₂ (ppb, 1-hr avg)

Nitrogen Dioxide NO₂ (ppb, 1-hr avg)

Calculate AQI

function airCalc() { const resultDiv = document.getElementById("air-result"); resultDiv.innerHTML = "";

// EPA AQI Breakpoints: [C_lo, C_hi, I_lo, I_hi] const breakpoints = { pm25: [ [0.0, 12.0, 0, 50], [12.1, 35.4, 51, 100], [35.5, 55.4, 101, 150], [55.5, 150.4, 151, 200], [150.5, 250.4, 201, 300], [250.5, 350.4, 301, 400], [350.5, 500.4, 401, 500] ], pm10: [ [0, 54, 0, 50], [55, 154, 51, 100], [155, 254, 101, 150], [255, 354, 151, 200], [355, 424, 201, 300], [425, 504, 301, 400], [505, 604, 401, 500] ], o3_8h: [ [0.000, 0.054, 0, 50], [0.055, 0.070, 51, 100], [0.071, 0.085, 101, 150], [0.086, 0.105, 151, 200], [0.106, 0.200, 201, 300] ], co: [ [0.0, 4.4, 0, 50], [4.5, 9.4, 51, 100], [9.5, 12.4, 101, 150], [12.5, 15.4, 151, 200], [15.5, 30.4, 201, 300], [30.5, 40.4, 301, 400], [40.5, 50.4, 401, 500] ], so2: [ [0, 35, 0, 50], [36, 75, 51, 100], [76, 185, 101, 150], [186, 304, 151, 200], [305, 604, 201, 300], [605, 804, 301, 400], [805,1004, 401, 500] ], no2: [ [0, 53, 0, 50], [54, 100, 51, 100], [101, 360, 101, 150], [361, 649, 151, 200], [650,1249, 201, 300], [1250,1649,301, 400], [1650,2049,401, 500] ] };

const categories = [ { max: 50, label: "Good", color: "#00e400", text: "#000" }, { max: 100, label: "Moderate", color: "#ffff00", text: "#000" }, { max: 150, label: "Unhealthy for Sensitive Groups", color: "#ff7e00", text: "#000" }, { max: 200, label: "Unhealthy", color: "#ff0000", text: "#fff" }, { max: 300, label: "Very Unhealthy", color: "#8f3f97", text: "#fff" }, { max: 500, label: "Hazardous", color: "#7e0023", text: "#fff" } ];

function getCategory(aqi) { for (let c of categories) { if (aqi = bp[0] && C 0) { resultDiv.innerHTML = "" + errors.join("") + "

"; return; } if (results.length === 0) { resultDiv.innerHTML = "Please enter at least one pollutant concentration.

"; return; }

// Overall AQI = maximum individual AQI results.sort((a, b) => b.aqi - a.aqi); const overallAQI = results[0].aqi; const cat = getCategory(overallAQI);

let rows = results.map(r => { const c2 = getCategory(r.aqi); return "" + r.label + "" + r.conc + " " + r.unit + "" + "" + r.aqi + "" + "" + c2.label + ""; }).join("");

resultDiv.innerHTML = "" + "" + overallAQI + "" + "Overall AQI – " + cat.label + "" + "Dominant pollutant: " + results[0].label + "" + "" + "" + "PollutantConcentrationAQICategory" + "" + rows + ""; }

#### Formula

The US EPA uses linear interpolation between breakpoints to convert a pollutant concentration into a sub-index AQI value:

AQIp = [(IHi − ILo) / (CHi − CLo)] × (Cp − CLo) + ILo

The overall AQI is the maximum sub-index across all pollutants entered.

Concentration truncation rules (per EPA): PM2.5 → 1 decimal; PM10, SO₂, NO₂ → integer; O₃ → 3 decimals; CO → 1 decimal.

#### Assumptions & References

More Calculators

References