Home / Science / Environmental science / Environmental monitoring / Water quality indexTool #156

Water quality index calculator (CCME WQI method): score lab results against your own objectives

Turn a season of water lab results into one score from 0 to 100 using the CCME water quality index method. Enter the objectives that apply to your water and the results for each sample. See how many variables and tests failed and by how much, the score and its category, and which samples failed.

Keep it one tap away for everyday use.

Bookmark Water quality index?

Press Ctrl + D now. Your browser opens its own bookmark box, where you choose the name and folder.

  1. Objectives
  2. Results
  3. F1 F2 F3
  4. Score
Nothing is uploadedWorks offline once open

Objectives

Type the guideline or objective values that apply to your water and its use (drinking, aquatic life, recreation), from your own regulator. The tool has none built in. The example objectives are made up.

Results

Column names are matched to the objectives ignoring capitals and spaces at the ends. A result written as "<0.01" is taken at its detection limit. The index works best with at least 4 variables and 4 samples. Up to 20,000 samples. The example results are made up.

Water quality index

By variable

Every sample (failures marked ✗)
Download

What it does

A monitoring program can produce hundreds of numbers a year: pH, oxygen, nutrients, bacteria, metals, at several dates. A water quality index boils them down to one score that people can follow from year to year and compare between sites.

This tool uses the method of the Canadian Council of Ministers of the Environment (CCME) Water Quality Index. It is widely used because it works with whatever variables and objectives fit your water. It combines three factors:

  • Scope (F1): the share of variables that failed their objective at least once.
  • Frequency (F2): the share of all individual tests that failed.
  • Amplitude (F3): how far the failing tests went beyond their objectives, from the sum of their excursions, squeezed into 0 to 100.

The index is 100 − √(F1² + F2² + F3²) ÷ 1.732, from 0 (worst) to 100 (every test met its objective). The categories are Excellent (95 to 100), Good (80 to 94), Fair (65 to 79), Marginal (45 to 64) and Poor (0 to 44).

How to use it

  1. Objectives: one row per variable with its lowest and/or highest allowed value. Use the guidelines or site-specific objectives that apply to your water and its use, from your regulator. The tool has no values built in.
  2. Results: a header row with the same variable names, then one row per sample. A date or sample name in the first column is optional. Leave a cell blank when a variable was not measured. Results like “<0.01” are taken at the detection limit.
  3. You can paste from a spreadsheet or open CSV, TXT or Excel files for either table.

What you get

  • The index and its category.
  • F1, F2 and F3 with the counts behind them, so you can see whether the score is low because many variables fail, because failures are frequent, or because a few are very large.
  • A chart with the score on the category scale and the share of tests failed for each variable.
  • A table by variable: objective, tests, failures and the worst result as a multiple of its limit.
  • Every sample, with failing results marked, plus CSV, PDF, PNG and Word downloads.

Worked example

The made-up river station has eight monthly samples of six variables, judged against made-up objectives.

  • pH and nitrate always pass. Dissolved oxygen, total phosphorus, E. coli and turbidity each fail at least once, so F1 = 66.7.
  • 10 of the 48 tests fail, so F2 = 20.8.
  • The worst failure is E. coli at 1,200 per 100 mL, 8 times its limit. Across all tests the normalised sum of excursions is 0.243, so F3 = 19.5.
  • WQI = 58, Marginal.

Scope dominates here: four of the six variables fail at some point, even though most tests pass.

Good practice

  • Use at least 4 variables and 4 samples, and keep the same variables and objectives when you compare years or sites.
  • The index summarises; it does not replace looking at the variables that fail and why.
  • Choosing more variables that rarely fail raises the score, and adding sensitive ones lowers it. Report which variables and objectives you used.

FAQs

Can I use this for drinking water compliance? No. Compliance is judged sample by sample against the rules that apply. The index is a summary for reporting trends.

Why does one bad result move the score so much? A single failure makes that variable count in F1. With few variables, one variable is a large share.

Is my data uploaded? No. Everything runs in your browser.

Where the numbers come from

  • Index structure (scope F1, frequency F2, amplitude F3, the excursion and normalised sum of excursions, the 1.732 scaling and the five categories): the Canadian Council of Ministers of the Environment (CCME) Water Quality Index 1.0 method (2001). Method only. No guideline values are built in; you enter your own objectives.
  • Written by fibub and checked in the tests against an independent Python implementation of the same formulas.
  • The example objectives and results are made up and are not any jurisdiction's guidelines.

Standard scientific values, such as constants, atomic weights and melting points, are facts found in every textbook; we name where ours were checked. If you are an author or publisher and want a value, a credit or a table changed or removed, tell us and we will act quickly.

Last updated 2026-11-09.

Change log for Water quality index

  1. Add #156 water quality index (CCME method, user objectives) Details on GitHub

Every change to fibub

Related tools

Non-detect statistics #153 Work out the mean, median, upper percentiles and an upper confidence limit for lab results that include non-detects ("<1", "ND"), even with several detection limits. Uses Kaplan–Meier, robust ROS and maximum likelihood instead of substituting half the limit, compares every method side by side, and counts results above a guideline. Species sensitivity distribution #152 Turn toxicity values for many species into one protective concentration. Fit a species sensitivity distribution (log-normal, log-logistic or their AICc average), read off the HC5 or any other HCp with bootstrap limits, see the fraction of species affected at any concentration, and plot every species on the curve. Activated sludge sizer #157 Size an activated sludge aeration tank for BOD removal. Give the flow, influent BOD, sludge age (SRT), MLSS and kinetic coefficients, and see the effluent BOD, tank volume and detention time, F/M ratio, sludge production, oxygen demand, air flow, return and waste sludge flows, and how they all change with sludge age. Field sampling planner #158 Plan where to take field samples. Draw your site boundary, work out how many samples you need (to estimate an average, compare with an action level, or find a hot spot of a given size), and lay the points out on a square or triangular grid, stratified random or simple random. Download the points as CSV or as GPX for a GPS. Rain gauge network average #150 Turn point rain gauge readings into one rainfall figure for a whole catchment. Each gauge stands for the part of the catchment closest to it (its Thiessen polygon). Paste or open the boundary and the gauges, with any number of storms or days as columns. Get the areal rainfall, each gauge's area and weight, a map, and a comparison with the plain average. Missing readings redraw the polygons. Zooplankton biomass #333 Turn a zooplankton net sample into numbers per cubic metre and biomass. Work out the water filtered from the net and tow (or a flowmeter), scale up the counts from the part you counted, and convert measured lengths to mass with your own length-weight equation for each taxon. Stocking density and FCR calculator #401 Work out the water volume of a tank or pond, the biomass and stocking density of your fish, how many fish fit a target density, the feed conversion ratio (FCR) and specific growth rate (SGR) over a period, the feed per day at a % of body weight, and when the fish reach harvest weight. Nothing is uploaded. Pond oxygen budget estimator #402 Work out dissolved oxygen saturation from temperature, salinity and altitude, then follow a fish pond's oxygen from dusk to dawn with your own fish, plankton and sediment rates and surface reaeration, and see how much aeration keeps the DO above your chosen minimum. Nothing is uploaded. Dissolved oxygen and plankton density calculator #841 Work out oxygen solubility from temperature, salinity and air pressure, then the percent saturation and apparent oxygen utilisation (AOU) of your samples, in mg/L, µmol/kg, µmol/L or mL/L. Paste a whole profile, and turn plankton counts into cells per litre or individuals per cubic metre with a 95 % range. Seawater carbonate system calculator #868 Give any two of total alkalinity, dissolved inorganic carbon, pH and pCO2 with salinity, temperature and pressure, and get the rest of the seawater carbonate system: every pH scale, pCO2, fCO2 and xCO2, carbonate ion, calcite and aragonite saturation, the Revelle factor and the alkalinity part by part, at the input conditions and any others, for one sample or a whole table.