Tony Wang8 Min. LesezeitGeocoding API: So geocodierst du Adressen 2026
Adressen 2026 geocodieren: kostenloses DIY mit Nominatim/OSM, Google Maps' bezahlte API oder eine strukturierte Crawlora API.
Der schnellste Weg, 2026 eine Adresse in Koordinaten (oder eine Koordinate in eine Adresse) umzuwandeln, ist der Aufruf einer Geocoding-API — du musst keine Kartenseite scrapen oder deinen eigenen Adress-Parser schreiben. Die eigentliche Entscheidung ist, welche API: die kostenlose öffentliche Nominatim/OpenStreetMap-Instanz, Google Maps' kostenpflichtige Geocoding API, oder eine strukturierte API, die dieselben offenen Daten hinter einem Key verpackt. Dieser Guide behandelt alle drei, mit echten 2026er-Preisen, echten Rate-Limits und lauffähigem Code für jede Variante.
Warum Adressen im großen Stil geocodieren
- Logistik und Lieferrouten — eine Kundenadressliste in Koordinaten für die Routenoptimierung umwandeln, oder den GPS-Ping eines Fahrers in einen lesbaren Halt zurück-geocodieren.
- Immobilien- und Store-Locator-Datensätze — Angebote oder Filialstandorte anhand eines Adressfelds auf einer Karte darstellen, oder fehlende Koordinaten in einem bestehenden Datensatz nachträglich ergänzen.
- Nutzergenerierte Standort-Tags — einen von einer mobilen App erfassten Breiten-/Längengrad (Check-in, Foto-EXIF, Lieferpin) für Suche und Filterung in Stadt, Postleitzahl oder Stadtviertel zurück-geocodieren.
- Datenanreicherung — inkonsistente Adressformate über ein CRM oder eine Lead-Liste hinweg in eine gemeinsame strukturierte Form (Stadt, Bundesland, Land, Postleitzahl) normalisieren, für Deduplizierung und Segmentierung.
- Markt- und Standortrecherche — einen Batch aus Konkurrenz- oder Kandidatenadressen geocodieren, um Nähe, Dichte oder Abdeckungslücken zu berechnen.
Ist es legal, Adressen zu geocodieren?
Ja, grundsätzlich. Das Geocodieren öffentlicher Straßenadressdaten — eine Adresse in Koordinaten umwandeln oder zurück — ist eine etablierte, unumstrittene Nutzung öffentlicher Daten; es ist derselbe Vorgang, den jede Karten-App ausführt, wenn du ein Ziel eintippst. Die Nuance liegt auf der Seite der Datenquelle, nicht beim Geocoding selbst: OpenStreetMap-Daten stehen unter der Open Database License (ODbL), die Namensnennung und Share-Alike-Bedingungen verlangt, wenn du die zugrunde liegenden Kartendaten weiterverteilst (nicht nur die daraus berechneten Koordinaten); Googles Nutzungsbedingungen schränken ein, wo du dessen Geocoding-Ergebnisse anzeigen darfst — nirgendwo außer auf einer Google Map. Geocodiere keine Daten, die mit einer Person verknüpft sind (eine Privatadresse, die an eine Identität gebunden ist), ohne eine rechtliche Grundlage nach DSGVO/CCPA, und respektiere die Nutzungsrichtlinien und Rate-Limits jedes Anbieters. Siehe ist Web Scraping legal für den breiteren rechtlichen Rahmen. Keine Rechtsberatung.
Option 1: DIY mit Nominatim/OpenStreetMap (kostenlos, und die Haken)
Nominatim ist der Open-Source-Geocoder hinter OpenStreetMaps eigener Suchbox, und die OpenStreetMap Foundation betreibt eine kostenlose öffentliche Instanz, die jeder aufrufen kann — keine Anmeldung, kein API-Key:
import requests
import time
HEADERS = {"User-Agent": "MyApp/1.0 (contact@example.com)"} # required by the usage policy
def geocode_nominatim(address: str):
resp = requests.get(
"https://nominatim.openstreetmap.org/search",
params={"q": address, "format": "jsonv2", "addressdetails": 1, "limit": 1},
headers=HEADERS,
)
resp.raise_for_status()
results = resp.json()
return results[0] if results else None
addresses = ["350 5th Ave, New York, NY", "1600 Pennsylvania Ave, Washington, DC"]
for addr in addresses:
place = geocode_nominatim(addr)
if place:
print(addr, place["lat"], place["lon"])
time.sleep(1) # the policy's hard 1 request/second cap
Es ist wirklich kostenlos und funktioniert — aber die Nominatim Usage Policy ist streng, und es lohnt sich, sie zu lesen, bevor du darauf aufbaust:
- Absolute Obergrenze von 1 Request/Sekunde. Kein Bursting, keine Ausnahmen, für jeden einzelnen Client.
- Einmalige Bulk-Jobs sind noch stärker limitiert — auf 4 Requests/Minute, von einer einzigen Maschine aus, keine verteilten Skripte.
- Ein echter
User-AgentoderRefererist erforderlich, und du musst die Namensnennung für OpenStreetMap anzeigen. - Du musst Ergebnisse auf deiner Seite cachen — dieselbe Adresse wiederholt abzufragen verstößt gegen die Richtlinie.
- Kein SLA, keine Uptime-Garantie. Es ist ein kostenloser öffentlicher Dienst, betrieben auf gespendeter Infrastruktur. Er liefert unter Last gelegentlich vorübergehende
429/503-Fehler oder Timeouts — das haben wir selbst erlebt, als wir dieselbe Instanz in Option 3 unten proxyten, und mussten auf unserer Seite eine Retry-Klassifizierung ergänzen, statt davon auszugehen, dass jeder Request beim ersten Versuch klappt.
Für eine Handvoll Adressen oder ein Nebenprojekt ist das die richtige Wahl — es kostet nichts und es gibt keinen Key zu verwalten. Für eine Produktionspipeline, die täglich Tausende Zeilen geocodiert, macht allein die Obergrenze von 1 Req/Sek das unpraktikabel (10.000 Adressen brauchen sequenziell mindestens 2,8 Stunden), und du baust dir Retry-/Caching-Logik selbst gegen einen Dienst ohne Uptime-Zusage.
Es gibt auch regionsspezifische kostenlose Alternativen. Wenn deine Adressen alle in einem Land liegen, ist die eigene API einer nationalen Kartenbehörde für dieses Land oft schneller und genauer als ein globaler Index — zum Beispiel bietet Japans 国土地理院 (GSI) einen kostenlosen, anmeldefreien Geocoding-Endpunkt für japanische Adressen mit aktiviertem CORS, ein gängiger Ersatz, wenn ein Team nur inländische Abdeckung braucht und Google-Maps-Preise komplett vermeiden will.
Option 2: Google Maps Geocoding API (offiziell, kostenpflichtig)
Googles Geocoding API ist der etablierte Platzhirsch, und ihre Preisgestaltung hat sich im letzten Jahr deutlich geändert: das alte pauschale 200-Dollar-Monatsguthaben wurde im März 2025 gestrichen. An dessen Stelle bekommt jede API jetzt ihre eigene monatliche Freigrenze — die der Geocoding API liegt bei 10.000 kostenlosen Requests/Monat, danach:
| Monatliches Volumen | Preis pro 1.000 Requests |
|---|---|
| 0 – 10.000 | Kostenlos |
| 10.001 – 100.000 | $5,00 |
| 100.001 – 500.000 | $4,00 |
| 500.001 – 1.000.000 | $3,00 |
| 1.000.001 – 5.000.000 | $1,50 |
| 5.000.000+ | $0,38 |
import requests
resp = requests.get(
"https://maps.googleapis.com/maps/api/geocode/json",
params={"address": "350 5th Ave, New York, NY", "key": "YOUR_GOOGLE_API_KEY"},
)
location = resp.json()["results"][0]["geometry"]["location"]
print(location["lat"], location["lng"])
Die Haken:
- Du brauchst ein Google-Cloud-Projekt mit aktivierter Abrechnung — eine hinterlegte Kreditkarte — selbst um den kostenlosen 10.000er-Tarif zu nutzen. Neukunden bekommen ein einmaliges Testguthaben von 300 Dollar, kein fortlaufendes monatliches.
- Google verkauft inzwischen auch Abo-Pläne: Starter ($100/Monat, 50.000 Calls, bündelt Geocoding mit Dynamic Maps), Essentials ($275/Monat, 100.000 Calls über mehr Produkte hinweg) und Pro ($1.200/Monat, 250.000 Calls) — lohnt sich mit Pay-as-you-go zu vergleichen, wenn deine Nutzung konstant ist.
- Namensnennungs- und Anzeigebedingungen gelten: Googles Nutzungsbedingungen schränken ein, geocodierte Ergebnisse auf einer anderen Karte als Googles eigener anzuzeigen — relevant, wenn du ein öffentlich sichtbares Kartenprodukt baust, nicht nur eine interne Pipeline.
- Wenn du bereits tief im GIS-Ökosystem von Esri steckst, ist ArcGIS' World Geocoding Service eine weitere enterprise-orientierte kostenpflichtige Option, pro Request kreditbasiert abgerechnet — eine sinnvolle Erwähnung, wenn dein Stack GIS-first ist, auch wenn die meisten Web-App-Teams sie nicht brauchen.
Option 3: Eine strukturierte Geocoding API
Für eine Pipeline, die vorhersagbares JSON braucht, ohne ein Google-Cloud-Billing-Konto aufzusetzen oder eigene Rate-Limit- und Retry-Logik gegen die öffentliche Nominatim-Instanz zu bauen, liefert eine Geocoding API dieselben zugrunde liegenden offenen Geocoding-Daten hinter einem Key, mit normalisierten Antworten über Vorwärtssuche, Reverse und OSM-ID-Lookup hinweg. Eine Adresse vorwärts geocodieren:
curl "https://api.crawlora.net/api/v1/geocoding/search?q=350+5th+Ave%2C+New+York%2C+NY&limit=1" \
-H "x-api-key: $CRAWLORA_API_KEY"
Derselbe Call in Python, batched über eine Liste:
import requests
h = {"x-api-key": "YOUR_API_KEY"}
base = "https://api.crawlora.net/api/v1/geocoding"
addresses = ["350 5th Ave, New York, NY", "1 Infinite Loop, Cupertino, CA"]
rows = []
for addr in addresses:
data = requests.get(f"{base}/search", headers=h, params={"q": addr, "limit": 1}).json()["data"]
if data["results"]:
top = data["results"][0]
rows.append({"query": addr, "lat": top["lat"], "lon": top["lon"], "display_name": top["display_name"]})
print(rows)
Eine echte Antwort (Empire State Building, gekürzt auf das Top-Ergebnis):
{
"data": {
"query": "350 5th Ave, New York, NY",
"results": [
{
"address": {
"house_number": "350",
"road": "5th Avenue",
"neighbourhood": "Koreatown",
"suburb": "Manhattan",
"city": "New York",
"county": "New York County",
"state": "New York",
"postcode": "10118",
"country": "United States",
"country_code": "us"
},
"display_name": "Empire State Building, 350, 5th Avenue, Koreatown, Manhattan Community Board 5, Manhattan, New York County, New York, 10118, United States",
"lat": "40.7484421",
"lon": "-73.9856589",
"osm_id": 34633854,
"osm_type": "way",
"importance": 0.5803438355141769,
"category": "office",
"addresstype": "office"
}
]
}
}
Eine Koordinate zurück-geocodieren:
data = requests.get(f"{base}/reverse", headers=h, params={"lat": 40.7484, "lon": -73.9857}).json()["data"]
print(data["display_name"])
Einen Ort über seine OpenStreetMap-ID nachschlagen (nützlich, wenn du bereits eine osm_id aus einem vorherigen Suchergebnis hast):
data = requests.get(f"{base}/lookup", headers=h, params={"osm_ids": "W34633854"}).json()["data"]
Ehrlich gesagt: Dieser Endpunkt proxyt dieselben offenen Nominatim/OSM-Daten wie die DIY-Option, nicht einen proprietären Index — er garantiert nicht auf magische Weise eine Uptime, die die öffentliche Instanz nicht liefern kann. Was du stattdessen bekommst, ist ein Key für Suche/Reverse/Lookup mit einheitlicher JSON-Form, Rate-Limit- und Retry-Behandlung auf unserer Seite (upstream 429/503/Timeouts werden klassifiziert und wiederholt, statt roh durchgereicht zu werden), und kein separates Google-Cloud-Billing-Konto, das du einrichten musst. Für Adressen, bei denen Googles proprietärer Index tatsächlich besser auflöst (mehrdeutige oder sehr neue Adressen), gewinnt weiterhin Option 2 bei der Genauigkeit.
Welchen Ansatz solltest du nutzen?
| DIY (Nominatim direkt) | Google Maps Geocoding API | Strukturierte Geocoding API | |
|---|---|---|---|
| Kosten | Kostenlos | 10.000/Monat kostenlos, danach $5,00/1.000 | Im kostenlosen Tarif enthalten (2.000 Credits/Monat, keine Karte), danach pro Credit |
| Setup | Kein Key, aber User-Agent + Namensnennung erforderlich | Google-Cloud-Projekt + Zahlungskarte | Ein API-Key |
| Rate-Limit | Absolut 1 Req/Sek, 4/Min für Bulk-Jobs | Standard 25 QPS (auf Anfrage erhöhbar) | Hinter dem Key gehandhabt |
| Retry-/Backoff-Logik | Schreibst du selbst | Googles Infrastruktur | Serverseitig gehandhabt |
| Datenquelle | OpenStreetMap | Googles eigener Index | OpenStreetMap |
| SLA | Keins — Best-Effort-öffentlicher Dienst | Googles kommerzielle Bedingungen | Kein formelles SLA; gleiche Upstream-Quelle, Retries für dich erledigt |
| Am besten für | Prototypen, Hobbyprojekte, sehr geringes Volumen | Teams, die Googles proprietäre Genauigkeit brauchen und bereits auf GCP sind | Ein Key für Geocoding und 500+ weitere Scraping-/Daten-Endpunkte |
Was du sammeln kannst
Pro Adresse oder Koordinate: Koordinaten (lat/lon), ein vollständiger Anzeigename und eine strukturierte Adressaufschlüsselung (Hausnummer, Straße, Nachbarschaft, Stadtteil, Stadt, Landkreis, Bundesland, Postleitzahl, Land und ISO-Ländercode), soweit OpenStreetMap diesen Detailgrad erfasst hat. Jedes Ergebnis trägt außerdem seine OpenStreetMap-Identität (osm_id, osm_type), eine Ortsklassifizierung (category, addresstype, type), einen relativen importance-Score und eine boundingbox — nützlich, um zu entscheiden, welches von mehreren gleichnamigen Ergebnissen das richtige ist.
Einschränkungen und häufige Herausforderungen
- Die Abdeckung variiert je nach Region. Die Adressdichte von OpenStreetMap ist in den meisten Teilen Europas und Nordamerikas hervorragend, in manchen Ländern aber dünner — wenn eine nationale Alternative wie GSI deine Zielregion besser abdeckt, lohnt es sich, das vorher zu prüfen.
- Kostenlose Tarife stoßen bei echtem Volumen schnell an ihre Grenzen. 10.000 Requests/Monat (Google) oder 1 Req/Sek (Nominatim) klingen großzügig, bis ein Batch-Job mit 50.000 Adressen über Nacht laufen muss.
- Mehrdeutige Adressen brauchen einen Fallback. „350 5th Ave" ohne Stadtangabe kann Ergebnisse in mehreren Bundesstaaten liefern; gib immer so viel Struktur mit (
city,state,country), wie du hast, und prüfe bei Antworten mit mehreren Ergebnissenimportance/place_rank. - Keine der Quellen hier ist eine Echtzeit-Uptime-Garantie. Ob du Nominatim direkt aufrufst oder über eine strukturierte API, die auf denselben Daten sitzt — plane in einer Produktionspipeline mit gelegentlichen Retries.
Quellen
Jetzt loslegen
Erst kostenlos ausprobieren: Lass eine beliebige öffentliche URL durch den Free Web Scraper laufen, oder prüfe mit dem Anti-Bot Checker, ob eine Seite Bots blockiert — ohne Anmeldung.
Teste die Such-, Reverse- und Lookup-Endpunkte im Playground, sieh dir das Schema in den API-Docs an und wirf einen Blick auf die Preise. Kombiniere Koordinaten mit einem Google-Maps-Places-Abruf für den Kontext lokaler Unternehmen, mit Immobilienangeboten oder Zillow für Objektadressen, die geocodiert werden müssen, oder mit Numbeo-Lebenshaltungskostendaten, um einen Standort mit Lebensqualitätsstatistiken anzureichern. Siehe auch ist Web Scraping legal für die breiteren rechtlichen Grundlagen und Immobilienmarkt-Intelligence für den End-to-End-Anwendungsfall.
Teil unserer how-to-scrape-Guide-Reihe — jede von uns abgedeckte Plattform, in einem Index.
Häufig gestellte Fragen
Gibt es eine kostenlose Geocoding-API?
Ja. Die öffentliche Nominatim/OpenStreetMap-Instanz ist ohne Anmeldung oder API-Key kostenlos, deckelt aber bei absolut 1 Request/Sekunde, beschränkt einmalige Bulk-Jobs auf 4 Requests/Minute von einer einzigen Maschine, verlangt einen echten User-Agent oder Referer plus Namensnennung und hat kein Uptime-SLA. Sie eignet sich gut für Prototypen und geringes Volumen, nicht als garantiert verfügbare Produktionsabhängigkeit.
Wie vergleichen sich die Preise von Geocoding-APIs bei verschiedenen Anbietern?
Nominatim/OpenStreetMap ist kostenlos, aber auf 1 Req/Sek limitiert und ohne SLA. Googles Geocoding API gibt 10.000 kostenlose Requests/Monat (Cloud-Billing erforderlich), danach $5,00 pro 1.000 bis 100.000, gestaffelt bis $0,38 pro 1.000 ab 5 Millionen. Mapbox bietet 100.000 kostenlose Geocoding-Requests/Monat, danach etwa $0,45–$0,75 pro 1.000. OpenCages kostenloser Tarif (2.500/Tag) ist nur zum Testen gedacht, nicht für Produktion; LocationIQs kostenloser Tarif (etwa 5.000/Tag) erlaubt kommerzielle Nutzung. Eine strukturierte API auf den offenen Daten kann all das für eine Allzweck-Pipeline unterbieten, die Googles proprietären Index nicht braucht.
Was ist eine gute Alternative zur Google Maps Geocoding API?
Für die meisten Anwendungsfälle deckt die kostenlose öffentliche Nominatim/OpenStreetMap-API oder eine strukturierte Geocoding-API auf denselben offenen Daten das ab, ohne ein Google-Cloud-Billing-Konto. Mapbox und LocationIQ sind ebenfalls praktikable bezahlte Alternativen mit großzügigeren kostenlosen Tarifen. Wenn deine Adressen auf ein Land konzentriert sind, kann die eigene Kartenbehörde dieses Landes (z. B. Japans 国土地理院/GSI) kostenlos und genauer als jeder globale Index sein. Esris ArcGIS World Geocoding Service ist die Enterprise-GIS-orientierte Option, wenn du bereits auf diesem Stack bist.
Was ist Reverse Geocoding und wie rufe ich es auf?
Reverse Geocoding wandelt eine Koordinate (Breiten-/Längengrad) in eine lesbare Adresse um, statt umgekehrt — nützlich, um einen GPS-Ping, Lieferpin oder Fotostandort in eine Stadt, Postleitzahl oder ein Stadtviertel zu verwandeln. Rufe einen Reverse-Endpunkt mit lat und lon auf (z. B. GET /geocoding/reverse?lat=..&lon=..), und er gibt den nächstgelegenen Ort mit einer vollständigen strukturierten Adressaufschlüsselung zurück.
Was sind typische Rate-Limits bei Geocoding-APIs?
Sie variieren stark je nach Anbieter: Nominatims öffentliche Instanz ist auf absolut 1 Request/Sekunde begrenzt (4/Minute für Bulk-Jobs), Googles Standard liegt bei 25 Abfragen/Sekunde (auf Anfrage erhöhbar), und bezahlte Anbieter wie Mapbox und LocationIQ skalieren Requests/Sekunde typischerweise mit dem Plan-Tier. Prüfe immer die aktuelle Richtlinie des jeweiligen Anbieters, bevor du einen Batch-Job um ein angenommenes Limit herum baust.
Ist es legal, eine Liste von Adressen zu geocodieren?
Grundsätzlich ja — eine öffentliche Adresse in Koordinaten umzuwandeln (oder zurück) ist eine unumstrittene, etablierte Nutzung öffentlicher Daten. Die Nuance liegt bei der Lizenzierung der Datenquelle (OpenStreetMaps ODbL verlangt Namensnennung und Share-Alike, wenn du die zugrunde liegenden Kartendaten weiterverteilst) und bei Regeln zu personenbezogenen Daten, wenn die Adresse mit einer identifizierbaren Person verknüpft ist (DSGVO/CCPA). Keine Rechtsberatung.
Kann ich Adressen außerhalb der USA geocodieren?
Ja — Nominatim, Google, Mapbox und eine strukturierte API auf OpenStreetMap-Daten decken alle Adressen weltweit ab, auch wenn die Abdeckungsdichte je nach Land variiert. Für ein einzelnes Land, das du gut kennst, lohnt es sich zu prüfen, ob dessen nationale Kartenbehörde einen eigenen kostenlosen Geocoder anbietet, bevor du standardmäßig einen globalen Anbieter nutzt.