# European Drought Monitor (EDO/CDI) — droogtestatus per locatie (`codeclouds/eu-edo-droogtemonitor`) Actor

Haalt de officiële EDO Combined Drought Indicator (Copernicus CEMS/JRC) op voor elke GPS-locatie en geeft de actuele droogteklasse terug (watch/warning/alert/recovery), genormaliseerd naar een NL droogteniveau-schema.

- **URL**: https://apify.com/codeclouds/eu-edo-droogtemonitor.md
- **Developed by:** [Dennis](https://apify.com/codeclouds) (community)
- **Categories:** Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 droogte-statuses

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## European Drought Monitor (EDO — Combined Drought Indicator)

Get the official European drought status for any GPS location in Europe, straight from the **European Drought
Observatory (EDO)** of the Copernicus Emergency Management Service (run by the EU Joint Research Centre). The
actor reads the **Combined Drought Indicator (CDI v4.1)** — EDO's headline 5 km Europe-wide drought
classification — and returns the current drought class (`watch` / `warning` / `alert` / `recovery` / no
drought), normalized into a clean per-location schema.

### When should an AI agent use this?

- "What is the current drought status for Utrecht, the Netherlands?"
- "Which of these European farm locations are under an EDO drought **alert** right now?"
- "Give me the current drought severity for a list of cities for an agri-insurance risk check."
- "Has the EDO Combined Drought Indicator worsened to *warning* or *alert* near this municipality?"
- "Compare drought conditions between several European regions using one consistent index."

### What this Actor does

- Queries EDO's key-free **WCS (Web Coverage Service)** and downloads the Combined Drought Indicator GeoTIFF
  grid for a small window around each requested point (no API key, no login).
- Reads the GeoTIFF georeferencing and samples the exact ~5 km pixel at each lat/lon — robust even when EDO
  slightly resamples the window, because the actor re-reads the returned `ModelTiepoint`/`ModelPixelScale`.
- Classifies each location into EDO's CDI classes and maps them onto a normalized drought-level vocabulary.
- Returns the **raw EDO classification code** alongside the readable label, so no source information is lost.
- Supports an optional historical date (`YYYY-MM-DD`) and up to 500 locations in a single run.

### Input

| Field | Type | Description |
|---|---|---|
| `locaties` | array | GPS points to evaluate: `{ lat, lon, naam? }`. Min 1, max 500. |
| `datum` | string (optional) | Historical date `YYYY-MM-DD` (EDO has ~10-day updates). Empty = latest available. |

### Output

One flat JSON record per requested location:

```json
{
  "naam": "Utrecht",
  "lat": 52.09,
  "lon": 5.12,
  "droogteniveau": "dreigend_watertekort",
  "cdi": {
    "classificatieCode": 1,
    "klasse": "watch",
    "domein": "neerslagtekort",
    "toelichting": "Watch: neerslagtekort (meteorologische droogte)."
  },
  "bron": "European Drought Observatory (Copernicus CEMS) — Combined Drought Indicator v4.1",
  "bronDatum": null,
  "datumOpgehaald": "2026-08-04T17:10:00.000Z",
  "bronUrl": "https://drought.emergency.copernicus.eu/api/wcs?..."
}
```

#### CDI class mapping

| `classificatieCode` | `klasse` | `droogteniveau` | Meaning (EDO domain) |
|---|---|---|---|
| 0 | `no_drought` | `normaal` | No drought |
| 1 | `watch` | `dreigend_watertekort` | Precipitation deficit (meteorological drought) |
| 2 | `warning` | `watertekort` | Soil-moisture deficit |
| 3 | `alert` | `crisis` | Vegetation deficit / impact |
| 4 | `recovery` | `herstel` | Recovering after earlier drought |
| 5 / 6 | `other` | `onbekend` | Rare EDO v4.1 codes; returned as raw code (see Legal) |
| *(geen data)* | `no_data` | `onbekend` | Point outside EDO coverage or fetch failed (see `WARNINGS`); `classificatieCode` is `null` and the location is **not** charged |

### Use cases

- **Agriculture / food-security risk** — flag farm locations currently under CDI `alert`.
- **Insurance & credit risk** — drought-state aggregation across a book of locations.
- **Climate-risk dashboards** — a single, consistent pan-European drought index instead of per-country sources.
- **Site selection** — compare drought pressure between candidate regions in one call.

### Pricing

This Actor uses Apify's Pay-Per-Event (PPE) pricing model.

- **Actor Start:** $0.00005 (Apify default)
- **`droogte-status`:** $0.004 per location with valid CDI data (no charge when no data is available)

### Legal

Data is sourced exclusively from the official **European Drought Observatory (EDO)**, a service of the
Copernicus Emergency Management System run by the EU Joint Research Centre (JRC). It is EU public open data,
key-free, and contains **no personal data** (only environmental classification per grid cell).

**Important disclaimers:**

- This actor reports EDO's *latest known official* CDI classification — it does **not** forecast future drought
  or issue its own drought warnings.
- CDI classes 1–3 (`watch`/`warning`/`alert`) were verified by the developer against EDO's own map legend and
  the JRC monthly drought analyses. EDO v4.1 also uses codes **5 and 6**, which appear in a minority of cells
  (observed e.g. in parts of Poland and Scandinavia) and are not unambiguously documented as a single class; the
  actor returns those as `other` with the raw code preserved so no information is lost.
- The JRC itself notes it is currently investigating soil-moisture model issues that can make the CDI less
  reliable in some regions (notably western Russia and the eastern hydrology domain). Treat the result as
  indicative and cross-check with national authorities for high-stakes decisions.

### FAQ

**Q: Which exact indicator does this use?**
A: The EDO **Combined Drought Indicator (CDI v4.1)** on EDO's standard 5 km (0.0417°) grid, covering Europe.

**Q: Can I get the SPI (precipitation), soil-moisture or low-flow indicators too?**
A: Not in v1. In EDO's public services, CDI is available as a clean machine-readable GeoTIFF without a key.
EDO's other indicators (soil-moisture anomaly, low-flow index) are currently only served as styled map
layers, and the SPI coverage is coarse/categorical. The CDI's `watch`/`warning`/`alert` classes map directly
onto precipitation / soil-moisture / vegetation deficits. More indicators are a possible future version.

**Q: How fresh is the data?**
A: EDO updates roughly every 10 days. Without `datum`, the actor uses EDO's latest available update.

**Q: What if a location has no EDO data?**
A: The record is still returned with `cdi.klasse: "no_data"`, `cdi.classificatieCode: null` and
`droogteniveau: "onbekend"` (and, on a fetch failure, a message in the `WARNINGS` key-value store), but it
is **not** charged.

### Related Actors

- **[Netherlands Water Withdrawal Ban Monitor](https://apify.com/codeclouds/nl-onttrekkingsverbod-monitor)** —
  the legally binding NL per-waterbody withdrawal bans, complementing EDO's EU-wide hazard index with the NL
  regulatory layer.
- **[Spain Drought & Scarcity Monitor](https://apify.com/codeclouds/es-sequia-monitor)** — official MITECO
  reservoir/scarcity indicators per river basin, for the country-level detail behind the EU index.
- **[France Drought Monitor](https://apify.com/codeclouds/fr-secheresse-monitor)** — official VigiEau
  per-commune restriction status.

***

*Zoekwoorden: EDO, Combined Drought Indicator, droogte Europa, Europese droogtemonitor, Copernicus,
neerslagtekort, bodemvochttekort, vegetatie, klimaatrisico, landbouwrisico, droogtekaart.*

### Keywords

europe, drought, droogte, EDO, European Drought Observatory, Copernicus, CEMS, JRC, combined-drought-indicator,
CDI, climate-risk, agriculture-risk, insurance-risk, precipitation, soil-moisture, open-data, geodata

### Changelog

#### 0.1.0

- Initial release: EDO Combined Drought Indicator (v4.1) status per GPS location, normalized to a
  watch/warning/alert/recovery/no-drought vocabulary with the raw EDO code preserved.
- Store description rewritten to lead with the task ("check current EU drought status"), add explicit
  drought-status/drought-risk synonyms, and state the decision benefit (no manual EDO map-reading or
  per-country portal lookups) and price.

# Actor input Schema

## `locaties` (type: `array`):

Lijst van GPS-punten waarvoor de EDO Combined Drought Indicator moet worden opgehaald. Minimaal 1, maximaal 500 per run.

## `datum` (type: `string`):

Optionele historische datum (bijv. '2026-06-11'). Leeg = laatst beschikbare EDO-update.

## Actor input object example

```json
{
  "locaties": [
    {
      "lat": 52.09,
      "lon": 5.12,
      "naam": "Utrecht"
    },
    {
      "lat": 40.4,
      "lon": -3.7,
      "naam": "Madrid"
    }
  ]
}
```

# Actor output Schema

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

Alle resultaten in het default dataset.

# 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 = {
    "locaties": [
        {
            "lat": 52.09,
            "lon": 5.12,
            "naam": "Utrecht"
        },
        {
            "lat": 40.4,
            "lon": -3.7,
            "naam": "Madrid"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("codeclouds/eu-edo-droogtemonitor").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 = { "locaties": [
        {
            "lat": 52.09,
            "lon": 5.12,
            "naam": "Utrecht",
        },
        {
            "lat": 40.4,
            "lon": -3.7,
            "naam": "Madrid",
        },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("codeclouds/eu-edo-droogtemonitor").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 '{
  "locaties": [
    {
      "lat": 52.09,
      "lon": 5.12,
      "naam": "Utrecht"
    },
    {
      "lat": 40.4,
      "lon": -3.7,
      "naam": "Madrid"
    }
  ]
}' |
apify call codeclouds/eu-edo-droogtemonitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,codeclouds/eu-edo-droogtemonitor"
        }
    }
}

```

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/2YHMXSYv8xduE8SCt/builds/HvCy4kxFyfM3sM7pi/openapi.json
