Equilibrium & pH Calculator

Rigorous solve (full charge balance), so it stays correct for dilute, very weak, or strong acids. Click a row in the reference for a pKa. Polyprotic acids: the (1st)/(2nd) entries solve a single step — use Custom for the full system.

pKa of the conjugate acid is taken as 14 − pKb.

Shows the rigorous pH, the Henderson–Hasselbalch value, and buffer capacity.

For CaAb: Ksp = (a·s)a(b·s)b. Add a common-ion concentration to see solubility drop.

Solved with chempy.equilibria. Handles polyprotic systems — add a line per dissociation step.

pKa reference

Acid–base equilibria, solved properly

Most online pH calculators use the shortcut [H⁺] ≈ √(Ka·C), which quietly breaks for dilute or very weak acids. This tool builds the actual equilibrium — including water autoionization — and solves the full charge-balance equation numerically, so the pH is right across the whole range. Behind the scenes it runs chempy and SciPy on the server.

What each mode does

  • Weak acid / base — pH, pOH, [H⁺], [OH⁻], conjugate concentrations and % ionization, plus a titration curve and species-distribution diagram.
  • Buffer — rigorous pH next to the Henderson–Hasselbalch estimate, with buffer capacity.
  • Solubility (Ksp) — molar solubility and ion concentrations, with the common-ion effect.
  • Custom — write any set of equilibria (polyprotic, complexation…) and solve the whole system at once.

Frequently asked

Set up HA = H⁺ + A⁻ with its Ka plus water autoionization, then solve the charge-balance equation numerically. This avoids the √(Ka·C) approximation, so it's accurate even for dilute or very weak acids.
pH = pKa + log([A⁻]/[HA]) for a buffer. It's an approximation valid when both concentrations are sizeable; the tool shows it next to the exact solution.
For a salt giving a cations and b anions, Ksp = (a·s)ᵃ(b·s)ᵇ. AgCl → s = √Ksp; CaF₂ → s = ∛(Ksp/4). A common ion lowers s — enter its concentration to see by how much.
The fraction of each species versus pH. For a monoprotic acid the HA and A⁻ curves cross at pH = pKa, which is the centre of the buffer region.
Yes — free, no signup, solved with the open-source chempy and SciPy libraries.

Support This Free Tool

Every coffee helps keep the servers running. Every book sale funds the next tool I'm dreaming up. You're not just supporting a site — you're helping me build what developers actually need.

500K+ users
200+ tools
100% private
Privacy Guarantee: Private keys you enter or generate are never stored on our servers. All tools are served over HTTPS.