# Ireland River Levels, Flow & Water Temperature (OPW) (`denjino/ireland-river-levels-flow-opw`) Actor

Official OPW hydrometric data for the Republic of Ireland: river and lake water level, river flow and water temperature from about 400 stations. Daily mean/min/max back to the 1950s-1990s, 15-minute data for the last month, annual maxima. No API key.

- **URL**: https://apify.com/denjino/ireland-river-levels-flow-opw.md
- **Developed by:** [John Martinez](https://apify.com/denjino) (community)
- **Categories:** Integrations
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Ireland River Levels, Flow & Water Temperature (OPW)

River and lake levels, river flow and water temperature for the Republic of Ireland, from about 400 official OPW stations: 15-minute readings for the last month and daily figures back decades.

Official hydrometric data from the **Office of Public Works (OPW)** Hydro-Data service for the Republic of Ireland, as clean rows. No API key, no account.

- **Water level** at rivers, lakes and tidal gauges, **river flow** at ~300 flow stations, and **water temperature**, from roughly 400 republishable OPW stations.
- **Daily** mean/min/max for the full period of record (many stations go back to the 1950s-1990s).
- **15-minute** readings for about the last month.
- **Annual maxima** (yearly peak level or flow), the series used in flood frequency studies.
- Filter by **river or lake**, **catchment**, **station name**, **station numbers**, **station type** or **distance from a point** (nearest first).
- A **station directory** mode lists stations with coordinates, waterbody, catchment, river basin district, catchment area, gauge datum and OPW's station description.

Pairs with our *UK River Flow, Rainfall & Groundwater (EA Hydrology)* and *Scotland River Levels, Flow, Rainfall & Tides (SEPA)* tools for coverage across Great Britain and Ireland.

### Uses

Flood risk and insurance, hydropower and abstraction planning, angling and paddling conditions, Shannon navigation, agriculture, environmental consultancy, research and dashboards.

### Example input

```json
{ "dataType": "riverFlow", "waterbody": "Shannon", "maxStations": 3, "maxResults": 100 }
```

### Output (one row per station and period)

`stationId, stationName, waterbody, catchment, riverBasinDistrict, stationClass, latitude, longitude, distanceKm, catchmentAreaKm2, gaugeDatum, gaugeDatumUnit, dataType, resolution, date, dateTime, unit, value | mean | min | max, aggregationCoveragePct, series (annual maxima), qualityCode, sourceUrl, licence, scrapedAt`. Rows are newest first. Water levels are in metres above Ordnance Datum (usually Malin Head; see `gaugeDatumUnit`).

### Run it on a schedule

Save your input as a task and add it to Apify Schedules (for example, daily at 07:00) to get a fresh table every day. Each run can be pushed to Google Sheets, a webhook, Slack or your database through Apify integrations.

### Pricing

**$1.00 per 1,000 rows** on the Free and Bronze plans, $0.90 per 1,000 on Silver and $0.80 per 1,000 on Gold, plus a start fee of $0.005 per GB of run memory. A typical run of a few hundred rows costs well under $1.

### Important: data quality

OPW states that its data is provisional, unchecked and not validated, may contain errors or gaps, and is provided without any warranty. Check it is fit for your purpose before relying on it, and pass these notes on to anyone you share the data with. Full terms: [OPW Hydro-Data disclaimer](https://waterlevel.ie/hydro-data/html/disclaimer.html) and [waterlevel.ie data quality notes](https://waterlevel.ie/faq/). `qualityCode` is OPW's own code, passed through as published. For river flow, OPW often leaves the daily mean blank for recent months until it has been checked, so recent daily flow rows may carry only `min` and `max`; use `resolution: "15min"` for the latest flow values.

Only stations numbered 00001-41000 are included, as OPW permits republication of those only. Rain gauges are not included.

If OPW's service is down the run finishes with a single `UPSTREAM_OUTAGE` row (not charged) instead of failing.

### Licence

Contains Irish Public Sector Information licensed under a [Creative Commons Attribution 4.0 International (CC BY 4.0)](https://creativecommons.org/licenses/by/4.0/) licence (source [waterlevel.ie](https://waterlevel.ie) - provided by the Office of Public Works). Not affiliated with the OPW.

### Like this? See my other UK data Actors

- [UK EV charging stations – live status & prices](https://apify.com/denjino/uk-ev-chargepoints-open-data)
- [NHS GP practices, pharmacies & dentists list](https://apify.com/denjino/nhs-ods-organisations)
- [UK water quality & sewage data (EA)](https://apify.com/denjino/uk-water-quality-archive)
- [UK air quality – live DEFRA readings](https://apify.com/denjino/uk-air-quality-defra)
- [UK product recalls & MHRA alerts monitor](https://apify.com/denjino/uk-safety-alerts-recalls)
- [England river levels, flow & rainfall (EA)](https://apify.com/denjino/uk-river-flow-rainfall-groundwater)
- [Scotland river levels & rainfall (SEPA)](https://apify.com/denjino/scotland-river-levels-rainfall-sepa)

# Actor input Schema

## `mode` (type: `string`):

Readings, or only the station directory (to find station IDs).

## `dataType` (type: `string`):

Which OPW measurement to fetch.

## `resolution` (type: `string`):

Daily summaries, recent 15-minute readings, or the yearly peak series used in flood studies.

## `waterbody` (type: `string`):

Optional, partial match, e.g. 'Shannon', 'Liffey', 'Corrib'.

## `catchment` (type: `string`):

Optional catchment name, partial match, e.g. 'Barrow', 'Moy'.

## `search` (type: `string`):

Optional text search on station name, e.g. 'Athlone'.

## `stationIds` (type: `array`):

Optional OPW station numbers like '25017'. Use mode 'stations' to find them.

## `stationClass` (type: `string`):

Optional filter on OPW's station class.

## `latitude` (type: `number`):

Optional. With longitude, finds stations within the radius, nearest first.

## `longitude` (type: `number`):

Optional longitude for the near-a-point search.

## `radiusKm` (type: `integer`):

Search radius around the point.

## `startDate` (type: `string`):

YYYY-MM-DD. Default: 30 days before the end date (2 days for 15-minute data; whole record for annual maxima).

## `endDate` (type: `string`):

YYYY-MM-DD. Default: today.

## `maxStations` (type: `integer`):

How many matching stations to pull readings for.

## `maxResults` (type: `integer`):

Stop after this many rows (0 = no limit). You pay per row.

## Actor input object example

```json
{
  "mode": "readings",
  "dataType": "waterLevel",
  "resolution": "daily",
  "waterbody": "Shannon",
  "stationClass": "any",
  "radiusKm": 25,
  "maxStations": 5,
  "maxResults": 1000
}
```

# Actor output Schema

## `results` (type: `string`):

One row per station and period.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "waterbody": "Shannon"
};

// Run the Actor and wait for it to finish
const run = await client.actor("denjino/ireland-river-levels-flow-opw").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "waterbody": "Shannon" }

# Run the Actor and wait for it to finish
run = client.actor("denjino/ireland-river-levels-flow-opw").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "waterbody": "Shannon"
}' |
apify call denjino/ireland-river-levels-flow-opw --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,denjino/ireland-river-levels-flow-opw"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/8UDaKAl6sKS24tR7N/builds/HFjcEvyR1cBUF98yz/openapi.json
