# Europe Traffic Signal Locations & Intersection Dataset (`scholarstack/traffic-signal-intersection-extractor`) Actor

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).

- **URL**: https://apify.com/scholarstack/traffic-signal-intersection-extractor.md
- **Developed by:** [ScholarStack](https://apify.com/scholarstack) (community)
- **Categories:** Developer tools, Automation, Other
- **Stats:** 4 total users, 3 monthly users, 96.2% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$30.00 / 1,000 delivered intersections

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

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](https://apify.com/scholarstack/us-traffic-signal-extractor) — same schema, all 50 states.*

<img src="https://api.apify.com/v2/key-value-stores/qQR77fqk5I4nrhy9J/records/eu_full_city" alt="Every signalised intersection across Berlin extracted from OpenStreetMap" width="49%"> <img src="https://api.apify.com/v2/key-value-stores/qQR77fqk5I4nrhy9J/records/eu_central_zoom" alt="Central Berlin signalised intersections mapped onto the road network" width="49%">

*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

1. 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 |

2. Set `dryRun: true` for a free estimate (count, cost, 10 sample records — no charge).
3. 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

```json
{
  "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`** (default `vehicular`) — `vehicular` for junctions, `pedestrian` for crossings, `all` for 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 `-rest` remainder covering everything else inside the state boundary, with no overlap. State runs can be large — always dryRun first.
- **`dryRun`** (default `false`) — 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:

1. Run normally → note the `defaultDatasetId` from the Storage tab
2. Next month, pass it as `priorDatasetId`
3. The actor returns only `added`, `removed`, and `changed` intersections
4. 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_edited` is included per intersection so you can judge freshness yourself.
- Data is refreshed monthly.

Data © [OpenStreetMap contributors](https://www.openstreetmap.org/copyright), available under the [Open Database License (ODbL 1.0)](https://opendatacommons.org/licenses/odbl/). 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](https://apify.com/scholarstack/us-traffic-signal-extractor) covers 225 US cities across all 50 states with additional ADA/accessibility flags.

# Actor input Schema

## `city` (type: `string`):

Select a single city. Format: CC-slug (e.g. DE-berlin). Ignored if customBbox is set. For multiple cities use 'Cities' below; for all cities in a country use 'Country'.

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

Select multiple cities to process in one run. All results are delivered into a single dataset. Overrides 'City' if set. Ignored if 'Country' or 'Custom bbox' is set.

## `state` (type: `string`):

Select a state/region (e.g. Bayern) to process ALL its signals: its listed cities PLUS everything else inside the state boundary (delivered as a '-rest' pseudo-city — no overlap or double-charging). Overrides City/Cities/Country. Ignored if 'Custom bbox' is set. State runs can be large — use dryRun first.

## `country` (type: `string`):

Select a country to process ALL its cities in one run. Overrides 'City' and 'Cities' inputs. Ignored if 'Custom bbox' is set.

## `customBbox` (type: `string`):

Override everything with your own bbox: "south,west,north,east" in decimal degrees. Example: "52.30,13.00,52.70,13.80"

## `clusterRadiusMeters` (type: `integer`):

Signals within this radius are grouped into one intersection. Default 70m works well for most cities. Lower it for very dense historic centres; raise it for sprawling suburbs with wide junctions.

## `mergeRadiusMeters` (type: `integer`):

Centroids within this radius of each other are merged into one intersection. Default 70m. Lower it if separate nearby junctions get merged; raise it if duplicate points appear at one wide multi-carriageway junction.

## `signalType` (type: `string`):

vehicular = junctions only (default). pedestrian = crossings only. all = both.

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

Cap the total number of intersections delivered (and charged) across all cities. 0 = unlimited. Run dryRun=true first to see the full count.

## `dryRun` (type: `boolean`):

When true, runs the full pipeline but charges nothing and delivers nothing. Returns estimated count, estimated cost, and a 10-row sample.

## `priorDatasetId` (type: `string`):

The defaultDatasetId of a previous run of this actor for the same city/country. Find it in the run's Storage tab in Apify Console. When set, only added, removed, and changed intersections are charged.

## Actor input object example

```json
{
  "city": "DE-berlin",
  "clusterRadiusMeters": 70,
  "mergeRadiusMeters": 70,
  "signalType": "vehicular",
  "maxResults": 1000,
  "dryRun": false
}
```

# 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("scholarstack/traffic-signal-intersection-extractor").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("scholarstack/traffic-signal-intersection-extractor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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 scholarstack/traffic-signal-intersection-extractor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=scholarstack/traffic-signal-intersection-extractor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Europe Traffic Signal Locations & Intersection Dataset",
        "description": "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).",
        "version": "1.0",
        "x-build-id": "NQUjpiFhhVgCXMSmq"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scholarstack~traffic-signal-intersection-extractor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scholarstack-traffic-signal-intersection-extractor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/scholarstack~traffic-signal-intersection-extractor/runs": {
            "post": {
                "operationId": "runs-sync-scholarstack-traffic-signal-intersection-extractor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/scholarstack~traffic-signal-intersection-extractor/run-sync": {
            "post": {
                "operationId": "run-sync-scholarstack-traffic-signal-intersection-extractor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "city": {
                        "title": "City (single)",
                        "enum": [
                            "AL-durres",
                            "AL-shkoder",
                            "AL-tirana",
                            "AT-graz",
                            "AT-innsbruck",
                            "AT-klagenfurt",
                            "AT-linz",
                            "AT-salzburg",
                            "AT-st_polten",
                            "AT-vienna",
                            "AT-villach",
                            "AT-wels",
                            "BY-brest",
                            "BY-gomel",
                            "BY-grodno",
                            "BY-minsk",
                            "BY-mogilev",
                            "BY-vitebsk",
                            "BE-antwerp",
                            "BE-bruges",
                            "BE-brussels",
                            "BE-charleroi",
                            "BE-ghent",
                            "BE-leuven",
                            "BE-liege",
                            "BE-mechelen",
                            "BE-namur",
                            "BA-banja_luka",
                            "BA-mostar",
                            "BA-sarajevo",
                            "BA-tuzla",
                            "BG-plovdiv",
                            "BG-sofia",
                            "BG-varna",
                            "HR-osijek",
                            "HR-rijeka",
                            "HR-split",
                            "HR-zagreb",
                            "CY-larnaca",
                            "CY-limassol",
                            "CY-nicosia",
                            "CY-paphos",
                            "CZ-brno",
                            "CZ-liberec",
                            "CZ-olomouc",
                            "CZ-ostrava",
                            "CZ-plzen",
                            "CZ-prague",
                            "DK-aalborg",
                            "DK-aarhus",
                            "DK-copenhagen",
                            "DK-esbjerg",
                            "DK-odense",
                            "EE-tallinn",
                            "EE-tartu",
                            "FI-helsinki",
                            "FI-jyvaskyla",
                            "FI-lahti",
                            "FI-oulu",
                            "FI-tampere",
                            "FI-turku",
                            "FR-aix_en_provence",
                            "FR-amiens",
                            "FR-bordeaux",
                            "FR-caen",
                            "FR-clermont_ferrand",
                            "FR-dijon",
                            "FR-grenoble",
                            "FR-le_havre",
                            "FR-lille",
                            "FR-lyon",
                            "FR-marseille",
                            "FR-metz",
                            "FR-montpellier",
                            "FR-nancy",
                            "FR-nantes",
                            "FR-nice",
                            "FR-paris",
                            "FR-reims",
                            "FR-rennes",
                            "FR-saint_etienne",
                            "FR-strasbourg",
                            "FR-toulon",
                            "FR-toulouse",
                            "FR-tours",
                            "GE-batumi",
                            "GE-kutaisi",
                            "GE-rustavi",
                            "GE-tbilisi",
                            "DE-aachen",
                            "DE-augsburg",
                            "DE-berlin",
                            "DE-bielefeld",
                            "DE-bochum",
                            "DE-bonn",
                            "DE-bremen",
                            "DE-chemnitz",
                            "DE-cologne",
                            "DE-dortmund",
                            "DE-dresden",
                            "DE-dusseldorf",
                            "DE-erfurt",
                            "DE-essen",
                            "DE-frankfurt",
                            "DE-freiburg",
                            "DE-halle",
                            "DE-hamburg",
                            "DE-hannover",
                            "DE-ingolstadt",
                            "DE-karlsruhe",
                            "DE-kiel",
                            "DE-krefeld",
                            "DE-leipzig",
                            "DE-luebeck",
                            "DE-magdeburg",
                            "DE-mainz",
                            "DE-mannheim",
                            "DE-munich",
                            "DE-muenster",
                            "DE-nuremberg",
                            "DE-rostock",
                            "DE-saarbruecken",
                            "DE-stuttgart",
                            "DE-wuppertal",
                            "GR-athens",
                            "GR-heraklion",
                            "GR-larissa",
                            "GR-patras",
                            "GR-thessaloniki",
                            "HU-budapest",
                            "HU-debrecen",
                            "HU-gyor",
                            "HU-miskolc",
                            "HU-pecs",
                            "HU-szeged",
                            "IS-akureyri",
                            "IS-hafnarfjordur",
                            "IS-kopavogur",
                            "IS-reykjavik",
                            "IE-cork",
                            "IE-dublin",
                            "IE-galway",
                            "IE-limerick",
                            "IE-waterford",
                            "IT-bari",
                            "IT-bologna",
                            "IT-catania",
                            "IT-florence",
                            "IT-genoa",
                            "IT-milan",
                            "IT-naples",
                            "IT-palermo",
                            "IT-rome",
                            "IT-turin",
                            "IT-venice",
                            "IT-verona",
                            "KS-gjakova",
                            "KS-pristina",
                            "KS-prizren",
                            "LV-daugavpils",
                            "LV-riga",
                            "LT-kaunas",
                            "LT-klaipeda",
                            "LT-vilnius",
                            "LU-luxembourg",
                            "MT-malta",
                            "MD-balti",
                            "MD-chisinau",
                            "MD-tiraspol",
                            "ME-bar",
                            "ME-niksic",
                            "ME-podgorica",
                            "NL-amsterdam",
                            "NL-breda",
                            "NL-eindhoven",
                            "NL-groningen",
                            "NL-haarlem",
                            "NL-nijmegen",
                            "NL-rotterdam",
                            "NL-the_hague",
                            "NL-tilburg",
                            "NL-utrecht",
                            "MK-bitola",
                            "MK-skopje",
                            "NO-bergen",
                            "NO-oslo",
                            "NO-stavanger",
                            "NO-trondheim",
                            "PL-bydgoszcz",
                            "PL-gdansk",
                            "PL-katowice",
                            "PL-krakow",
                            "PL-lublin",
                            "PL-poznan",
                            "PL-szczecin",
                            "PL-warsaw",
                            "PL-wroclaw",
                            "PL-lodz",
                            "PT-coimbra",
                            "PT-lisbon",
                            "PT-porto",
                            "RO-brasov",
                            "RO-bucharest",
                            "RO-cluj",
                            "RO-constanta",
                            "RO-craiova",
                            "RO-iasi",
                            "RO-timisoara",
                            "RS-belgrade",
                            "RS-nis",
                            "RS-novi_sad",
                            "SK-bratislava",
                            "SK-kosice",
                            "SI-celje",
                            "SI-ljubljana",
                            "SI-maribor",
                            "ES-alicante",
                            "ES-barcelona",
                            "ES-bilbao",
                            "ES-cordoba",
                            "ES-granada",
                            "ES-madrid",
                            "ES-murcia",
                            "ES-malaga",
                            "ES-palma",
                            "ES-pamplona",
                            "ES-seville",
                            "ES-valencia",
                            "ES-valladolid",
                            "ES-vigo",
                            "ES-zaragoza",
                            "SE-gothenburg",
                            "SE-linkoping",
                            "SE-malmo",
                            "SE-norrkoping",
                            "SE-stockholm",
                            "SE-uppsala",
                            "SE-vasteras",
                            "SE-orebro",
                            "CH-basel",
                            "CH-bern",
                            "CH-geneva",
                            "CH-lausanne",
                            "CH-lucerne",
                            "CH-st_gallen",
                            "CH-winterthur",
                            "CH-zurich",
                            "TR-edirne",
                            "TR-istanbul",
                            "TR-tekirdag",
                            "GB-birmingham",
                            "GB-bradford",
                            "GB-bristol",
                            "GB-cardiff",
                            "GB-coventry",
                            "GB-edinburgh",
                            "GB-glasgow",
                            "GB-leeds",
                            "GB-leicester",
                            "GB-liverpool",
                            "GB-london",
                            "GB-manchester",
                            "GB-newcastle",
                            "GB-nottingham",
                            "GB-oxford",
                            "GB-plymouth",
                            "GB-portsmouth",
                            "GB-reading",
                            "GB-sheffield",
                            "GB-southampton",
                            "GB-swansea"
                        ],
                        "type": "string",
                        "description": "Select a single city. Format: CC-slug (e.g. DE-berlin). Ignored if customBbox is set. For multiple cities use 'Cities' below; for all cities in a country use 'Country'.",
                        "default": "DE-berlin"
                    },
                    "cities": {
                        "title": "Cities (batch — pick multiple)",
                        "type": "array",
                        "description": "Select multiple cities to process in one run. All results are delivered into a single dataset. Overrides 'City' if set. Ignored if 'Country' or 'Custom bbox' is set.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "AL-durres",
                                "AL-shkoder",
                                "AL-tirana",
                                "AT-graz",
                                "AT-innsbruck",
                                "AT-klagenfurt",
                                "AT-linz",
                                "AT-salzburg",
                                "AT-st_polten",
                                "AT-vienna",
                                "AT-villach",
                                "AT-wels",
                                "BY-brest",
                                "BY-gomel",
                                "BY-grodno",
                                "BY-minsk",
                                "BY-mogilev",
                                "BY-vitebsk",
                                "BE-antwerp",
                                "BE-bruges",
                                "BE-brussels",
                                "BE-charleroi",
                                "BE-ghent",
                                "BE-leuven",
                                "BE-liege",
                                "BE-mechelen",
                                "BE-namur",
                                "BA-banja_luka",
                                "BA-mostar",
                                "BA-sarajevo",
                                "BA-tuzla",
                                "BG-plovdiv",
                                "BG-sofia",
                                "BG-varna",
                                "HR-osijek",
                                "HR-rijeka",
                                "HR-split",
                                "HR-zagreb",
                                "CY-larnaca",
                                "CY-limassol",
                                "CY-nicosia",
                                "CY-paphos",
                                "CZ-brno",
                                "CZ-liberec",
                                "CZ-olomouc",
                                "CZ-ostrava",
                                "CZ-plzen",
                                "CZ-prague",
                                "DK-aalborg",
                                "DK-aarhus",
                                "DK-copenhagen",
                                "DK-esbjerg",
                                "DK-odense",
                                "EE-tallinn",
                                "EE-tartu",
                                "FI-helsinki",
                                "FI-jyvaskyla",
                                "FI-lahti",
                                "FI-oulu",
                                "FI-tampere",
                                "FI-turku",
                                "FR-aix_en_provence",
                                "FR-amiens",
                                "FR-bordeaux",
                                "FR-caen",
                                "FR-clermont_ferrand",
                                "FR-dijon",
                                "FR-grenoble",
                                "FR-le_havre",
                                "FR-lille",
                                "FR-lyon",
                                "FR-marseille",
                                "FR-metz",
                                "FR-montpellier",
                                "FR-nancy",
                                "FR-nantes",
                                "FR-nice",
                                "FR-paris",
                                "FR-reims",
                                "FR-rennes",
                                "FR-saint_etienne",
                                "FR-strasbourg",
                                "FR-toulon",
                                "FR-toulouse",
                                "FR-tours",
                                "GE-batumi",
                                "GE-kutaisi",
                                "GE-rustavi",
                                "GE-tbilisi",
                                "DE-aachen",
                                "DE-augsburg",
                                "DE-berlin",
                                "DE-bielefeld",
                                "DE-bochum",
                                "DE-bonn",
                                "DE-bremen",
                                "DE-chemnitz",
                                "DE-cologne",
                                "DE-dortmund",
                                "DE-dresden",
                                "DE-dusseldorf",
                                "DE-erfurt",
                                "DE-essen",
                                "DE-frankfurt",
                                "DE-freiburg",
                                "DE-halle",
                                "DE-hamburg",
                                "DE-hannover",
                                "DE-ingolstadt",
                                "DE-karlsruhe",
                                "DE-kiel",
                                "DE-krefeld",
                                "DE-leipzig",
                                "DE-luebeck",
                                "DE-magdeburg",
                                "DE-mainz",
                                "DE-mannheim",
                                "DE-munich",
                                "DE-muenster",
                                "DE-nuremberg",
                                "DE-rostock",
                                "DE-saarbruecken",
                                "DE-stuttgart",
                                "DE-wuppertal",
                                "GR-athens",
                                "GR-heraklion",
                                "GR-larissa",
                                "GR-patras",
                                "GR-thessaloniki",
                                "HU-budapest",
                                "HU-debrecen",
                                "HU-gyor",
                                "HU-miskolc",
                                "HU-pecs",
                                "HU-szeged",
                                "IS-akureyri",
                                "IS-hafnarfjordur",
                                "IS-kopavogur",
                                "IS-reykjavik",
                                "IE-cork",
                                "IE-dublin",
                                "IE-galway",
                                "IE-limerick",
                                "IE-waterford",
                                "IT-bari",
                                "IT-bologna",
                                "IT-catania",
                                "IT-florence",
                                "IT-genoa",
                                "IT-milan",
                                "IT-naples",
                                "IT-palermo",
                                "IT-rome",
                                "IT-turin",
                                "IT-venice",
                                "IT-verona",
                                "KS-gjakova",
                                "KS-pristina",
                                "KS-prizren",
                                "LV-daugavpils",
                                "LV-riga",
                                "LT-kaunas",
                                "LT-klaipeda",
                                "LT-vilnius",
                                "LU-luxembourg",
                                "MT-malta",
                                "MD-balti",
                                "MD-chisinau",
                                "MD-tiraspol",
                                "ME-bar",
                                "ME-niksic",
                                "ME-podgorica",
                                "NL-amsterdam",
                                "NL-breda",
                                "NL-eindhoven",
                                "NL-groningen",
                                "NL-haarlem",
                                "NL-nijmegen",
                                "NL-rotterdam",
                                "NL-the_hague",
                                "NL-tilburg",
                                "NL-utrecht",
                                "MK-bitola",
                                "MK-skopje",
                                "NO-bergen",
                                "NO-oslo",
                                "NO-stavanger",
                                "NO-trondheim",
                                "PL-bydgoszcz",
                                "PL-gdansk",
                                "PL-katowice",
                                "PL-krakow",
                                "PL-lublin",
                                "PL-poznan",
                                "PL-szczecin",
                                "PL-warsaw",
                                "PL-wroclaw",
                                "PL-lodz",
                                "PT-coimbra",
                                "PT-lisbon",
                                "PT-porto",
                                "RO-brasov",
                                "RO-bucharest",
                                "RO-cluj",
                                "RO-constanta",
                                "RO-craiova",
                                "RO-iasi",
                                "RO-timisoara",
                                "RS-belgrade",
                                "RS-nis",
                                "RS-novi_sad",
                                "SK-bratislava",
                                "SK-kosice",
                                "SI-celje",
                                "SI-ljubljana",
                                "SI-maribor",
                                "ES-alicante",
                                "ES-barcelona",
                                "ES-bilbao",
                                "ES-cordoba",
                                "ES-granada",
                                "ES-madrid",
                                "ES-murcia",
                                "ES-malaga",
                                "ES-palma",
                                "ES-pamplona",
                                "ES-seville",
                                "ES-valencia",
                                "ES-valladolid",
                                "ES-vigo",
                                "ES-zaragoza",
                                "SE-gothenburg",
                                "SE-linkoping",
                                "SE-malmo",
                                "SE-norrkoping",
                                "SE-stockholm",
                                "SE-uppsala",
                                "SE-vasteras",
                                "SE-orebro",
                                "CH-basel",
                                "CH-bern",
                                "CH-geneva",
                                "CH-lausanne",
                                "CH-lucerne",
                                "CH-st_gallen",
                                "CH-winterthur",
                                "CH-zurich",
                                "TR-edirne",
                                "TR-istanbul",
                                "TR-tekirdag",
                                "GB-birmingham",
                                "GB-bradford",
                                "GB-bristol",
                                "GB-cardiff",
                                "GB-coventry",
                                "GB-edinburgh",
                                "GB-glasgow",
                                "GB-leeds",
                                "GB-leicester",
                                "GB-liverpool",
                                "GB-london",
                                "GB-manchester",
                                "GB-newcastle",
                                "GB-nottingham",
                                "GB-oxford",
                                "GB-plymouth",
                                "GB-portsmouth",
                                "GB-reading",
                                "GB-sheffield",
                                "GB-southampton",
                                "GB-swansea"
                            ],
                            "enumTitles": [
                                "Durrës (AL)",
                                "Shkodër (AL)",
                                "Tirana (AL)",
                                "Graz (AT)",
                                "Innsbruck (AT)",
                                "Klagenfurt (AT)",
                                "Linz (AT)",
                                "Salzburg (AT)",
                                "Sankt Pölten (AT)",
                                "Vienna (AT)",
                                "Villach (AT)",
                                "Wels (AT)",
                                "Brest (BY)",
                                "Gomel (BY)",
                                "Grodno (BY)",
                                "Minsk (BY)",
                                "Mogilev (BY)",
                                "Vitebsk (BY)",
                                "Antwerp (BE)",
                                "Bruges (BE)",
                                "Brussels (BE)",
                                "Charleroi (BE)",
                                "Ghent (BE)",
                                "Leuven (BE)",
                                "Liège (BE)",
                                "Mechelen (BE)",
                                "Namur (BE)",
                                "Banja Luka (BA)",
                                "Mostar (BA)",
                                "Sarajevo (BA)",
                                "Tuzla (BA)",
                                "Plovdiv (BG)",
                                "Sofia (BG)",
                                "Varna (BG)",
                                "Osijek (HR)",
                                "Rijeka (HR)",
                                "Split (HR)",
                                "Zagreb (HR)",
                                "Larnaca (CY)",
                                "Limassol (CY)",
                                "Nicosia (CY)",
                                "Paphos (CY)",
                                "Brno (CZ)",
                                "Liberec (CZ)",
                                "Olomouc (CZ)",
                                "Ostrava (CZ)",
                                "Plzeň (CZ)",
                                "Prague (CZ)",
                                "Aalborg (DK)",
                                "Aarhus (DK)",
                                "Copenhagen (DK)",
                                "Esbjerg (DK)",
                                "Odense (DK)",
                                "Tallinn (EE)",
                                "Tartu (EE)",
                                "Helsinki (FI)",
                                "Jyväskylä (FI)",
                                "Lahti (FI)",
                                "Oulu (FI)",
                                "Tampere (FI)",
                                "Turku (FI)",
                                "Aix-en-Provence (FR)",
                                "Amiens (FR)",
                                "Bordeaux (FR)",
                                "Caen (FR)",
                                "Clermont-Ferrand (FR)",
                                "Dijon (FR)",
                                "Grenoble (FR)",
                                "Le Havre (FR)",
                                "Lille (FR)",
                                "Lyon (FR)",
                                "Marseille (FR)",
                                "Metz (FR)",
                                "Montpellier (FR)",
                                "Nancy (FR)",
                                "Nantes (FR)",
                                "Nice (FR)",
                                "Paris (FR)",
                                "Reims (FR)",
                                "Rennes (FR)",
                                "Saint-Étienne (FR)",
                                "Strasbourg (FR)",
                                "Toulon (FR)",
                                "Toulouse (FR)",
                                "Tours (FR)",
                                "Batumi (GE)",
                                "Kutaisi (GE)",
                                "Rustavi (GE)",
                                "Tbilisi (GE)",
                                "Aachen (DE)",
                                "Augsburg (DE)",
                                "Berlin (DE)",
                                "Bielefeld (DE)",
                                "Bochum (DE)",
                                "Bonn (DE)",
                                "Bremen (DE)",
                                "Chemnitz (DE)",
                                "Cologne (DE)",
                                "Dortmund (DE)",
                                "Dresden (DE)",
                                "Düsseldorf (DE)",
                                "Erfurt (DE)",
                                "Essen (DE)",
                                "Frankfurt (DE)",
                                "Freiburg (DE)",
                                "Halle (DE)",
                                "Hamburg (DE)",
                                "Hannover (DE)",
                                "Ingolstadt (DE)",
                                "Karlsruhe (DE)",
                                "Kiel (DE)",
                                "Krefeld (DE)",
                                "Leipzig (DE)",
                                "Lübeck (DE)",
                                "Magdeburg (DE)",
                                "Mainz (DE)",
                                "Mannheim (DE)",
                                "Munich (DE)",
                                "Münster (DE)",
                                "Nuremberg (DE)",
                                "Rostock (DE)",
                                "Saarbrücken (DE)",
                                "Stuttgart (DE)",
                                "Wuppertal (DE)",
                                "Athens (GR)",
                                "Heraklion (GR)",
                                "Larissa (GR)",
                                "Patras (GR)",
                                "Thessaloniki (GR)",
                                "Budapest (HU)",
                                "Debrecen (HU)",
                                "Győr (HU)",
                                "Miskolc (HU)",
                                "Pécs (HU)",
                                "Szeged (HU)",
                                "Akureyri (IS)",
                                "Hafnarfjörður (IS)",
                                "Kópavogur (IS)",
                                "Reykjavik (IS)",
                                "Cork (IE)",
                                "Dublin (IE)",
                                "Galway (IE)",
                                "Limerick (IE)",
                                "Waterford (IE)",
                                "Bari (IT)",
                                "Bologna (IT)",
                                "Catania (IT)",
                                "Florence (IT)",
                                "Genoa (IT)",
                                "Milan (IT)",
                                "Naples (IT)",
                                "Palermo (IT)",
                                "Rome (IT)",
                                "Turin (IT)",
                                "Venice (IT)",
                                "Verona (IT)",
                                "Gjakova (KS)",
                                "Pristina (KS)",
                                "Prizren (KS)",
                                "Daugavpils (LV)",
                                "Riga (LV)",
                                "Kaunas (LT)",
                                "Klaipėda (LT)",
                                "Vilnius (LT)",
                                "Luxembourg City (LU)",
                                "Malta (MT)",
                                "Bălți (MD)",
                                "Chișinău (MD)",
                                "Tiraspol (MD)",
                                "Bar (ME)",
                                "Nikšić (ME)",
                                "Podgorica (ME)",
                                "Amsterdam (NL)",
                                "Breda (NL)",
                                "Eindhoven (NL)",
                                "Groningen (NL)",
                                "Haarlem (NL)",
                                "Nijmegen (NL)",
                                "Rotterdam (NL)",
                                "The Hague (NL)",
                                "Tilburg (NL)",
                                "Utrecht (NL)",
                                "Bitola (MK)",
                                "Skopje (MK)",
                                "Bergen (NO)",
                                "Oslo (NO)",
                                "Stavanger (NO)",
                                "Trondheim (NO)",
                                "Bydgoszcz (PL)",
                                "Gdańsk (PL)",
                                "Katowice (PL)",
                                "Krakow (PL)",
                                "Lublin (PL)",
                                "Poznań (PL)",
                                "Szczecin (PL)",
                                "Warsaw (PL)",
                                "Wrocław (PL)",
                                "Łódź (PL)",
                                "Coimbra (PT)",
                                "Lisbon (PT)",
                                "Porto (PT)",
                                "Brașov (RO)",
                                "Bucharest (RO)",
                                "Cluj-Napoca (RO)",
                                "Constanța (RO)",
                                "Craiova (RO)",
                                "Iași (RO)",
                                "Timișoara (RO)",
                                "Belgrade (RS)",
                                "Niš (RS)",
                                "Novi Sad (RS)",
                                "Bratislava (SK)",
                                "Košice (SK)",
                                "Celje (SI)",
                                "Ljubljana (SI)",
                                "Maribor (SI)",
                                "Alicante (ES)",
                                "Barcelona (ES)",
                                "Bilbao (ES)",
                                "Córdoba (ES)",
                                "Granada (ES)",
                                "Madrid (ES)",
                                "Murcia (ES)",
                                "Málaga (ES)",
                                "Palma (ES)",
                                "Pamplona (ES)",
                                "Seville (ES)",
                                "Valencia (ES)",
                                "Valladolid (ES)",
                                "Vigo (ES)",
                                "Zaragoza (ES)",
                                "Gothenburg (SE)",
                                "Linköping (SE)",
                                "Malmö (SE)",
                                "Norrköping (SE)",
                                "Stockholm (SE)",
                                "Uppsala (SE)",
                                "Västerås (SE)",
                                "Örebro (SE)",
                                "Basel (CH)",
                                "Bern (CH)",
                                "Geneva (CH)",
                                "Lausanne (CH)",
                                "Lucerne (CH)",
                                "St. Gallen (CH)",
                                "Winterthur (CH)",
                                "Zurich (CH)",
                                "Edirne (TR)",
                                "Istanbul (TR)",
                                "Tekirdağ (TR)",
                                "Birmingham (GB)",
                                "Bradford (GB)",
                                "Bristol (GB)",
                                "Cardiff (GB)",
                                "Coventry (GB)",
                                "Edinburgh (GB)",
                                "Glasgow (GB)",
                                "Leeds (GB)",
                                "Leicester (GB)",
                                "Liverpool (GB)",
                                "London (GB)",
                                "Manchester (GB)",
                                "Newcastle (GB)",
                                "Nottingham (GB)",
                                "Oxford (GB)",
                                "Plymouth (GB)",
                                "Portsmouth (GB)",
                                "Reading (GB)",
                                "Sheffield (GB)",
                                "Southampton (GB)",
                                "Swansea (GB)"
                            ]
                        }
                    },
                    "state": {
                        "title": "State / region (whole subdivision)",
                        "enum": [
                            "AT-burgenland",
                            "AT-karnten",
                            "AT-niederosterreich",
                            "AT-oberosterreich",
                            "AT-salzburg_state",
                            "AT-steiermark",
                            "AT-tirol",
                            "AT-vorarlberg",
                            "AT-wien_state",
                            "BY-brest_region",
                            "BY-gomel_region",
                            "BY-grodno_region",
                            "BY-minsk_city",
                            "BY-minsk_region",
                            "BY-mogilev_region",
                            "BY-vitebsk_region",
                            "BE-brussels_capital",
                            "BE-flanders",
                            "BE-wallonia",
                            "CZ-praha_state",
                            "CZ-jihomoravsky",
                            "CZ-jihocesky",
                            "CZ-karlovarsky",
                            "CZ-vysocina",
                            "CZ-kralovehradecky",
                            "CZ-liberecky",
                            "CZ-moravskoslezsky",
                            "CZ-olomoucky",
                            "CZ-pardubicky",
                            "CZ-plzensky",
                            "CZ-stredocesky",
                            "CZ-zlinsky",
                            "CZ-ustecky",
                            "DK-hovedstaden",
                            "DK-midtjylland",
                            "DK-nordjylland",
                            "DK-sjaelland",
                            "DK-syddanmark",
                            "FI-etela_karjala",
                            "FI-etela_pohjanmaa",
                            "FI-etela_savo",
                            "FI-kainuu",
                            "FI-kanta_hame",
                            "FI-keski_pohjanmaa",
                            "FI-keski_suomi",
                            "FI-kymenlaakso",
                            "FI-lappi",
                            "FI-pirkanmaa",
                            "FI-pohjanmaa",
                            "FI-pohjois_karjala",
                            "FI-pohjois_pohjanmaa",
                            "FI-pohjois_savo",
                            "FI-paijat_hame",
                            "FI-satakunta",
                            "FI-uusimaa",
                            "FI-varsinais_suomi",
                            "FI-ahvenanmaa",
                            "FR-auvergne_rhone_alpes",
                            "FR-bourgogne_franche_comte",
                            "FR-bretagne",
                            "FR-centre_val_de_loire",
                            "FR-corse",
                            "FR-grand_est",
                            "FR-hauts_de_france",
                            "FR-normandie",
                            "FR-nouvelle_aquitaine",
                            "FR-occitanie",
                            "FR-pays_de_la_loire",
                            "FR-provence_alpes_cote_dazur",
                            "FR-ile_de_france",
                            "DE-baden_wurttemberg",
                            "DE-bayern",
                            "DE-berlin_state",
                            "DE-brandenburg",
                            "DE-bremen_state",
                            "DE-hamburg_state",
                            "DE-hessen",
                            "DE-mecklenburg_vorpommern",
                            "DE-niedersachsen",
                            "DE-nordrhein_westfalen",
                            "DE-rheinland_pfalz",
                            "DE-saarland",
                            "DE-sachsen",
                            "DE-sachsen_anhalt",
                            "DE-schleswig_holstein",
                            "DE-thuringen",
                            "GR-attica",
                            "GR-central_greece",
                            "GR-central_macedonia",
                            "GR-crete",
                            "GR-east_macedonia",
                            "GR-epirus",
                            "GR-ionian_islands",
                            "GR-north_aegean",
                            "GR-peloponnese",
                            "GR-south_aegean",
                            "GR-thessaly",
                            "GR-west_greece",
                            "GR-west_macedonia",
                            "HU-baranya",
                            "HU-borsod_abauj_zemplen",
                            "HU-budapest_state",
                            "HU-bacs_kiskun",
                            "HU-bekes",
                            "HU-csongrad_csanad",
                            "HU-fejer",
                            "HU-gyor_moson_sopron",
                            "HU-hajdu_bihar",
                            "HU-heves",
                            "HU-jasz_nagykun_szolnok",
                            "HU-komarom_esztergom",
                            "HU-nograd",
                            "HU-pest",
                            "HU-somogy",
                            "HU-szabolcs_szatmar_bereg",
                            "HU-tolna",
                            "HU-vas",
                            "HU-veszprem_megye",
                            "HU-zala",
                            "IE-connacht",
                            "IE-leinster",
                            "IE-munster",
                            "IE-ulster_ie",
                            "IT-abruzzo",
                            "IT-basilicata",
                            "IT-calabria",
                            "IT-campania",
                            "IT-emilia_romagna",
                            "IT-friuli_venezia_giulia",
                            "IT-lazio",
                            "IT-liguria",
                            "IT-lombardia",
                            "IT-marche",
                            "IT-molise",
                            "IT-piemonte",
                            "IT-puglia",
                            "IT-sardegna",
                            "IT-sicilia",
                            "IT-toscana",
                            "IT-trentino_alto_adige",
                            "IT-umbria",
                            "IT-valle_daosta",
                            "IT-veneto",
                            "NL-drenthe",
                            "NL-flevoland",
                            "NL-friesland",
                            "NL-gelderland",
                            "NL-groningen_nl",
                            "NL-limburg_nl",
                            "NL-noord_brabant",
                            "NL-noord_holland",
                            "NL-overijssel",
                            "NL-utrecht_state",
                            "NL-zeeland",
                            "NL-zuid_holland",
                            "NO-agder",
                            "NO-akershus",
                            "NO-buskerud",
                            "NO-finnmark",
                            "NO-innlandet",
                            "NO-more_og_romsdal",
                            "NO-nordland",
                            "NO-oslo_state",
                            "NO-rogaland",
                            "NO-telemark",
                            "NO-troms",
                            "NO-trondelag",
                            "NO-vestfold",
                            "NO-vestland",
                            "NO-ostfold",
                            "PL-dolnoslaskie",
                            "PL-kujawsko_pomorskie",
                            "PL-lubelskie",
                            "PL-lubuskie",
                            "PL-mazowieckie",
                            "PL-malopolskie",
                            "PL-opolskie",
                            "PL-podkarpackie",
                            "PL-podlaskie",
                            "PL-pomorskie",
                            "PL-warminsko_mazurskie",
                            "PL-wielkopolskie",
                            "PL-zachodniopomorskie",
                            "PL-lodzkie",
                            "PL-slaskie",
                            "PL-swietokrzyskie",
                            "PT-aveiro",
                            "PT-beja",
                            "PT-braga_distrito",
                            "PT-braganca",
                            "PT-castelo_branco",
                            "PT-coimbra_distrito",
                            "PT-lisboa_distrito",
                            "PT-porto_distrito",
                            "PT-faro_distrito",
                            "PT-guarda",
                            "PT-leiria",
                            "PT-portalegre",
                            "PT-santarem",
                            "PT-setubal",
                            "PT-viana_do_castelo",
                            "PT-vila_real",
                            "PT-viseu",
                            "PT-evora",
                            "SK-banskobystricky",
                            "SK-bratislavsky",
                            "SK-kosicky",
                            "SK-nitriansky",
                            "SK-presovsky",
                            "SK-trenciansky",
                            "SK-trnavsky",
                            "SK-zilinsky",
                            "ES-andalucia",
                            "ES-aragon",
                            "ES-asturias",
                            "ES-cantabria",
                            "ES-castilla_y_leon",
                            "ES-castilla_la_mancha",
                            "ES-cataluna",
                            "ES-comunidad_valenciana",
                            "ES-madrid_state",
                            "ES-extremadura",
                            "ES-galicia",
                            "ES-baleares",
                            "ES-la_rioja",
                            "ES-navarra",
                            "ES-pais_vasco",
                            "ES-murcia_state",
                            "SE-blekinge",
                            "SE-dalarna",
                            "SE-gotland",
                            "SE-gavleborg",
                            "SE-halland",
                            "SE-jamtland",
                            "SE-jonkoping_lan",
                            "SE-kalmar_lan",
                            "SE-kronoberg",
                            "SE-norrbotten",
                            "SE-skane",
                            "SE-stockholms_lan",
                            "SE-sodermanland",
                            "SE-uppsala_lan",
                            "SE-varmland",
                            "SE-vasterbotten",
                            "SE-vasternorrland",
                            "SE-vastmanland",
                            "SE-vastra_gotaland",
                            "SE-orebro_lan",
                            "SE-ostergotland",
                            "CH-aargau",
                            "CH-appenzell_ar",
                            "CH-appenzell_ai",
                            "CH-basel_landschaft",
                            "CH-basel_stadt",
                            "CH-geneva_canton",
                            "CH-fribourg_canton",
                            "CH-glarus",
                            "CH-graubunden",
                            "CH-jura",
                            "CH-bern_canton",
                            "CH-luzern_canton",
                            "CH-zurich_canton",
                            "CH-neuchatel",
                            "CH-nidwalden",
                            "CH-obwalden",
                            "CH-schaffhausen",
                            "CH-schwyz",
                            "CH-solothurn",
                            "CH-st_gallen",
                            "CH-thurgau",
                            "CH-ticino",
                            "CH-uri",
                            "CH-valais",
                            "CH-vaud",
                            "CH-zug",
                            "GB-england",
                            "GB-northern_ireland",
                            "GB-scotland",
                            "GB-wales"
                        ],
                        "type": "string",
                        "description": "Select a state/region (e.g. Bayern) to process ALL its signals: its listed cities PLUS everything else inside the state boundary (delivered as a '-rest' pseudo-city — no overlap or double-charging). Overrides City/Cities/Country. Ignored if 'Custom bbox' is set. State runs can be large — use dryRun first."
                    },
                    "country": {
                        "title": "Country (batch — all cities)",
                        "enum": [
                            "AL",
                            "AT",
                            "BA",
                            "BE",
                            "BG",
                            "BY",
                            "CH",
                            "CY",
                            "CZ",
                            "DE",
                            "DK",
                            "EE",
                            "ES",
                            "FI",
                            "FR",
                            "GB",
                            "GE",
                            "GR",
                            "HR",
                            "HU",
                            "IE",
                            "IS",
                            "IT",
                            "KS",
                            "LT",
                            "LU",
                            "LV",
                            "MD",
                            "ME",
                            "MK",
                            "MT",
                            "NL",
                            "NO",
                            "PL",
                            "PT",
                            "RO",
                            "RS",
                            "SE",
                            "SI",
                            "SK",
                            "TR"
                        ],
                        "type": "string",
                        "description": "Select a country to process ALL its cities in one run. Overrides 'City' and 'Cities' inputs. Ignored if 'Custom bbox' is set."
                    },
                    "customBbox": {
                        "title": "Custom bounding box",
                        "type": "string",
                        "description": "Override everything with your own bbox: \"south,west,north,east\" in decimal degrees. Example: \"52.30,13.00,52.70,13.80\""
                    },
                    "clusterRadiusMeters": {
                        "title": "Cluster radius (metres)",
                        "minimum": 10,
                        "maximum": 150,
                        "type": "integer",
                        "description": "Signals within this radius are grouped into one intersection. Default 70m works well for most cities. Lower it for very dense historic centres; raise it for sprawling suburbs with wide junctions.",
                        "default": 70
                    },
                    "mergeRadiusMeters": {
                        "title": "Merge radius (metres)",
                        "minimum": 10,
                        "maximum": 150,
                        "type": "integer",
                        "description": "Centroids within this radius of each other are merged into one intersection. Default 70m. Lower it if separate nearby junctions get merged; raise it if duplicate points appear at one wide multi-carriageway junction.",
                        "default": 70
                    },
                    "signalType": {
                        "title": "Signal type",
                        "enum": [
                            "vehicular",
                            "pedestrian",
                            "all"
                        ],
                        "type": "string",
                        "description": "vehicular = junctions only (default). pedestrian = crossings only. all = both.",
                        "default": "vehicular"
                    },
                    "maxResults": {
                        "title": "Max results",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Cap the total number of intersections delivered (and charged) across all cities. 0 = unlimited. Run dryRun=true first to see the full count.",
                        "default": 1000
                    },
                    "dryRun": {
                        "title": "Dry run (free estimate)",
                        "type": "boolean",
                        "description": "When true, runs the full pipeline but charges nothing and delivers nothing. Returns estimated count, estimated cost, and a 10-row sample.",
                        "default": false
                    },
                    "priorDatasetId": {
                        "title": "Prior Dataset ID (Delta Mode)",
                        "type": "string",
                        "description": "The defaultDatasetId of a previous run of this actor for the same city/country. Find it in the run's Storage tab in Apify Console. When set, only added, removed, and changed intersections are charged."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
