EV Charging Stations Scraper - NL, DE, FR Prices & Status
Pricing
from $1.60 / 1,000 charging stations
EV Charging Stations Scraper - NL, DE, FR Prices & Status
Official AFIR open data on EU EV charging stations: charge point (EVSE) IDs, connectors, kW, live availability and ad-hoc EUR/kWh prices for the Netherlands, plus Germany's and France's national registers. Radius search, change monitoring and LLM-ready output.
Pricing
from $1.60 / 1,000 charging stations
Rating
0.0
(0)
Developer
Andrew Boiko
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
EV Charging Stations Scraper - EU Prices & Live Status
Get every public EV charging station in the Netherlands, Germany and France from the official open-data registers - with charge point (EVSE) IDs, connectors, kW, live availability and ad-hoc €/kWh prices - as one clean dataset. No API keys, no scraping of apps, no blocked requests: the data comes from the national access points that EU regulation AFIR (Regulation (EU) 2023/1804) requires charge point operators to feed.
- 🇳🇱 Netherlands - NDW DOT-NL (Dutch AFIR National Access Point): ~75,000 locations, live status of every charge point and machine-readable ad-hoc prices (€/kWh incl. VAT, per minute, session fee).
- 🇩🇪 Germany - Bundesnetzagentur Ladesäulenregister (official national register, updated monthly).
- 🇫🇷 France - Base nationale des IRVE (official consolidated dataset on data.gouv.fr, updated daily), incl. the operator's price text.
What can you do with it?
- Price intelligence for EV charging (CPOs, eMSPs, fleets, analysts) - compare ad-hoc €/kWh of Fastned, Shell Recharge, Vattenfall InCharge, Allego, Tesla, Ionity... city by city.
- Route and fleet planning - find HPC (≥150 kW) CCS chargers around a depot or along a corridor with a radius search, sorted by distance.
- Monitoring - schedule it daily in Changes mode and get only stations that are new, removed, re-priced or re-equipped since the last run (perfect for Slack/Make/Zapier alerts).
- Market research and site selection - counts of charge points by operator, power class and postal code.
- AI agents and RAG - every station has a ready-made
llmSummarytext, and the whole run is saved as one Markdown document (RESULTS_MD).
What data do you get?
| Field | Example | Notes |
|---|---|---|
stationId, evseIds[] | NL*NUO*EXCHA*0000016*1 | Official EVSE IDs (eMI3 format) where published |
operatorName, operatorId | Vattenfall InCharge, NL*NUO | |
address, postalCode, city, lat, lng | De Corridor 1, Breukelen | |
maxPowerKw, hasDcFast, connectorTypes[] | 120, true, ["CCS"] | Per charge point in evses[].connectors[] |
availability | 1 available, 1 occupied | Live (NL), with timestamp |
adHocPrice.perKwh / perMinute / sessionFee | 0.7744 €/kWh incl. 21 % VAT | Structured (NL) or the operator's price text (FR) |
priceRange | min/max €/kWh across the station's charge points | |
paymentMethods, openingHours, is24x7, parkingType | app, rfid, 24/7 | |
changeType, changedFields[] | updated, ["price"] | In Changes mode |
llmSummary | "EV charging station - De Corridor 1, ..." | Plain-English text for AI |
sourceName, sourceLicense, sourceUpdatedAt | Provenance of every record |
Two output formats: nested (one item per station with an evses[] array - best for apps and AI) or flat (one row per station - best for Excel / Google Sheets / CSV).
How to use it
- Pick countries (Netherlands is the richest source: live status + prices).
- Optionally narrow down: radius search (latitude, longitude, km), cities, postal code prefixes, operators, minimum power (50 = DC fast, 150 = HPC), connector types, only available now, only with a price.
- Set Max items (this also caps your cost) and click Start.
- Download the results as JSON, CSV, Excel, XML or HTML, or read them via API.
Example input - fast chargers around Amsterdam
{"countries": ["NL"],"latitude": 52.3676,"longitude": 4.9041,"radiusKm": 15,"minPowerKw": 150,"connectorTypes": ["CCS"],"onlyWithPrice": true,"maxItems": 200}
Example output (one station, shortened)
{"stationId": "NL:NDW:114817b0b0bc15b09028d4f020d87e86","country": "NL","operatorName": "Vattenfall InCharge","operatorId": "NL*NUO","address": "De Corridor 1","postalCode": "3621 ZA","city": "Breukelen","lat": 52.171461,"lng": 4.989638,"evseCount": 2,"evseIds": ["NL*NUO*EXCHA*0000016*1", "NL*NUO*EXCHA*0000016*2"],"connectorTypes": ["CCS"],"maxPowerKw": 120,"hasDcFast": true,"availability": { "available": 1, "occupied": 1, "outOfOrder": 0, "unknown": 0, "total": 2, "updatedAt": "2026-10-02T14:13:53Z" },"adHocPrice": { "perKwh": 0.7744, "perKwhExclVat": 0.64, "perMinute": null, "sessionFee": null, "currency": "EUR", "vatPercent": 21, "priceText": "Per kWh: 0.77 EUR", "priceQuality": "structured" },"paymentMethods": ["app", "rfid"],"openingHours": "24/7","evses": [{ "evseId": "NL*NUO*EXCHA*0000016*1", "status": "AVAILABLE", "connectors": [{ "type": "CCS", "powerKw": 120, "currentType": "DC", "format": "CABLE" }] }],"sourceName": "NDW DOT-NL (Dutch AFIR National Access Point)","llmSummary": "EV charging station - De Corridor 1, 3621 ZA Breukelen, NL. Operator: Vattenfall InCharge (NL*NUO). 2 charge points, max 120 kW, connectors: CCS. Live status: 1 available, 1 occupied, 0 out of order. Ad-hoc price: €0.77/kWh incl. VAT. ..."}
Besides the dataset, every run stores:
OUTPUT- run summary: status per source, data timestamps, counts of new/updated/removed stations, warnings;RESULTS_MD- all station summaries as one Markdown document for AI agents.
Monitoring mode (Changes)
Set Mode = Changes and schedule the Actor (e.g. every morning). Each run returns only stations that are:
new- appeared in the register,updated- changed price, equipment/location data or (optionally) live availability, with the list ofchangedFields,removed- disappeared from the register.
Choose what counts as a change in What counts as a change (price, static, availability). The first run stores a baseline. The saved state is kept per filter set (or per Monitoring state key), so you can run several independent monitors.
Pricing
This Actor uses pay per event - you pay only for results:
| Event | Price |
|---|---|
| Station in snapshot mode | $0.002 per station ($2 per 1,000) |
| Change in monitoring mode | $0.001 per change ($1 per 1,000) |
plus a small per-run start fee shown on the Pricing tab. Platform usage is included. Max items and the maximum cost per run you set are always respected - the Actor stops before exceeding them.
Example: 500 fast-charging stations with prices = $1.00. A daily change monitor only pays for the stations that actually changed, typically a few cents per day.
Integrations and API
Use the results anywhere: Google Sheets, Excel, Make, Zapier, n8n, Slack, Airbyte, webhooks, or directly via the Apify API and the Apify MCP server (so AI agents such as Claude or ChatGPT can call it as a tool).
curl -X POST "https://api.apify.com/v2/acts/<USERNAME>~ev-charging-stations-scraper/run-sync-get-dataset-items" \-H "Authorization: Bearer <YOUR_TOKEN>" \-H "Content-Type: application/json" \-d '{"countries":["NL"],"cities":["Utrecht"],"minPowerKw":50,"maxItems":100}'
from apify_client import ApifyClientclient = ApifyClient("<YOUR_TOKEN>")run = client.actor("<USERNAME>/ev-charging-stations-scraper").call(run_input={"countries": ["NL"], "operators": ["Fastned"], "maxItems": 500})for station in client.dataset(run["defaultDatasetId"]).iterate_items():print(station["city"], station["maxPowerKw"], station["adHocPrice"])
FAQ
Is this legal? Yes. The Actor reads official open-data files that public authorities publish for re-use (AFIR obliges operators to make this data available through national access points). It does not log in anywhere, does not bypass any protection and contains no personal data. Each record carries sourceName and sourceLicense: France is Licence Ouverte 2.0, Germany's register is published by the Bundesnetzagentur for re-use (attribution required), the Dutch data is NDW open data - please check the terms of each source for your use case.
How fresh is the data? Every run downloads the current files - nothing is cached. Netherlands: NDW updates status and tariffs continuously during the day; each record shows sourceUpdatedAt and availability.updatedAt. Germany: monthly register. France: daily consolidation.
Why are there no live status / prices for Germany and France? These registers do not publish them as open data yet. As more AFIR national access points open their dynamic feeds, they will be added - tell us which country you need in the Issues tab.
What is an "ad-hoc price"? The price for spontaneous charging without a subscription (card/app), which AFIR requires operators to publish. Subscription (eMSP) prices differ.
Can I get all of Europe? Currently NL, DE and FR - the three largest public charging networks in the EU. More countries are on the roadmap.
How much memory does a run need? The default 2 GB handles everything, including a full export of all three countries (about 185,000 stations in one run). Runs with filters (a city, a radius, a minimum power) also work with 1 GB.
Something is wrong or missing? Open an issue in the Issues tab - feature requests (new countries, fields, formats) are welcome.
More tools by the same author
- OCPP CSMS Smoke Test: Virtual OCPP 1.6J charge point for testing your CSMS