Europe Traffic Signal Locations & Intersection Dataset
Pricing
$30.00 / 1,000 delivered intersections
Europe Traffic Signal Locations & Intersection Dataset
Download traffic signal locations for any European city or country — clean, deduplicated signalized intersections with street name, signal type, and confidence score. 271 cities, 41 countries. JSON/CSV/KML for Google Earth, SUMO/MATSim, V2X. Data © OpenStreetMap contributors (ODbL 1.0).
Pricing
$30.00 / 1,000 delivered intersections
Rating
5.0
(2)
Developer
ScholarStack
Maintained by CommunityActor stats
0
Bookmarked
4
Total users
3
Monthly active users
5 days ago
Last modified
Categories
Share
Get traffic signal locations for any European city or country in minutes. This actor extracts signalised intersections from OpenStreetMap across 271 cities in 41 countries and returns one clean, deduplicated centroid per intersection — with nearest street name, signal type, and a confidence score. Export as JSON, CSV, Excel, or KML for Google Earth, ready for SUMO/MATSim traffic simulation, V2X/C-ITS development, HD maps, and routing.
Run a free dryRun first to see the exact intersection count and cost before paying — example costs: Luxembourg City ~$6, Munich ~$31, Berlin ~$63.
Need US coverage? Use the companion US Traffic Signal Locations & Intersection Dataset — same schema, all 50 states.

Berlin — full-city coverage (left, 2,089 intersections) and the central road network with signalised intersections (right). Data © OpenStreetMap contributors, ODbL 1.0.
How to extract traffic signal locations for any European city
- Click Try for free and pick an input mode:
| Mode | How | Example |
|---|---|---|
| Single city | city: "DE-berlin" | Berlin only |
| Multiple cities | cities: ["DE-berlin", "DE-munich"] | Any combination |
| Whole state/region | state: "DE-bayern" | All of Bavaria: its listed cities + everything else in the state (bayern-rest) |
| Whole country | country: "DE" | All German cities |
| Custom bbox | customBbox: "52.4,13.2,52.6,13.5" + country: "DE" | Any rectangle |
- Set
dryRun: truefor a free estimate (count, cost, 10 sample records — no charge). - Run for real and download the dataset as JSON, CSV, Excel, or KML from the Output tab.
What data you get for each signalised intersection
| Field | Description |
|---|---|
intersection_id | Stable, location-based ID (e.g. berlin-u33db3f0) — same place always gets the same ID |
latitude / longitude | Intersection centroid (WGS84) |
nearest_street | Name of the nearest named road |
signal_type | vehicular or pedestrian |
confidence | Classifier confidence score (0–1) |
signal_node_count | Number of OSM signal poles in the cluster |
osm_last_edited | When the signal was last edited in OSM |
data_vintage | Date of the OSM data snapshot used |
Output example
{"intersection_id": "berlin-u33db3f0","country": "DE","city": "berlin","city_name": "Berlin","latitude": 52.4755238,"longitude": 13.3401799,"nearest_street": "Hauptstraße","signal_type": "vehicular","confidence": 1.0,"signal_node_count": 4,"cluster_spread_m": 19.67,"osm_last_edited": "2024-05-05T20:14:00+00:00","data_vintage": "2026-05-29","source": "© OpenStreetMap contributors","license": "ODbL-1.0"}
Coverage: 271 cities across 41 European countries
Albania, Austria, Belarus, Belgium, Bosnia and Herzegovina, Bulgaria, Croatia, Cyprus, Czech Republic, Denmark, Estonia, Finland, France, Georgia, Germany, Great Britain, Greece, Hungary, Iceland, Ireland, Italy, Kosovo, Latvia, Lithuania, Luxembourg, Malta, Moldova, Montenegro, Netherlands, North Macedonia, Norway, Poland, Portugal, Romania, Serbia, Slovakia, Slovenia, Spain, Sweden, Switzerland, Turkey.
Run dryRun: true to see exact intersection counts and estimated cost for any city or country before paying.
Export traffic signals to KML / Google Earth, CSV, or Excel
Every run produces JSON and CSV, plus a KML file named by city and data vintage that opens directly in Google Earth — each signalized intersection as a placemark with its attributes. Excel export is available on the dataset. KML is the fastest way to visually verify coverage for your city before integrating the data.
Using this data in SUMO, MATSim, or V2X projects
The deduplicated centroids map cleanly onto network nodes: use latitude/longitude to match junctions in your SUMO or MATSim network, signal_type to separate vehicular junctions from pedestrian crossings, and signal_node_count as a proxy for junction complexity. For V2X/C-ITS work, the stable intersection_id gives you a persistent key for RSU placement planning and MAP message inventories across data refreshes.
Key parameters
signalType(defaultvehicular) —vehicularfor junctions,pedestrianfor crossings,allfor both.clusterRadiusMeters(default 70) — signals within this radius group into one intersection. Lower it for dense historic centres; raise it for sprawling suburbs.mergeRadiusMeters(default 70) — centroids within this radius merge (fixes duplicate points on wide divided roads). Lower it if separate nearby junctions get merged.state— extract a whole state/region (e.g.DE-bayern): expands to its listed cities plus a-restremainder covering everything else inside the state boundary, with no overlap. State runs can be large — always dryRun first.dryRun(defaultfalse) — free estimate: count, cost, 10 sample records. No charge.priorDatasetId— Delta Mode; see below.
How much does it cost to extract traffic signal data?
$0.03 per delivered intersection.
| City | Approx intersections | Approx cost |
|---|---|---|
| Luxembourg City | ~215 | ~$6 |
| Munich | ~1,043 | ~$31 |
| Berlin | ~2,090 | ~$63 |
| Whole-country batch | varies by country | run dryRun first |
Always run dryRun: true first to see the exact count and cost before committing.
Delta Mode: monitor a city for signal changes
If you run the actor regularly for the same city, pay only for what changed:
- Run normally → note the
defaultDatasetIdfrom the Storage tab - Next month, pass it as
priorDatasetId - The actor returns only
added,removed, andchangedintersections - You pay only for the delta, not the full city
Intersection IDs are location-based — always use the same actor version for delta comparisons. Combined with Apify's scheduler, this turns the actor into a monthly traffic signal change-monitoring feed for your city.
Data quality and OSM attribution
- Data comes from OpenStreetMap (ODbL 1.0). Coverage and accuracy depend on OSM contributor activity in each city.
- Results are clipped to the city's real administrative boundary (OSM admin polygon), not just a rectangular bbox — so counts match the jurisdiction. Cities without a baked boundary polygon fall back to bbox-only behaviour.
- Extracted counts typically land within ~15% of official city figures (sometimes higher, since OSM may retain decommissioned or minor signals).
- Validated counts (with boundary clipping): Berlin ~2,150 official vs ~2,089 extracted.
osm_last_editedis included per intersection so you can judge freshness yourself.- Data is refreshed monthly.
Data © OpenStreetMap contributors, available under the Open Database License (ODbL 1.0). Any use of this data must credit OpenStreetMap contributors and comply with ODbL terms. Note for downstream use: datasets you build from this data are Derivative Databases under the ODbL — if you use them publicly, they must remain available under ODbL terms with OpenStreetMap attribution. Internal/private use carries no share-alike obligation.
Disclaimer
This is an independent, unofficial tool built on publicly available OpenStreetMap data. It is not affiliated with or endorsed by the OpenStreetMap Foundation, Google (Google Earth), the Eclipse Foundation (SUMO), or MATSim. Product names are used solely to indicate data-format compatibility.
FAQ
Where can I get traffic light locations for Berlin, Paris, or Amsterdam?
Run this actor with the city key (e.g. DE-berlin) and download the full set of signalized intersections in minutes — Berlin yields ~2,090 intersections (boundary-clipped), validated against the city's official figure of ~2,150. All 271 covered cities work the same way.
Does OpenStreetMap have traffic signal data?
Yes — OSM maps signals as highway=traffic_signals nodes, but raw nodes include multiple poles per junction. This actor clusters and deduplicates them into one record per real intersection, which is what simulation and mapping work actually needs.
Can I extract a whole country at once?
Yes — set country: "DE" (or any of the 41 covered countries) to process every listed city in one run. Use dryRun first to see the total count and cost.
Can I get the data as KML for Google Earth?
Yes — every run includes a KML file named by city and data vintage; open it directly in Google Earth.
How is this different from the US version?
Same pipeline and schema, different coverage: this actor covers 271 European cities in 41 countries; the US actor covers 225 US cities across all 50 states with additional ADA/accessibility flags.