{"id":1408,"date":"2026-05-07T06:07:38","date_gmt":"2026-05-07T06:07:38","guid":{"rendered":"https:\/\/aiper.com\/blogs\/?page_id=1408"},"modified":"2026-10-21T09:17:43","modified_gmt":"2026-10-21T09:17:43","slug":"pool-chlorine-calculator","status":"publish","type":"page","link":"https:\/\/aiper.com\/blogs\/pool-chlorine-calculator\/","title":{"rendered":"Pool Chlorine Calculator"},"content":{"rendered":"\n<style>#pool-chlorine-calc-wrapper *, #pool-chlorine-calc-wrapper *::before, #pool-chlorine-calc-wrapper *::after { box-sizing: border-box; }\n#pool-chlorine-calc-wrapper { font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen-Sans, Ubuntu, Cantarell, sans-serif; max-width: 680px; margin: 20px auto; padding: 0; line-height: 1.5; --pcc-teal: #1ecad3; --pcc-teal-dark: #17a8b0; --pcc-teal-light: #e8fafa; --pcc-border: #e2e8f0; --pcc-text: #2d3748; --pcc-text-light: #5a6c7d; }\n#pool-chlorine-calc-wrapper .pcc-intro { max-width: 680px; margin: 0 auto 16px; padding: 0 24px; text-align: center; color: var(--pcc-text-light); font-size: 15px; line-height: 1.5; }\n#pool-chlorine-calc-wrapper .pcc-card { background: #fff; border-radius: 16px; box-shadow: 0 4px 24px rgba(0,0,0,0.07); padding: 28px 24px; margin-bottom: 20px; border: 1px solid var(--pcc-border); }\n#pool-chlorine-calc-wrapper .pcc-subtitle { font-size: 0.9rem; color: var(--pcc-text-light); margin: 0 0 20px 0; }\n#pool-chlorine-calc-wrapper .pcc-label { display: block; font-weight: 600; font-size: 0.9rem; color: var(--pcc-text); margin-bottom: 5px; }\n#pool-chlorine-calc-wrapper .pcc-input-row { display: flex; gap: 10px; align-items: stretch; margin-bottom: 18px; }\n#pool-chlorine-calc-wrapper .pcc-input-field { flex: 1; padding: 12px 14px; border: 2px solid var(--pcc-border); border-radius: 6px; font-size: 1rem; color: #2c3e50; background: #f9fafb; outline: none; width: 100%; }\n#pool-chlorine-calc-wrapper .pcc-input-field:focus { border-color: #9486f7; background: #fff; color: #2c3e50; }\n#pool-chlorine-calc-wrapper .pcc-unit-toggle { display: flex; background: #f1f5f9; border-radius: 6px; overflow: hidden; border: 2px solid var(--pcc-border); flex-wrap: wrap; }\n#pool-chlorine-calc-wrapper .pcc-unit-btn { padding: 8px 14px; font-size: 0.85rem; font-weight: 600; cursor: pointer; border: none; background: transparent; color: var(--pcc-text-light); }\n#pool-chlorine-calc-wrapper .pcc-unit-btn:focus, #pool-chlorine-calc-wrapper .pcc-unit-btn:active { outline: 2px solid #9486f7; outline-offset: -2px; color: var(--pcc-text-light); }\n#pool-chlorine-calc-wrapper .pcc-unit-btn.pcc-active { background: linear-gradient(135deg, #1ecad3, #9486f7); color: #fff; }\n#pool-chlorine-calc-wrapper .pcc-preset-row { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 18px; }\n#pool-chlorine-calc-wrapper .pcc-preset-btn { padding: 6px 13px; font-size: 0.78rem; font-weight: 600; border-radius: 20px; border: 1.5px solid var(--pcc-border); background: #fff; color: var(--pcc-text-light); cursor: pointer; }\n#pool-chlorine-calc-wrapper .pcc-preset-btn:focus, #pool-chlorine-calc-wrapper .pcc-preset-btn:active { outline: 2px solid #9486f7; outline-offset: 1px; color: var(--pcc-text-light); }\n#pool-chlorine-calc-wrapper .pcc-preset-btn.pcc-active { border-color: #9486f7; background: #f5f3ff; color: #2c3e50; }\n#pool-chlorine-calc-wrapper .pcc-btn-row { display: flex; gap: 12px; max-width: 420px; margin: 26px auto 0; flex-wrap: wrap; }\n#pool-chlorine-calc-wrapper .pcc-calculate-btn { display: block; flex: 1; min-width: 160px; 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; }\n#pool-chlorine-calc-wrapper .pcc-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-chlorine-calc-wrapper .pcc-calculate-btn:focus, #pool-chlorine-calc-wrapper .pcc-calculate-btn:active { color: #fff; outline: none; box-shadow: 0 0 0 3px rgba(148,134,247,.45); }\n#pool-chlorine-calc-wrapper .pcc-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-chlorine-calc-wrapper .pcc-reset-btn:hover { background: #f0f7f8; border-color: #1ecad3; color: #0f8c94; }\n#pool-chlorine-calc-wrapper .pcc-reset-btn:focus, #pool-chlorine-calc-wrapper .pcc-reset-btn:active { background: #fff; outline: none; border-color: #9486f7; color: #0f8c94; }\n#pool-chlorine-calc-wrapper .pcc-error-msg { color: #dc2626; font-size: 0.85rem; font-weight: 600; text-align: center; margin-top: 10px; display: none; }\n#pool-chlorine-calc-wrapper .pcc-error-msg.pcc-visible { display: block; }\n#pool-chlorine-calc-wrapper .pcc-result-area { display: none; margin-top: 25px; }\n#pool-chlorine-calc-wrapper .pcc-result-area.pcc-visible { display: block; animation: pccFade 0.4s ease; }\n@keyframes pccFade { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }\n#pool-chlorine-calc-wrapper .pcc-result-grid { display: flex; gap: 14px; flex-wrap: wrap; }\n#pool-chlorine-calc-wrapper .pcc-result-card { flex: 1; min-width: 220px; background: linear-gradient(135deg, #f5f3ff 0%, #e8fafa 100%); border: 2px solid #9486f7; border-radius: 10px; padding: 22px 18px; text-align: center; }\n#pool-chlorine-calc-wrapper .pcc-result-label { font-size: 0.82rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.05em; color: #5b4ab8; margin: 0 0 8px; }\n#pool-chlorine-calc-wrapper .pcc-result-amount { font-size: 2.4rem; font-weight: 800; color: #17a8b0; line-height: 1.15; }\n#pool-chlorine-calc-wrapper .pcc-result-amount .pcc-unit-label { font-size: 1.1rem; }\n#pool-chlorine-calc-wrapper .pcc-result-sub { margin: 6px 0 0; color: var(--pcc-text-light); font-size: 0.88rem; }\n#pool-chlorine-calc-wrapper .pcc-acid-line { margin-top: 12px; padding: 8px 12px; background: #fff; border: 1px solid var(--pcc-border); border-radius: 6px; font-size: 0.82rem; color: var(--pcc-text); }\n#pool-chlorine-calc-wrapper .pcc-warn { display: none; margin-top: 12px; padding: 10px 14px; background: #fff7ed; border: 1px solid #fed7aa; border-radius: 6px; color: #9a3412; font-size: 0.82rem; text-align: left; }\n#pool-chlorine-calc-wrapper .pcc-warn.pcc-visible { display: block; }\n#pool-chlorine-calc-wrapper .pcc-toggle-row { display: flex; justify-content: center; align-items: center; gap: 10px; margin-top: 20px; font-size: 0.85rem; color: var(--pcc-text-light); flex-wrap: wrap; }\n#pool-chlorine-calc-wrapper .pcc-algebra { margin: 14px 0 0; font-size: 0.78rem; color: #8899a6; text-align: center; }\n#pool-chlorine-calc-wrapper .pcc-next { margin: 14px 0 0; font-size: 0.85rem; color: var(--pcc-text-light); text-align: center; }\n#pool-chlorine-calc-wrapper .pcc-next a { color: var(--pcc-teal-dark); font-weight: 600; text-decoration: none; }\n#pool-chlorine-calc-wrapper .pcc-next a:hover { text-decoration: underline; }\n#pool-chlorine-calc-wrapper .pcc-info-section { display: none; margin-top: 20px; }\n#pool-chlorine-calc-wrapper .pcc-info-section.pcc-visible { display: block; }\n#pool-chlorine-calc-wrapper .pcc-info-card { background: #fff; border: 1px solid var(--pcc-border); border-radius: 10px; padding: 20px; font-size: 0.9rem; }\n#pool-chlorine-calc-wrapper .pcc-info-title { font-weight: 700; font-size: 1rem; margin-bottom: 10px; }\n#pool-chlorine-calc-wrapper ol.pcc-howto-list { margin: 0; padding: 0 0 0 20px; }\n#pool-chlorine-calc-wrapper ol.pcc-howto-list li { margin-bottom: 6px; }\n@media (max-width: 600px) { #pool-chlorine-calc-wrapper .pcc-btn-row { flex-direction: column; max-width: 280px; } #pool-chlorine-calc-wrapper .pcc-reset-btn { padding: 12px 20px; font-size: 14px; } }\n@media (max-width: 500px) { #pool-chlorine-calc-wrapper .pcc-input-row { flex-direction: column; } }\n\n#pool-chlorine-calc-wrapper .pcc-field { margin-bottom: 18px; }\n#pool-chlorine-calc-wrapper .pcc-two-col { display: flex; gap: 14px; }\n#pool-chlorine-calc-wrapper .pcc-two-col > .pcc-field { flex: 1; min-width: 0; }\n#pool-chlorine-calc-wrapper .pcc-hint { font-size: 0.78rem; color: #8899a6; margin: 4px 0 0; }\n#pool-chlorine-calc-wrapper .pcc-warn span { display: block; margin-top: 4px; }\n#pool-chlorine-calc-wrapper .pcc-warn span:first-child { margin-top: 0; }\n#pool-chlorine-calc-wrapper .pcc-jump { margin: 14px 0 0; font-size: 0.85rem; text-align: center; color: var(--pcc-text-light); }\n#pool-chlorine-calc-wrapper .pcc-jump a { color: var(--pcc-teal-dark); font-weight: 600; text-decoration: none; }\n@media (max-width: 500px) { #pool-chlorine-calc-wrapper .pcc-two-col { flex-direction: column; gap: 0; } }\n<\/style>\n<div id=\"pool-chlorine-calc-wrapper\">\n    <p class=\"pcc-intro\">This pool chlorine calculator tells you how much liquid chlorine, bleach, granules or tablets to add to reach your target free chlorine (FC), for pools measured in gallons, litres or cubic metres. It also checks your target against your cyanuric acid (CYA) level.<\/p>\n    <div class=\"pcc-card\">\n        <p class=\"pcc-subtitle\">Enter your pool volume and your free chlorine reading from a test kit (use 0 if the pool has no chlorine).<\/p>\n\n        <label class=\"pcc-label\" for=\"pcc-pool-volume\">Pool Volume<\/label>\n        <div class=\"pcc-input-row\">\n            <input type=\"number\" id=\"pcc-pool-volume\" class=\"pcc-input-field\" placeholder=\"e.g., 15000\" min=\"0\">\n            <div class=\"pcc-unit-toggle\" id=\"pcc-volume-unit-toggle\">\n                <button type=\"button\" class=\"pcc-unit-btn pcc-active\" data-unit=\"gallons\">Gallons<\/button>\n                <button type=\"button\" class=\"pcc-unit-btn\" data-unit=\"liters\">Liters<\/button>\n                <button type=\"button\" class=\"pcc-unit-btn\" data-unit=\"m3\">m&sup3;<\/button>\n            <\/div>\n        <\/div>\n\n        <div class=\"pcc-two-col\">\n            <div class=\"pcc-field\">\n                <label class=\"pcc-label\" for=\"pcc-current\">Current Free Chlorine (ppm)<\/label>\n                <input type=\"number\" id=\"pcc-current\" class=\"pcc-input-field\" placeholder=\"e.g., 0\" value=\"0\" step=\"0.1\" min=\"0\">\n            <\/div>\n            <div class=\"pcc-field\">\n                <label class=\"pcc-label\" for=\"pcc-target\">Target Free Chlorine (ppm)<\/label>\n                <input type=\"number\" id=\"pcc-target\" class=\"pcc-input-field\" placeholder=\"e.g., 3\" value=\"3\" step=\"0.1\" min=\"0\">\n            <\/div>\n        <\/div>\n        <div class=\"pcc-preset-row\" id=\"pcc-preset-row\">\n            <button type=\"button\" class=\"pcc-preset-btn\" data-target=\"2\">2 ppm<\/button>\n            <button type=\"button\" class=\"pcc-preset-btn pcc-active\" data-target=\"3\">3 ppm (typical)<\/button>\n            <button type=\"button\" class=\"pcc-preset-btn\" data-target=\"5\">5 ppm<\/button>\n            <button type=\"button\" class=\"pcc-preset-btn\" data-target=\"10\">10 ppm (shock)<\/button>\n        <\/div>\n\n        <div class=\"pcc-two-col\">\n            <div class=\"pcc-field\">\n                <label class=\"pcc-label\" for=\"pcc-source\">Chlorine Type<\/label>\n                <select id=\"pcc-source\" class=\"pcc-input-field\">\n                    <option value=\"liq125\" selected>Liquid chlorine 12.5%<\/option>\n                    <option value=\"liq10\">Liquid chlorine 10%<\/option>\n                    <option value=\"bl825\">Bleach 8.25% (concentrated)<\/option>\n                    <option value=\"bl6\">Bleach 6% (regular)<\/option>\n                    <option value=\"ch65\">Cal-hypo granules 65%<\/option>\n                    <option value=\"ch73\">Cal-hypo granules 73%<\/option>\n                    <option value=\"dic56\">Dichlor granules 56%<\/option>\n                    <option value=\"tri90\">Trichlor tablets 90%<\/option>\n                <\/select>\n            <\/div>\n            <div class=\"pcc-field\">\n                <label class=\"pcc-label\" for=\"pcc-conc\">Strength on the Label (%)<\/label>\n                <input type=\"number\" id=\"pcc-conc\" class=\"pcc-input-field\" value=\"12.5\" step=\"0.05\" min=\"0\" max=\"100\">\n            <\/div>\n        <\/div>\n\n        <div class=\"pcc-field\">\n            <label class=\"pcc-label\" for=\"pcc-cya\">Cyanuric Acid, CYA (ppm), optional<\/label>\n            <input type=\"number\" id=\"pcc-cya\" class=\"pcc-input-field\" placeholder=\"e.g., 40\" step=\"1\" min=\"0\">\n            <p class=\"pcc-hint\">Add your CYA reading to check that the target is high enough for your water.<\/p>\n        <\/div>\n\n        <div class=\"pcc-btn-row\">\n            <button type=\"button\" id=\"pcc-calculate-btn\" class=\"pcc-calculate-btn\">Calculate<\/button>\n            <button type=\"button\" id=\"pcc-reset-btn\" class=\"pcc-reset-btn\">Reset<\/button>\n        <\/div>\n        <p id=\"pcc-error-msg\" class=\"pcc-error-msg\"><\/p>\n\n        <div id=\"pcc-result-area\" class=\"pcc-result-area\">\n            <div class=\"pcc-result-grid\" id=\"pcc-result-grid\"><\/div>\n            <div id=\"pcc-warn\" class=\"pcc-warn\"><\/div>\n            <p class=\"pcc-algebra\" id=\"pcc-algebra\"><\/p>\n            <p class=\"pcc-next\">Not sure of your pool volume? Use our <a href=\"https:\/\/aiper.com\/blogs\/pool-volume-calculator\/\">pool volume calculator<\/a>. Treating algae? Try the <a href=\"https:\/\/aiper.com\/blogs\/pool-shock-calculator\/\">pool shock calculator<\/a>, or check stabilizer with the <a href=\"https:\/\/aiper.com\/blogs\/pool-stabilizer-calculator\/\">pool stabilizer calculator<\/a>.<\/p>\n        <\/div>\n    <\/div>\n\n    <div id=\"pcc-info-section\" class=\"pcc-info-section\">\n        <div class=\"pcc-info-card\">\n            <div class=\"pcc-info-title\">How to Add Chlorine to Your Pool<\/div>\n            <ol class=\"pcc-howto-list\">\n                <li>Test free chlorine (and CYA if you can) first, and dose from the reading, not from a guess.<\/li>\n                <li>Dissolve cal-hypo and dichlor granules in a bucket of pool water before adding them. Never mix different chlorine products together.<\/li>\n                <li>With the pump running, pour liquid chlorine or the dissolved solution slowly around the deep end or in front of a return jet. Put trichlor tablets in a floating dispenser or feeder.<\/li>\n                <li>Run the pump for at least 6 to 8 hours, then retest before swimming.<\/li>\n            <\/ol>\n        <\/div>\n    <\/div>\n    <p class=\"pcc-jump\">Need a quick answer for your pool size? <a href=\"#pool-chlorine-reference-table\">Jump to the chlorine chart by gallons and litres<\/a>.<\/p>\n<\/div>\n<script>(function() {\n    var get = function(id) { return document.getElementById(id); };\n    var SRC = {\n        liq125: { c: 12.5, kind: 'liquid' }, liq10: { c: 10, kind: 'liquid' },\n        bl825: { c: 8.25, kind: 'liquid' }, bl6: { c: 6, kind: 'liquid' },\n        ch65: { c: 65, kind: 'solid', ch: 0.7 }, ch73: { c: 73, kind: 'solid', ch: 0.7 },\n        dic56: { c: 56, kind: 'solid', cya: 0.9 }, tri90: { c: 90, kind: 'solid', cya: 0.6, tab: 227 }\n    };\n    var LPU = { gallons: 3.78541, liters: 1, m3: 1000 };\n    var VLABEL = { gallons: 'gal', liters: 'L', m3: 'm\\u00b3' };\n    var state = { vUnit: 'gallons' };\n    var INIT = { current: get('pcc-current').value, target: get('pcc-target').value, source: get('pcc-source').value, conc: get('pcc-conc').value };\n\n    var rnd = function(n, d) { var p = Math.pow(10, d); return Math.round(n * p) \/ p; };\n    var fmt = function(n) { return (n >= 100 ? Math.round(n) : rnd(n, 1)).toLocaleString(); };\n    var fmt2 = function(n) { return (n >= 100 ? Math.round(n) : rnd(n, 2)).toLocaleString(); };\n\n    var syncPresets = function() {\n        var t = get('pcc-target').value;\n        Array.from(get('pcc-preset-row').children).forEach(function(b) { b.classList.toggle('pcc-active', b.dataset.target === t); });\n    };\n    get('pcc-preset-row').addEventListener('click', function(e) {\n        if (!e.target.classList.contains('pcc-preset-btn')) return;\n        get('pcc-target').value = e.target.dataset.target;\n        syncPresets();\n    });\n    get('pcc-target').addEventListener('input', syncPresets);\n    get('pcc-source').addEventListener('change', function() { get('pcc-conc').value = SRC[get('pcc-source').value].c; });\n\n    var hideResults = function() {\n        get('pcc-result-area').classList.remove('pcc-visible');\n        get('pcc-info-section').classList.remove('pcc-visible');\n    };\n    var showError = function(msg) {\n        var err = get('pcc-error-msg');\n        err.textContent = msg;\n        err.classList.add('pcc-visible');\n        hideResults();\n    };\n    var card = function(label, amountHtml, sub) {\n        return '<div class=\"pcc-result-card\"><p class=\"pcc-result-label\">' + label + '<\/p><div class=\"pcc-result-amount\">' + amountHtml + '<\/div><p class=\"pcc-result-sub\">' + sub + '<\/p><\/div>';\n    };\n    var big = function(a, u) { return '<span>' + a + '<\/span> <span class=\"pcc-unit-label\">' + u + '<\/span>'; };\n\n    var calc = function() {\n        var err = get('pcc-error-msg');\n        err.classList.remove('pcc-visible');\n        err.textContent = '';\n\n        var v = parseFloat(get('pcc-pool-volume').value);\n        var cRaw = get('pcc-current').value;\n        var c = cRaw === '' ? NaN : parseFloat(cRaw);\n        var t = parseFloat(get('pcc-target').value);\n        var conc = parseFloat(get('pcc-conc').value);\n        var cya = parseFloat(get('pcc-cya').value);\n        var key = get('pcc-source').value;\n        var src = SRC[key];\n\n        if (!v || v <= 0 || isNaN(v)) { showError('Enter your pool volume.'); return; }\n        if (isNaN(c) || c < 0) { showError('Enter your current free chlorine (use 0 if there is none).'); return; }\n        if (!t || t <= 0 || isNaN(t)) { showError('Enter your target free chlorine.'); return; }\n        if (!conc || conc <= 0 || conc > 100) { showError('Enter the strength printed on your chlorine label (a number from 1 to 100).'); return; }\n\n        var litres = v * LPU[state.vUnit];\n        var delta = t - c;\n        var warns = [];\n        if (!isNaN(cya) && cya > 0) {\n            var min = 0.075 * cya;\n            if (t < min) warns.push('At ' + fmt(cya) + ' ppm CYA, free chlorine should stay at or above about ' + rnd(min, 1) + ' ppm to keep the water sanitized. Your target of ' + fmt(t) + ' ppm is below that.');\n            if (cya > 100) warns.push('CYA above 100 ppm makes chlorine work poorly. Replacing part of the water is the only way to lower it.');\n        }\n        if (t > 10) warns.push('Targets above 10 ppm are shock levels. Keep swimmers out of the water until free chlorine is back in the normal range.');\n\n        var grid = get('pcc-result-grid'), alg = get('pcc-algebra');\n        if (delta <= 0.04) {\n            grid.innerHTML = card('No Chlorine Needed', '<span>0<\/span>', 'Your free chlorine is already at or above the target. Retest tomorrow before adding more.');\n            alg.textContent = '';\n            get('pcc-info-section').classList.remove('pcc-visible');\n        } else {\n            var gCl = delta * litres \/ 1000;\n            var prod = gCl \/ (conc \/ 100);\n            var label = get('pcc-source').options[get('pcc-source').selectedIndex].textContent;\n            var metricFirst = state.vUnit !== 'gallons';\n            var main, sub;\n            if (src.kind === 'liquid') {\n                var ml = prod, oz = ml \/ 29.5735;\n                var cups = oz >= 8 && oz < 128 ? ' (about ' + rnd(oz \/ 8, 1).toLocaleString() + ' cups)' : '';\n                var usBig = oz >= 128 ? big(fmt2(oz \/ 128), 'gal') : big(fmt(oz), 'fl oz');\n                var metBig = ml >= 1000 ? big(fmt2(ml \/ 1000), 'L') : big(fmt(ml), 'mL');\n                var usAlt = (oz >= 128 ? fmt2(oz \/ 128) + ' gal' : fmt(oz) + ' fl oz') + cups;\n                var metAlt = ml >= 1000 ? fmt2(ml \/ 1000) + ' L' : fmt(ml) + ' mL';\n                main = metricFirst ? metBig : usBig;\n                sub = 'or ' + (metricFirst ? usAlt : metAlt + cups);\n            } else {\n                var g = prod, ozw = g \/ 28.3495;\n                var usS = ozw >= 16 ? big(fmt2(ozw \/ 16), 'lb') : big(fmt(ozw), 'oz');\n                var metS = g >= 1000 ? big(fmt2(g \/ 1000), 'kg') : big(fmt(g), 'g');\n                var usAlt = ozw >= 16 ? fmt2(ozw \/ 16) + ' lb' : fmt(ozw) + ' oz';\n                var metAlt = g >= 1000 ? fmt2(g \/ 1000) + ' kg' : fmt(g) + ' g';\n                main = metricFirst ? metS : usS;\n                sub = 'or ' + (metricFirst ? usAlt : metAlt) + ' of product by weight';\n                if (src.tab && g \/ src.tab >= 0.5) sub += ' (about ' + rnd(g \/ src.tab, 1).toLocaleString() + ' three-inch tablets)';\n                if (src.cya) warns.push('This dose also adds about ' + fmt(delta * src.cya) + ' ppm of cyanuric acid (CYA), which does not break down. Only replacing water lowers it.');\n                if (src.ch) warns.push('This dose also adds about ' + fmt(delta * src.ch) + ' ppm of calcium hardness.');\n            }\n            grid.innerHTML = card(label, main, sub);\n            alg.textContent = '(' + fmt(t) + ' - ' + fmt(c) + ') ppm \\u00d7 ' + fmt(v) + ' ' + VLABEL[state.vUnit] + ' = ' + fmt(gCl) + ' g of available chlorine \\u00f7 ' + fmt(conc) + '% strength = ' + (src.kind === 'liquid' ? fmt(prod) + ' mL' : fmt(prod) + ' g') + ' of product';\n            get('pcc-info-section').classList.add('pcc-visible');\n        }\n        var wb = get('pcc-warn');\n        wb.innerHTML = warns.map(function(m) { return '<span>' + m + '<\/span>'; }).join('');\n        wb.classList.toggle('pcc-visible', warns.length > 0);\n        get('pcc-result-area').classList.add('pcc-visible');\n        get('pcc-result-area').scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n    };\n\n    get('pcc-volume-unit-toggle').onclick = function(e) {\n        if (!e.target.classList.contains('pcc-unit-btn')) return;\n        state.vUnit = e.target.dataset.unit;\n        Array.from(get('pcc-volume-unit-toggle').children).forEach(function(b) { b.classList.toggle('pcc-active', b === e.target); });\n    };\n\n    get('pcc-reset-btn').onclick = function() {\n        get('pcc-pool-volume').value = '';\n        get('pcc-current').value = INIT.current;\n        get('pcc-target').value = INIT.target;\n        get('pcc-source').value = INIT.source;\n        get('pcc-conc').value = INIT.conc;\n        get('pcc-cya').value = '';\n        syncPresets();\n        state.vUnit = 'gallons';\n        Array.from(get('pcc-volume-unit-toggle').children).forEach(function(b) { b.classList.toggle('pcc-active', b.dataset.unit === 'gallons'); });\n        var err = get('pcc-error-msg');\n        err.classList.remove('pcc-visible');\n        err.textContent = '';\n        get('pcc-warn').classList.remove('pcc-visible');\n        hideResults();\n        get('pcc-pool-volume').focus();\n    };\n\n    get('pcc-calculate-btn').onclick = calc;\n})();<\/script>\n\n\n\n<style>\n  #pool-chlorine-reference-table { max-width: 860px; margin: 2.5rem auto; font-family: 'Inter', system-ui, sans-serif; color: #2c3e50; scroll-margin-top: 80px; }\n  #pool-chlorine-reference-table h2 { font-size: 1.5rem; font-weight: 700; color: #17a8b0; margin: 0 0 8px; }\n  #pool-chlorine-reference-table h3 { font-size: 1.1rem; font-weight: 700; color: #5b4ab8; margin: 28px 0 6px; }\n  #pool-chlorine-reference-table .pct-subtitle { font-size: 0.9rem; color: #5a6c7d; margin: 0 0 16px; line-height: 1.5; }\n  #pool-chlorine-reference-table .pct-table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; border: 1px solid #e0e5eb; border-radius: 14px; box-shadow: 0 4px 16px rgba(0,0,0,0.04); }\n  #pool-chlorine-reference-table .pct-table { width: 100%; border-collapse: collapse; font-size: 0.88rem; min-width: 520px; }\n  #pool-chlorine-reference-table .pct-table thead th { background: linear-gradient(135deg, #1ecad3, #9486f7); color: #fff; font-weight: 600; font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.05em; padding: 12px 10px; text-align: center; white-space: nowrap; }\n  #pool-chlorine-reference-table .pct-table thead th:first-child { border-radius: 13px 0 0 0; text-align: left; }\n  #pool-chlorine-reference-table .pct-table thead th:last-child { border-radius: 0 13px 0 0; }\n  #pool-chlorine-reference-table .pct-table tbody td { padding: 10px; border-bottom: 1px solid #eef1f5; vertical-align: middle; text-align: center; }\n  #pool-chlorine-reference-table .pct-table tbody tr:nth-child(even) { background: #fafcfd; }\n  #pool-chlorine-reference-table .pct-table tbody tr:hover { background: #e8fafb; }\n  #pool-chlorine-reference-table .pct-vol { font-weight: 600; color: #2c3e50; white-space: nowrap; text-align: left; }\n  #pool-chlorine-reference-table .pct-num { font-weight: 700; color: #0f8c94; white-space: nowrap; }\n  #pool-chlorine-reference-table .pct-acid { font-weight: 600; color: #5b4ab8; white-space: nowrap; }\n  #pool-chlorine-reference-table .pct-note { margin-top: 12px; font-size: 0.8rem; color: #8899a6; line-height: 1.5; }\n  @media (max-width: 500px) {\n    #pool-chlorine-reference-table { padding: 0 6px; }\n    #pool-chlorine-reference-table .pct-table { font-size: 0.78rem; min-width: 460px; }\n    #pool-chlorine-reference-table .pct-table thead th { padding: 8px 6px; font-size: 0.65rem; }\n    #pool-chlorine-reference-table .pct-table tbody td { padding: 7px 6px; }\n  }\n<\/style>\n<div id=\"pool-chlorine-reference-table\">\n  <h2>Pool Chlorine Chart: How Much Chlorine to Add by Pool Size<\/h2>\n  <p class=\"pct-subtitle\">Look up your pool size to see how much chlorine to add. Amounts are the product you pour in, calculated from 1 ppm = 1 mg\/L. Multiply or read across for the ppm you need to raise. For an exact dose from your own reading, use the calculator above.<\/p>\n\n  <h3>How much liquid chlorine to add to a pool (12.5%), by gallons<\/h3>\n  <div class=\"pct-table-wrap\">\n    <table class=\"pct-table\">\n      <thead><tr><th>Pool Size<\/th><th>Raise 1 ppm<\/th><th>Raise 2 ppm<\/th><th>Raise 3 ppm<\/th><th>Raise 5 ppm<\/th><th>Raise 10 ppm<\/th><\/tr><\/thead>\n      <tbody>\n        <tr><td class=\"pct-vol\">300 gal<\/td><td class=\"pct-num\">0.3 fl oz<\/td><td class=\"pct-num\">0.6 fl oz<\/td><td class=\"pct-num\">0.9 fl oz<\/td><td class=\"pct-num\">1.5 fl oz<\/td><td class=\"pct-num\">3.1 fl oz<\/td><\/tr>\n<tr><td class=\"pct-vol\">500 gal<\/td><td class=\"pct-num\">0.5 fl oz<\/td><td class=\"pct-num\">1.0 fl oz<\/td><td class=\"pct-num\">1.5 fl oz<\/td><td class=\"pct-num\">2.6 fl oz<\/td><td class=\"pct-num\">5.1 fl oz<\/td><\/tr>\n<tr><td class=\"pct-vol\">1,000 gal<\/td><td class=\"pct-num\">1.0 fl oz<\/td><td class=\"pct-num\">2.0 fl oz<\/td><td class=\"pct-num\">3.1 fl oz<\/td><td class=\"pct-num\">5.1 fl oz<\/td><td class=\"pct-num\">10 fl oz<\/td><\/tr>\n<tr><td class=\"pct-vol\">1,500 gal<\/td><td class=\"pct-num\">1.5 fl oz<\/td><td class=\"pct-num\">3.1 fl oz<\/td><td class=\"pct-num\">4.6 fl oz<\/td><td class=\"pct-num\">7.7 fl oz<\/td><td class=\"pct-num\">15 fl oz<\/td><\/tr>\n<tr><td class=\"pct-vol\">2,000 gal<\/td><td class=\"pct-num\">2.0 fl oz<\/td><td class=\"pct-num\">4.1 fl oz<\/td><td class=\"pct-num\">6.1 fl oz<\/td><td class=\"pct-num\">10 fl oz<\/td><td class=\"pct-num\">20 fl oz<\/td><\/tr>\n<tr><td class=\"pct-vol\">3,000 gal<\/td><td class=\"pct-num\">3.1 fl oz<\/td><td class=\"pct-num\">6.1 fl oz<\/td><td class=\"pct-num\">9.2 fl oz<\/td><td class=\"pct-num\">15 fl oz<\/td><td class=\"pct-num\">31 fl oz<\/td><\/tr>\n<tr><td class=\"pct-vol\">4,000 gal<\/td><td class=\"pct-num\">4.1 fl oz<\/td><td class=\"pct-num\">8.2 fl oz<\/td><td class=\"pct-num\">12 fl oz<\/td><td class=\"pct-num\">20 fl oz<\/td><td class=\"pct-num\">41 fl oz<\/td><\/tr>\n<tr><td class=\"pct-vol\">5,000 gal<\/td><td class=\"pct-num\">5.1 fl oz<\/td><td class=\"pct-num\">10 fl oz<\/td><td class=\"pct-num\">15 fl oz<\/td><td class=\"pct-num\">26 fl oz<\/td><td class=\"pct-num\">51 fl oz<\/td><\/tr>\n<tr><td class=\"pct-vol\">6,000 gal<\/td><td class=\"pct-num\">6.1 fl oz<\/td><td class=\"pct-num\">12 fl oz<\/td><td class=\"pct-num\">18 fl oz<\/td><td class=\"pct-num\">31 fl oz<\/td><td class=\"pct-num\">61 fl oz<\/td><\/tr>\n<tr><td class=\"pct-vol\">8,000 gal<\/td><td class=\"pct-num\">8.2 fl oz<\/td><td class=\"pct-num\">16 fl oz<\/td><td class=\"pct-num\">25 fl oz<\/td><td class=\"pct-num\">41 fl oz<\/td><td class=\"pct-num\">82 fl oz<\/td><\/tr>\n<tr><td class=\"pct-vol\">10,000 gal<\/td><td class=\"pct-num\">10 fl oz<\/td><td class=\"pct-num\">20 fl oz<\/td><td class=\"pct-num\">31 fl oz<\/td><td class=\"pct-num\">51 fl oz<\/td><td class=\"pct-num\">102 fl oz<\/td><\/tr>\n<tr><td class=\"pct-vol\">12,000 gal<\/td><td class=\"pct-num\">12 fl oz<\/td><td class=\"pct-num\">25 fl oz<\/td><td class=\"pct-num\">37 fl oz<\/td><td class=\"pct-num\">61 fl oz<\/td><td class=\"pct-num\">123 fl oz<\/td><\/tr>\n<tr><td class=\"pct-vol\">15,000 gal<\/td><td class=\"pct-num\">15 fl oz<\/td><td class=\"pct-num\">31 fl oz<\/td><td class=\"pct-num\">46 fl oz<\/td><td class=\"pct-num\">77 fl oz<\/td><td class=\"pct-num\">1.20 gal<\/td><\/tr>\n<tr><td class=\"pct-vol\">20,000 gal<\/td><td class=\"pct-num\">20 fl oz<\/td><td class=\"pct-num\">41 fl oz<\/td><td class=\"pct-num\">61 fl oz<\/td><td class=\"pct-num\">102 fl oz<\/td><td class=\"pct-num\">1.60 gal<\/td><\/tr>\n<tr><td class=\"pct-vol\">25,000 gal<\/td><td class=\"pct-num\">26 fl oz<\/td><td class=\"pct-num\">51 fl oz<\/td><td class=\"pct-num\">77 fl oz<\/td><td class=\"pct-num\">1.00 gal<\/td><td class=\"pct-num\">2.00 gal<\/td><\/tr>\n<tr><td class=\"pct-vol\">30,000 gal<\/td><td class=\"pct-num\">31 fl oz<\/td><td class=\"pct-num\">61 fl oz<\/td><td class=\"pct-num\">92 fl oz<\/td><td class=\"pct-num\">1.20 gal<\/td><td class=\"pct-num\">2.40 gal<\/td><\/tr>\n<tr><td class=\"pct-vol\">40,000 gal<\/td><td class=\"pct-num\">41 fl oz<\/td><td class=\"pct-num\">82 fl oz<\/td><td class=\"pct-num\">123 fl oz<\/td><td class=\"pct-num\">1.60 gal<\/td><td class=\"pct-num\">3.20 gal<\/td><\/tr>\n      <\/tbody>\n    <\/table>\n  <\/div>\n  <p class=\"pct-note\">Liquid amounts are fluid ounces (8 fl oz = 1 cup, 128 fl oz = 1 gallon). A typical outdoor pool loses roughly 1 to 3 ppm of free chlorine a day in summer, so the 1, 2 and 3 ppm columns are the usual daily and weekly top-up doses. The 10 ppm column is a shock level. Using 10% liquid chlorine? Multiply by 1.25.<\/p>\n\n  <h3>How much chlorine to add by type: liquid, bleach, granules and tablets (raise 1 ppm)<\/h3>\n  <div class=\"pct-table-wrap\">\n    <table class=\"pct-table\">\n      <thead><tr><th>Pool Size<\/th><th>Liquid 12.5%<\/th><th>Liquid 10%<\/th><th>Bleach 8.25%<\/th><th>Bleach 6%<\/th><th>Cal-hypo 65%<\/th><th>Dichlor 56%<\/th><th>Trichlor 90%<\/th><\/tr><\/thead>\n      <tbody>\n        <tr><td class=\"pct-vol\">1,000 gal<\/td><td class=\"pct-num\">1.0 fl oz<\/td><td class=\"pct-num\">1.3 fl oz<\/td><td class=\"pct-num\">1.6 fl oz<\/td><td class=\"pct-num\">2.1 fl oz<\/td><td class=\"pct-num\">0.2 oz<\/td><td class=\"pct-num\">0.2 oz<\/td><td class=\"pct-num\">0.1 oz<\/td><\/tr>\n<tr><td class=\"pct-vol\">5,000 gal<\/td><td class=\"pct-num\">5.1 fl oz<\/td><td class=\"pct-num\">6.4 fl oz<\/td><td class=\"pct-num\">7.8 fl oz<\/td><td class=\"pct-num\">11 fl oz<\/td><td class=\"pct-num\">1.0 oz<\/td><td class=\"pct-num\">1.2 oz<\/td><td class=\"pct-num\">0.7 oz<\/td><\/tr>\n<tr><td class=\"pct-vol\">10,000 gal<\/td><td class=\"pct-num\">10 fl oz<\/td><td class=\"pct-num\">13 fl oz<\/td><td class=\"pct-num\">16 fl oz<\/td><td class=\"pct-num\">21 fl oz<\/td><td class=\"pct-num\">2.1 oz<\/td><td class=\"pct-num\">2.4 oz<\/td><td class=\"pct-num\">1.5 oz<\/td><\/tr>\n<tr><td class=\"pct-vol\">15,000 gal<\/td><td class=\"pct-num\">15 fl oz<\/td><td class=\"pct-num\">19 fl oz<\/td><td class=\"pct-num\">23 fl oz<\/td><td class=\"pct-num\">32 fl oz<\/td><td class=\"pct-num\">3.1 oz<\/td><td class=\"pct-num\">3.6 oz<\/td><td class=\"pct-num\">2.2 oz<\/td><\/tr>\n<tr><td class=\"pct-vol\">20,000 gal<\/td><td class=\"pct-num\">20 fl oz<\/td><td class=\"pct-num\">26 fl oz<\/td><td class=\"pct-num\">31 fl oz<\/td><td class=\"pct-num\">43 fl oz<\/td><td class=\"pct-num\">4.1 oz<\/td><td class=\"pct-num\">4.8 oz<\/td><td class=\"pct-num\">3.0 oz<\/td><\/tr>\n<tr><td class=\"pct-vol\">30,000 gal<\/td><td class=\"pct-num\">31 fl oz<\/td><td class=\"pct-num\">38 fl oz<\/td><td class=\"pct-num\">47 fl oz<\/td><td class=\"pct-num\">64 fl oz<\/td><td class=\"pct-num\">6.2 oz<\/td><td class=\"pct-num\">7.2 oz<\/td><td class=\"pct-num\">4.5 oz<\/td><\/tr>\n      <\/tbody>\n    <\/table>\n  <\/div>\n  <p class=\"pct-note\">Liquids and bleach are in fluid ounces, granules and tablets in ounces by weight. For a bigger rise, multiply by the number of ppm (for example, 3 ppm needs three times the amount shown). Dichlor and trichlor also add cyanuric acid. Not sure whether to use bleach? See <a href=\"https:\/\/aiper.com\/blogs\/pool-chlorine-vs-bleach\/\">pool chlorine vs household bleach<\/a>.<\/p>\n\n  <h3>How much chlorine per litre: liquid and granules for metric pools<\/h3>\n  <div class=\"pct-table-wrap\">\n    <table class=\"pct-table\">\n      <thead><tr><th>Pool Volume<\/th><th>Liquid 12.5%, +1 ppm<\/th><th>Liquid 12.5%, +3 ppm<\/th><th>Liquid 12.5%, +5 ppm<\/th><th>Cal-hypo 65%, +3 ppm<\/th><th>Dichlor 56%, +3 ppm<\/th><\/tr><\/thead>\n      <tbody>\n        <tr><td class=\"pct-vol\">2,000 L<\/td><td class=\"pct-num\">16 mL<\/td><td class=\"pct-num\">48 mL<\/td><td class=\"pct-num\">80 mL<\/td><td class=\"pct-acid\">9 g<\/td><td class=\"pct-acid\">11 g<\/td><\/tr>\n<tr><td class=\"pct-vol\">3,300 L<\/td><td class=\"pct-num\">26 mL<\/td><td class=\"pct-num\">79 mL<\/td><td class=\"pct-num\">132 mL<\/td><td class=\"pct-acid\">15 g<\/td><td class=\"pct-acid\">18 g<\/td><\/tr>\n<tr><td class=\"pct-vol\">4,000 L<\/td><td class=\"pct-num\">32 mL<\/td><td class=\"pct-num\">96 mL<\/td><td class=\"pct-num\">160 mL<\/td><td class=\"pct-acid\">18 g<\/td><td class=\"pct-acid\">21 g<\/td><\/tr>\n<tr><td class=\"pct-vol\">4,500 L<\/td><td class=\"pct-num\">36 mL<\/td><td class=\"pct-num\">108 mL<\/td><td class=\"pct-num\">180 mL<\/td><td class=\"pct-acid\">21 g<\/td><td class=\"pct-acid\">24 g<\/td><\/tr>\n<tr><td class=\"pct-vol\">6,000 L<\/td><td class=\"pct-num\">48 mL<\/td><td class=\"pct-num\">144 mL<\/td><td class=\"pct-num\">240 mL<\/td><td class=\"pct-acid\">28 g<\/td><td class=\"pct-acid\">32 g<\/td><\/tr>\n<tr><td class=\"pct-vol\">6,500 L<\/td><td class=\"pct-num\">52 mL<\/td><td class=\"pct-num\">156 mL<\/td><td class=\"pct-num\">260 mL<\/td><td class=\"pct-acid\">30 g<\/td><td class=\"pct-acid\">35 g<\/td><\/tr>\n<tr><td class=\"pct-vol\">8,000 L<\/td><td class=\"pct-num\">64 mL<\/td><td class=\"pct-num\">192 mL<\/td><td class=\"pct-num\">320 mL<\/td><td class=\"pct-acid\">37 g<\/td><td class=\"pct-acid\">43 g<\/td><\/tr>\n<tr><td class=\"pct-vol\">10,000 L<\/td><td class=\"pct-num\">80 mL<\/td><td class=\"pct-num\">240 mL<\/td><td class=\"pct-num\">400 mL<\/td><td class=\"pct-acid\">46 g<\/td><td class=\"pct-acid\">54 g<\/td><\/tr>\n<tr><td class=\"pct-vol\">15,000 L<\/td><td class=\"pct-num\">120 mL<\/td><td class=\"pct-num\">360 mL<\/td><td class=\"pct-num\">600 mL<\/td><td class=\"pct-acid\">69 g<\/td><td class=\"pct-acid\">80 g<\/td><\/tr>\n<tr><td class=\"pct-vol\">20,000 L<\/td><td class=\"pct-num\">160 mL<\/td><td class=\"pct-num\">480 mL<\/td><td class=\"pct-num\">800 mL<\/td><td class=\"pct-acid\">92 g<\/td><td class=\"pct-acid\">107 g<\/td><\/tr>\n<tr><td class=\"pct-vol\">30,000 L<\/td><td class=\"pct-num\">240 mL<\/td><td class=\"pct-num\">720 mL<\/td><td class=\"pct-num\">1.20 L<\/td><td class=\"pct-acid\">138 g<\/td><td class=\"pct-acid\">161 g<\/td><\/tr>\n<tr><td class=\"pct-vol\">40,000 L<\/td><td class=\"pct-num\">320 mL<\/td><td class=\"pct-num\">960 mL<\/td><td class=\"pct-num\">1.60 L<\/td><td class=\"pct-acid\">185 g<\/td><td class=\"pct-acid\">214 g<\/td><\/tr>\n      <\/tbody>\n    <\/table>\n  <\/div>\n  <p class=\"pct-note\">For each 1,000 litres of water, 1 ppm needs 1 g of available chlorine, which is 8 mL of 12.5% liquid. Cubic metres: 1 m&sup3; = 1,000 litres.<\/p>\n\n  <h3>Pool chlorine levels: free chlorine (FC) by cyanuric acid (CYA)<\/h3>\n  <div class=\"pct-table-wrap\">\n    <table class=\"pct-table\">\n      <thead><tr><th>Your CYA<\/th><th>Minimum FC<\/th><th>Target FC<\/th><th>Saltwater Minimum FC<\/th><th>Shock (SLAM) FC<\/th><\/tr><\/thead>\n      <tbody>\n        <tr><td class=\"pct-vol\">30 ppm<\/td><td class=\"pct-num\">2.2<\/td><td class=\"pct-num\">3<\/td><td class=\"pct-num\">1.5<\/td><td class=\"pct-acid\">12<\/td><\/tr>\n<tr><td class=\"pct-vol\">40 ppm<\/td><td class=\"pct-num\">3<\/td><td class=\"pct-num\">4<\/td><td class=\"pct-num\">2<\/td><td class=\"pct-acid\">16<\/td><\/tr>\n<tr><td class=\"pct-vol\">50 ppm<\/td><td class=\"pct-num\">3.8<\/td><td class=\"pct-num\">5<\/td><td class=\"pct-num\">2.5<\/td><td class=\"pct-acid\">20<\/td><\/tr>\n<tr><td class=\"pct-vol\">60 ppm<\/td><td class=\"pct-num\">4.5<\/td><td class=\"pct-num\">6<\/td><td class=\"pct-num\">3<\/td><td class=\"pct-acid\">24<\/td><\/tr>\n<tr><td class=\"pct-vol\">70 ppm<\/td><td class=\"pct-num\">5.2<\/td><td class=\"pct-num\">7<\/td><td class=\"pct-num\">3.5<\/td><td class=\"pct-acid\">28<\/td><\/tr>\n<tr><td class=\"pct-vol\">80 ppm<\/td><td class=\"pct-num\">6<\/td><td class=\"pct-num\">8<\/td><td class=\"pct-num\">4<\/td><td class=\"pct-acid\">32<\/td><\/tr>\n<tr><td class=\"pct-vol\">90 ppm<\/td><td class=\"pct-num\">6.8<\/td><td class=\"pct-num\">9<\/td><td class=\"pct-num\">4.5<\/td><td class=\"pct-acid\">36<\/td><\/tr>\n<tr><td class=\"pct-vol\">100 ppm<\/td><td class=\"pct-num\">7.5<\/td><td class=\"pct-num\">10<\/td><td class=\"pct-num\">5<\/td><td class=\"pct-acid\">40<\/td><\/tr>\n      <\/tbody>\n    <\/table>\n  <\/div>\n  <p class=\"pct-note\">All values in ppm. Minimum is 7.5% of CYA, target is about 10%, and shock is about 40%. Saltwater pools with a chlorine generator can run at about 5% of CYA. Indoor pools without stabilizer usually hold 1 to 3 ppm.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Pool Chlorine FAQs<\/h2>\n\n\n\n<div class=\"schema-faq wp-block-yoast-faq-block\"><div class=\"schema-faq-section\" id=\"faq-question-1790100000000\"><strong class=\"schema-faq-question\">How often should you add liquid chlorine to a pool: daily or weekly?<\/strong> <p class=\"schema-faq-answer\">In summer most outdoor pools lose roughly 1 to 3 ppm of free chlorine a day to sunlight and swimmers, so a small top-up every day or two keeps the level steady. Test at the same time each day, dose back up to your target, and adjust the schedule to what your own testing shows. Pools with a saltwater generator, a floating feeder, or CYA in the 30 to 50 ppm range lose less and often need topping up less often.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1790100017311\"><strong class=\"schema-faq-question\">What should the free chlorine level be in a pool?<\/strong> <p class=\"schema-faq-answer\">It depends on your cyanuric acid (CYA) level, which is why one number such as 3 ppm is only a rough guide. In an outdoor pool with stabilizer, free chlorine should stay at or above about 7.5% of CYA. Test free chlorine, not total chlorine: the gap between the two is combined chlorine, and more than about 0.5 ppm of it means the pool needs shocking.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1790100034622\"><strong class=\"schema-faq-question\">What is the formula for how much chlorine to add to a pool?<\/strong> <p class=\"schema-faq-answer\">Multiply the ppm you need to raise by the pool volume, then divide by the strength of the product. In metric, ppm \u00d7 litres \u00f7 1,000 gives grams of available chlorine, and dividing by the strength (0.125 for 12.5% liquid) gives mL of liquid or grams of granules. Example: raising 10,000 gallons (37,854 litres) by 3 ppm needs 113.6 g of chlorine, which is about 908 mL, or 31 fl oz, of 12.5% liquid chlorine.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1790100051933\"><strong class=\"schema-faq-question\">Can you use household bleach instead of liquid pool chlorine?<\/strong> <p class=\"schema-faq-answer\">Yes, if it is plain, unscented bleach (sodium hypochlorite) with no added thickeners or fragrance, and if you enter the strength printed on the label, usually 6% or 8.25%. Bleach is weaker than 12.5% pool chlorine, so you need roughly 1.5 to 2 times the volume. It also loses strength on the shelf, so buy it fresh.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1790100069244\"><strong class=\"schema-faq-question\">How do you use this calculator to shock a pool?<\/strong> <p class=\"schema-faq-answer\">Enter your CYA, then set the target to the shock (SLAM) level for it, which is about 40% of CYA, for example 16 ppm at 40 ppm CYA. Add the dose in one or two rounds with the pump running, and retest every few hours until the water is clear. Keep swimmers out until free chlorine falls back to a normal level.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1790100086555\"><strong class=\"schema-faq-question\">Why doesn&#8217;t my chlorine level rise after I add chlorine?<\/strong> <p class=\"schema-faq-answer\">Usually it is chlorine demand: organic matter such as early algae, sweat and sunscreen uses the chlorine up as fast as you add it. Give the water at least 30 minutes of circulation before you test, and check that your test kit is fresh. If the reading still will not hold, the pool likely needs a shock or SLAM to clear the demand.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1790100103866\"><strong class=\"schema-faq-question\">How long after adding chlorine can you swim?<\/strong> <p class=\"schema-faq-answer\">After a normal top-up, wait for the pump to circulate the water, usually 30 minutes to an hour, and confirm free chlorine reads in your normal range, at or below about 5 ppm. After a shock dose, wait until free chlorine has dropped back to that range, which can take a day or more depending on sun and CYA. Test rather than guess.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1790100121177\"><strong class=\"schema-faq-question\">Do trichlor and dichlor raise cyanuric acid?<\/strong> <p class=\"schema-faq-answer\">Yes. Each 1 ppm of free chlorine from trichlor adds about 0.6 ppm of CYA, and dichlor adds about 0.9 ppm. CYA does not break down, so it only comes down by replacing water. Calcium hypochlorite adds about 0.7 ppm of calcium hardness per ppm of chlorine, and liquid chlorine adds neither, which is why it suits regular dosing. The calculator shows what your dose adds.<\/p> <\/div> <div class=\"schema-faq-section\" id=\"faq-question-1790100138488\"><strong class=\"schema-faq-question\">Does a saltwater pool need the same amount of chlorine?<\/strong> <p class=\"schema-faq-answer\">The targets are the same, because a salt system makes ordinary chlorine. The generator normally covers the daily demand, so you only add liquid chlorine or shock when free chlorine falls behind, for example after heavy use, a storm or algae. Saltwater pools can run at a slightly lower free chlorine, about 5% of CYA instead of 7.5%.<\/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>This pool chlorine calculator tells you how much liquid chlorine, bleach, granules or tablets to add to reach your target free chlorine (FC), for pools measured in gallons, litres or cubic metres. It also checks your target against your cyanuric acid (CYA) level. Enter your pool volume and your free chlorine reading from a test&#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-1408","page","type-page","status-publish","hentry"],"lang":"en","translations":{"en":1408,"es":1969,"de":1957,"fr":1963},"_links":{"self":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/1408","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=1408"}],"version-history":[{"count":16,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/1408\/revisions"}],"predecessor-version":[{"id":11917,"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/pages\/1408\/revisions\/11917"}],"wp:attachment":[{"href":"https:\/\/aiper.com\/blogs\/wp-json\/wp\/v2\/media?parent=1408"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}