{"id":1373,"date":"2026-05-06T10:57:59","date_gmt":"2026-05-06T10:57:59","guid":{"rendered":"https:\/\/aiper.com\/blogs\/?page_id=1373"},"modified":"2026-10-21T09:17:55","modified_gmt":"2026-10-21T09:17:55","slug":"pool-salt-calculator","status":"publish","type":"page","link":"https:\/\/aiper.com\/blogs\/pool-salt-calculator\/","title":{"rendered":"Pool Salt Calculator"},"content":{"rendered":"\n<style>#pool-salt-calc-wrapper *, #pool-salt-calc-wrapper *::before, #pool-salt-calc-wrapper *::after { box-sizing: border-box; }\n#pool-salt-calc-wrapper {\n    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, sans-serif;\n    max-width: 680px; margin: 20px auto; padding: 0; line-height: 1.5;\n    --psc-teal: #1ecad3; --psc-teal-dark: #17a8b0; --psc-teal-light: #e8fafa;\n    --psc-bg: #ffffff; --psc-border: #e2e8f0; --psc-text: #2d3748; --psc-text-light: #5a6c7d;\n    --psc-shadow: 0 4px 24px rgba(0, 0, 0, 0.07); --psc-radius: 16px; --psc-radius-sm: 10px; --psc-radius-xs: 6px;\n}\n#pool-salt-calc-wrapper .psc-intro { max-width: 680px; margin: 0 auto 16px; padding: 0 24px; text-align: center; color: var(--psc-text-light); font-size: 15px; line-height: 1.5; }\n#pool-salt-calc-wrapper .psc-card { background: var(--psc-bg); border-radius: var(--psc-radius); box-shadow: var(--psc-shadow); padding: 28px 24px; margin-bottom: 20px; border: 1px solid var(--psc-border); }\n#pool-salt-calc-wrapper .psc-subtitle { font-size: 0.9rem; color: var(--psc-text-light); margin: 0 0 20px 0; }\n#pool-salt-calc-wrapper .psc-label { display: block; font-weight: 600; font-size: 0.9rem; color: var(--psc-text); margin-bottom: 5px; }\n#pool-salt-calc-wrapper .psc-input-row { display: flex; gap: 10px; align-items: stretch; margin-bottom: 18px; }\n#pool-salt-calc-wrapper .psc-input-field { flex: 1; padding: 12px 14px; border: 2px solid var(--psc-border); border-radius: var(--psc-radius-xs); font-size: 1rem; background: #f9fafb; outline: none; width: 100%; }\n#pool-salt-calc-wrapper .psc-input-field:focus { border-color: var(--psc-teal); background: #fff; }\n#pool-salt-calc-wrapper .psc-unit-toggle { display: flex; background: #f1f5f9; border-radius: var(--psc-radius-xs); overflow: hidden; border: 2px solid var(--psc-border); flex-wrap: wrap; }\n#pool-salt-calc-wrapper .psc-unit-btn { padding: 8px 14px; font-size: 0.85rem; font-weight: 600; cursor: pointer; border: none; background: transparent; color: var(--psc-text-light); }\n#pool-salt-calc-wrapper .psc-unit-btn:focus, #pool-salt-calc-wrapper .psc-unit-btn:active { outline: 2px solid var(--psc-teal); outline-offset: -2px; }\n#pool-salt-calc-wrapper .psc-unit-btn.psc-active { background: var(--psc-teal); color: #fff; }\n#pool-salt-calc-wrapper .psc-brand-row { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 18px; }\n#pool-salt-calc-wrapper .psc-brand-btn { padding: 6px 13px; font-size: 0.78rem; font-weight: 600; border-radius: 20px; border: 1.5px solid var(--psc-border); background: #fff; color: var(--psc-text-light); cursor: pointer; }\n#pool-salt-calc-wrapper .psc-brand-btn:focus, #pool-salt-calc-wrapper .psc-brand-btn:active { outline: 2px solid var(--psc-teal); outline-offset: 1px; }\n#pool-salt-calc-wrapper .psc-brand-btn.psc-active { border-color: var(--psc-teal); background: var(--psc-teal-light); color: var(--psc-teal-dark); }\n#pool-salt-calc-wrapper .psc-bagsize-row { display: flex; align-items: center; gap: 10px; margin-top: 16px; font-size: 0.85rem; color: var(--psc-text-light); flex-wrap: wrap; }\n#pool-salt-calc-wrapper .psc-result-area { display: none; margin-top: 25px; }\n#pool-salt-calc-wrapper .psc-result-area.psc-visible { display: block; animation: pscFade 0.4s ease; }\n@keyframes pscFade { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }\n#pool-salt-calc-wrapper .psc-result-card { background: linear-gradient(135deg, #f0fdfa 0%, #e6faf9 100%); border: 2px solid var(--psc-teal); border-radius: var(--psc-radius-sm); padding: 24px; text-align: center; }\n#pool-salt-calc-wrapper .psc-result-label { font-size: 0.85rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: var(--psc-teal-dark); margin: 0 0 8px; }\n#pool-salt-calc-wrapper .psc-result-amount { font-size: 2.8rem; font-weight: 800; color: var(--psc-teal-dark); }\n#pool-salt-calc-wrapper .psc-result-amount .psc-unit-label { font-size: 1.2rem; }\n#pool-salt-calc-wrapper .psc-desc { margin: 5px 0 0; color: var(--psc-text-light); font-size: 0.92rem; }\n#pool-salt-calc-wrapper .psc-warn { display: none; margin-top: 12px; padding: 10px 14px; background: #fff7ed; border: 1px solid #fed7aa; border-radius: var(--psc-radius-xs); color: #9a3412; font-size: 0.82rem; text-align: left; }\n#pool-salt-calc-wrapper .psc-warn.psc-visible { display: block; }\n#pool-salt-calc-wrapper .psc-toggle-row { display: flex; justify-content: center; align-items: center; gap: 10px; margin-top: 20px; font-size: 0.85rem; color: var(--psc-text-light); }\n#pool-salt-calc-wrapper .psc-bag-info { display: inline-flex; align-items: center; gap: 8px; font-weight: 600; background: #fff; border-radius: 30px; padding: 10px 20px; margin-top: 15px; border: 1px solid var(--psc-border); }\n#pool-salt-calc-wrapper .psc-bag-count { color: var(--psc-teal-dark); font-size: 1.2rem; }\n#pool-salt-calc-wrapper .psc-bag-weight-label { margin-left: 5px; }\n#pool-salt-calc-wrapper .psc-algebra { margin: 14px 0 0; font-size: 0.78rem; color: #8899a6; }\n#pool-salt-calc-wrapper .psc-next { margin: 14px 0 0; font-size: 0.85rem; color: var(--psc-text-light); text-align: center; }\n#pool-salt-calc-wrapper .psc-next a { color: var(--psc-teal-dark); font-weight: 600; text-decoration: none; }\n#pool-salt-calc-wrapper .psc-next a:hover { text-decoration: underline; }\n#pool-salt-calc-wrapper .psc-info-section { display: none; margin-top: 20px; }\n#pool-salt-calc-wrapper .psc-info-section.psc-visible { display: block; }\n#pool-salt-calc-wrapper .psc-info-card { background: #fff; border: 1px solid var(--psc-border); border-radius: var(--psc-radius-sm); padding: 20px; font-size: 0.9rem; }\n#pool-salt-calc-wrapper .psc-info-title { font-weight: 700; font-size: 1rem; margin-bottom: 10px; }\n#pool-salt-calc-wrapper ol.psc-howto-list { margin: 0; padding: 0 0 0 20px; }\n#pool-salt-calc-wrapper ol.psc-howto-list li { margin-bottom: 6px; }\n#pool-salt-calc-wrapper .psc-error-msg { color: #dc2626; font-size: 0.85rem; font-weight: 600; text-align: center; margin-top: 10px; display: none; }\n#pool-salt-calc-wrapper .psc-error-msg.psc-visible { display: block; }\n@media (max-width: 500px) { #pool-salt-calc-wrapper .psc-input-row { flex-direction: column; } }\n\n#pool-salt-calc-wrapper .psc-calculate-btn { display: block; width: 100%; padding: 14px 30px; background: linear-gradient(135deg, #1ecad3, #9486f7); color: #fff; border: none; border-radius: 999px; font-size: 16px; font-weight: 600; letter-spacing: .5px; cursor: pointer; transition: all .2s; margin-top: 10px; }\n#pool-salt-calc-wrapper .psc-calculate-btn:hover { background: linear-gradient(135deg, #169fa6, #7b6be0); color: #fff; transform: translateY(-1px); box-shadow: 0 6px 16px rgba(148,134,247,.35); }\n#pool-salt-calc-wrapper .psc-calculate-btn:focus, #pool-salt-calc-wrapper .psc-calculate-btn:active { color: #fff; outline: none; box-shadow: 0 0 0 3px rgba(148,134,247,.45); }\n#pool-salt-calc-wrapper .psc-btn-row { display: flex; gap: 12px; max-width: 420px; margin: 26px auto 0; flex-wrap: wrap; }\n#pool-salt-calc-wrapper .psc-btn-row .psc-calculate-btn { flex: 1; min-width: 160px; width: auto; margin: 0; }\n#pool-salt-calc-wrapper .psc-reset-btn { display: block; flex: 1; min-width: 120px; padding: 14px 20px; background: #fff; color: #5a6c7d; border: 2px solid #d1e8ea; border-radius: 999px; font-size: 16px; font-weight: 600; letter-spacing: .5px; cursor: pointer; transition: all .2s; }\n#pool-salt-calc-wrapper .psc-reset-btn:hover { background: #f0f7f8; border-color: #1ecad3; color: #0f8c94; }\n#pool-salt-calc-wrapper .psc-reset-btn:focus, #pool-salt-calc-wrapper .psc-reset-btn:active { background: #fff; outline: none; border-color: #9486f7; color: #0f8c94; }\n@media (max-width: 600px) { #pool-salt-calc-wrapper .psc-btn-row { flex-direction: column; max-width: 280px; } #pool-salt-calc-wrapper .psc-reset-btn { padding: 12px 20px; font-size: 14px; } }\n<\/style>\n<!-- Pool Salt Calculator - WordPress Custom HTML Block -->\n<div id=\"pool-salt-calc-wrapper\">\n    <p class=\"psc-intro\">Find out exactly how much pool salt to add for your saltwater chlorine generator &mdash; or, if your reading is already too high, how much water to drain and refill instead.<\/p>\n    <div class=\"psc-card\">\n        <p class=\"psc-subtitle\">Enter your pool volume and current salt reading below to get an exact amount in pounds or kilograms.<\/p>\n\n        <label class=\"psc-label\">Pool Volume<\/label>\n        <div class=\"psc-input-row\">\n            <input type=\"number\" id=\"psc-pool-volume\" class=\"psc-input-field\" placeholder=\"e.g., 15000\">\n            <div class=\"psc-unit-toggle\" id=\"psc-volume-unit-toggle\">\n                <button type=\"button\" class=\"psc-unit-btn psc-active\" data-unit=\"gallons\">Gallons<\/button>\n                <button type=\"button\" class=\"psc-unit-btn\" data-unit=\"liters\">Liters<\/button>\n            <\/div>\n        <\/div>\n\n        <label class=\"psc-label\">Current Salt Level (ppm)<\/label>\n        <div class=\"psc-input-row\">\n            <input type=\"number\" id=\"psc-current-salt\" class=\"psc-input-field\" placeholder=\"e.g., 1800\" value=\"0\">\n        <\/div>\n\n        <label class=\"psc-label\">Target Salt Level (ppm)<\/label>\n        <div class=\"psc-input-row\">\n            <input type=\"number\" id=\"psc-target-salt\" class=\"psc-input-field\" placeholder=\"e.g., 3200\" value=\"3200\">\n        <\/div>\n        <div class=\"psc-brand-row\" id=\"psc-brand-row\">\n            <button type=\"button\" class=\"psc-brand-btn\" data-target=\"3200\">Hayward AquaRite<\/button>\n            <button type=\"button\" class=\"psc-brand-btn\" data-target=\"3400\">Pentair IntelliChlor<\/button>\n            <button type=\"button\" class=\"psc-brand-btn\" data-target=\"3200\">Jandy AquaPure<\/button>\n            <button type=\"button\" class=\"psc-brand-btn\" data-target=\"3000\">Intex<\/button>\n        <\/div>\n\n        <div class=\"psc-btn-row\">\n\n            <button type=\"button\" id=\"psc-calculate-btn\" class=\"psc-calculate-btn\">Calculate<\/button>\n\n            <button type=\"button\" id=\"psc-reset-btn\" class=\"psc-reset-btn\">Reset<\/button>\n\n        <\/div>\n        <p id=\"psc-error-msg\" class=\"psc-error-msg\"><\/p>\n\n        <div id=\"psc-result-area\" class=\"psc-result-area\">\n            <div class=\"psc-result-card\">\n                <p class=\"psc-result-label\" id=\"psc-result-label\">Salt to Add<\/p>\n                <div class=\"psc-result-amount\">\n                    <span id=\"psc-salt-amount\">0<\/span>\n                    <span id=\"psc-salt-unit-display\" class=\"psc-unit-label\">lbs<\/span>\n                <\/div>\n                <p id=\"psc-desc\" class=\"psc-desc\">of pool salt needed<\/p>\n                <div id=\"psc-warn\" class=\"psc-warn\"><\/div>\n                <div class=\"psc-bag-info\" id=\"psc-bag-info\">\n                    Approximately <span id=\"psc-bag-count\" class=\"psc-bag-count\">0<\/span> bags\n                    <small id=\"psc-bag-weight-label\" class=\"psc-bag-weight-label\">(40 lbs per bag)<\/small>\n                <\/div>\n                <div class=\"psc-bagsize-row\" id=\"psc-bagsize-row\">\n                    <span>Bag size:<\/span>\n                    <div class=\"psc-unit-toggle\" id=\"psc-bagsize-toggle\"><\/div>\n                <\/div>\n            <\/div>\n\n            <div class=\"psc-toggle-row\" id=\"psc-toggle-row\">\n                <span>Show results in:<\/span>\n                <div class=\"psc-unit-toggle\" id=\"psc-result-unit-toggle\">\n                    <button type=\"button\" class=\"psc-unit-btn psc-active\" data-unit=\"lbs\">Pounds (lbs)<\/button>\n                    <button type=\"button\" class=\"psc-unit-btn\" data-unit=\"kg\">Kilograms (kg)<\/button>\n                <\/div>\n            <\/div>\n            <p class=\"psc-algebra\" id=\"psc-algebra\"><\/p>\n            <p class=\"psc-next\">Not sure of your pool volume? Use our <a href=\"https:\/\/aiper.com\/blogs\/pool-volume-calculator\/\">pool volume calculator<\/a>.<\/p>\n        <\/div>\n    <\/div>\n\n    <div id=\"psc-info-section\" class=\"psc-info-section\">\n        <div class=\"psc-info-card\">\n            <div class=\"psc-info-title\">How to Add Salt to Your Pool<\/div>\n            <ol class=\"psc-howto-list\">\n                <li>Turn off the salt cell, then pour the calculated amount of salt evenly around the pool&#8217;s perimeter (never straight into the skimmer).<\/li>\n                <li>Brush any undissolved salt off the floor and walls so it doesn&#8217;t sit in one spot and cause staining.<\/li>\n                <li>Run the pump continuously for at least 24 hours to fully dissolve and circulate the salt.<\/li>\n                <li>Retest the salt level once it has dissolved, then turn the salt cell back on.<\/li>\n            <\/ol>\n        <\/div>\n    <\/div>\n<\/div>\n\n<script>(function() {\n    var get = function(id) { return document.getElementById(id); };\n    var BRANDS = [\n        { key: 'hayward', label: 'Hayward AquaRite', target: 3200 },\n        { key: 'pentair', label: 'Pentair IntelliChlor', target: 3400 },\n        { key: 'jandy', label: 'Jandy AquaPure', target: 3200 },\n        { key: 'intex', label: 'Intex', target: 3000 }\n    ];\n    var BAG_OPTS = { lbs: [40, 50, 25], kg: [20, 25] };\n    var state = { vUnit: 'gallons', rUnit: 'lbs', bagSize: 40, res: null };\n\n    var fmt = function(n) {\n        if (n >= 100) return Math.round(n).toLocaleString();\n        return (Math.round(n * 10) \/ 10).toLocaleString();\n    };\n\n    var clearBrandActive = function() {\n        Array.from(get('psc-brand-row').children).forEach(function(b) { b.classList.remove('psc-active'); });\n    };\n\n    get('psc-brand-row').addEventListener('click', function(e) {\n        if (!e.target.classList.contains('psc-brand-btn')) return;\n        clearBrandActive();\n        e.target.classList.add('psc-active');\n        get('psc-target-salt').value = e.target.dataset.target;\n    });\n    get('psc-target-salt').addEventListener('input', clearBrandActive);\n\n    var buildBagToggle = function() {\n        var wrap = get('psc-bagsize-toggle');\n        wrap.innerHTML = '';\n        BAG_OPTS[state.rUnit].forEach(function(sz) {\n            var b = document.createElement('button');\n            b.type = 'button';\n            b.className = 'psc-unit-btn' + (sz === state.bagSize ? ' psc-active' : '');\n            b.textContent = sz + ' ' + state.rUnit;\n            b.dataset.size = sz;\n            b.addEventListener('click', function() {\n                state.bagSize = sz;\n                buildBagToggle();\n                render();\n            });\n            wrap.appendChild(b);\n        });\n    };\n\n    var showError = function(msg) {\n        var err = get('psc-error-msg');\n        err.textContent = msg;\n        err.classList.add('psc-visible');\n        get('psc-result-area').classList.remove('psc-visible');\n        get('psc-info-section').classList.remove('psc-visible');\n    };\n\n    var calc = function() {\n        var err = get('psc-error-msg');\n        err.classList.remove('psc-visible');\n        err.textContent = '';\n\n        var v = parseFloat(get('psc-pool-volume').value);\n        var cRaw = get('psc-current-salt').value;\n        var c = cRaw === '' ? NaN : parseFloat(cRaw);\n        var t = parseFloat(get('psc-target-salt').value);\n\n        if (!v || v <= 0 || isNaN(v)) { showError('Enter your pool volume.'); return; }\n        if (isNaN(c) || c < 0) { showError('Enter your current salt level (use 0 for a new or freshly filled pool).'); return; }\n        if (!t || t <= 0 || isNaN(t)) { showError('Enter your target salt level.'); return; }\n\n        var warn = get('psc-warn');\n        if (t > 4500) {\n            warn.textContent = \"Target above 4,500 ppm exceeds most salt cell manufacturers' maximum \u2014 check your system manual before adding this much salt.\";\n            warn.classList.add('psc-visible');\n        } else {\n            warn.textContent = '';\n            warn.classList.remove('psc-visible');\n        }\n\n        if (Math.abs(c - t) < 1) {\n            state.res = { mode: 'none' };\n        } else if (c > t) {\n            var drainAmt = v * (c - t) \/ c;\n            var pct = (c - t) \/ c * 100;\n            state.res = { mode: 'drain', drain: drainAmt, pct: pct, v: v, vUnit: state.vUnit };\n        } else {\n            var diff = t - c;\n            var lbs = (state.vUnit === 'gallons') ? (diff * v * 8.34 \/ 1000000) : (diff * v \/ 1000000 * 2.20462);\n            state.res = { mode: 'add', lbs: lbs, kg: lbs \/ 2.20462, diff: diff, v: v, c: c, t: t, vUnit: state.vUnit };\n        }\n\n        get('psc-result-area').classList.add('psc-visible');\n        get('psc-info-section').classList.add('psc-visible');\n        render();\n        get('psc-result-area').scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n    };\n\n    var render = function() {\n        if (!state.res) return;\n        var label = get('psc-result-label');\n        var amount = get('psc-salt-amount');\n        var unitDisplay = get('psc-salt-unit-display');\n        var desc = get('psc-desc');\n        var bagInfo = get('psc-bag-info');\n        var bagsizeRow = get('psc-bagsize-row');\n        var toggleRow = get('psc-toggle-row');\n        var algebra = get('psc-algebra');\n\n        if (state.res.mode === 'none') {\n            label.textContent = 'Already at Target';\n            amount.textContent = '0';\n            unitDisplay.textContent = state.rUnit;\n            desc.textContent = 'Your salt level already matches your target \u2014 no salt needed.';\n            bagInfo.style.display = 'none';\n            bagsizeRow.style.display = 'none';\n            toggleRow.style.display = 'none';\n            algebra.textContent = '';\n            return;\n        }\n\n        if (state.res.mode === 'drain') {\n            var unitLabel = state.res.vUnit === 'gallons' ? 'US gal' : 'liters';\n            label.textContent = 'Water to Drain & Refill';\n            amount.textContent = fmt(state.res.drain);\n            unitDisplay.textContent = unitLabel;\n            desc.textContent = 'of pool water \u2014 drain and replace with fresh water (about ' + Math.round(state.res.pct) + '% of your pool) to bring salt down to target.';\n            bagInfo.style.display = 'none';\n            bagsizeRow.style.display = 'none';\n            toggleRow.style.display = 'none';\n            algebra.textContent = 'Your numbers: ' + fmt(state.res.v) + ' ' + unitLabel + ' \u00d7 ' + Math.round(state.res.pct) + '% \u2248 ' + fmt(state.res.drain) + ' ' + unitLabel + ' to drain';\n            return;\n        }\n\n        bagInfo.style.display = '';\n        bagsizeRow.style.display = '';\n        toggleRow.style.display = '';\n        var isLbs = state.rUnit === 'lbs';\n        var val = isLbs ? state.res.lbs : state.res.kg;\n        label.textContent = 'Salt to Add';\n        amount.textContent = fmt(val);\n        unitDisplay.textContent = state.rUnit;\n        desc.textContent = 'of pool salt needed to reach your target';\n        get('psc-bag-count').textContent = Math.ceil(val \/ state.bagSize);\n        get('psc-bag-weight-label').textContent = '(' + state.bagSize + ' ' + state.rUnit + ' per bag)';\n\n        var volUnitLabel = state.res.vUnit === 'gallons' ? 'gal' : 'L';\n        if (state.res.vUnit === 'gallons') {\n            algebra.textContent = 'Your numbers: (' + fmt(state.res.t) + ' \u2212 ' + fmt(state.res.c) + ') ppm \u00d7 ' + fmt(state.res.v) + ' ' + volUnitLabel + ' \u00d7 8.34 \u00f7 1,000,000 \u2248 ' + fmt(state.res.lbs) + ' lbs';\n        } else {\n            algebra.textContent = 'Your numbers: (' + fmt(state.res.t) + ' \u2212 ' + fmt(state.res.c) + ') ppm \u00d7 ' + fmt(state.res.v) + ' ' + volUnitLabel + ' \u00f7 1,000,000 \u00d7 2.20462 \u2248 ' + fmt(state.res.lbs) + ' lbs';\n        }\n    };\n\n    get('psc-volume-unit-toggle').onclick = function(e) {\n        if (!e.target.classList.contains('psc-unit-btn')) return;\n        state.vUnit = e.target.dataset.unit;\n        Array.from(get('psc-volume-unit-toggle').children).forEach(function(b) { b.classList.toggle('psc-active', b === e.target); });\n    };\n\n    get('psc-result-unit-toggle').onclick = function(e) {\n        if (!e.target.classList.contains('psc-unit-btn')) return;\n        state.rUnit = e.target.dataset.unit;\n        state.bagSize = BAG_OPTS[state.rUnit][0];\n        Array.from(get('psc-result-unit-toggle').children).forEach(function(b) { b.classList.toggle('psc-active', b === e.target); });\n        buildBagToggle();\n        render();\n    };\n\n\n    var INIT = {\n        vUnit: state.vUnit, rUnit: state.rUnit, bagSize: state.bagSize,\n        current: get('psc-current-salt').value, target: get('psc-target-salt').value\n    };\n    get('psc-reset-btn').onclick = function() {\n        get('psc-pool-volume').value = '';\n        get('psc-current-salt').value = INIT.current;\n        get('psc-target-salt').value = INIT.target;\n        clearBrandActive();\n        state.vUnit = INIT.vUnit; state.rUnit = INIT.rUnit; state.bagSize = INIT.bagSize; state.res = null;\n        Array.from(get('psc-volume-unit-toggle').children).forEach(function(b) { b.classList.toggle('psc-active', b.dataset.unit === INIT.vUnit); });\n        Array.from(get('psc-result-unit-toggle').children).forEach(function(b) { b.classList.toggle('psc-active', b.dataset.unit === INIT.rUnit); });\n        var err = get('psc-error-msg');\n        err.classList.remove('psc-visible');\n        err.textContent = '';\n        get('psc-result-area').classList.remove('psc-visible');\n        get('psc-info-section').classList.remove('psc-visible');\n        buildBagToggle();\n        get('psc-pool-volume').focus();\n    };\n    get('psc-calculate-btn').onclick = calc;\n    buildBagToggle();\n})();\n<\/script>\n\n\n\n<style>\n  #pool-salt-reference-table {\n    max-width: 860px;\n    margin: 2.5rem auto;\n    font-family: 'Inter', system-ui, sans-serif;\n    color: #2c3e50;\n    scroll-margin-top: 80px;\n  }\n  #pool-salt-reference-table h2 {\n    font-size: 1.5rem;\n    font-weight: 700;\n    color: #17a8b0;\n    margin: 0 0 8px;\n  }\n  #pool-salt-reference-table .psalt-subtitle {\n    font-size: 0.9rem;\n    color: #5a6c7d;\n    margin: 0 0 20px;\n    line-height: 1.5;\n  }\n  .psalt-table-wrap {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch;\n    border: 1px solid #e0e5eb;\n    border-radius: 14px;\n    box-shadow: 0 4px 16px rgba(0,0,0,0.04);\n  }\n  .psalt-table {\n    width: 100%;\n    border-collapse: collapse;\n    font-size: 0.88rem;\n    min-width: 620px;\n  }\n  .psalt-table thead th {\n    background: linear-gradient(135deg, #1ecad3, #9486f7);\n    color: #fff;\n    font-weight: 600;\n    font-size: 0.78rem;\n    text-transform: uppercase;\n    letter-spacing: 0.05em;\n    padding: 12px 10px;\n    text-align: center;\n    white-space: nowrap;\n  }\n  .psalt-table thead th:first-child { border-radius: 13px 0 0 0; text-align: left; }\n  .psalt-table thead th:last-child { border-radius: 0 13px 0 0; }\n  .psalt-table tbody td {\n    padding: 10px 10px;\n    border-bottom: 1px solid #eef1f5;\n    vertical-align: middle;\n    text-align: center;\n  }\n  .psalt-table tbody tr:nth-child(even) { background: #fafcfd; }\n  .psalt-table tbody tr:hover { background: #e8fafb; }\n  .psalt-table .psalt-shape {\n    font-weight: 600;\n    color: #2c3e50;\n    white-space: nowrap;\n    text-align: left;\n  }\n  .psalt-table .psalt-vol {\n    font-weight: 600;\n    color: #2c3e50;\n    white-space: nowrap;\n    text-align: left;\n  }\n  .psalt-table .psalt-lbs {\n    font-weight: 700;\n    color: #0f8c94;\n    white-space: nowrap;\n  }\n  .psalt-table .psalt-bags {\n    font-weight: 400;\n    color: #8899a6;\n    font-size: 0.78rem;\n  }\n  .psalt-table tfoot td {\n    padding: 12px;\n    font-size: 0.78rem;\n    color: #8899a6;\n    border-top: 2px solid #e0e5eb;\n    text-align: center;\n  }\n  .psalt-mt-28 { margin-top: 28px; }\n  .psalt-note-sm { margin-top: 16px; font-size: 0.8rem; }\n  @media (max-width: 500px) {\n    #pool-salt-reference-table { padding: 0 6px; }\n    .psalt-table { font-size: 0.78rem; min-width: 560px; }\n    .psalt-table thead th { padding: 8px 6px; font-size: 0.65rem; }\n    .psalt-table tbody td { padding: 7px 6px; }\n  }\n<\/style>\n<div id=\"pool-salt-reference-table\">\n  <h2>Pool Salt Chart &mdash; Pounds of Salt by Pool Size and Current Level<\/h2>\n  <p class=\"psalt-subtitle\">All amounts are in <strong>pounds (lbs)<\/strong> of salt needed to reach <strong>3,200 ppm<\/strong> &mdash; the target most salt chlorine generators recommend. Use the calculator above for kilograms, liters, or a different target level.<\/p>\n  <div class=\"psalt-table-wrap\">\n    <table class=\"psalt-table\">\n      <thead>\n        <tr>\n          <th>Pool Volume<\/th>\n          <th>From 0 ppm<\/th>\n          <th>From 1,000 ppm<\/th>\n          <th>From 2,000 ppm<\/th>\n          <th>From 2,500 ppm<\/th>\n          <th>From 3,000 ppm<\/th>\n        <\/tr>\n      <\/thead>\n      <tbody>\n        <tr><td class=\"psalt-vol\">5,000 gal<\/td><td class=\"psalt-lbs\">130<\/td><td class=\"psalt-lbs\">90<\/td><td class=\"psalt-lbs\">50<\/td><td class=\"psalt-lbs\">30<\/td><td class=\"psalt-lbs\">10<\/td><\/tr>\n<tr><td class=\"psalt-vol\">7,500 gal<\/td><td class=\"psalt-lbs\">200<\/td><td class=\"psalt-lbs\">140<\/td><td class=\"psalt-lbs\">80<\/td><td class=\"psalt-lbs\">45<\/td><td class=\"psalt-lbs\">15<\/td><\/tr>\n<tr><td class=\"psalt-vol\">10,000 gal<\/td><td class=\"psalt-lbs\">275<\/td><td class=\"psalt-lbs\">180<\/td><td class=\"psalt-lbs\">100<\/td><td class=\"psalt-lbs\">60<\/td><td class=\"psalt-lbs\">15<\/td><\/tr>\n<tr><td class=\"psalt-vol\">12,000 gal<\/td><td class=\"psalt-lbs\">325<\/td><td class=\"psalt-lbs\">225<\/td><td class=\"psalt-lbs\">120<\/td><td class=\"psalt-lbs\">70<\/td><td class=\"psalt-lbs\">20<\/td><\/tr>\n<tr><td class=\"psalt-vol\">15,000 gal<\/td><td class=\"psalt-lbs\">400<\/td><td class=\"psalt-lbs\">275<\/td><td class=\"psalt-lbs\">150<\/td><td class=\"psalt-lbs\">90<\/td><td class=\"psalt-lbs\">25<\/td><\/tr>\n<tr><td class=\"psalt-vol\">18,000 gal<\/td><td class=\"psalt-lbs\">475<\/td><td class=\"psalt-lbs\">325<\/td><td class=\"psalt-lbs\">180<\/td><td class=\"psalt-lbs\">110<\/td><td class=\"psalt-lbs\">30<\/td><\/tr>\n<tr><td class=\"psalt-vol\">20,000 gal<\/td><td class=\"psalt-lbs\">525<\/td><td class=\"psalt-lbs\">375<\/td><td class=\"psalt-lbs\">200<\/td><td class=\"psalt-lbs\">120<\/td><td class=\"psalt-lbs\">35<\/td><\/tr>\n<tr><td class=\"psalt-vol\">25,000 gal<\/td><td class=\"psalt-lbs\">675<\/td><td class=\"psalt-lbs\">450<\/td><td class=\"psalt-lbs\">250<\/td><td class=\"psalt-lbs\">150<\/td><td class=\"psalt-lbs\">40<\/td><\/tr>\n<tr><td class=\"psalt-vol\">30,000 gal<\/td><td class=\"psalt-lbs\">800<\/td><td class=\"psalt-lbs\">550<\/td><td class=\"psalt-lbs\">300<\/td><td class=\"psalt-lbs\">180<\/td><td class=\"psalt-lbs\">50<\/td><\/tr>\n      <\/tbody>\n    <\/table>\n  <\/div>\n  <div class=\"psalt-table-wrap psalt-mt-28\">\n    <table class=\"psalt-table\">\n      <thead>\n        <tr>\n          <th>Pool Shape<\/th>\n          <th>Typical Volume<\/th>\n          <th>From 0 ppm<\/th>\n          <th>From 2,000 ppm<\/th>\n        <\/tr>\n      <\/thead>\n      <tbody>\n        <tr><td class=\"psalt-shape\">12\u2032 round<\/td><td class=\"psalt-vol\">3,400 gal<\/td><td class=\"psalt-lbs\">90 <span class=\"psalt-bags\">(3 bags)<\/span><\/td><td class=\"psalt-lbs\">35 <span class=\"psalt-bags\">(1 bag)<\/span><\/td><\/tr>\n<tr><td class=\"psalt-shape\">15\u2032 round<\/td><td class=\"psalt-vol\">5,300 gal<\/td><td class=\"psalt-lbs\">140 <span class=\"psalt-bags\">(4 bags)<\/span><\/td><td class=\"psalt-lbs\">50 <span class=\"psalt-bags\">(2 bags)<\/span><\/td><\/tr>\n<tr><td class=\"psalt-shape\">18\u2032 round<\/td><td class=\"psalt-vol\">7,600 gal<\/td><td class=\"psalt-lbs\">200 <span class=\"psalt-bags\">(5 bags)<\/span><\/td><td class=\"psalt-lbs\">80 <span class=\"psalt-bags\">(2 bags)<\/span><\/td><\/tr>\n<tr><td class=\"psalt-shape\">21\u2032 round<\/td><td class=\"psalt-vol\">10,350 gal<\/td><td class=\"psalt-lbs\">275 <span class=\"psalt-bags\">(7 bags)<\/span><\/td><td class=\"psalt-lbs\">100 <span class=\"psalt-bags\">(3 bags)<\/span><\/td><\/tr>\n<tr><td class=\"psalt-shape\">24\u2032 round<\/td><td class=\"psalt-vol\">13,550 gal<\/td><td class=\"psalt-lbs\">350 <span class=\"psalt-bags\">(9 bags)<\/span><\/td><td class=\"psalt-lbs\">140 <span class=\"psalt-bags\">(4 bags)<\/span><\/td><\/tr>\n<tr><td class=\"psalt-shape\">12 x 24\u2032 rectangular<\/td><td class=\"psalt-vol\">8,600 gal<\/td><td class=\"psalt-lbs\">225 <span class=\"psalt-bags\">(6 bags)<\/span><\/td><td class=\"psalt-lbs\">90 <span class=\"psalt-bags\">(3 bags)<\/span><\/td><\/tr>\n<tr><td class=\"psalt-shape\">16 x 32\u2032 rectangular<\/td><td class=\"psalt-vol\">17,250 gal<\/td><td class=\"psalt-lbs\">450 <span class=\"psalt-bags\">(12 bags)<\/span><\/td><td class=\"psalt-lbs\">170 <span class=\"psalt-bags\">(5 bags)<\/span><\/td><\/tr>\n<tr><td class=\"psalt-shape\">18 x 36\u2032 rectangular<\/td><td class=\"psalt-vol\">21,800 gal<\/td><td class=\"psalt-lbs\">575 <span class=\"psalt-bags\">(15 bags)<\/span><\/td><td class=\"psalt-lbs\">225 <span class=\"psalt-bags\">(6 bags)<\/span><\/td><\/tr>\n      <\/tbody>\n    <\/table>\n  <\/div>\n  <p class=\"psalt-subtitle psalt-note-sm\">Bag counts assume 40 lb bags. Typical volumes use an average 4&ndash;4.5 ft water depth &mdash; for your pool&#8217;s exact volume, use the pool volume calculator linked above.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Pool Salt Calculator FAQs<\/h2>\n\n\n<div class=\"schema-faq wp-block-yoast-faq-block\"><div class=\"schema-faq-section\" id=\"faq-salt-level\"><strong class=\"schema-faq-question\">What should the salt level be in my pool?<\/strong> <p class=\"schema-faq-answer\">Most salt chlorine generators run best between <strong>2,700\u20133,400 ppm<\/strong>, with 3,200 ppm as the target most manufacturers recommend. But the exact range depends on your system \u2014 Pentair IntelliChlor is rated up to 4,500 ppm, while Hayward AquaRite and Jandy AquaPure typically top out around 3,400\u20133,500 ppm. Always check your generator&#8217;s manual: running below the minimum weakens chlorine production, and running above the maximum can damage the salt cell.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-salt-calc-how\"><strong class=\"schema-faq-question\">How do I calculate how much salt my pool needs?<\/strong> <p class=\"schema-faq-answer\">Subtract your current salt reading from your target level, multiply by your pool volume in gallons, multiply by 8.34 (the weight of a gallon of water in lbs), then divide by 1,000,000: <strong>(target &minus; current) &times; gallons &times; 8.34 &divide; 1,000,000 = lbs of salt<\/strong>. For liters, multiply by 2.20462 instead of 8.34 and skip the gallon step. The calculator above does this automatically and shows you the exact numbers it used.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-salt-type\"><strong class=\"schema-faq-question\">What type of salt should I use?<\/strong> <p class=\"schema-faq-answer\">Use <strong>99%+ pure, non-iodized, granulated pool salt<\/strong> \u2014 sold as &#8220;pool salt&#8221; or &#8220;solar salt.&#8221; Iodized table salt and rock salt contain additives and impurities that can cloud the water, stain plaster, and coat the salt cell, reducing its chlorine output. Water softener salt is acceptable only if it&#8217;s labeled 99%+ pure with no anti-caking agents.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-salt-drop\"><strong class=\"schema-faq-question\">Why does my salt level keep dropping?<\/strong> <p class=\"schema-faq-answer\">Salt itself doesn&#8217;t evaporate \u2014 only water does, so topping off for evaporation shouldn&#8217;t change your reading much. Salt is actually lost through <strong>splash-out, backwashing your filter, heavy rain dilution, and leaks<\/strong> \u2014 any time water physically leaves the pool and is replaced with fresh (unsalted) water. If your level keeps falling faster than that explains, check your equipment pad and pool shell for a leak.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-salt-too-high\"><strong class=\"schema-faq-question\">Can I over-salt my pool, and how do I fix it?<\/strong> <p class=\"schema-faq-answer\">Yes \u2014 salt significantly above your generator&#8217;s maximum can corrode metal fittings and give the water a noticeably salty taste. If you enter a current salt reading that&#8217;s higher than your target in the calculator above, it switches automatically to a drain-and-refill result, telling you roughly what percentage of your pool water to replace with fresh water to bring the level back down.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-salt-swim-wait\"><strong class=\"schema-faq-question\">How long after adding salt can I swim?<\/strong> <p class=\"schema-faq-answer\">Wait until the salt has fully dissolved \u2014 typically <strong>24 hours with the pump running continuously<\/strong> \u2014 before swimming and before retesting your salt level. Swimming sooner won&#8217;t hurt you, but undissolved salt sitting on the floor can cause cloudy water and an inaccurate test reading.<\/p> <\/div> <\/div>\n\n\n<!-- aiper-tool-links -->\n<div class=\"aiper-tool-links\">\n  <div class=\"aiper-tl-section\">\n    <div class=\"aiper-tl-heading\">More Tools<\/div>\n    <div class=\"aiper-tl-tags\">\n      <a href=\"https:\/\/aiper.com\/blogs\/pool-fill-time-calculator\/\" class=\"aiper-tl-tag\">Pool Fill Time Calculator<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/pool-turnover-rate-calculator\/\" class=\"aiper-tl-tag\">Pool Turnover Rate Calculator<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/pool-saturation-index-calculator\/\" class=\"aiper-tl-tag\">Pool Saturation Index Calculator<\/a>\n    <\/div>\n  <\/div>\n  <div class=\"aiper-tl-section\">\n    <div class=\"aiper-tl-heading\">Related Articles<\/div>\n    <div class=\"aiper-tl-tags\">\n      <a href=\"https:\/\/aiper.com\/blogs\/salt-water-pool-vs-chlorine\/\" class=\"aiper-tl-tag\">Salt Water Pool vs Chlorine: The Real Comparison<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/how-to-lower-alkalinity-in-pool\/\" class=\"aiper-tl-tag\">How to Lower Alkalinity in a Pool (and When You Actually Need To)<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/pool-robot-gets-stuck-on-main-drain\/\" class=\"aiper-tl-tag\">Why Does Your Pool Robot Get Stuck on the Main Drain?<\/a>\n<a href=\"https:\/\/aiper.com\/blogs\/how-to-winterize-inground-pool\/\" class=\"aiper-tl-tag\">How to Winterize an Inground Pool: Step-by-Step<\/a>\n    <\/div>\n  <\/div>\n<\/div>\n\n<style>\n.aiper-tool-links{margin:2.5rem 0 1.5rem;padding:1.5rem 1.75rem;background:linear-gradient(135deg,rgba(148,134,247,.04),rgba(30,202,211,.04));border-radius:12px;border:1px solid rgba(148,134,247,.10)}\n.aiper-tl-section{margin-bottom:1.25rem}\n.aiper-tl-section:last-child{margin-bottom:0}\n.aiper-tl-heading{font-size:.75rem;font-weight:600;letter-spacing:.09em;text-transform:uppercase;color:#8899aa;margin:0 0 .65rem}\n.aiper-tl-tags{display:flex;flex-wrap:wrap;gap:.5rem}\n.aiper-tl-tag{display:inline-block;padding:.4rem .95rem;font-size:.82rem;font-weight:500;line-height:1.35;color:#9486f7;background:rgba(148,134,247,.055);border:1px solid rgba(30,202,211,.25);border-radius:22px;text-decoration:none;transition:all .18s}\n.aiper-tl-tag:hover{background:#1ecad3;color:#fff;border-color:#1ecad3;box-shadow:0 2px 10px rgba(30,202,211,.22)}\n<\/style>\n\n\n<p class=\"has-text-align-center aiper-last-updated has-small-font-size wp-block-paragraph\"><time datetime=\"2026-09-30\">Last updated: September 30, 2026<\/time><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Find out exactly how much pool salt to add for your saltwater chlorine generator &mdash; or, if your reading is already too high, how much water to drain and refill instead. Enter your pool volume and current salt reading below to get an exact amount in pounds or kilograms. Pool Volume Gallons Liters Current Salt&#8230;<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"class_list":["post-1373","page","type-page","status-publish","hentry"],"lang":"en","translations":{"en":1373,"es":1665,"de":1661,"fr":1663},"_links":{"self":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/1373","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/comments?post=1373"}],"version-history":[{"count":21,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/1373\/revisions"}],"predecessor-version":[{"id":11920,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/1373\/revisions\/11920"}],"wp:attachment":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/media?parent=1373"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}