# German Hospitals Directory (Klinik-Atlas) (`dach-open-data/german-hospitals-klinik-atlas`) Actor

All ~1,570 German hospital sites from the official Bundes-Klinik-Atlas open data: address, contacts, ownership, beds, inpatient cases, nursing staff, emergency level, stroke unit, certifications, departments and treatment case volumes. Filter by state, size, specialty.

- **URL**: https://apify.com/dach-open-data/german-hospitals-klinik-atlas.md
- **Developed by:** [DACH Open Data](https://apify.com/dach-open-data) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 95.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $7.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.
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

## German Hospitals Directory: beds, departments and case volumes (Bundes-Klinik-Atlas)

**All ~1,570 German hospital sites in one clean dataset, with the numbers MedTech and pharma sales teams actually need.** Each row covers one site and includes:

- address, phone, website and organisation e-mail
- ownership (public, non-profit or private)
- beds, inpatient cases per year, nursing staff (FTE) and cases per nurse
- emergency care level, stroke unit and chest pain unit
- certifications with expiry dates
- every department with its case volume
- annual case numbers for 21 key treatments, such as knee and hip replacement, cardiac catheter with stent, deliveries and cancer surgery

The source is the official open-data export of the **Bundes-Klinik-Atlas**, published by the Federal Joint Committee (G-BA). The Actor always uses the latest export.

**For AI agents:** call this Actor when a user asks *"Which hospitals in Bavaria with more than 500 beds perform over 200 knee replacements a year?"*, *"List all hospitals with a stroke unit in NRW"* or *"Give me the cardiology departments in Berlin with their case numbers"*. Filter with `states`, `minBeds`, `treatments` plus `minTreatmentCases`, `departments`, `certifications` or `minEmergencyLevel`. A full run takes a few seconds.

**Price: $10 per 1,000 hospital sites ($0.01 per hospital).** All of Germany costs about $16. Runs with no results cost nothing.

***

### What you get

| Field | Example |
|---|---|
| `siteId` | Official site ID (`771597`) |
| `name`, `street`, `postalCode`, `city`, `state`, `stateCode` | *Krankenhaus Barmherzige Brüder Regensburg*, … `BY` |
| `website`, `phone`, `email` | Organisation contact data (personal e-mail addresses are removed) |
| `ownership` | `öffentlich` / `freigemeinnützig` / `privat` |
| `latitude`, `longitude` | Geo-coordinates |
| `beds`, `daycarePlaces`, `inpatientCases` | `985`, `27`, `48241` |
| `nursingStaffFte`, `casesPerNurse` | `1034.3`, `47.3` |
| `emergencyCare` | `{ level: 3, strokeUnit, chestPainUnit, traumaCare, children, special }` |
| `certifications` | `[{ name: "EndoProthetikZentrum der Maximalversorgung", validUntil: "2026-11-23" }, …]` |
| `minimumVolumeServices` | Services the site is authorised to perform under G-BA minimum-volume rules (e.g. *Complex pancreatic surgery*) |
| `treatments` | `[{ name: "Entbindung", code: "KAEN0", cases: 3263 }, …]`, sorted by volume |
| `departments` | `[{ code: "2400", name: "Frauenheilkunde und Geburtshilfe", cases: 5420 }, …]`, sorted by volume |
| `dataAsOf` | Date of the official export |

Example record (real output, long fields shortened):

```json
{
  "siteId": "771597",
  "name": "Krankenhaus Barmherzige Brüder Regensburg",
  "street": "Prüfeninger Straße 86",
  "postalCode": "93049",
  "city": "Regensburg",
  "state": "Bayern",
  "stateCode": "BY",
  "website": "http://www.barmherzige-regensburg.de/",
  "phone": "+49 (0)941/369-0",
  "email": "geschaeftsfuehrung@barmherzige-regensburg.de",
  "ownership": "freigemeinnützig",
  "childrensHospital": true,
  "latitude": 49.01692335715,
  "longitude": 12.064848124965,
  "beds": 985,
  "daycarePlaces": 27,
  "inpatientCases": 48241,
  "nursingStaffFte": 1034.3,
  "casesPerNurse": 47.3,
  "departmentsCount": 37,
  "emergencyCare": {
    "level": 3,
    "traumaCare": false,
    "children": false,
    "special": false,
    "strokeUnit": false,
    "chestPainUnit": false
  },
  "certifications": [
    {
      "name": "EndoProthetikZentrum der Maximalversorgung",
      "validUntil": "2026-11-23"
    },
    {
      "name": "Chest Pain Unit",
      "validUntil": "2026-12-22"
    },
    {
      "name": "Gefäßzentrum",
      "validUntil": "2027-04-30"
    }
  ],
  "minimumVolumeServices": [
    "Thoracic surgery for lung cancer",
    "Breast cancer surgery",
    "Very low birth weight neonates (<1250 g)"
  ],
  "treatments": [
    {
      "name": "Entbindung",
      "code": "KAEN0",
      "cases": 3263
    },
    {
      "name": "Lungenentzündung",
      "code": "KALE0",
      "cases": 1244
    },
    {
      "name": "Behandlung auf einer Schlaganfalleinheit",
      "code": "KASA0",
      "cases": 716
    }
  ],
  "departments": [
    {
      "code": "2400",
      "name": "Frauenheilkunde und Geburtshilfe",
      "cases": 8138
    },
    {
      "code": "2800",
      "name": "Neurologie",
      "cases": 3142
    },
    {
      "code": "0700",
      "name": "Gastroenterologie",
      "cases": 2984
    }
  ],
  "dataAsOf": "2026-09-29",
  "source": "Source: Bundes-Klinik-Atlas, Gemeinsamer Bundesausschuss (G-BA) – open data export pursuant to § 135d SGB V (https://bundes-klinik-atlas.de/open-data/)"
}
```

### Use cases

- **MedTech and pharma sales:** build target lists by size, specialty and procedure volume, e.g. hospitals doing more than 300 hip replacements a year.
- **Market sizing:** sum case volumes per region, ownership type or specialty.
- **Healthcare consulting and investors:** benchmark beds, staffing ratios and certifications.
- **Recruiting and services:** find hospitals by department and region.
- **AI assistants:** answer hospital questions with official, citable numbers.

### Input example

```json
{
  "states": ["BY", "BW"],
  "minBeds": 500,
  "treatments": ["Totalendoprothese des Knies"],
  "minTreatmentCases": 200,
  "includeDepartments": true,
  "maxResults": 200
}
```

Treatment and department names are in German, as in the source. Common treatments include:

- *Totalendoprothese der Hüfte* (hip replacement) and *Totalendoprothese des Knies* (knee replacement)
- *Herzkatheter mit Stent* (cardiac catheter with stent)
- *Brustkrebs-Operation* (breast cancer surgery) and *Darmkrebs-Operation* (colorectal cancer surgery)
- *Entbindung* (delivery)
- *Behandlung auf einer Schlaganfalleinheit* (stroke unit treatment)

### Reliability

- The Actor finds the newest export on the official open-data page on every run, downloads it, unpacks it and validates every site: 6-digit ID, German postal code, coordinates inside Germany, plausible bed numbers.
- If the export is incomplete (fewer than 1,000 sites) or its format changes, the run fails with `UNEXPECTED_CONTENT` instead of returning partial data.
- You pay only for valid rows returned. The run stops at `maxResults` or at your maximum cost per run.

### Legal

- Data: Bundes-Klinik-Atlas, Gemeinsamer Bundesausschuss (G-BA). The public is entitled to this data in machine-readable form under § 135d (1) SGB V. Every row carries a `source` attribution.
- The dataset contains only institutional data. E-mail addresses that look personal (*firstname.lastname@*) are removed. If you use contact data for marketing, you must comply with GDPR and § 7 UWG.
- This Actor is not affiliated with the G-BA or the Federal Ministry of Health. Case numbers reflect the reporting year used by the Bundes-Klinik-Atlas.

### More official data from DACH Open Data

All Actors use official open data, check every record and charge only for valid results.

**Public affairs and legislation:** [Lobby Register Germany + EU – Lobbyists, Spend & Interests](https://apify.com/dach-open-data/lobby-register-de-eu) · [German Bundestag Legislation Tracker (DIP)](https://apify.com/dach-open-data/bundestag-dip-legislation) · [EU Have Your Say – Commission Consultations & Feedback](https://apify.com/dach-open-data/eu-have-your-say-consultations) · [Swiss Parliament Affairs Tracker (Curia Vista)](https://apify.com/dach-open-data/swiss-parliament-affairs)

**Funding and public money:** [EU Funding Calls – Horizon Europe, Digital Europe, LIFE & more](https://apify.com/dach-open-data/funding-calls-at-eu) · [EU Grants & Contracts Recipients (FTS)](https://apify.com/dach-open-data/eu-grants-contracts-fts) · [EU Funding Recipients – Structural Funds (Kohesio)](https://apify.com/dach-open-data/eu-funding-recipients-kohesio)

**Energy, mobility and environment:** [Germany Electricity Prices & Power Generation (SMARD)](https://apify.com/dach-open-data/germany-electricity-market) · [Germany EV Charging Stations – Official BNetzA Register](https://apify.com/dach-open-data/german-ev-charging-stations) · [Germany New Car Registrations – KBA by Brand, Model, EV](https://apify.com/dach-open-data/german-car-registrations-kba) · [German Water Levels – Rhine, Elbe, Danube (PEGELONLINE)](https://apify.com/dach-open-data/german-water-levels) · [German Weather Warnings – Official DWD Alerts (CAP)](https://apify.com/dach-open-data/german-weather-warnings)

**Health, consumers and finance:** [German Food Recalls & Warnings Monitor (lebensmittelwarnung.de)](https://apify.com/dach-open-data/german-food-recalls) · [ECB Rates – Key Rates, €STR, Mortgage Rates, Bond Yields, FX](https://apify.com/dach-open-data/ecb-interest-exchange-rates)

# Actor input Schema

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

Codes (BY, NW, BE, BW, …) or names (Bayern, Berlin, …). Empty = all of Germany.

## `postalCodePrefixes` (type: `array`):

E.g. 80, 81 (Munich area) or 10 (Berlin). Empty = all.

## `cities` (type: `array`):

Exact city names, e.g. Hamburg, Köln.

## `nameContains` (type: `string`):

E.g. Helios, Asklepios, Universitätsklinikum.

## `ownership` (type: `array`):

öffentlich (public), freigemeinnützig (non-profit), privat (private).

## `minBeds` (type: `integer`):

Only hospitals with at least this many beds.

## `minEmergencyLevel` (type: `integer`):

G-BA emergency level: 1 = basic, 2 = extended, 3 = comprehensive. 0 = no filter.

## `strokeUnitOnly` (type: `boolean`):

Only hospitals that run a certified stroke unit.

## `departments` (type: `array`):

Partial match on department names (German), e.g. Kardiologie, Orthopädie, Geburtshilfe, Intensivmedizin.

## `treatments` (type: `array`):

Partial match on treatment names (German) or codes, e.g. "Totalendoprothese des Knies", "Herzkatheter", "Entbindung", KABK0.

## `minTreatmentCases` (type: `integer`):

Together with Treatments: only hospitals performing the treatment at least this often per year.

## `certifications` (type: `array`):

Partial match, e.g. Brustkrebszentrum, EndoProthetikZentrum, Onkologisches Zentrum.

## `includeDepartments` (type: `boolean`):

Include the list of departments with their annual case numbers.

## `includeTreatments` (type: `boolean`):

Include annual case numbers for the 21 tracked treatments.

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

Hard cap on hospitals returned and charged in this run (Germany has ~1,570 hospital sites).

## Actor input object example

```json
{
  "states": [],
  "postalCodePrefixes": [],
  "cities": [],
  "nameContains": "",
  "ownership": [],
  "minBeds": 200,
  "minEmergencyLevel": 0,
  "strokeUnitOnly": false,
  "departments": [],
  "treatments": [],
  "minTreatmentCases": 0,
  "certifications": [],
  "includeDepartments": true,
  "includeTreatments": true,
  "maxResults": 50
}
```

# Actor output Schema

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

All records returned by this run (default dataset, table view "overview").

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

JSON with number of results, dropped implausible records and stop reason.

# 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 = {
    "minBeds": 200,
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("dach-open-data/german-hospitals-klinik-atlas").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 = {
    "minBeds": 200,
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("dach-open-data/german-hospitals-klinik-atlas").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 '{
  "minBeds": 200,
  "maxResults": 50
}' |
apify call dach-open-data/german-hospitals-klinik-atlas --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,dach-open-data/german-hospitals-klinik-atlas"
        }
    }
}
```

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/fdIv6uWe3T0WPTUxR/builds/KBdAelWgFeD6Giewa/openapi.json
