# German Radiation Levels – Gamma Dose Rate (BfS ODL) (`opendata-souce2026/german-radiation-levels-bfs`) Actor

Official ambient gamma dose rate (radioactivity) from about 1,700 stations of the German Federal Office for Radiation Protection (BfS). Latest hour, hourly last 7 days or daily last year, by state, town, postcode or near a location.

- **URL**: https://apify.com/opendata-souce2026/german-radiation-levels-bfs.md
- **Developed by:** [Taylor Ford](https://apify.com/opendata-souce2026) (community)
- **Stats:** 2 total users, 1 monthly users, 75.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 Radiation Levels – Gamma Dose Rate (BfS ODL)

Get **official radiation measurements for Germany**: the ambient gamma dose rate (*Ortsdosisleistung*, ODL) from about **1,700 automatic measuring stations** of the **Bundesamt für Strahlenschutz** (BfS, German Federal Office for Radiation Protection) – the network that would raise the alarm after a nuclear incident.

Ask for the **latest hourly value of every station**, the **hourly values of the last 7 days**, or **daily values for about the last 12 months**. Filter by **federal state**, **town or postcode**, **station**, or **near any location** ("the 3 stations closest to my address"). No API key, no scraping, no login.

### What can I use it for?

- 📱 **Apps, dashboards & smart home** – show the current radiation level near the user, next to weather and air quality.
- 🚨 **Monitoring & alerts** – run it every hour on a schedule with "Only values at or above" to get notified only when a station reads unusually high.
- 🏭 **Industry, insurance & ESG** – document background radiation around sites, plants or properties.
- 📰 **Journalism & research** – compare regions (granite areas like the Bavarian Forest or the Ore Mountains read higher), study rain-related peaks.
- 🤖 **AI agents** – call it as a tool via the Apify MCP server: *"What is the radiation level in Munich right now?"*

### Data you get

One row per station (latest) or per station and hour/day (history):

| Field | Meaning |
|---|---|
| `stationName`, `stationId`, `stationCode`, `postalCode` | The station (town name, international id like `DEZ0001`, BfS code) |
| `state`, `stateCode`, `latitude`, `longitude`, `altitudeM` | Where it is |
| `status`, `operating` | In operation, out of service or test mode |
| `start`, `end`, `interval` | Measuring period in UTC (`1h` or `1d`) |
| `doseRate` | Ambient gamma dose rate in **µSv/h** |
| `doseRateCosmic`, `doseRateTerrestrial` | Cosmic and terrestrial parts (latest values) |
| `validated` | `true` = checked by the BfS, `false` = not yet checked |
| `distanceKm` | Distance to your location (when you give coordinates) |

A **summary** (mean, min and max, the 10 highest stations, averages by state) is saved in the key-value store under `OUTPUT`.

### Example input

```json
{
  "period": "latest",
  "latitude": "48.137",
  "longitude": "11.575",
  "maxStations": 3
}
```

Hourly history for two stations:

```json
{
  "period": "last7DaysHourly",
  "stationIds": ["DEZ0001", "DEZ3498"]
}
```

#### Example output

```json
{
  "stationId": "DEZ3498",
  "stationCode": "091891141",
  "stationName": "Chieming",
  "postalCode": "83339",
  "stateCode": "BY",
  "state": "Bayern",
  "latitude": 47.88,
  "longitude": 12.54,
  "altitudeM": 495,
  "status": "in Betrieb",
  "operating": true,
  "start": "2026-10-08T05:00:00Z",
  "end": "2026-10-08T06:00:00Z",
  "interval": "1h",
  "doseRate": 0.127,
  "doseRateCosmic": 0.049,
  "doseRateTerrestrial": 0.078,
  "unit": "µSv/h",
  "validated": true
}
```

### How to read the values

- Natural background in Germany is about **0.05 to 0.18 µSv/h**, depending on the local rock and soil and on altitude (more cosmic radiation higher up).
- **Short peaks after rain** are normal: rain washes natural radon decay products out of the air.
- Since 1 July 2025 the BfS uses a revised calculation method, which raised values slightly.
- New hourly values are usually published within about an hour; unchecked values (`validated: false`) may still be corrected.

### Pricing

You pay only per row returned – no monthly fee. The latest values of all ~1,700 stations are one row each.

### Source and license

Data: **Bundesamt für Strahlenschutz (BfS), ODL-Messnetz**, published as open data under the BfS free data licences ([Datenlizenz Deutschland – Namensnennung – Version 2.0](https://www.govdata.de/dl-de/by-2-0) / GeoNutzV). Please name the source when you publish the data and present it factually. This tool is independent and not affiliated with or endorsed by the BfS. It is not a warning system – in an emergency follow the official authorities.

# Actor input Schema

## `period` (type: `string`):

Latest = the most recent 1-hour value for every station. History is fetched per station and limited to 50 stations per run.

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

Only stations in these states. Leave empty for all of Germany.

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

Town / station name contains this text (e.g. "Freiburg", umlauts optional), or a postcode prefix (e.g. "80" or "10115").

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

Exact station ids (e.g. DEZ0001) or station codes (e.g. 010010001). Leave empty for all.

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

With longitude, sorts stations by distance and adds a distanceKm field. Example: 52.52

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

Example: 13.405

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

Only stations within this distance of the location above.

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

Keep at most N stations (the closest ones when a location is given).

## `onlyOperating` (type: `boolean`):

Skip stations that are currently out of service or in test mode.

## `minDoseRate` (type: `string`):

Return only values at or above this dose rate, e.g. 0.2 - handy for alerts. Typical natural background is about 0.05 to 0.18 µSv/h.

## Actor input object example

```json
{
  "period": "latest",
  "onlyOperating": true
}
```

# Actor output Schema

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

One row per station and measuring period with the gamma dose rate in µSv/h.

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

Mean, minimum and maximum dose rate, highest stations and averages by 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-radiation-levels-bfs").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-radiation-levels-bfs").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-radiation-levels-bfs --silent --output-dataset

```

## MCP server setup

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

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/36GqdgbIjMaCTMuJ3/builds/C4XcOiLHsFcSzteru/openapi.json
