Extraer Datos de Google Maps con JavaScript: Guía Técnica Completa
Google Maps tiene más de 200 millones de listados de negocios. Cada entrada contiene números de teléfono, sitios web, horarios, reseñas, direcciones y comentarios de clientes. Esos datos tienen valor — para la generación de leads, investigación de mercado, análisis competitivo o monitoreo de reputación.
Puedes acceder a ellos de tres maneras: la API oficial de Google Maps (compleja, costosa), automatización de navegador (técnica, que consume tiempo) o herramientas especializadas (sencillas, rápidas). Esta guía cubre las tres, con ejemplos de código funcionales y compromisos honestos.
Al final, entenderás qué enfoque se adapta a tu caso de uso.
¿Por qué Extraer Datos de Google Maps?
Antes de sumergirte en el código, entiende el caso de negocio.
Generación de leads: Encuentra 500 plomeros en Chicago con números de teléfono y sitios web en 10 minutos en lugar de 2 horas de investigación manual.
Investigación de mercado: Analiza las ubicaciones de los competidores, precios (a partir de scraping de sitios web), sentimiento de reseñas y brechas de servicio en una región.
Monitoreo de reputación: Rastrea qué negocios han caído por debajo de las calificaciones de 3 estrellas, identifica tendencias en reseñas, detecta reseñas falsas.
Inteligencia de ventas: Crea listas segmentadas para campañas de ABM — encuentra todas las empresas que utilizan herramientas específicas (WordPress, HubSpot, Shopify) en tu mercado objetivo.
Planificación de expansión: Identifica áreas desatendidas mapeando la densidad de competidores, reseñas de clientes y brechas de servicio.
Ejemplo real: Una franquicia de servicios para el hogar quería expandirse a 5 nuevas ciudades. En lugar de contratar exploradores, extrajeron más de 2,000 listados de competidores por ciudad (ubicación, reseñas, horarios, sitio web), identificaron patrones en negocios con altas reseñas y abrieron en vecindarios con menos competencia. Tiempo: 3 horas. Costo: $0 (usando herramientas gratuitas).
Cómo Funciona el Datos de Google Maps
Google Maps opera como una base de datos pública. Cuando buscas "plomeros cerca de mí", Google consulta su índice y devuelve resultados con:
- Nombre del negocio, dirección, teléfono
- URL del sitio web
- Horarios de apertura
- Reseñas de clientes (texto, calificación, fecha, autor)
- Fotos (número, miniaturas)
- Áreas de servicio
- Estado de verificación
- ID de lugar de Google (identificador único)
Estos datos son visibles públicamente — cualquiera puede acceder a ellos a través de la interfaz de Google Maps. La pregunta no es si los datos existen; es cómo los recuperas a gran escala.
Existen tres métodos:
- API oficial de Google Maps — Autorizada, documentada, con límite de tasa
- Automatización de navegador — Imita el comportamiento del usuario, elude los límites de tasa, técnicamente compleja
- Bases de datos preindexadas — Datos ya extraídos y organizados, el enfoque más rápido
Método 1: API de Google Maps con JavaScript
El enfoque oficial. Google proporciona varias APIs para diferentes casos de uso.
¿Qué APIs Extraen Datos de Negocios?
API de Places — Devuelve listados de negocios, reseñas, fotos, horarios de apertura, información de contacto. La más comúnmente utilizada.
API de Geocodificación — Convierte direcciones a coordenadas y viceversa.
API de Direcciones — Calcula rutas, tiempo de viaje, distancia.
API de JavaScript de Maps — Muestra mapas y marcadores de negocios en páginas web.
Para extraer datos de negocios, necesitas la API de Places (específicamente los endpoints de "Búsqueda cercana" y "Búsqueda por texto").
Paso 1: Configura Tu Proyecto de Google Cloud
- Ve a console.cloud.google.com
- Crea un nuevo proyecto (desplegable en la esquina superior izquierda → "Nuevo Proyecto")
- Nombralo (por ejemplo, "Extracción de Datos de Mapas")
- Espera 30 segundos para la creación
- Selecciona el proyecto
- Ve a APIs y Servicios → Biblioteca
- Busca "API de Places" → Haz clic en ella → Habilitar
- Ve a APIs y Servicios → Credenciales
- Haz clic en Crear Credenciales → Clave API
- Copia tu clave API (la necesitarás para cada solicitud)
Costo: Google ofrece €200/mes en créditos gratuitos. La mayoría de las extracciones a pequeña escala encajan dentro de esto.
Paso 2: Entender los Precios de la API
Pagas por solicitud, no por resultado.
| API | Costo por 1,000 solicitudes | Notas |
|---|---|---|
| API de Places (Básica) | $32 | Nombre, dirección, teléfono, sitio web, horarios de apertura |
| API de Places (Contacto) | $17 | Lo mismo + email, teléfono |
| API de Places (Ambiente) | $17 | Lo mismo + reseñas, calificaciones, fotos |
| API de Geocodificación | $5 | Dirección ↔ Coordenadas |
| API de Direcciones | $5 | Ruta, tiempo de viaje, distancia |
Costo de ejemplo: Extraer 10,000 negocios con información básica = 10,000 solicitudes = $320. Con €200 en créditos gratuitos, pagas $120 de tu bolsillo.
Si necesitas 100,000 negocios, eso son $3,200 — costoso para proyectos a gran escala.
Paso 3: Ejemplo de Geocodificación (Convertir Dirección a Coordenadas)
Caso de uso: Tienes una lista de direcciones y necesitas latitud/longitud para mapeo.
Código:
const https = require('https');
const address = "1600 Pennsylvania Avenue NW, Washington, DC";
const apiKey = "TU_CLAVE_API_AQUI";
// Codifica la dirección para URL (espacios → %20, comas → %2C)
const encodedAddress = encodeURIComponent(address);
const url = `https://maps.googleapis.com/maps/api/geocode/json?address=${encodedAddress}&key=${apiKey}`;
https.get(url, (response) => {
let data = '';
response.on('data', (chunk) => {
data += chunk;
});
response.on('end', () => {
const result = JSON.parse(data);
if (result.results.length > 0) {
const location = result.results[0].geometry.location;
console.log(`Latitud: ${location.lat}`);
console.log(`Longitud: ${location.lng}`);
console.log(`Dirección Formateada: ${result.results[0].formatted_address}`);
}
});
}).on('error', (err) => {
console.error('Error:', err);
});
Salida:
Latitud: 38.8951
Longitud: -77.0369
Dirección Formateada: 1600 Pennsylvania Avenue NW, Washington, DC 20500, USA
Qué está sucediendo: Envías la dirección a los servidores de Google. Ellos la comparan con su base de datos, devuelven las coordenadas más cercanas y la versión formateada. Búsqueda simple uno a uno.
Paso 4: Ejemplo de Búsqueda Cercana (Encontrar Negocios por Categoría + Ubicación)
Caso de uso: Encuentra todos los restaurantes dentro de 1 km de un punto específico.
Código:
const https = require('https');
const apiKey = "TU_CLAVE_API_AQUI";
const latitude = 40.7128; // Nueva York
const longitude = -74.0060;
const radius = 1000; // 1 km
const keyword = "restaurante";
const url = `https://maps.googleapis.com/maps/api/place/nearbysearch/json?location=${latitude},${longitude}&radius=${radius}&keyword=${keyword}&key=${apiKey}`;
https.get(url, (response) => {
let data = '';
response.on('data', (chunk) => {
data += chunk;
});
response.on('end', () => {
const result = JSON.parse(data);
console.log(`Encontrados ${result.results.length} restaurantes:`);
result.results.forEach((place) => {
console.log(`
Nombre: ${place.name}`);
console.log(`Dirección: ${place.vicinity}`);
console.log(`Calificación: ${place.rating} (${place.user_ratings_total} reseñas)`);
console.log(`ID de Lugar: ${place.place_id}`);
});
// Verifica si hay más resultados
if (result.next_page_token) {
console.log(`
Más resultados disponibles. Usa next_page_token: ${result.next_page_token}`);
}
});
}).on('error', (err) => {
console.error('Error:', err);
});
Salida:
Encontrados 20 restaurantes:
Nombre: Balthazar
Dirección: 80 Spring Street, Nueva York
Calificación: 4.5 (1,203 reseñas)
ID de Lugar: ChIJIQBpAG2fwoAR_L12E10P3MQ
Nombre: Eleven Madison Park
Dirección: 11 Madison Avenue, Nueva York
Calificación: 4.7 (892 reseñas)
ID de Lugar: ChIJ0ZHZd6eewokRkurJVcf33V4
...
Limitaciones de este enfoque:
- Devuelve un máximo de 20 resultados por solicitud
- Para obtener todos los resultados, usa
next_page_token(requiere múltiples llamadas a la API = mayor costo) - No hay extracción de correos electrónicos (necesitas visitar el sitio web por separado)
- No hay texto de reseña (solo conteo de calificaciones)
- Límites de tasa: máximo 50 solicitudes/segundo
- No se puede filtrar por puntaje de reseña, estado de verificación o número de fotos
Método 2: Automatización de Navegador (Selenium, Puppeteer)
Si la API de Google es demasiado costosa o limitada, puedes automatizar un navegador para imitar el comportamiento del usuario.
Cómo funciona: Un script abre Chrome/Firefox, busca en Google Maps "plomeros en Chicago", hace clic en los resultados, extrae datos del DOM (HTML de la página) y los guarda.
¿Por qué Usar Automatización de Navegador?
✅ Sin costos de API (solo los costos de tu servidor)
✅ Acceso a todos los datos visibles (reseñas, fotos, contenido del sitio web)
✅ Sin límites de tasa (técnicamente — pero Google puede detectar y bloquear)
❌ Más lento (toma 5-10 segundos por negocio frente a 0.1 segundos a través de la API)
❌ Configuración compleja (requiere instalación de Chrome/Firefox)
❌ Frágil (Google cambia el diseño de la página → el script se rompe)
❌ Arriesgado (Google bloquea activamente a los scrapers)
Ejemplo Básico de Puppeteer
Configuración:
npm install puppeteer
Código:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Navegar a la búsqueda de Google Maps
await page.goto('https://www.google.com/maps/search/plumbers+in+chicago');
// Esperar a que se carguen los resultados
await page.waitForSelector('[data-item-id]');
// Extraer listados de negocios
const businesses = await page.evaluate(() => {
const items = [];
document.querySelectorAll('[data-item-id]').forEach((element) => {
items.push({
name: element.querySelector('[data-item-id] .fontHeadlineSmall')?.textContent || 'N/A',
rating: element.querySelector('.icon-star-fill')?.textContent || 'N/A',
address: element.querySelector('[data-item-id] .fontBodySmall')?.textContent || 'N/A',
});
});
return items;
});
console.log(businesses);
await browser.close();
})();
Por qué esto es arriesgado: Google detecta patrones de automatización de navegadores (clics rápidos, sin movimientos del mouse, encabezados faltantes). Bloquean la IP o muestran CAPTCHAs. Necesitarías proxies, retrasos y suplantación de encabezados — complejo y poco confiable.
Veredicto: La automatización de navegadores funciona para extracciones a pequeña escala (< 100 negocios) pero falla a gran escala.
Método 3: Bases de Datos de Negocios Preindexadas
El enfoque más rápido: alguien más ya extrajo y organizó los datos.
Cómo funciona: Una empresa (como IBLead) ejecuta scrapers 24/7, extrae listados de Google Maps mensualmente, limpia los datos y vende acceso a través de una API o interfaz web.
Ventajas:
- No se requiere codificación
- Resultados instantáneos (datos ya extraídos)
- Costo más bajo que la API de Google (precios por volumen)
- Incluye datos enriquecidos (correos electrónicos, tecnologías detectadas, texto de reseñas)
- Soporta filtros complejos (calificación, conteo de reseñas, estado de verificación, etc.)
Compromisos:
- Los datos tienen de 1 a 30 días de antigüedad (no en tiempo real)
- Dependes de la precisión del proveedor
- Modelo de suscripción (no pago por uso)
Ejemplo: IBLead extrae más de 5 millones de listados de Google Maps en más de 15 países, actualizados mensualmente. Buscas por ciudad/categoría/filtros y exportas a CSV en 2 clics.
Consideraciones Legales: ¿Es Legal Scrappear Google Maps?
Respuesta corta: Depende de cómo lo hagas.
Usando la API Oficial de Google Maps
✅ Legal — Estás usando el servicio autorizado de Google, siguiendo sus términos de servicio. Pagas por el uso. Sin problemas.
Automatización de Navegador / Scraping Directo
⚠️ Área gris — Técnicamente posible, pero:
-
Viola los Términos de Servicio de Google — Sección 10.3: "No intentarás... acceder o buscar Google Maps por ningún medio que no sean las interfaces públicamente soportadas por Google."
-
Viola la Ley de Fraude y Abuso Informático (CFAA) en EE.UU. — Acceso no autorizado a sistemas informáticos. Los tribunales han dictaminado que el scraping puede violar esto.
-
Preocupaciones de derechos de autor — Los nombres de negocios, direcciones y reseñas están protegidos por derechos de autor. Reproducirlos sin permiso es una infracción de derechos de autor.
-
Aplicación práctica — Google bloquea activamente a los scrapers. Tu IP es prohibida. Necesitarías proxies (agrega complejidad y costo).
Caso real: En 2020, una empresa fue demandada por scrapear perfiles de LinkedIn. El tribunal dictaminó que incluso los datos visibles públicamente están protegidos si violas los términos de servicio para acceder a ellos.
Mejor Práctica
Usa la API oficial de Google Maps o un proveedor de datos con licencia (IBLead, etc.). Te mantienes legal, evitas bloqueos de IP y obtienes datos confiables.
Si el costo es una preocupación, compara:
- API de Google: $320 por 10,000 negocios
- IBLead: €44/mes por 10,000 créditos (1 negocio = 1 crédito) = €44 por 10,000 negocios
- Automatización de Navegador DIY: $0 por adelantado, pero $500+ en proxies/infraestructura, además del riesgo de acción legal
El enfoque con licencia es más barato y más seguro.
Workflow Práctico: De Búsqueda a Exportación CSV
Vamos a recorrer un escenario real: necesitas encontrar 500 electricistas en Los Ángeles con números de teléfono y sitios web.
Opción A: API de Google Maps
Paso 1: Geocodifica "Los Ángeles" para obtener coordenadas.
// Obtener coordenadas de LA: 34.0522, -118.2437
Paso 2: Haz solicitudes de búsqueda cercana para "electricista" dentro de un radio de 15 km.
// Primera solicitud: devuelve 20 resultados + next_page_token
// Segunda solicitud: usa next_page_token para obtener los siguientes 20
// ... repite 25 veces para obtener 500 resultados
Paso 3: Para cada negocio, haz una solicitud separada de "Detalles del Lugar" para obtener el número de teléfono y el sitio web.
// Cada negocio necesita una llamada API separada
// 500 negocios = 500 solicitudes adicionales
Total de solicitudes: 25 (búsqueda cercana) + 500 (detalles del lugar) = 525 solicitudes
Costo total: (525 / 1,000) × $32 = $16.80
Tiempo para codificar: 4-6 horas (si sabes JavaScript)
Tiempo para ejecutar: 10-15 minutos
Opción B: IBLead
Paso 1: Ve a app.iblead.com
Paso 2: Busca "electricistas" en "Los Ángeles"
Paso 3: Aplica filtros (calificación > 4, negocios verificados, etc.)
Paso 4: Exporta a CSV
Paso 5: Importa a CRM
Costo total: €44/mes (cubre 10,000 créditos; usas 500)
Tiempo para codificar: 0 (sin codificación)
Tiempo para ejecutar: 2 minutos
Funciones adicionales en IBLead:
- Direcciones de correo electrónico (extraídas de sitios web)
- Detecciones de tecnología 160+ (WordPress, Shopify, HubSpot, etc.)
- Texto de reseñas de Google y sentimiento
- Datos de SIRET/SIREN (solo Francia)
- Filtrado por puntaje de reseña, conteo de reseñas, fotos, estado de verificación
Extracción de Reseñas de Google Maps (Caso de Uso Avanzado)
Las reseñas son valiosas para el monitoreo de reputación, investigación de mercado y análisis competitivo.
El Reto
La API de Google Maps NO devuelve el texto de las reseñas. Obtienes el conteo de reseñas y la calificación promedio, pero no reseñas individuales.
Respuesta de la API:
{
"name": "Diner de Joe",
"rating": 4.3,
"user_ratings_total": 287
}
No obtienes:
- Texto de reseña individual
- Nombre del revisor
- Fecha de reseña
- Calificación por reseña
Enfoque de Automatización de Navegador
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Navegar a un negocio en Google Maps
await page.goto('https://www.google.com/maps/place/Joes+Diner');
// Desplazarse por la sección de reseñas
const reviews = await page.evaluate(() => {
const reviewList = [];
document.querySelectorAll('[data-review-id]').forEach((review) => {
reviewList.push({
author: review.querySelector('.EWp0qd')?.textContent || 'Anónimo',
rating: review.querySelector('[aria-label*="star"]')?.getAttribute('aria-label') || 'N/A',
text: review.querySelector('.wiI7pd')?.textContent || '',
date: review.querySelector('.rsqaWe')?.textContent || 'N/A',
});
});
return reviewList;
});
console.log(reviews);
await browser.close();
})();
Salida:
[
{
"author": "Sarah M.",
"rating": "5 estrellas",
"text": "¡El mejor desayuno de la ciudad! Recomiendo mucho los panqueques.",
"date": "hace 2 semanas"
},
{
"author": "John D.",
"rating": "3 estrellas",
"text": "Buena comida pero servicio lento.",
"date": "hace 1 mes"
}
]
Por qué esto importa:
- Monitoreo de reputación: Marca automáticamente los negocios con nuevas reseñas de 1-2 estrellas
- Análisis competitivo: Extrae reseñas de competidores para entender qué valoran los clientes
- Análisis de sentimiento: Usa NLP para categorizar reseñas por tema (comida, servicio, precio, etc.)
El problema: Google bloquea esto a gran escala. Después de 50-100 reseñas, te enfrentas a CAPTCHAs o bloqueos de IP.
Enfoque de IBLead (Característica Exclusiva)
IBLead extrae el texto de reseñas, autor, calificación y fecha para cada negocio. Puedes filtrar por:
- Calificación mínima/máxima
- Rango de fechas (últimos 30 días, último año, etc.)
- Palabra clave en el texto de la reseña
Caso de uso: Encuentra todos los negocios con < 3 de calificación promedio en tu mercado → personaliza el contacto para mencionar sus bajas reseñas → ofrece servicios de reparación de reputación.
Desafíos Comunes y Soluciones
Desafío 1: Limitación de Tasa
Problema: La API de Google Maps te limita a 50 solicitudes/segundo. Si haces más, las solicitudes fallan.
Solución: Agrega retrasos entre solicitudes.
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
for (let i = 0; i < 100; i++) {
// Hacer solicitud API
await makeRequest();
// Esperar 200ms antes de la siguiente solicitud
await delay(200);
}
Desafío 2: Datos Faltantes
Problema: Algunos negocios no tienen números de teléfono o sitios web listados en Google Maps
¿Listo para empezar?
Accede a todas las empresas de Google Maps, enriquecidas con emails y datos legales.
Prueba IBLead gratisArtículos relacionados
10 Consejos Comprobados para Conseguir que los Clientes Dejen Más Reseñas en Google Maps
Descubre 10 estrategias prácticas para aumentar las reseñas en Google Maps.
7 Errores de Cold Email a Evitar: Ejemplos y Plantillas
Evita estos 7 errores de cold email para mejorar tus tasas de respuesta. Ejemplos reales, plantillas AIDA y soluciones comprobadas.
Datos de Google Maps para ABM: La Guía Estratégica Completa
Descubre cómo los datos de marketing basado en cuentas de Google Maps generan un 208% más de ingresos.