Volver al blog
Guías y tutoriales2025-08-30·9 min de lectura

Extraer Datos de Google Maps con JavaScript: Guía Técnica Completa

Por Ibrahim DemolCEO IBLeadActualizado el 26 de marzo de 2026

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:

  1. API oficial de Google Maps — Autorizada, documentada, con límite de tasa
  2. Automatización de navegador — Imita el comportamiento del usuario, elude los límites de tasa, técnicamente compleja
  3. 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

  1. Ve a console.cloud.google.com
  2. Crea un nuevo proyecto (desplegable en la esquina superior izquierda → "Nuevo Proyecto")
  3. Nombralo (por ejemplo, "Extracción de Datos de Mapas")
  4. Espera 30 segundos para la creación
  5. Selecciona el proyecto
  6. Ve a APIs y ServiciosBiblioteca
  7. Busca "API de Places" → Haz clic en ella → Habilitar
  8. Ve a APIs y ServiciosCredenciales
  9. Haz clic en Crear CredencialesClave API
  10. 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.


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:

  1. 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."

  2. 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.

  3. 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.

  4. 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 gratis