Si alguna vez has intentado crear una lista de ventas segmentada, explorar nuevos mercados o comparar a la competencia, sabes que Google Maps es una mina de oro. Pero hay un dato clave: con más de 1.500 millones de búsquedas “cerca de mí” al mes y el 76 % de quienes buscan negocios locales visitando uno en las siguientes 24 horas (), la demanda de datos empresariales actualizados y basados en la ubicación nunca ha sido tan alta.
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 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 explicaré exactamente cómo extraer datos de Google Maps con Python en 2026, paso a paso, con código, consejos de cumplimiento y una comparación con soluciones sin código. Tanto si eres experto en Python como si solo quieres la ruta más rápida hacia datos accionables, estás en el lugar 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, números de teléfono y coordenadas— desde Google Maps para poder analizarla, filtrarla y exportarla para uso empresarial.

Hay dos formas principales de hacerlo:
- API de Google Maps Places: la vía oficial y con licencia. Usas una clave de API para consultar los servidores de Google y recibir datos JSON estructurados. Es estable, predecible y, en general, compatible, pero tiene cuotas y costes.
- Raspado web 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 también más frágil: Google cambia con frecuencia la estructura de su sitio, y raspar el HTML puede infringir sus condiciones.
Campos de datos 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 número de reseñas
- Nivel de precios
- Estado del negocio (abierto/cerrado)
- Horario de apertura
- ID del lugar (identificador único de Google)
- URL de Google Maps
¿Por qué importa esto? Porque estos campos alimentan todo, desde la generación de leads y la planificación territorial hasta la evaluación de competidores y la investigación de mercado. La clave está en centrarte en los datos correctos para tus objetivos de negocio; no raspees a ciegas.
Por qué los equipos de ventas y marketing extraen datos de Google Maps usando 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 hipersegmentadas de negocios locales, con información de contacto y valoraciones, para campañas de prospección.
- Planificación territorial: define territorios de ventas, zonas de reparto o áreas de servicio según la densidad y el tipo de negocios reales.
- Seguimiento de competidores: monitoriza la ubicación, las valoraciones y las 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 de apertura y el sentimiento de las reseñas para orientar la estrategia de salida al mercado.
- Selección de ubicaciones: en inmobiliaria y retail, evalúa posibles ubicaciones según servicios cercanos, tráfico peatonal y competencia.
Impacto real: según el , el 92 % de las organizaciones de ventas planean aumentar su inversión en IA y datos, y los equipos que usan datos locales segmentados ven 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 encontró 15 dólares de nuevos ingresos por cada 1 dólar invertido en listas de leads basadas en Google Maps.
Cómo se alinean los objetivos de negocio con los campos de Google Maps:
| Objetivo de negocio | Campos de Google Maps necesarios |
|---|---|
| Lista local de leads | nombre, dirección, teléfono, sitio web, categoría |
| Planificación territorial | nombre, lat/lng, business_status, opening_hours |
| Evaluación de competidores | nombre, valoración, userRatingCount, priceLevel, reseñas |
| Selección de ubicaciones | categoría, lat/lng, densidad de reseñas, openingDate |
| Información sobre sentimiento/menú | reseñas, editorialSummary, fotos, tipos |
| Prospección por email/teléfono | nationalPhoneNumber, websiteUri (y luego enriquecer según sea necesario) |
Configurar tu raspador de Google Maps en Python: herramientas y requisitos
Antes de empezar a extraer datos, tendrás que preparar tu entorno de Python y reunir las herramientas adecuadas. Esto es lo que necesitas en 2026:
1. Instala Python y las bibliotecas necesarias
Versión recomendada de Python: 3.10 o posterior.
Instala las bibliotecas 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
Para qué sirve cada una:
requests,httpx: solicitudes HTTP (llamadas a la API)beautifulsoup4,lxml: análisis de HTML (para raspado web)pandas: limpieza, análisis y exportación de datosselenium,playwright: automatización del navegador (para raspar HTML)googlemaps,google-maps-places: clientes de la API de Google Mapsschedule,APScheduler: programación de tareaspython-dotenv: carga segura de claves API desde archivos.envtenacity: lógica de reintentos para gestionar errores
2. Obtén una clave de la API de Google Maps (para raspado basado en API)
- Ve a .
- Crea o selecciona un proyecto.
- Habilita la facturación (obligatoria, incluso para el uso del nivel gratuito).
- Activa “Places API (New)” en APIs & Services > Library.
- Ve a Credentials > Create Credentials > API Key.
- Restringe tu clave a API e IP específicas por seguridad.
- Guarda tu clave API en un archivo
.env(nunca la subas al código):
1GOOGLE_MAPS_API_KEY=your_actual_api_key_here
Nota: A partir de marzo de 2025, Google ya no ofrece un crédito universal de 200 dólares al mes. En su lugar, obtienes umbrales mensuales gratuitos por nivel de API (consulta los ).
Cómo extraer datos de Google Maps usando Python: guía paso a paso
Vamos a desglosar los dos enfoques principales —basado en API y raspado HTML— para que puedas elegir el que mejor se adapte a tus necesidades.
Enfoque 1: usar la API de Google Maps Places (recomendado)
Paso 1: instala e importa las bibliotecas 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, # ¡pon esto siempre!
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 prácticos:
- Configura siempre el encabezado
X-Goog-FieldMaskpara controlar los costes. Si pides reseñas o fotos, el precio por cada 1.000 solicitudes puede subir de 5 a 25 dólares (). - Usa filtros del lado del servidor (como
minRating,includedType,locationBias) para no desperdiciar créditos en resultados irrelevantes. - Guarda los valores de
place_idpara deduplicar y actualizar datos en el futuro.
Enfoque 2: raspar el HTML de Google Maps (para uso educativo o puntual)
Advertencia: Google Maps es una aplicación de una sola página. Debes usar automatización del navegador (Playwright o Selenium), y raspar el HTML puede infringir las condiciones de Google. Úsalo para investigación, no para producción.
Paso 1: instala Playwright e inicia 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 randomiza las clases CSS cada pocas semanas, así que este código puede necesitar actualizaciones periódicas.
- Usa pausas parecidas a las de una persona y evita raspar demasiado rápido para reducir el riesgo de bloqueo.
- Nunca intentes saltarte los CAPTCHA ni el sistema SearchGuard de Google; esto puede exponerte a riesgos legales.
Evita raspar a ciegas: cómo orientar con precisión los datos que necesitas
Rasparlo todo es una receta para perder tiempo y acabar con conjuntos de datos inflados. Aquí te explico cómo centrarte solo en los datos que importan:
- Genera listas de URL segmentadas: usa los filtros de búsqueda propios de Google Maps (categoría, ubicación, valoración, abierto ahora) para reducir los resultados antes de raspar.
- Usa coincidencia de frases: busca tipos de negocio o palabras clave exactas (por ejemplo, “vegan bakery in 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 tu solicitud a la API. - Filtrado del lado del cliente (Python): después de raspar, usa pandas para filtrar negocios con valoraciones superiores a 4.0, más de 50 reseñas o categorías específicas.
Ejemplo: filtrar solo restaurantes en Manhattan con valoraciones superiores 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)
Usar bibliotecas de Python para organizar y exportar datos de Google Maps
Una vez que hayas extraído los datos, toca limpiarlos, analizarlos y exportarlos para tu equipo.
Limpiar y estructurar datos 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)
Analizar y resumir 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="Mejor valorados")
¿Tienes conjuntos de datos grandes? Usa el formato Parquet por velocidad y eficiencia de tamaño:
1df.to_parquet("brooklyn_top.parquet", compression="zstd")
Thunderbit: alternativa con IA al raspador de Google Maps en Python
Ahora bien, si estás pensando: “Esto es demasiada configuración 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 requiere código ni 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 adecuadas: nombre, dirección, valoración, teléfono, sitio web y más.
- Raspado de subpáginas: ¿quieres enriquecer tu tabla con datos del sitio web de cada negocio? Thunderbit puede visitar cada subpágina y extraer información adicional automáticamente.
- Exportación a Excel, Google Sheets, Airtable o Notion: se acabó pelearte con pandas; solo haz clic en “Export” y tus datos estarán listos para el equipo.
- Raspado programado: configura tareas recurrentes para monitorizar 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 estás corrigiendo scripts rotos todo el tiempo.

Flujo de trabajo Thunderbit vs Python:
| Paso | Raspador en Python | Thunderbit |
|---|---|---|
| Instalar herramientas | 30–60 min (Python, pip, bibliotecas) | 2 min (extensión de Chrome) |
| Configurar la 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 | Haz 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 te permite raspar hasta 6 páginas (o 10 con el impulso de prueba) sin coste.
Cumplimiento: condiciones de servicio de Google Maps y ética del raspado
Aquí es donde la mayoría de los tutoriales de Python 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 API oficiales (). La única excepción: los valores de latitud y longitud pueden almacenarse en caché hasta 30 días; los Place IDs pueden guardarse indefinidamente.
- Los usuarios de la API están vinculados por contrato: si usas una clave API, has aceptado las condiciones de Google, aunque solo estés raspando datos públicos.
- Evitar barreras técnicas (CAPTCHA, SearchGuard) puede constituir una posible infracción de la DMCA §1201, con posibles sanciones penales ().
- RGPD y leyes de privacidad: si recopilas datos personales (correos, teléfonos, nombres de reseñadores) de Google Maps, debes tener una base legal y respetar las solicitudes de eliminación. La CNIL francesa multó a KASPR con 200.000 € en 2024 por raspar contactos de LinkedIn ().
- Buenas prácticas:
- Prioriza la API de Places siempre que sea posible.
- Limita la tasa de solicitudes (≤10 QPS para la API, 1–2 solicitudes/s para raspado HTML).
- Nunca intentes saltarte CAPTCHA o bloqueos técnicos.
- No redistribuyas datos personales extraídos.
- Respeta las solicitudes de exclusión y eliminación.
- Revisa siempre la legislación local: RGPD, CCPA y otras se aplican activamente.
En resumen: si el cumplimiento te preocupa, quédate con la API y minimiza los datos que recopilas. Para la mayoría de usuarios empresariales, una herramienta sin código como Thunderbit reduce tu exposición al riesgo (sin clave API, sin redistribución).
Programar y automatizar tu raspado de Google Maps con Python
Si necesitas mantener tus datos actualizados —por ejemplo, para monitorizar competidores cada semana o renovar una lista de leads cada mes—, la automatización es tu 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 de nivel de 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 a. m. ± 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 una automatización segura
- Añade un pequeño retraso aleatorio a tu programación para evitar patrones predecibles.
- Para raspado HTML, nunca superes 1–2 solicitudes por segundo.
- Para el uso de la API, vigila tu cuota y configura alertas de facturación.
- Registra siempre los errores y mantén un archivo de “dead-letter” para las solicitudes fallidas.
Ventaja extra de Thunderbit: con Thunderbit, puedes programar raspados recurrentes directamente en la interfaz, sin código, sin cron jobs y sin configurar servidores.
Conclusiones clave: extracción de datos de Google Maps eficiente, precisa y conforme
Recapitulemos 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 raspado con Python ofrece flexibilidad y control, pero implica configuración, mantenimiento y cumplimiento, especialmente a medida que aumentan las medidas anti-bot de Google y la aplicación legal.
- La extracción basada en API es la opción más segura y escalable para la mayoría de los equipos. Usa siempre field masks y filtros del lado del servidor para controlar los costes.
- El raspado HTML es frágil y arriesgado: úsalo solo para investigaciones puntuales y nunca para saltarte barreras técnicas.
- Segmenta tus datos: usa coincidencia de frases, filtros de ubicación y flujos de trabajo con pandas para extraer solo lo que necesitas.
- Thunderbit es la ruta más rápida para quienes no programan: impulsado por IA, sin configuración, exportación instantánea y programación integrada.
- El cumplimiento importa: respeta las condiciones de Google, las leyes de privacidad y los límites de velocidad para evitar problemas legales.
Para más tutoriales y consejos, visita el y nuestro .
Preguntas frecuentes
1. ¿Es legal raspar datos de Google Maps con Python en 2026?
Raspar Google Maps mediante la API oficial está permitido dentro de las condiciones de Google, siempre que respetes las cuotas y no redistribuyas datos restringidos. El raspado 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 legislación local (RGPD, CCPA, etc.) y sigue las mejores 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, está licenciada y diseñada para la extracción de datos, pero requiere una clave API y está sujeta a cuotas y costes. El raspado HTML usa automatización del navegador para extraer datos de la página renderizada, pero es frágil (el sitio cambia a menudo), puede infringir las condiciones 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?
Los precios de la API Places de Google se calculan por cada 1.000 solicitudes, y van de 5 dólares (Essentials) a 25 dólares (Enterprise+Atmosphere), según los campos que solicites. Hay umbrales mensuales gratuitos (10.000 para Essentials, 5.000 para Pro, 1.000 para Enterprise), pero el raspado a gran escala puede 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 basados en Python?
Thunderbit es un raspador web sin código e impulsado por 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 quieren exportaciones rápidas y fiables 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 bibliotecas de programación como schedule o APScheduler para ejecutar tu raspador a intervalos fijos (diarios, semanales, etc.). Añade un poco de aleatoriedad al horario para evitar la detección y supervisa tu cuota de la API. Con Thunderbit, puedes programar raspados recurrentes directamente en la interfaz, sin necesidad de código ni de configurar servidores.
¿Listo para convertir Google Maps en tu superpoder de ventas y marketing? Tanto si eres fan de Python como si prefieres la solución más rápida y sin código, en 2026 tienes las herramientas a tu alcance. Prueba para un raspado instantáneo impulsado por IA —o arremángate y entra en 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 raspado!
Más información
