Science & engineering

Acid-base titration curve calculator

Plot pH against titrant volume for strong or weak, mono- or polyprotic acids and bases from the exact charge balance, with equivalence points and an indicator.

Acid-base titration curve calculator
Esc to restore

Your inputs

For a weak acid or base: one value, or up to three for a polyprotic one, strongest step first, such as 2.15, 7.20, 12.35. Ignored for strong acids and bases.

Results update as you type. Larger files run when you press Update result.

Your result

Your result will appear here.

More actions

Your inputs stay in this browser. Nothing is uploaded, and nothing is saved unless you choose “Save result”.

A clear answer. Here’s how.

At every volume the pH comes from the exact charge balance [H⁺] + [cations] = [OH⁻] + [anions] with Kw = 1.0 × 10⁻¹⁴ (25 °C), the analyte and titrant diluted into the combined volume, and the fractions of each protonation state of a polyprotic acid from its Ka values (a weak base is treated as its conjugate acid with Ka = Kw/Kb). The equation is strictly monotonic in [H⁺] and is solved by bisection on log₁₀[H⁺] to 10⁻¹² in pH, so no approximation such as Henderson–Hasselbalch is used; that approximation, pH = pKa + log₁₀(base/acid) from the added moles, is shown beside the exact value for comparison. Equivalence volumes are k·Ca·Va/Ct; the table gives about 100 volumes plus the start, half-equivalence, equivalence and chosen points, and the steepest point is the largest dpH/dV found near each equivalence volume. The suggested indicator is the one from methyl orange (3.1–4.4), methyl red (4.4–6.2), bromothymol blue (6.0–7.6) and phenolphthalein (8.3–10.0) whose range lies inside the jump between 99% and 101% of the equivalence volume and nearest the equivalence pH. Concentrations stand in for activities, so results drift above about 0.1 M; other temperatures, more than three dissociation steps, mixtures, precipitation, dissolved CO₂ and non-aqueous solvents are not modelled.

How this is checked

5 reference checks passed These 5 cases were run when this page was built, on 20 October 2026, and all reproduce within the stated tolerance. The same cases are part of the automated tests that run on every change to Toolmoz. Engine version 1.

See the checks and where each expected answer comes from
  1. Case 1

    Inputs
    pKa (acid) or pKb (base) values 1.8e-5The values are kReport the pH at this titrant volume (mL) 24.9
    Expected, and what Toolmoz gave
    Initial pH expected 2.87, Toolmoz 2.8752770603191777pH at half-equivalence expected 4.74, Toolmoz 4.745196012763955pH at equivalence expected 8.72, Toolmoz 8.721904031581886pH at the chosen volume expected 7.14, Toolmoz 7.140783315880725Equivalence volume (mL) expected 25, Toolmoz 25
    Where the expected answer comes from
    OpenStax Chemistry 2e, Table 14.2 and Example 14.22: 25.00 mL of 0.100 M acetic acid (Ka 1.8e-5) with 0.100 M NaOH gives pH 2.87, 4.74, 8.72 and 7.14 at 24.9 mL (two decimals, hence the tolerance)
    Allowed difference
    ±0.006 absolute
  2. Case 2

    Inputs
    Analyte (in the flask) strong-acidReport the pH at this titrant volume (mL) 24.9
    Expected, and what Toolmoz gave
    Initial pH expected 1, Toolmoz 0.9999999999995737pH at equivalence expected 7, Toolmoz 6.999999999997186pH at the chosen volume expected 3.7, Toolmoz 3.6981004374838164Suggested indicator expected Bromothymol blue (6.0–7.6), Toolmoz Bromothymol blue (6.0–7.6)
    Where the expected answer comes from
    OpenStax Chemistry 2e, Table 14.2 and Example 14.21: 0.100 M HCl with 0.100 M NaOH gives pH 1.00, 3.70 at 24.9 mL and 7.00 at equivalence
    Allowed difference
    ±0.003 absolute
  3. Case 3

    Inputs
    pKa (acid) or pKb (base) values 1.8e-5The values are kReport the pH at this titrant volume (mL) 5
    Expected, and what Toolmoz gave
    pH at the chosen volume expected 4.144996399805036, Toolmoz 4.144996399805251pH at equivalence expected 8.721904031581923, Toolmoz 8.721904031581886Initial pH expected 2.8752770603192666, Toolmoz 2.8752770603191777
    Where the expected answer comes from
    The same charge balance solved independently in Python with 50-digit decimal bisection (OpenStax rounds these to 4.14, 8.72 and 2.87)
    Allowed difference
    ±1e-9
  4. Case 4

    Inputs
    Analyte (in the flask) weak-basepKa (acid) or pKb (base) values 4.75Report the pH at this titrant volume (mL) 12.5
    Expected, and what Toolmoz gave
    pH at equivalence expected 5.275460798282207, Toolmoz 5.2754607982821256Initial pH expected 11.1221043177036, Toolmoz 11.12210431770339pH at the chosen volume expected 9.24953713006823, Toolmoz 9.249537130068433
    Where the expected answer comes from
    25 mL of 0.1 M ammonia (pKb 4.75) with 0.1 M HCl, charge balance solved in Python with 50-digit decimals; the textbook estimate at equivalence, ½(pKa − log 0.05) with pKa 9.25, is 5.28
    Allowed difference
    ±1e-9
  5. Case 5

    Inputs
    pKa (acid) or pKb (base) values 2.15, 7.20, 12.35Report the pH at this titrant volume (mL) 37.5
    Expected, and what Toolmoz gave
    pH at equivalence 1 expected 4.703915318900497, Toolmoz 4.703915318900414pH at equivalence 2 expected 9.662952846192884, Toolmoz 9.662952846193065pH at the chosen volume expected 7.1999982454937665, Toolmoz 7.199998245493731Equivalence volume 2 (mL) expected 50, Toolmoz 50
    Where the expected answer comes from
    Phosphoric acid (pKa 2.15, 7.20, 12.35), 25 mL of 0.1 M with 0.1 M NaOH, solved in Python with 50-digit decimals; compare the approximations (pKa1 + pKa2)/2 = 4.68 and pH = pKa2 at 37.5 mL
    Allowed difference
    ±1e-9

What this shows: the engine reproduces independently worked values for these cases. It does not prove every possible input is right. To test an answer you were given, see how to check a number; to see what is and is not checked across Toolmoz, see the accuracy ledger.

See a worked example

Worked example

A fixed demonstration, separate from the values you enter above.

Analyte (in the flask)
Weak acid (up to three pKa)
pKa (acid) or pKb (base) values
4.76
The values are
pKa or pKb
Analyte concentration (mol/L)
0.1
Analyte volume (mL)
25
Titrant concentration (mol/L): strong base for an acid, strong acid for a base
0.1
Report the pH at this titrant volume (mL)
12.5
Plot up to this volume (mL, 0 = twice the last equivalence volume)
0

Example result

First 5 rows of the example result
Titrant added (mL)pHHenderson–Hasselbalch pHExact − HHPoint
02.88286253614Start
0.53.195066336273.069803919970.125262416297
13.422303117063.379788758290.0425143587756
1.53.585767879433.565023396780.0207444826476
23.711538479653.699302159650.0122363200055

At each volume the exact charge balance [H+] + [cations] = [OH−] + [anions] is solved for [H+] by bisection on log10[H+], with Kw = 1.0 × 10^-14 (25 °C), concentrations in place of activities and additive volumes. Species fractions of the weak acid use Ka = 0.00001738 (pKa 4.760). The Henderson–Hasselbalch column is the textbook buffer approximation pH = pKa + log10(base/acid) from the added moles, shown for comparison only. The titrant is a strong monoprotic base such as NaOH. Indicator ranges (Wikipedia, pH indicator): methyl orange 3.1–4.4, methyl red 4.4–6.2, bromothymol blue 6.0–7.6, phenolphthalein 8.3–10.0; the suggestion is the one whose range sits inside the steep part (99% to 101% of the equivalence volume) nearest the equivalence pH. Not modelled: other temperatures, activity corrections above about 0.1 M, more than three dissociation steps, mixtures, precipitation, CO2 uptake and non-aqueous solvents.