Si alguna vez has intentado armar una lista de ventas bien segmentada, explorar mercados nuevos o comparar a tus competidores, ya sabes que Google Maps es una auténtica mina de oro. Pero ojo con esto: con más de 1.5 mil millones de búsquedas de “cerca de mí” cada mes y el 76% de las personas que buscan negocios locales visitando uno dentro de 24 horas (), la necesidad de datos comerciales actualizados y basados en ubicación nunca ha sido tan fuerte.
Tanto si trabajas en ventas, marketing u operaciones, extraer datos estructurados de Google Maps puede marcar la diferencia entre una llamada en frío y un lead templado con alta probabilidad de conversión.
Llevo años trabajando en SaaS y automatización, y he visto de primera mano cómo los equipos usan Python —y ahora también herramientas impulsadas por IA como — para convertir Google Maps en un activo estratégico. En esta guía, te voy a mostrar paso a paso cómo extraer datos de Google Maps con Python en 2026, con código, consejos de cumplimiento y una comparación con opciones sin código. Si eres experto en Python o simplemente quieres llegar lo antes posible a datos accionables, estás en el sitio correcto.
¿Qué significa extraer datos de Google Maps con Python?
Empecemos por lo básico: extraer datos de Google Maps con Python significa obtener de forma programática información de negocios —como nombres, direcciones, valoraciones, reseñas, teléfonos y coordenadas— desde Google Maps, para luego analizarla, filtrarla y exportarla con fines comerciales.

Hay dos formas principales de hacerlo:
- Google Maps Places API: la vía oficial y autorizada. Usas una clave API para consultar los servidores de Google y recibir datos JSON estructurados. Es estable, predecible y, en general, cumple con las normas, aunque tiene cuotas y costes.
- Raspado del HTML: automatizas un navegador (con herramientas como Playwright o Selenium) para cargar Google Maps, hacer búsquedas y analizar la página renderizada. Es más flexible, pero frágil: Google cambia con frecuencia la estructura de su sitio, y además raspar el HTML puede incumplir sus términos.
Campos típicos que puedes extraer:
- Nombre del negocio
- Categoría/tipo
- Dirección completa (más ciudad, estado, código postal y país)
- Latitud y longitud
- Número de teléfono
- URL del sitio web
- Valoración y cantidad de reseñas
- Nivel de precios
- Estado del negocio (abierto/cerrado)
- Horario de apertura
- Place ID (identificador único de Google)
- URL de Google Maps
¿Por qué importa esto? Porque estos datos sirven para todo: generación de leads, planificación territorial, seguimiento de competidores e investigación de mercado. La clave está en recoger los datos adecuados para tus objetivos de negocio, no en extraer información a ciegas.
Por qué los equipos de ventas y marketing extraen datos de Google Maps con Python
Vamos a lo práctico. ¿Por qué tantos equipos de ventas y marketing están obsesionados con los datos de Google Maps en 2026?
- Generación de leads: crea listas muy segmentadas de negocios locales con datos de contacto y valoraciones para campañas de prospección.
- Planificación territorial: diseña zonas de ventas, áreas de reparto o regiones de servicio según la densidad y el tipo de negocios reales.
- Seguimiento de competidores: monitoriza ubicaciones, valoraciones y reseñas de la competencia a lo largo del tiempo para detectar tendencias y oportunidades.
- Investigación de mercado: analiza categorías de negocio, horarios y sentimiento de reseñas para orientar estrategias de salida al mercado.
- Selección de ubicaciones: en sectores como retail e inmobiliario, evalúa posibles emplazamientos según servicios cercanos, tráfico peatonal y competencia.
Impacto real: según el , el 92% de las organizaciones de ventas planea aumentar la inversión en IA y datos, y los equipos que usan datos locales y segmentados logran tasas de conversión hasta 8 veces mayores que quienes dependen de listas frías genéricas (). Un estudio sobre generación de leads para franquicias mostró 15 dólares de nuevos ingresos por cada 1 dólar invertido en listas de leads basadas en Google Maps.
Cómo se relacionan los objetivos de negocio con los campos de Google Maps:
| Objetivo de negocio | Campos de Google Maps necesarios |
|---|---|
| Lista de leads locales | nombre, dirección, teléfono, sitio web, categoría |
| Planificación territorial | nombre, lat/lng, business_status, opening_hours |
| Comparativa con competidores | nombre, valoración, userRatingCount, priceLevel, reseñas |
| Selección de ubicaciones | categoría, lat/lng, densidad de reseñas, openingDate |
| Inteligencia sobre sentimiento/menú | reseñas, editorialSummary, fotos, types |
| Prospección por email/teléfono | nationalPhoneNumber, websiteUri (y luego enriquecer si hace falta) |
Configurar tu raspador de Google Maps en Python: herramientas y requisitos
Antes de empezar a raspar, necesitas dejar listo tu entorno de Python y reunir las herramientas adecuadas. Esto es lo que necesitas en 2026:
1. Instala Python y las librerías necesarias
Versión recomendada de Python: 3.10 o superior.
Instala las librerías clave:
1pip install \
2 requests==2.33.1 httpx==0.28.1 \
3 beautifulsoup4==4.14.3 lxml==6.0.3 \
4 pandas==2.3.3 \
5 selenium==4.43.0 playwright==1.58.0 \
6 googlemaps==4.10.0 google-maps-places==0.8.0 \
7 schedule==1.2.2 APScheduler==3.11.2 \
8 python-dotenv==1.2.2 tenacity==9.1.4
9playwright install chromium
Qué hace cada una:
requests,httpx: solicitudes HTTP (llamadas API)beautifulsoup4,lxml: análisis de HTML (para web scraping)pandas: limpieza, análisis y exportación de datosselenium,playwright: automatización del navegador (para raspar HTML)googlemaps,google-maps-places: clientes para la API de Google Mapsschedule,APScheduler: programación de tareaspython-dotenv: carga segura de claves API desde archivos.envtenacity: lógica de reintento para manejo de errores
2. Obtén una clave API de Google Maps (si usarás la API)
- Ve a .
- Crea o selecciona un proyecto.
- Activa la facturación (obligatoria, incluso para el nivel gratuito).
- Habilita “Places API (New)” en APIs & Services > Library.
- Ve a Credentials > Create Credentials > API Key.
- Restringe la clave a APIs e IPs concretas por seguridad.
- Guarda la clave en un archivo
.env(nunca la subas al código):
1GOOGLE_MAPS_API_KEY=your_actual_api_key_here
Nota: Desde marzo de 2025, Google ya no ofrece el crédito universal de 200 dólares al mes. En su lugar, hay umbrales gratuitos mensuales por nivel de API (consulta la ).
Cómo extraer datos de Google Maps usando Python: guía paso a paso
Veamos los dos enfoques principales —basado en API y raspado de HTML— para que elijas el que mejor se adapte a tus necesidades.
Enfoque 1: usar la Google Maps Places API (recomendado)
Paso 1: instala e importa las librerías necesarias
1import os
2import httpx
3import pandas as pd
4from dotenv import load_dotenv
Paso 2: carga tu clave API de forma segura
1load_dotenv()
2API_KEY = os.environ["GOOGLE_MAPS_API_KEY"]
Paso 3: construye tu consulta de búsqueda
Usarás el endpoint de Text Search para encontrar negocios que coincidan con tus criterios.
1URL = "https://places.googleapis.com/v1/places:searchText"
2FIELD_MASK = ",".join([
3 "places.id", "places.displayName", "places.formattedAddress",
4 "places.location", "places.rating", "places.userRatingCount",
5 "places.priceLevel", "places.types",
6 "places.nationalPhoneNumber", "places.websiteUri",
7 "nextPageToken",
8])
Paso 4: realiza la solicitud a la API
1def text_search(query, lat, lng, radius=3000, min_rating=4.0):
2 body = {
3 "textQuery": query,
4 "minRating": min_rating, # filtro del lado del servidor
5 "includedType": "restaurant",
6 "openNow": False,
7 "pageSize": 20,
8 "locationBias": {
9 "circle": {
10 "center": {"latitude": lat, "longitude": lng},
11 "radius": radius,
12 }
13 },
14 }
15 headers = {
16 "Content-Type": "application/json",
17 "X-Goog-Api-Key": API_KEY,
18 "X-Goog-FieldMask": FIELD_MASK, # ¡siempre configurarlo!
19 }
20 r = httpx.post(URL, json=body, headers=headers, timeout=30)
21 r.raise_for_status()
22 return r.json()
Paso 5: gestiona la paginación y recopila los resultados
1def collect_all_results(query, lat, lng, radius=3000, min_rating=4.0):
2 results = []
3 next_page_token = None
4 while True:
5 data = text_search(query, lat, lng, radius, min_rating)
6 places = data.get('places', [])
7 results.extend(places)
8 next_page_token = data.get('nextPageToken')
9 if not next_page_token:
10 break
11 return results
Paso 6: exporta los datos con Pandas
1df = pd.DataFrame(collect_all_results("coffee shops in Brooklyn", 40.6782, -73.9442))
2df.to_csv("brooklyn_coffee_shops.csv", index=False)
Consejos útiles:
- Configura siempre el encabezado
X-Goog-FieldMaskpara controlar los costes. Si solicitas reseñas o fotos, el precio por cada 1,000 solicitudes puede pasar de 5 a 25 dólares (). - Usa filtros del lado del servidor como
minRating,includedTypeylocationBiaspara no gastar créditos en resultados que no te sirven. - Guarda los valores de
place_idpara deduplicar y actualizar datos en el futuro.
Enfoque 2: raspar el HTML de Google Maps (solo para uso educativo o puntual)
Advertencia: Google Maps es una aplicación de una sola página. Debes usar automatización de navegador (Playwright o Selenium), y raspar el HTML puede violar los términos de Google. Úsalo para investigación, no para producción.
Paso 1: instala Playwright y abre un navegador
1from playwright.sync_api import sync_playwright
2import time, re
3def scrape_maps(query, max_results=100):
4 with sync_playwright() as pw:
5 browser = pw.chromium.launch(headless=True)
6 ctx = browser.new_context(
7 user_agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36",
8 locale="en-US",
9 )
10 page = ctx.new_page()
11 page.goto("https://www.google.com/maps", timeout=60_000)
12 page.fill("#searchboxinput", query)
13 page.click('button[aria-label="Search"]')
14 page.wait_for_selector('div[role="feed"]')
15 feed = page.locator('div[role="feed"]')
16 prev = 0
17 while True:
18 feed.evaluate("el => el.scrollBy(0, el.scrollHeight)")
19 time.sleep(2)
20 count = page.locator('div[role="feed"] > div > div[jsaction]').count()
21 if count == prev or count >= max_results:
22 break
23 prev = count
24 if page.locator("text=You've reached the end of the list").count():
25 break
26 rows = []
27 cards = page.locator('div[role="feed"] > div > div[jsaction]')
28 for i in range(cards.count()):
29 c = cards.nth(i)
30 name = c.locator("div.fontHeadlineSmall").inner_text() if c.locator("div.fontHeadlineSmall").count() else ""
31 rating_el = c.locator('span[role="img"]').first
32 raw = rating_el.get_attribute("aria-label") if rating_el.count() else ""
33 m = re.search(r"([\d.]+)\s+stars?\s+([\d,]+)\s+Reviews", raw or "")
34 rating = float(m.group(1)) if m else None
35 reviews = int(m.group(2).replace(",", "")) if m else None
36 rows.append({"name": name, "rating": rating, "reviews": reviews})
37 browser.close()
38 return rows
Consejos:
- Google cambia aleatoriamente las clases CSS cada pocas semanas, así que este código puede requerir actualizaciones periódicas.
- Usa pausas que parezcan humanas y evita raspar demasiado rápido para reducir el riesgo de bloqueo.
- Nunca intentes saltarte CAPTCHAs ni el sistema SearchGuard de Google; eso puede exponerte a riesgos legales.
Evita el raspado indiscriminado: cómo apuntar con precisión a los datos que necesitas
Rasparlo todo es una receta para perder tiempo y llenar tu base de datos con ruido. Así es como puedes apuntar solo a la información que de verdad importa:
- Genera listas de URLs segmentadas: usa los filtros de búsqueda de Google Maps (categoría, ubicación, valoración, abierto ahora) para acotar resultados antes de extraerlos.
- Usa coincidencia por frase: busca tipos de negocio o palabras clave exactas (por ejemplo, “panadería vegana en Austin”).
- Filtros de ubicación: especifica ciudad, barrio o incluso coordenadas y radio para una precisión milimétrica.
- Filtrado del lado del servidor (API): usa
minRating,includedTypeylocationBiasen el cuerpo de la solicitud. - Filtrado del lado del cliente (Python): después del raspado, usa pandas para quedarte con negocios con más de 4.0 de valoración, más de 50 reseñas o categorías concretas.
Ejemplo: filtrar solo restaurantes en Manhattan con valoración superior a 4.0
1df = pd.DataFrame(results)
2filtered = df[(df['rating'] >= 4.0) & (df['types'].apply(lambda x: 'restaurant' in x))]
3filtered.to_csv("manhattan_top_restaurants.csv", index=False)
Cómo usar librerías de Python para organizar y exportar datos de Google Maps
Una vez extraídos los datos, llega el momento de limpiarlos, analizarlos y exportarlos para tu equipo.
Limpieza y estructuración con Pandas
1import pandas as pd
2df = pd.read_json("brooklyn_restaurants.json")
3df = (
4 df.dropna(subset=["name", "address"])
5 .drop_duplicates(subset=["place_id"])
6 .assign(
7 name=lambda d: d["name"].str.strip(),
8 phone=lambda d: d["phone"].astype(str)
9 .str.replace(r"\D", "", regex=True)
10 .str.replace(r"^1?(\d{10})$", r"+1\1", regex=True),
11 rating=lambda d: pd.to_numeric(d["rating"], errors="coerce"),
12 user_ratings_total=lambda d: pd.to_numeric(
13 d["user_ratings_total"], errors="coerce"
14 ).fillna(0).astype("int32"),
15 )
16)
Análisis y resumen de datos
Ejemplo: valoración media por barrio
1by_neighborhood = (
2 df.groupby("neighborhood", as_index=False)
3 .agg(avg_rating=("rating", "mean"),
4 n_places=("place_id", "nunique"),
5 median_reviews=("user_ratings_total", "median"))
6 .sort_values("avg_rating", ascending=False)
7)
Exportar a Excel o CSV
1df.to_csv("brooklyn_top.csv", index=False)
2df.to_excel("brooklyn_top.xlsx", index=False, sheet_name="Top Rated")
¿Tienes conjuntos de datos grandes? Usa el formato Parquet para ganar velocidad y eficiencia de almacenamiento:
1df.to_parquet("brooklyn_top.parquet", compression="zstd")
Thunderbit: alternativa con IA a un raspador de Google Maps en Python
Si estás pensando: “Todo esto es demasiado para una simple lista de leads”, no eres el único. Precisamente por eso creamos : un raspador web sin código impulsado por IA que hace que extraer datos de Google Maps —y mucho más— sea tan fácil como hacer un par de clics.
¿Por qué Thunderbit?
- No necesitas programar ni usar claves API: solo abre la , entra en Google Maps y haz clic en “AI Suggest Fields”.
- Detección de campos con IA: la IA de Thunderbit lee la página y sugiere las columnas correctas: nombre, dirección, valoración, teléfono, sitio web y más.
- Raspado de subpáginas: si quieres enriquecer tu tabla con datos de cada web de negocio, Thunderbit puede visitar cada subpágina y extraer información adicional automáticamente.
- Exportación a Excel, Google Sheets, Airtable o Notion: olvídate de pelear con pandas; solo haz clic en “Export” y tus datos quedan listos para el equipo.
- Raspado programado: configura tareas recurrentes para vigilar competidores o actualizar tu lista de leads automáticamente.
- Mantenimiento cero: la IA de Thunderbit se adapta a los cambios del sitio, así que no tendrás que estar corrigiendo scripts rotos todo el tiempo.

Flujo de trabajo Thunderbit vs Python:
| Paso | Raspador en Python | Thunderbit |
|---|---|---|
| Instalar herramientas | 30–60 min (Python, pip, librerías) | 2 min (extensión de Chrome) |
| Configurar clave API | 10–30 min (Cloud Console) | No hace falta |
| Selección de campos | Código manual, field masks | AI Suggest Fields (1 clic) |
| Extracción de datos | Escribir/ejecutar scripts, gestionar errores | Hacer clic en “Scrape” |
| Exportación | pandas a CSV/Excel | Exportar a Excel/Sheets/Notion |
| Mantenimiento | Actualizaciones manuales por cambios del sitio | La IA se adapta automáticamente |
Extra: Thunderbit cuenta con la confianza de más de , y el plan gratuito permite extraer hasta 6 páginas (o 10 con el impulso de prueba) sin coste.
Cumplimiento: términos de Google Maps y ética al hacer scraping
Aquí es donde muchos tutoriales de Python se quedan peligrosamente desactualizados. Esto es lo que debes saber en 2026:
- Los Términos de la Plataforma Google Maps §3.2.3 prohíben estrictamente raspar, almacenar en caché o exportar datos fuera de las APIs oficiales (). La única excepción: las coordenadas de latitud/longitud pueden almacenarse en caché hasta 30 días; los Place IDs pueden guardarse indefinidamente.
- Los usuarios de la API están sujetos a contrato: si usas una clave API, aceptaste los términos de Google, aunque solo estés extrayendo datos públicos.
- Evitar barreras técnicas (CAPTCHAs, SearchGuard) puede constituir una posible infracción de la DMCA §1201, con sanciones penales ().
- GDPR y leyes de privacidad: si recopilas datos personales (correos, teléfonos, nombres de reseñadores) desde Google Maps, necesitas una base legal y debes respetar las solicitudes de borrado. La CNIL francesa multó a KASPR con 200.000 € en 2024 por extraer contactos de LinkedIn ().
- Buenas prácticas:
- Usa la Places API por defecto siempre que sea posible.
- Limita la velocidad de solicitudes (≤10 QPS para la API, 1–2 req/s para scraping HTML).
- Nunca eludas CAPTCHAs ni bloqueos técnicos.
- No redistribuyas datos personales extraídos.
- Respeta solicitudes de exclusión y eliminación.
- Revisa siempre la legislación local: GDPR, CCPA y otras normas se aplican de forma activa.
En resumen: si el cumplimiento te preocupa, quédate con la API y minimiza los datos que recopilas. Para la mayoría de usuarios de negocio, una herramienta sin código como Thunderbit reduce el riesgo (sin clave API y sin redistribución de datos).
Programar y automatizar la extracción de Google Maps con Python
Si necesitas mantener los datos actualizados —por ejemplo, para seguimiento semanal de competidores o actualización mensual de leads— la automatización es tu mejor aliada.
Programación sencilla con schedule
1import schedule, time
2from my_scraper import run_job
3schedule.every().day.at("03:00").do(run_job, query="restaurants in Brooklyn")
4schedule.every(6).hours.do(run_job, query="coffee shops in Manhattan")
5while True:
6 schedule.run_pending()
7 time.sleep(30)
Programación a nivel producción con APScheduler
1from apscheduler.schedulers.background import BackgroundScheduler
2from apscheduler.triggers.cron import CronTrigger
3sched = BackgroundScheduler(timezone="America/New_York")
4sched.add_job(
5 run_job,
6 CronTrigger(hour=3, minute=15, jitter=600), # 3:15 AM ± 10 min
7 kwargs={"query": "restaurants in Brooklyn"},
8 id="brooklyn_daily",
9 max_instances=1,
10 coalesce=True,
11 misfire_grace_time=3600,
12)
13sched.start()
Consejos para automatizar con seguridad
- Añade un margen aleatorio a tu programación para evitar patrones demasiado predecibles.
- En scraping HTML, nunca superes 1–2 solicitudes por segundo.
- En uso de API, vigila tu cuota y activa alertas de facturación.
- Registra siempre los errores y mantén un archivo de “dead-letter” para solicitudes fallidas.
Ventaja extra de Thunderbit: con Thunderbit puedes programar raspados recurrentes directamente desde la interfaz, sin código, sin cron jobs y sin montar servidores.
Conclusiones clave: extracción de datos de Google Maps eficiente, segmentada y conforme a las normas
Repasemos lo esencial:
- Google Maps es la fuente número uno de datos de ubicación de negocios, y alimenta desde la generación de leads hasta la investigación de mercado.
- El scraping con Python ofrece flexibilidad y control, pero implica carga de configuración, mantenimiento y cumplimiento, especialmente a medida que aumentan las defensas antiautomatización de Google y la aplicación de la ley.
- La extracción mediante API es la opción más segura y escalable para la mayoría de equipos. Usa siempre field masks y filtros del lado del servidor para controlar costes.
- El scraping HTML es frágil y arriesgado: úsalo solo para investigaciones puntuales y nunca para saltarte barreras técnicas.
- Segmenta tus datos: usa coincidencia por frases, filtros de ubicación y flujos con pandas para extraer solo lo que necesitas.
- Thunderbit es la vía más rápida para quienes no programan: IA, sin configuración, exportación instantánea y programación integrada.
- El cumplimiento importa: respeta los términos de Google, las leyes de privacidad y los límites de solicitud para evitar problemas legales.
Para más tutoriales y consejos, visita el y nuestro .
Preguntas frecuentes
1. ¿Es legal extraer datos de Google Maps con Python en 2026?
Extraer datos de Google Maps mediante la API oficial está permitido dentro de los términos de Google, siempre que respetes las cuotas y no redistribuyas datos restringidos. El scraping HTML de Google Maps está expresamente prohibido por los Términos de Servicio de Google y conlleva riesgo legal, especialmente si evitas barreras técnicas o recopilas datos personales sin consentimiento. Revisa siempre la normativa local (GDPR, CCPA, etc.) y sigue buenas prácticas de cumplimiento.
2. ¿Cuál es la diferencia entre usar la API de Google Maps y raspar el HTML?
La API es estable, con licencia y pensada para extraer datos, pero requiere una clave API y está sujeta a cuotas y costes. El scraping HTML usa automatización del navegador para extraer datos de la página renderizada, pero es frágil (el sitio cambia con frecuencia), puede incumplir los términos y tiene más riesgo legal. Para la mayoría de usos empresariales, la API es la opción recomendada.
3. ¿Cuánto cuesta extraer datos de Google Maps usando Python en 2026?
El precio de la Places API de Google se cobra por cada 1,000 solicitudes, y va desde 5 dólares (Essentials) hasta 25 dólares (Enterprise+Atmosphere), según los campos que solicites. Existen umbrales gratuitos mensuales (10,000 para Essentials, 5,000 para Pro, 1,000 para Enterprise), pero las extracciones a gran escala pueden encarecerse rápido. Usa siempre field masks y filtros del lado del servidor para controlar los costes.
4. ¿Cómo se compara Thunderbit con los raspadores de Google Maps hechos en Python?
Thunderbit es un raspador web sin código y con IA que te permite extraer datos de Google Maps —y mucho más— sin programar, sin claves API y sin mantenimiento. Es ideal para equipos de ventas y marketing que necesitan exportar rápidamente a Excel, Google Sheets, Airtable o Notion. Para usuarios técnicos que necesitan lógica personalizada, Python ofrece más flexibilidad, pero exige más configuración y gestión del cumplimiento.
5. ¿Cómo puedo automatizar la extracción recurrente de datos de Google Maps?
Con Python, usa librerías de programación como schedule o APScheduler para ejecutar el raspador en intervalos fijos (diarios, semanales, etc.). Añade un margen aleatorio para evitar detección y supervisa tu cuota de API. Con Thunderbit, puedes programar raspados recurrentes directamente en la interfaz, sin código ni configuración de servidor.
¿Listo para convertir Google Maps en tu superpoder de ventas y marketing? Tanto si eres fan de Python como si prefieres la opción sin código más rápida, en 2026 ya tienes las herramientas. Prueba para un scraping instantáneo impulsado por IA, o arremángate y trabaja directamente con la API. En cualquier caso, que tus listas de leads estén siempre actualizadas, tus exportaciones limpias y tus campañas llenas de prospectos locales con alta conversión. ¡Feliz scraping!
Más información
