# German Weather Forecast (DWD MOSMIX) – Hourly & Daily (`opendata-souce2026/german-weather-forecast-dwd`) Actor

Official 10-day weather forecast from the Deutscher Wetterdienst (DWD MOSMIX) for ~5,600 stations in Germany and worldwide: temperature, rain and rain probability, wind and gusts, clouds, sunshine, solar radiation, thunderstorm risk. Hourly or daily. Search by town or coordinates. CC BY 4.0.

- **URL**: https://apify.com/opendata-souce2026/german-weather-forecast-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 Forecast (DWD MOSMIX) – Hourly & Daily

Get the **official 10-day weather forecast of the Deutscher Wetterdienst (DWD)**, Germany's national weather service, for any German town – as clean JSON, CSV or Excel. Hourly or as a daily summary.

The data is **MOSMIX**, the DWD's statistically optimised point forecast. It combines the ICON and ECMWF weather models with decades of station observations, and it is the forecast behind many German weather apps. It covers **~5,600 stations**: the whole of Germany, plus larger cities and airports across Europe and the world.

- 🌡️ **Temperature**, dew point, humidity
- 🌧️ **Precipitation** (mm per hour) and **chance of rain**, snow, freezing rain
- 💨 **Wind** speed, direction and **gusts**
- ☁️ **Cloud cover**, **sunshine minutes**, visibility, air pressure
- ☀️ **Solar radiation** (W/m², kWh/m² per day) – useful for PV yield estimates
- ⛈️ **Thunderstorm** and **fog** probability, plus a plain-language weather description (EN or DE)

Search by **town name** (`"Köln"`, `"Munich"`, `"Sylt"`), **station ID**, **airport code** or **coordinates** (nearest station). No API key, no scraping, no login.

### What can I use it for?

- ☀️ **Solar & energy** – hourly radiation, sunshine and cloud forecasts for PV and heat-pump planning, energy trading inputs.
- 🏗️ **Construction, agriculture & logistics** – plan concrete pours, spraying, harvests or deliveries around rain, frost and wind gusts.
- 🎪 **Events, tourism & retail** – staff and stock for the weather: rain chance and max temperature by day.
- 📱 **Apps, dashboards & smart home** – a reliable German forecast feed without signing up for a weather API.
- 🤖 **AI agents** – call it as a tool via the Apify MCP server: *"Will it rain in Hamburg on Saturday?"*

The DWD updates MOSMIX_L every 6 hours (issued about 03, 09, 15 and 21 UTC). Schedule the tool once or a few times a day for a fresh feed.

### Example input

```json
{
  "stations": ["Berlin", "München", "Köln"],
  "output": "daily",
  "days": 7
}
```

Or by coordinates – the nearest station to Frankfurt's city centre, next 24 hours:

```json
{ "latitude": "50.11", "longitude": "8.68", "output": "hourly", "hours": 24 }
```

### Example output

**Daily** (one row per station and day):

```json
{
  "stationId": "10382",
  "stationName": "BERLIN-TEGEL",
  "latitude": 52.57,
  "longitude": 13.32,
  "issuedAt": "2026-10-07T15:00:00.000Z",
  "date": "2026-10-08",
  "completeDay": true,
  "temperatureMinC": 9.9,
  "temperatureMaxC": 16.6,
  "precipitationMm": 2.6,
  "maxPrecipitationProbabilityPct": 59,
  "rainyHours": 11,
  "weather": "light rain",
  "sunshineHours": 0.9,
  "solarEnergyKwhM2": 1.14,
  "windGustMaxKmh": 42.6
}
```

**Hourly** (one row per station and hour):

```json
{
  "stationId": "10382",
  "stationName": "BERLIN-TEGEL",
  "time": "2026-10-08T12:00:00.000Z",
  "localDate": "2026-10-08",
  "localTime": "14:00",
  "temperatureC": 16.6,
  "relativeHumidityPct": 79,
  "precipitationMm": 0.3,
  "precipitationProbabilityPct": 52,
  "weatherCode": 61,
  "weather": "light rain",
  "cloudCoverPct": 100,
  "sunshineMin": 3,
  "solarRadiationWm2": 172,
  "windSpeedKmh": 16.7,
  "windGustKmh": 33.3,
  "windDirectionDeg": 263,
  "pressureHpa": 1002.8,
  "thunderstormProbabilityPct": 0
}
```

(Real values from a forecast issued on 7 October 2026.)

A **summary** with the stations used (and their distance when you search by coordinates), forecast issue time and weather models is saved in the key-value store under `OUTPUT`.

### Fields

| Hourly field | Meaning |
|---|---|
| `time` / `localDate`, `localTime` | End of the forecast hour in UTC / in your time zone |
| `temperatureC`, `dewPointC`, `relativeHumidityPct` | 2 m temperature, dew point, humidity |
| `precipitationMm`, `precipitationProbabilityPct` | Precipitation in the past hour; chance of more than 0.1 mm |
| `snowWaterEquivalentMm` | Snow / sleet part of the precipitation (water equivalent) |
| `weatherCode`, `weather` | Significant weather (WMO code) and description |
| `cloudCoverPct`, `sunshineMin`, `solarRadiationWm2` | Total cloud cover, sunshine in the past hour, mean global radiation |
| `windSpeedKmh`, `windGustKmh`, `windDirectionDeg` | 10 m wind, maximum gust in the past hour, direction |
| `pressureHpa`, `visibilityKm` | Sea-level pressure, visibility |
| `thunderstormProbabilityPct`, `fogProbabilityPct` | Chance of a thunderstorm / fog in the past hour |

Daily rows have min/mean/max temperature, precipitation total, rainy hours, max rain chance, main (most significant) weather, sunshine hours, solar energy, mean wind, max gust, max thunderstorm chance, and `completeDay` (false for the rest of today).

### Notes

- Town search uses the DWD station names (e.g. *Hamburg* → Hamburg-Fuhlsbüttel, *München* → München-Stadt). English names of big cities work too. If a small town has no station, use coordinates – the nearest station is usually a few km away; `distanceKm` tells you how far.
- MOSMIX is a forecast for the station location. Mountain stations (e.g. Zugspitze, Brocken, Feldberg) have their own forecast.
- Each station is one small download (~20 kB) from the DWD; there is a limit of 100 stations per run.

### Pricing

You pay only per row returned – no monthly fee. A 7-day daily forecast for one town is 7 rows; 48 hours hourly is 48 rows.

### Source and license

Data: **Deutscher Wetterdienst**, MOSMIX_L from the [DWD open data server](https://opendata.dwd.de/weather/local_forecasts/mos/), 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)). Units are converted (K → °C, m/s → km/h, Pa → hPa, kJ/m² → W/m²) and daily values are aggregated from the hourly forecast. Please keep this attribution when you publish the data. This tool is independent and not affiliated with or endorsed by the DWD.

# Actor input Schema

## `stations` (type: `array`):

Town names (e.g. "Berlin", "München", "Köln", "Sylt", "Zugspitze"), DWD/WMO station IDs (e.g. "10382") or airport ICAO codes (e.g. "EDDF"). Most German towns have a station; abroad mainly larger cities and airports.

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

Get the forecast of the nearest DWD station to this point, e.g. 50.94. Give longitude too.

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

Longitude of the point, e.g. 6.96.

## `nearestCount` (type: `integer`):

How many stations around the coordinates to return (1 = only the nearest).

## `output` (type: `string`):

Hourly: one row per station and hour. Daily: one row per station and local day with min/max temperature, rain total, sunshine hours, maximum gust and main weather.

## `hours` (type: `integer`):

How far ahead the hourly forecast goes, 1 to 240 hours (10 days).

## `days` (type: `integer`):

Number of days for the daily summary, starting today, 1 to 10.

## `timeZone` (type: `string`):

IANA time zone for local times and for grouping days, e.g. Europe/Berlin or UTC. Timestamps in the time field are always UTC.

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

Language of the weather descriptions.

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

Safety limit for the number of stations per run (each station is one small download from the DWD).

## Actor input object example

```json
{
  "stations": [
    "Berlin",
    "München"
  ],
  "nearestCount": 1,
  "output": "hourly",
  "hours": 48,
  "days": 7,
  "timeZone": "Europe/Berlin",
  "language": "en",
  "maxStations": 20
}
```

# Actor output Schema

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

One row per station and hour (hourly) or per station and day (daily).

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

Stations used (with distance when searched by coordinates), forecast issue time, weather models and row count.

# 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 = {
    "stations": [
        "Berlin",
        "München"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("opendata-souce2026/german-weather-forecast-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 = { "stations": [
        "Berlin",
        "München",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("opendata-souce2026/german-weather-forecast-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 '{
  "stations": [
    "Berlin",
    "München"
  ]
}' |
apify call opendata-souce2026/german-weather-forecast-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-forecast-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/lwkQWi4ejS6eWa4d6/builds/I0fzgMloHAmieSoAy/openapi.json
