Tony Wang8 min de lecturaAPI de geocodificación: cómo geocodificar direcciones en 2026
Geocodifica direcciones en 2026: DIY gratis con Nominatim/OSM, Google Maps o una API estructurada de Crawlora, con precios y código reales.
La forma más rápida de convertir una dirección en coordenadas (o unas coordenadas en una dirección) en 2026 es llamar a una API de geocodificación — no necesitas hacer scraping de un sitio de mapas ni escribir tu propio parser de direcciones. La verdadera decisión es cuál API usar: la instancia pública gratuita de Nominatim/OpenStreetMap, la Geocoding API de pago de Google Maps, o una API estructurada que envuelve los mismos datos abiertos detrás de una sola clave. Esta guía cubre las tres, con precios reales de 2026, límites de tasa reales y código ejecutable para cada una.
Por qué geocodificar direcciones a gran escala
- Logística y rutas de entrega — convierte una lista de direcciones de clientes en coordenadas para optimizar rutas, o geocodifica de forma inversa la señal GPS de un conductor para obtener una parada legible.
- Inmobiliarias y datasets de localizadores de tiendas — sitúa listados o ubicaciones de tiendas en un mapa a partir de un campo de dirección, o completa coordenadas faltantes en un dataset existente.
- Etiquetado de ubicación generado por usuarios — geocodifica de forma inversa un lat/lon capturado por una app móvil (check-in, EXIF de una foto, pin de entrega) para obtener una ciudad, código postal o barrio útil para búsqueda y filtrado.
- Enriquecimiento de datos — normaliza formatos de dirección inconsistentes en un CRM o lista de leads a una forma estructurada común (ciudad, estado, país, código postal) para deduplicar y segmentar.
- Investigación de mercado y selección de ubicaciones — geocodifica un lote de direcciones de competidores o candidatas para calcular proximidad, densidad o huecos de cobertura.
¿Es legal geocodificar direcciones?
Sí, en general. Geocodificar datos públicos de direcciones postales — convertir una dirección en coordenadas o al revés — es un uso de datos públicos bien establecido y poco controvertido; es la misma operación que realiza cualquier app de mapas cuando escribes un destino. El matiz está en el lado de la fuente de datos, no en la geocodificación en sí: los datos de OpenStreetMap están licenciados bajo la Open Database License (ODbL), que exige atribución y condiciones de compartir-igual si redistribuyes los datos de mapa subyacentes (no solo las coordenadas que calculas a partir de ellos); los términos de Google restringen mostrar sus resultados de geocodificación en cualquier lugar que no sea un Google Map. No geocodifiques datos vinculados a una persona (una dirección de casa ligada a una identidad) sin una base legal bajo GDPR/CCPA, y respeta la política de uso y los límites de tasa de cada proveedor. Consulta si el web scraping es legal para el marco legal más amplio. No es asesoramiento legal.
Opción 1: DIY con Nominatim/OpenStreetMap (gratis, con sus trampas)
Nominatim es el geocodificador de código abierto que hay detrás del propio buscador de OpenStreetMap, y la OpenStreetMap Foundation gestiona una instancia pública gratuita que cualquiera puede llamar — sin registro, sin clave de API:
import requests
import time
HEADERS = {"User-Agent": "MyApp/1.0 ([email protected])"} # 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 genuinamente gratis y funciona — pero la Política de uso de Nominatim es estricta, y vale la pena leerla antes de construir sobre ella:
- Límite absoluto de 1 solicitud/segundo. Sin ráfagas, sin excepciones, para ningún cliente.
- Los trabajos masivos puntuales están aún más limitados, a 4 solicitudes/minuto, desde una sola máquina, sin scripts distribuidos.
- Se requiere un
User-AgentoRefererreal, y debes mostrar atribución a OpenStreetMap. - Debes cachear los resultados en tu lado — volver a consultar la misma dirección repetidamente va contra la política.
- Sin SLA, sin garantía de disponibilidad. Es un servicio público gratuito que corre sobre infraestructura donada. De vez en cuando devuelve errores transitorios
429/503o timeouts bajo carga — nosotros mismos nos hemos topado con esto al proxyear la misma instancia en la Opción 3 más abajo, y tuvimos que añadir clasificación de reintentos en nuestro lado en lugar de asumir que toda solicitud tiene éxito a la primera.
Para un puñado de direcciones o un proyecto personal, esta es la decisión correcta — no cuesta nada y no hay ninguna clave que gestionar. Para un pipeline de producción que geocodifica miles de filas al día, el techo de 1 solicitud/segundo por sí solo lo hace poco práctico (10.000 direcciones tardan al menos 2,8 horas de forma secuencial), y encima tienes que construir tú mismo la lógica de reintentos y cacheo contra un servicio sin compromiso de disponibilidad.
También existen alternativas gratuitas específicas por región. Si tus direcciones están todas en un país, la API propia de la agencia cartográfica nacional suele ser más rápida y precisa que un índice global para ese país — por ejemplo, el 国土地理院 (GSI) de Japón ofrece un endpoint de geocodificación gratuito y sin registro para direcciones japonesas con CORS habilitado, un recambio habitual cuando un equipo solo necesita cobertura nacional y quiere evitar por completo los precios de Google Maps.
Opción 2: Google Maps Geocoding API (oficial, de pago)
La Geocoding API de Google es la histórica, y sus precios cambiaron de forma sustancial en el último año: el antiguo crédito general de 200 $/mes se retiró en marzo de 2025. En su lugar, cada API ahora tiene su propio tope mensual gratuito — el de la Geocoding API es de 10.000 solicitudes gratis al mes, y después:
| Volumen mensual | Precio por cada 1.000 solicitudes |
|---|---|
| 0 – 10.000 | Gratis |
| 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 $ |
| Más de 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"])
Las trampas:
- Necesitas un proyecto de Google Cloud con facturación activada — una tarjeta de crédito registrada — incluso para usar el nivel gratuito de 10.000/mes. Los clientes nuevos reciben un crédito de prueba único de 300 $, no uno mensual continuo.
- Google también vende planes de suscripción ahora: Starter (100 $/mes, 50.000 llamadas, agrupa Geocoding con Dynamic Maps), Essentials (275 $/mes, 100.000 llamadas entre más productos) y Pro (1.200 $/mes, 250.000 llamadas) — vale la pena comparar contra el pago por uso si tu consumo es estable.
- Se aplican términos de atribución y visualización: los términos de Google restringen mostrar los resultados geocodificados en cualquier mapa que no sea el propio de Google, algo que importa si estás construyendo un producto de mapas de cara al público, no solo un pipeline interno.
- Si ya estás inmerso en el ecosistema GIS de Esri, ArcGIS's World Geocoding Service es otra opción de pago orientada a empresas, medida por crédito por solicitud — una mención razonable si tu stack es GIS-first, aunque la mayoría de equipos de aplicaciones web no la necesitarán.
Opción 3: Una API de geocodificación estructurada
Para un pipeline que necesita JSON predecible sin montar una cuenta de facturación de Google Cloud ni construir a mano la lógica de límite de tasa y reintentos contra la instancia pública de Nominatim, una API de geocodificación te da los mismos datos abiertos de geocodificación subyacentes detrás de una sola clave, con respuestas normalizadas entre búsqueda directa, inversa y lookup por id de OSM. Geocodifica una dirección de forma directa:
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"
La misma llamada en Python, en lote sobre una lista:
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)
Una respuesta real (Empire State Building, recortada al resultado principal):
{
"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"
}
]
}
}
Geocodifica de forma inversa unas coordenadas:
data = requests.get(f"{base}/reverse", headers=h, params={"lat": 40.7484, "lon": -73.9857}).json()["data"]
print(data["display_name"])
Busca un lugar por su id de OpenStreetMap (útil cuando ya tienes un osm_id de un resultado de búsqueda anterior):
data = requests.get(f"{base}/lookup", headers=h, params={"osm_ids": "W34633854"}).json()["data"]
Para ser honestos: este endpoint actúa como proxy de los mismos datos abiertos de Nominatim/OSM que la opción DIY, no de un índice propietario — no garantiza mágicamente una disponibilidad que la instancia pública no pueda ofrecer. Lo que obtienes en su lugar es una sola clave para búsqueda/inversa/lookup con un formato JSON consistente, gestión de límites de tasa y reintentos de nuestro lado (los 429/503/timeouts del origen se clasifican y se reintentan en lugar de mostrarse en crudo), y sin tener que configurar aparte una cuenta de facturación de Google Cloud. Para direcciones donde el índice propietario de Google realmente resuelve mejor (direcciones ambiguas o muy nuevas), la Opción 2 sigue ganando en precisión.
¿Qué enfoque deberías usar?
| DIY (Nominatim directo) | Google Maps Geocoding API | API de geocodificación estructurada | |
|---|---|---|---|
| Costo | Gratis | 10.000/mes gratis, luego 5,00 $/1.000 | Incluido en el nivel gratuito (2.000 créditos/mes, sin tarjeta), luego por crédito |
| Configuración | Sin clave, pero se requiere User-Agent + atribución | Proyecto de Google Cloud + tarjeta de facturación | Una clave de API |
| Límite de tasa | 1 solicitud/segundo absoluto, 4/minuto para trabajos masivos | 25 QPS por defecto (ampliable por solicitud) | Gestionado detrás de la clave |
| Lógica de reintento/backoff | La escribes tú | Infraestructura de Google | Gestionado del lado del servidor |
| Fuente de datos | OpenStreetMap | Índice propio de Google | OpenStreetMap |
| SLA | Ninguno — servicio público de mejor esfuerzo | Términos comerciales de Google | Sin SLA formal; mismo origen, reintentos gestionados por ti |
| Ideal para | Prototipos, proyectos personales, volumen muy bajo | Equipos que necesitan la precisión propietaria de Google, ya en GCP | Una clave para geocodificación y más de 500 otros endpoints de scraping/datos |
Qué puedes recopilar
Por dirección o coordenada: coordenadas (lat/lon), un nombre de visualización completo y un desglose de dirección estructurado (número de casa, calle, barrio, distrito, ciudad, condado, estado, código postal, país y código de país ISO) allí donde OpenStreetMap tenga mapeado ese nivel de detalle. Cada resultado también lleva su identidad de OpenStreetMap (osm_id, osm_type), una clasificación del lugar (category, addresstype, type), una puntuación relativa de importance y un boundingbox — útil para decidir cuál de varios resultados con el mismo nombre es el correcto.
Limitaciones y desafíos comunes
- La cobertura varía según la región. La densidad de direcciones de OpenStreetMap es excelente en la mayor parte de Europa y Norteamérica, pero más escasa en algunos países — si una alternativa nacional como el GSI cubre mejor tu región objetivo, vale la pena comprobarlo primero.
- Los niveles gratuitos se agotan rápido con volumen real. 10.000 solicitudes/mes (Google) o 1 solicitud/segundo (Nominatim) suenan generosos hasta que un trabajo por lotes de 50.000 direcciones necesita ejecutarse de la noche a la mañana.
- Las direcciones ambiguas necesitan un plan alternativo. "350 5th Ave" sin una ciudad puede devolver resultados en varios estados; pasa siempre toda la estructura que tengas (
city,state,country), y revisaimportance/place_ranken respuestas con varios resultados. - Ninguna fuente aquí es una garantía de disponibilidad en tiempo real. Ya sea que llames a Nominatim directamente o a través de una API estructurada que se apoya en los mismos datos, presupuesta reintentos ocasionales en un pipeline de producción.
Fuentes
Empieza a recopilar
Pruébalo primero, gratis: ejecuta cualquier URL pública con el Free Web Scraper, o comprueba si un sitio bloquea bots con el Anti-Bot Checker — sin registro.
Prueba los endpoints de búsqueda, inversa y lookup en el Playground, revisa el esquema en la documentación de la API y consulta los precios. Combina coordenadas con una extracción de Google Maps para obtener contexto de negocios locales, listados inmobiliarios o Zillow para direcciones de propiedades que necesitan geocodificación, o datos de costo de vida de Numbeo para enriquecer una ubicación con estadísticas de calidad de vida. Consulta también si el web scraping es legal para lo básico del marco legal, y inteligencia del mercado inmobiliario para el caso de uso de extremo a extremo.
Parte de nuestra serie de guías how-to-scrape — todas las plataformas que cubrimos, en un solo índice.
Preguntas frecuentes
¿Existe alguna API de geocodificación gratuita?
Sí. La instancia pública de Nominatim/OpenStreetMap es gratis, sin registro ni clave de API, pero tiene un límite absoluto de 1 solicitud/segundo, los trabajos masivos puntuales desde una sola máquina se limitan a 4 solicitudes/minuto, requiere un User-Agent o Referer real y atribución, y no ofrece SLA de disponibilidad. Es suficiente para prototipos o uso de bajo volumen, pero no es adecuada como dependencia de producción con disponibilidad garantizada.
¿Cómo se comparan los precios de las APIs de geocodificación?
Nominatim/OpenStreetMap es gratis pero se limita a 1 solicitud/segundo y no tiene SLA. La Geocoding API de Google ofrece 10.000 solicitudes gratis al mes (requiere facturación configurada en Google Cloud), luego desde 5,00 $ por cada 1.000, bajando de forma escalonada hasta 0,38 $ por encima de 5 millones al mes. Mapbox ofrece 100.000 solicitudes de geocodificación gratis al mes, y después entre 0,45 y 0,75 $ aproximadamente por cada 1.000. El nivel gratuito de OpenCage (2.500 al día) es solo para pruebas y no está pensado para producción, mientras que el de LocationIQ (unos 5.000 al día) sí permite uso comercial. Para un pipeline genérico que no necesite el índice propio de Google, una API estructurada construida sobre los mismos datos abiertos puede salir más barata que todas ellas.
¿Cuál es una buena alternativa a la Google Maps geocoding API?
Para la mayoría de los usos, la API pública gratuita de Nominatim/OpenStreetMap o una API de geocodificación estructurada construida sobre los mismos datos abiertos cubren la necesidad sin una cuenta de facturación de Google Cloud. Mapbox y LocationIQ también son alternativas de pago válidas con niveles gratuitos más generosos. Si tus direcciones están concentradas en un país, la propia agencia cartográfica nacional (por ejemplo, el 国土地理院/GSI de Japón) puede ser gratuita y más precisa que un índice global. Si ya estás en ese stack, ArcGIS World Geocoding Service de Esri es la opción GIS empresarial.
¿Qué es la geocodificación inversa y cómo se llama?
La geocodificación inversa convierte unas coordenadas (latitud y longitud) en una dirección legible, el proceso opuesto a la geocodificación normal. Es útil para convertir una señal GPS, un pin de entrega o la ubicación de una foto en una ciudad, código postal o barrio. Llamando al endpoint inverso con lat y lon (por ejemplo, GET /geocoding/reverse?lat=..&lon=..) se devuelve el lugar más cercano junto con el desglose completo de la dirección estructurada.
¿Cuáles son los límites de tasa típicos de una API de geocodificación?
Varían mucho según el proveedor. La instancia pública gratuita de Nominatim tiene un límite absoluto de 1 solicitud/segundo (4 por minuto para trabajos masivos), el valor por defecto de Google es 25 consultas por segundo (ampliable por solicitud), y proveedores de pago como Mapbox o LocationIQ suelen escalar las solicitudes por segundo según el nivel del plan. Comprueba siempre la política más reciente del proveedor antes de construir un trabajo por lotes que asuma un límite concreto.
¿Es legal geocodificar una lista de direcciones?
En general, sí. Convertir direcciones públicas en coordenadas (o al revés) es un uso de datos públicos bien establecido y poco controvertido. Lo que hay que vigilar es la licencia de la fuente de datos (la ODbL de OpenStreetMap exige atribución y compartir-igual si redistribuyes los datos de mapa originales) y las normas de datos personales (GDPR/CCPA) cuando la dirección está vinculada a una persona identificable. Esto no es asesoramiento legal.