# German Weather Warnings (DWD) – Storm, Snow, Ice (`opendata-souce2026/german-weather-warnings-dwd`) Actor

Official weather warnings for Germany from the Deutscher Wetterdienst (DWD) open data server: storm, thunderstorm, heavy rain, snow, ice, fog, frost, heat and more. Filter by severity, type, federal state, town or exact coordinates. English or German. CC BY 4.0.

- **URL**: https://apify.com/opendata-souce2026/german-weather-warnings-dwd.md
- **Developed by:** [Taylor Ford](https://apify.com/opendata-souce2026) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

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/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

## German Weather Warnings (DWD) – Storm, Snow, Ice

Get the **official weather warnings for Germany** from the **Deutscher Wetterdienst (DWD)**, the national weather service – the same warnings shown in the WarnWetter app and on dwd.de, as clean JSON, CSV or Excel.

**Storm, thunderstorm, heavy rain, hail, snow, black ice, frost, fog, heat, UV** and more, for every municipality in Germany, with **severity level 1–4**, start and end time, description and safety instructions – in **English or German**.

Filter by **severity**, **type of weather**, **federal state**, **town name**, or **exact coordinates** ("is my warehouse inside a warning area?"). No API key, no scraping, no login.

### What can I use it for?

- 🚚 **Logistics & fleets** – check depots, routes and delivery areas for storm, snow and ice warnings every morning.
- 🏗️ **Construction, events & facility management** – crane and roof work, open-air events, winter road service.
- 🛡️ **Insurance & risk** – log which locations were under a severe weather warning, and when.
- 📱 **Apps, websites & smart home** – show warnings for your users' towns; trigger alerts when level 3 (Unwetter) is reached.
- 🤖 **AI agents** – call it as a tool via the Apify MCP server: *"Are there any storm warnings for Hamburg right now?"*

Run it on a **schedule** (e.g. every 30 minutes) with your locations to get a monitoring feed.

### Data you get

One row per warning (or per warning and municipality):

| Field | Meaning |
|---|---|
| `event`, `eventGroup`, `eventCode` | Kind of weather, e.g. "gale-force gusts" / `WIND` / DWD code 52 |
| `severity`, `level`, `levelName` | Minor/Moderate/Severe/Extreme = DWD level 1–4 |
| `headline`, `description`, `instruction` | Official texts in English or German |
| `onset`, `expires`, `onsetUtc`, `expiresUtc` | When the warning applies (German local time and UTC) |
| `isPreliminary` | `true` for advance information (Vorabinformation) before a possible severe weather warning |
| `states`, `areas`, `areaCount`, `warnCellIds` | Affected federal states and municipalities (with DWD warn cell ids) |
| `isCoastal` | `true` for coast and sea warnings (e.g. "Helgoland", "Elbe von Hamburg bis Cuxhaven"). These have no polygon and no state, so find them with `place` or `warnCellIds` rather than coordinates |
| `parameters` | Measured/expected values, e.g. gust speed, rain amount, visibility |
| `altitudeFromM`, `altitudeToM` | Height band, when the warning only applies above/below a height |
| `distanceKm` | 0 if your point is inside the warning area, otherwise the distance (with a radius) |
| `geometry` | Warning area as GeoJSON MultiPolygon (optional) |
| `color`, `id`, `sent`, `msgType` | DWD map colour, warning id, issue time, Alert/Update |

In per-municipality mode each row has `area`, `warnCellId` and `state` instead of the lists.

A **summary** (number of matching and active warnings, highest level, counts by severity, type and state) is saved in the key-value store under `OUTPUT`.

### Example input

```json
{
  "language": "en",
  "minSeverity": "Moderate",
  "latitude": "53.55",
  "longitude": "9.99",
  "radiusKm": 20
}
```

#### Example output

```json
{
  "event": "gale-force gusts",
  "eventGroup": "WIND",
  "severity": "Moderate",
  "level": 2,
  "levelName": "Warning of significant weather",
  "headline": "Official WARNING of GALE-FORCE GUSTS",
  "description": "There is a risk of gale-force gusts (level 2 of 4). Max. gusts: 55-70 km/h; from west; ...",
  "onset": "2026-10-07T14:00:00+02:00",
  "expires": "2026-10-07T22:00:00+02:00",
  "states": ["HH", "SH"],
  "areaCount": 12,
  "areas": ["Freie und Hansestadt Hamburg", "Gemeinde Wedel", "..."],
  "distanceKm": 0
}
```

(Values above are illustrative.)

### Notes

- Data is the DWD's current warning status, updated by the DWD every few minutes. Each run downloads it once.
- When there are no warnings matching your filters, the run returns no rows – you are not charged for results then.
- Coverage is Germany only. Coastal and lake (marine) warnings are not included.

### Pricing

You pay only per warning row returned – no monthly fee.

### Source and license

Data: **Deutscher Wetterdienst**, [open data server](https://opendata.dwd.de/weather/alerts/cap/), licensed under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/) (see the DWD's [legal notice](https://www.dwd.de/EN/service/legal_notice/legal_notice_node.html)). Warning area geometry: © GeoBasis-DE / BKG (data modified), [dl-de/by-2-0](https://www.govdata.de/dl-de/by-2-0). Please keep this attribution when you publish the data. This tool is independent and not affiliated with or endorsed by the DWD. For official, safety-critical use, always also consult [dwd.de/warnungen](https://www.dwd.de/warnungen).

# Actor input Schema

## `language` (type: `string`):

Language of event names, headlines, descriptions and instructions.

## `minSeverity` (type: `string`):

Only warnings at this level or higher. DWD levels: 1 weather warning (Minor), 2 significant weather (Moderate), 3 severe weather / Unwetter (Severe), 4 extreme weather (Extreme).

## `eventGroups` (type: `array`):

Only these kinds of weather. Leave empty for all.

## `states` (type: `array`):

Only warnings affecting at least one municipality in these states. Leave empty for all of Germany.

## `place` (type: `string`):

Part of a municipality name, e.g. "Köln", "Muenchen" or "Bad Ems". Umlauts can be typed as ae/oe/ue or left out.

## `latitude` (type: `string`):

Only warnings whose warning area contains this point, e.g. 50.94 for Cologne. Give longitude too.

## `longitude` (type: `string`):

Longitude of the point, e.g. 6.96 for Cologne.

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

Also include warnings whose area is within this distance of the point. 0 = only warnings covering the point itself.

## `warnCellIds` (type: `array`):

Exact 9-digit DWD warn cell ids of municipalities (as returned in the warnCellIds field), for precise monitoring of known sites.

## `activeNowOnly` (type: `boolean`):

Leave off to also get warnings announced for later today or tomorrow.

## `includePreliminary` (type: `boolean`):

DWD issues advance information hours before a possible severe weather warning.

## `outputMode` (type: `string`):

One row per warning (with a list of affected municipalities), or one row per warning and municipality (for joining with your own site list).

## `includeGeometry` (type: `boolean`):

Adds a GeoJSON MultiPolygon of the warning area to each row (for maps).

## `maxRows` (type: `integer`):

Safety limit, mainly for per-municipality output during large weather events.

## Actor input object example

```json
{
  "language": "en",
  "minSeverity": "Minor",
  "radiusKm": 0,
  "activeNowOnly": false,
  "includePreliminary": true,
  "outputMode": "perWarning",
  "includeGeometry": false,
  "maxRows": 10000
}
```

# Actor output Schema

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

One row per warning, or per warning and municipality in per-area mode.

## `summary` (type: `string`):

Number of matching and active warnings, highest level, and counts by severity, event type and federal state.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("opendata-souce2026/german-weather-warnings-dwd").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("opendata-souce2026/german-weather-warnings-dwd").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 '{}' |
apify call opendata-souce2026/german-weather-warnings-dwd --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,opendata-souce2026/german-weather-warnings-dwd"
        }
    }
}
```

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/F7dSyEefuT2D00S2T/builds/jtwXjlgJlX77n3ED3/openapi.json
