# Germany EV Charging Stations – Official BNetzA Register (`dach-open-data/german-ev-charging-stations`) Actor

All ~116,000 public EV charging stations in Germany from the official Bundesnetzagentur register: operator, address, GPS, power, fast/normal, connectors (CCS, Type 2, CHAdeMO), EVSE IDs, payment, opening hours. Radius search, filters, new-station monitoring. CC BY 4.0.

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

## Pricing

from $1.40 / 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

## Germany EV Charging Stations – Official BNetzA Register

**Get every public EV charging station in Germany as clean, structured data, from the official register of the Bundesnetzagentur (Federal Network Agency).** About 116,000 charging stations with more than 200,000 charge points. Each row is one station. It includes:

- operator (company, municipality or utility)
- address, district, state, GPS coordinates
- fast or normal charger, total power in kW, number of charge points
- connectors per charge point: CCS, Type 2 socket or cable, CHAdeMO, MCS (megawatt charging for trucks), Schuko …
- EVSE IDs (for roaming and OCPI matching)
- payment methods, free of charge or not, opening hours, parking restrictions
- commissioning date and status

Search by **radius around any point**, state, city, postal code, operator, power, connector or commissioning date.

**For AI agents:** call this Actor when a user asks *"Where are fast chargers near 48.137, 11.575?"*, *"Which 300 kW chargers did Tesla open in Bavaria this year?"*, *"How many CCS chargers does Hamburg have?"* or *"List new charging stations in Berlin since July"*. Pass `near` + `radiusKm`, `states`, `cities`, `chargerType`, `minPowerKw`, `connectors`, `operatorContains` or `commissionedAfter`.

**Price: $2 per 1,000 stations ($0.002 per result).** A radius search usually returns 10–500 stations.

***

### What you get

| Field | Example |
|---|---|
| `id` | `1162433`, the register ID of the station |
| `operator`, `displayName` | *Berliner Stadtwerke KommunalPartner GmbH* |
| `chargerType`, `powerKw`, `chargePointCount`, `maxPointPowerKw` | `fast`, `200`, `2`, `200` |
| `connectorCodes` | `["CCS"]`, also `TYPE2_SOCKET`, `TYPE2_CABLE`, `CHADEMO`, `MCS`, `SCHUKO`, `TYPE1`, `CEE`, `TESLA` |
| `chargePoints` | Per charge point: original connector names, codes, power, EVSE ID |
| `street`, `houseNumber`, `postalCode`, `city`, `district`, `state`, `stateCode` | *Ackerstr. 37, 10115 Berlin*, `BE` |
| `latitude`, `longitude`, `distanceKm` | `52.534265`, `13.39248`, `1.8` (with radius search) |
| `paymentMethods`, `freeOfCharge` | `["Onlinezahlungsverfahren","RFID-Karte","Kreditkarte (Lesegerät)", …]`, `false` |
| `open24h`, `openingHours` | `true`, `[{ "day": "Monday", "from": "00:00", "to": "23:59" }, …]` |
| `parking`, `customersOnly` | *Keine Beschränkung*, `false` |
| `commissionedOn`, `status`, `inOperation` | `2026-06-04`, *In Betrieb*, `true` |
| `dataAsOf`, `source` | Date of the register file and attribution |

Example record (real output, long fields shortened):

```json
{
  "id": "1162433",
  "operator": "Berliner Stadtwerke KommunalPartner GmbH",
  "operatorIsPrivatePerson": false,
  "displayName": "Berliner Stadtwerke KommunalPartner GmbH",
  "status": "In Betrieb",
  "inOperation": true,
  "chargerType": "fast",
  "chargerTypeDe": "Schnellladeeinrichtung",
  "chargePointCount": 2,
  "powerKw": 200,
  "maxPointPowerKw": 200,
  "connectorCodes": ["CCS"],
  "commissionedOn": "2026-06-04",
  "street": "Ackerstr.",
  "houseNumber": "37",
  "addressSupplement": null,
  "postalCode": "10115",
  "city": "Berlin",
  "district": "Kreisfreie Stadt Berlin",
  "state": "Berlin",
  "stateCode": "BE",
  "latitude": 52.534265,
  "longitude": 13.39248,
  "locationName": null,
  "parking": "Keine Beschränkung",
  "customersOnly": false,
  "paymentMethods": ["Onlinezahlungsverfahren", "RFID-Karte", "Kreditkarte (Lesegerät)", "Debitkarte (Lesegerät)"],
  "freeOfCharge": false,
  "open24h": true,
  "openingHours": [
    { "day": "Monday", "from": "00:00", "to": "23:59" },
    { "day": "Tuesday", "from": "00:00", "to": "23:59" }
  ],
  "chargePoints": [
    { "connectors": ["DC Fahrzeugkupplung Typ Combo 2 (CCS)"], "connectorCodes": ["CCS"], "powerKw": 200, "evseId": "DE*BSW*E605038*038" },
    { "connectors": ["DC Fahrzeugkupplung Typ Combo 2 (CCS)"], "connectorCodes": ["CCS"], "powerKw": 200, "evseId": "DE*BSW*E605039*039" }
  ],
  "dataAsOf": "2026-09-01",
  "source": "Source: Bundesnetzagentur – Ladesäulenregister (https://www.bundesnetzagentur.de/ladesaeulenkarte), licensed CC BY 4.0",
  "distanceKm": 1.8
}
```

### Use cases

- **EV apps, navigation and fleet tools:** official charging locations with power, connectors and EVSE IDs.
- **Site selection and market analysis:** find white spots, count chargers per city or district, compare operators.
- **Sales for charging hardware, installation and service companies:** monitor new stations by date, operator and region (`commissionedAfter`).
- **Utilities, municipalities and consultants:** charging infrastructure per region, power class and operator.
- **Real estate, retail and hospitality:** chargers near your locations.

### Input examples

Fast chargers within 3 km of Munich city centre:

```json
{ "near": "48.1372, 11.5756", "radiusKm": 3, "chargerType": "fast" }
```

High-power and truck charging (MCS) in Bavaria and Baden-Württemberg:

```json
{ "states": ["BY", "BW"], "minPowerKw": 300, "maxResults": 2000 }
```

New stations since 1 August 2026 (schedule this monthly for a lead feed):

```json
{ "commissionedAfter": "2026-08-01", "maxResults": 10000 }
```

Whole register as a flat table (about 116,000 rows, about $233):

```json
{ "includeChargePoints": false, "maxResults": 200000 }
```

### Reliability and fair use

- The Bundesnetzagentur publishes the register as one file per month (about 55 MB). The Actor finds the latest file on the official page, checks robots.txt and streams the file. A run makes four small requests plus the download. It stops downloading as soon as `maxResults` is reached.
- Every station is validated: ID, status, type, power, number of charge points, five-digit postal code, city and dates. If the file format changes, the run fails with `UNEXPECTED_CONTENT`. You never get garbage. Invalid rows are dropped and not charged. If more than 20% are invalid, the run stops.
- The run stops at `maxResults` or at your maximum cost per run. A typical run takes 15–40 seconds.
- The register only contains stations whose operators completed the notification procedure. Some public stations are therefore missing. This is a limitation of the official source.

### Legal and privacy

- Source: Bundesnetzagentur, Ladesäulenregister. The data is licensed CC BY 4.0. Every row carries the attribution and the date of the register file.
- **Private persons:** about 4% of the stations are operated by private individuals. The Actor detects such operator names and does not return them (`operator: null`, `operatorIsPrivatePerson: true`). The station itself (location, power, connectors) stays in the data. Companies, sole traders with a company name, municipalities and associations stay visible.
- This Actor is not affiliated with the Bundesnetzagentur. The official register is authoritative.

### 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 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 Hospitals Directory (Klinik-Atlas)](https://apify.com/dach-open-data/german-hospitals-klinik-atlas) · [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

## `near` (type: `string`):

Radius search around a point, written as "latitude, longitude", e.g. "48.1372, 11.5756" (Munich) or "52.5200, 13.4050" (Berlin). Each result then gets distanceKm. Leave empty for no radius search.

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

Search radius around "near" in kilometres.

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

Codes (BY, BW, NW, BE, HH, …) or names in German or English ("Bayern", "Bavaria"). Empty = all of Germany.

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

Exact municipality names as in the register, e.g. "München", "Berlin", "Köln" (case-insensitive).

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

E.g. "80" (Munich area), "10" (Berlin), "20" (Hamburg) or full postal codes like "10115".

## `districts` (type: `array`):

Part of the district name, e.g. "Alb-Donau", "Region Hannover", "Kreisfreie Stadt München".

## `chargerType` (type: `string`):

Fast = "Schnellladeeinrichtung" (> 22 kW), normal = "Normalladeeinrichtung" (up to 22 kW).

## `minPowerKw` (type: `integer`):

Only stations with at least this power (station or best charge point), e.g. 150 for high-power charging.

## `connectors` (type: `array`):

Any of: CCS, CHADEMO, TYPE2 (socket or cable), TYPE2_SOCKET, TYPE2_CABLE, MCS (megawatt charging for trucks), TESLA, TYPE1, SCHUKO, CEE. A station matches if it has at least one of them.

## `commissionedAfter` (type: `string`):

Only stations commissioned on or after this date (YYYY-MM-DD). Useful to monitor new installations, e.g. for sales or market analysis.

## `operatorContains` (type: `string`):

Part of the operator name, e.g. "EnBW", "Tesla", "IONITY", "Stadtwerke".

## `onlyFreeOfCharge` (type: `boolean`):

Only stations that list "Kostenlos" (free of charge) as payment method.

## `onlyOpen24h` (type: `boolean`):

Only stations reported as open around the clock.

## `includeChargePoints` (type: `boolean`):

Per charge point: connectors, power and EVSE ID. Switch off for a smaller, flat table.

## `includePublicKeys` (type: `boolean`):

Add the calibration-law public key of each charge point (long hex string, needed only for meter verification).

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

Hard cap on stations returned and charged in this run.

## Actor input object example

```json
{
  "near": "48.1372, 11.5756",
  "radiusKm": 3,
  "states": [],
  "cities": [],
  "postalCodePrefixes": [],
  "districts": [],
  "chargerType": "all",
  "minPowerKw": 0,
  "connectors": [],
  "commissionedAfter": "",
  "operatorContains": "",
  "onlyFreeOfCharge": false,
  "onlyOpen24h": false,
  "includeChargePoints": true,
  "includePublicKeys": false,
  "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 = {
    "near": "48.1372, 11.5756",
    "radiusKm": 3,
    "maxResults": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("dach-open-data/german-ev-charging-stations").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 = {
    "near": "48.1372, 11.5756",
    "radiusKm": 3,
    "maxResults": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("dach-open-data/german-ev-charging-stations").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 '{
  "near": "48.1372, 11.5756",
  "radiusKm": 3,
  "maxResults": 50
}' |
apify call dach-open-data/german-ev-charging-stations --silent --output-dataset

```

## MCP server setup

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

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/eu5C7KYiONOTMJvtv/builds/0fxEPl5ewVKOxtPyP/openapi.json
