IMGW-PIB data - how to download and use it in water monitoring

Knowledge base · July 9, 2026

Many of your own measurements only make sense in the context of weather and hydrology - and in Poland this data is publicly available, free of charge, thanks to IMGW-PIB (the Institute of Meteorology and Water Management - National Research Institute). It is worth knowing what you will find there and how to use it.

What IMGW-PIB provides

  • Meteorological data - including air temperature, rainfall, wind, pressure, humidity.
  • Hydrological data - including water levels and flows at gauging stations.
  • Warnings and information on the hydrological-meteorological situation.

How to download it - a worked example

The Polish service IMGW-PIB is used here as a case study: the pattern repeats across most national hydrometeorological services, so it is worth learning the mechanism rather than a list of addresses. Everything starts at danepubliczne.imgw.pl, which has two parts - a file archive and an API serving current data.

AddressWhat it returnsUpdate
danepubliczne.imgw.pl/api/data/synopsynoptic stations: air temperature, rainfall, wind, pressure, humidityhourly
danepubliczne.imgw.pl/api/data/hydrowater levels, discharge and water temperature at gauging stationshourly
danepubliczne.imgw.pl/api/data/hydro2extended hydrological set (daily levels)daily
danepubliczne.imgw.pl/api/data/meteoclimatological stations (incl. ground temperature)hourly

Two parameters cover most needs: one station instead of all - …/api/data/hydro/id/152210040 (you append /id/<code>), and a different format - …/api/data/synop/format/csv (JSON by default; html and xml also exist).

The response is an array of flat objects - one per station, no nesting; with /id/<code> it is an array with a single object. A fragment of a real response for the Vistula gauge at Warsaw-Nadwilanówka:

[{
  "id_stacji": "152210040",
  "stacja": "Warszawa - Nadwilanówka",
  "rzeka": "Wisła",
  "rzedna_zerawodowskazu": "76.805",
  "stan_alarmowy": "800",
  "stan_ostrzegawczy": "750",
  "stan_wody": "44",
  "stan_wody_data_pomiaru": "2026-08-12 16:50:00",
  "temperatura_wody": null,
  "przeplyw": "181",
  "przeplyw_data": "2026-08-12 16:50:00"
}]

Four things that are easy to trip over - and that you will meet in most public APIs:

  1. Values arrive as text, not numbers ("stan_wody": "44") - cast them before any arithmetic.
  2. null is normal. Water temperature is often empty when a sensor is down - that is a missing measurement, not a failed download. Skip such records; never replace them with zero.
  3. Each field has its own timestamp (stan_wody_data_pomiaru, przeplyw_data) - one record can carry measurements taken at different hours.
  4. Timestamps are in UTC, not Polish local time, although the API does not declare it - 16:50:00 in the record is 18:50 summer time (17:50 winter time). When combining with your own measurements, convert the time zone; the LimnoLog connector does it for you (source time zone UTC).

The hydrological record also contains the warning and alarm stages of the gauge and the gauge datum elevation (rzedna_zerawodowskazu, m a.s.l.). The stages are in centimetres above the datum of that gauge - not above the bed and not above the zero of your own staff gauge. A reading from the same gauge you can compare with them directly. Your own sensor has its own zero, so first convert both readings to elevation in m a.s.l. and make sure both are in the same vertical datum (the IMGW API gives the datum elevation in EVRF2007 - as follows from the notice on the change of the Bulwary datum; your own levelling may be in the older Kronstadt 86 system) - and only for the same spot on the river, because a few kilometres away the water level is already different. The datum and the stages are sometimes changed together: Warszawa-Bulwary, 1 Nov 2025 - datum lowered by 100 cm, conventional stages raised by 100 cm (warning stage from 600 to 700 cm, alarm from 650 to 750 cm; IMGW-PIB/Wody Polskie navigation notice). Record the date of the threshold you compare against, and take thresholds from the current record, not from the archive.

Archival data

The live API returns only the latest measurement. Historical series (daily and monthly, decades back) are in the file archive: danepubliczne.imgw.pl/datastore - directories of CSV/ZIP files for meteorological and hydrological data.

Terms of use

The data are free of charge, but the terms require attribution: publications based on them must state that the data come from IMGW-PIB, and if the data were processed - add a note about the processing. Full text: terms of provision. Check the equivalent rule for your own national service - free almost never means “no conditions”.

What to use it for

IMGW data is ready-made context for your measurements:

In practice

📊 See a working example: Vistula - Warsaw (Nadwilanówka) - a public dashboard fed by exactly this API, the address …/api/data/hydro/id/152210040 from the example above. Water level and discharge pulled automatically every hour, with no login and no manual stitching of files. (Source of the data: Institute of Meteorology and Water Management - National Research Institute.)

You can connect your own gauge in the same way: in LimnoLog connectors query public APIs at a chosen rhythm and save the results next to your own measurements, on a shared timeline. More on combining data in How to combine your own measurements with public data.

See it in the LimnoLog app

Explore LimnoLog features
Knowledge base