Provides a unified interface for accessing diverse web-published hydrometric data sources across Canada, presenting users with consistent tabular output regardless of the underlying data source.

hydrocan provides unified access to Canadian hydrometric data from diverse web-published sources. It is complementary to tidyhydat, which covers the federal Water Survey of Canada (WSC) network. hydrocan adds provincial and utility networks data sources that have no existing R package.
Every function returns a consistent tibble regardless of the underlying data source, so analysis code works unchanged as new sources are added.
You can install the CRAN version via:
install.packages("hydrocan")
You can install the development version of hydrocan from the Hakai Institute r-universe server:
install.packages("hydrocan", repos = "https://hakaiinstitute.r-universe.dev")
The reading functions accept one or more station IDs, a date range, and
an optional source argument to target a specific adapter directly.
When source is omitted, the router matches each station ID to its data
source automatically. Every function returns the same tibble columns
regardless of source.
If you don’t know the station that you want to query, start with
hc_read_stations(). The station IDs it returns can be passed to the
reading functions below.
library(hydrocan)
hc_read_stations("hydroquebec")
#> # A tibble: 94 × 9
#> station_id station_name provider_name longitude latitude elevation_m
#> <chr> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 3-100 Outardes-4 hydroquebec -68.9 49.7 NA
#> 2 3-101 Outardes-3 hydroquebec -68.7 49.6 NA
#> 3 3-102 Outardes-2 hydroquebec -68.4 49.1 NA
#> 4 3-103 Petit Lac Manicouagan hydroquebec -67.8 51.8 0
#> 5 3-104 Barrage Intermédiaire hydroquebec -67.9 51.8 NA
#> 6 3-105 Hart-Jaune hydroquebec -67.9 51.8 NA
#> 7 3-106 Manic-5 hydroquebec -68.7 50.6 NA
#> 8 3-107 Manic-3 hydroquebec -68.6 49.7 NA
#> 9 3-109 Manic-2 hydroquebec -68.3 49.3 NA
#> 10 3-110 Manic-1 hydroquebec -68.3 49.2 NA
#> # ℹ 84 more rows
#> # ℹ 3 more variables: period_start <date>, period_end <date>, notes <list>
hc_read_daily_flows() returns daily aggregates. Note that not all
providers publish daily data: check the has_daily_flows column of
hc_list_sources() to see which ones do.
You can query daily flows from two stations across two sources in one call. hydrocan detects that “030101” belongs to CEHQ and “3-230” to Hydro-Quebec:
hc_read_daily_flows(
station_id = c("030101", "3-230"),
start_date = Sys.Date() - 30
)
#> ── hydrocan ────────────────────────────────────────────────────────────────────
#> Observations: 32
#> Sources: cehq, hydroquebec
#> Parameters: water_discharge, water_inflow
#> Date range: 2026-09-19 to 2026-10-15
#> Stations: 2 returned
#> ✔ All stations returned.
#> ────────────────────────────────────────────────────────────────────────────────
#> # A tibble: 32 × 8
#> station_id date value parameter unit provider_name quality_code
#> * <chr> <date> <dbl> <chr> <chr> <chr> <chr>
#> 1 030101 2026-09-19 1.06 water_discharge m3/s cehq MJ
#> 2 030101 2026-09-20 0.998 water_discharge m3/s cehq MJ
#> 3 030101 2026-09-21 0.950 water_discharge m3/s cehq MJ
#> 4 030101 2026-09-22 0.905 water_discharge m3/s cehq MJ
#> 5 030101 2026-09-23 0.852 water_discharge m3/s cehq MJ
#> 6 030101 2026-09-24 0.815 water_discharge m3/s cehq MJ
#> 7 030101 2026-09-25 0.787 water_discharge m3/s cehq MJ
#> 8 030101 2026-09-26 0.758 water_discharge m3/s cehq MJ
#> 9 030101 2026-09-27 0.726 water_discharge m3/s cehq MJ
#> 10 030101 2026-09-28 0.720 water_discharge m3/s cehq MJ
#> # ℹ 22 more rows
#> # ℹ 1 more variable: qf_desc <chr>
hc_read_flows() returns sub-daily observations.
# Sub-daily flow observations from a single Hydro-Quebec station
hc_read_flows(
station_id = "3-100",
start_date = Sys.Date() - 7
)
#> ── hydrocan ────────────────────────────────────────────────────────────────────
#> Observations: 288
#> Source: hydroquebec
#> Parameters: water_discharge_turbined, water_discharge,
#> water_discharge_spilled
#> Date range: 2026-10-12 to 2026-10-15 23:00:00
#> Station: 1 returned
#> ✔ All stations returned.
#> ────────────────────────────────────────────────────────────────────────────────
#> # A tibble: 288 × 8
#> station_id timestamp value parameter unit provider_name
#> * <chr> <dttm> <dbl> <chr> <chr> <chr>
#> 1 3-100 2026-10-12 00:00:00 172. water_discharge_tur… m3/s hydroquebec
#> 2 3-100 2026-10-12 00:00:00 172. water_discharge m3/s hydroquebec
#> 3 3-100 2026-10-12 00:00:00 0 water_discharge_spi… m3/s hydroquebec
#> 4 3-100 2026-10-12 01:00:00 0 water_discharge_spi… m3/s hydroquebec
#> 5 3-100 2026-10-12 01:00:00 171. water_discharge_tur… m3/s hydroquebec
#> 6 3-100 2026-10-12 01:00:00 171. water_discharge m3/s hydroquebec
#> 7 3-100 2026-10-12 02:00:00 0 water_discharge_spi… m3/s hydroquebec
#> 8 3-100 2026-10-12 02:00:00 172. water_discharge_tur… m3/s hydroquebec
#> 9 3-100 2026-10-12 02:00:00 172. water_discharge m3/s hydroquebec
#> 10 3-100 2026-10-12 03:00:00 172. water_discharge m3/s hydroquebec
#> # ℹ 278 more rows
#> # ℹ 2 more variables: quality_code <chr>, qf_desc <chr>
hc_list_sources()
If you use data accessed through hydrocan in your work, please cite the
original data source. Use hc_citation() to get a formatted citation
and BibTeX entry:
hc_citation("hydroquebec")
#> To cite 'hydroquebec' data in publications use:
#>
#> Hydro-Québec (2026). "Débits et apports naturels aux installations
#> d’Hydro-Québec." Accessed via the hydrocan R package License: CC
#> BY-NC 4.0,
#> <https://donnees.hydroquebec.com/explore/dataset/donnees-hydrometriques/information/>.
#>
#> A BibTeX entry for LaTeX users is
#>
#> @Misc{,
#> title = {Débits et apports naturels aux installations d’Hydro-Québec},
#> year = {2026},
#> note = {Accessed via the hydrocan R package License: CC BY-NC 4.0},
#> author = {{Hydro-Québec}},
#> url = {https://donnees.hydroquebec.com/explore/dataset/donnees-hydrometriques/information/},
#> }