Extrair Dados do Google Maps com JavaScript: Guia Técnico Completo
O Google Maps possui mais de 200 milhões de listagens de negócios. Cada entrada contém números de telefone, sites, horários, avaliações, endereços e feedback de clientes. Esses dados têm valor — para geração de leads, pesquisa de mercado, análise competitiva ou monitoramento de reputação.
Você pode acessá-los de três maneiras: a API oficial do Google Maps (complexa, cara), automação de navegador (técnica, demorada) ou ferramentas especializadas (simples, rápidas). Este guia cobre as três, com exemplos de código funcionais e trade-offs honestos.
Ao final, você entenderá qual abordagem se encaixa no seu caso de uso.
Por que Extrair Dados do Google Maps?
Antes de mergulhar no código, entenda o caso de negócio.
Geração de leads: Encontre 500 encanadores em Chicago com números de telefone e sites em 10 minutos em vez de 2 horas de pesquisa manual.
Pesquisa de mercado: Analise locais de concorrentes, preços (a partir de scraping de sites), sentimento de avaliações e lacunas de serviços em uma região.
Monitoramento de reputação: Acompanhe quais negócios caíram abaixo de 3 estrelas, identifique tendências de avaliações, detecte avaliações falsas.
Inteligência de vendas: Crie listas segmentadas para campanhas de ABM — encontre todas as empresas que usam ferramentas específicas (WordPress, HubSpot, Shopify) no seu mercado-alvo.
Planejamento de expansão: Identifique áreas carentes mapeando a densidade de concorrentes, avaliações de clientes e lacunas de serviços.
Exemplo real: Uma franquia de serviços residenciais queria se expandir para 5 novas cidades. Em vez de contratar exploradores, eles extraíram mais de 2.000 listagens de concorrentes por cidade (localização, avaliações, horários, site), identificaram padrões em negócios com altas avaliações e abriram em bairros com menos concorrência. Tempo: 3 horas. Custo: $0 (usando ferramentas gratuitas).
Como Funcionam os Dados do Google Maps
O Google Maps opera como uma base de dados pública. Quando você pesquisa "encanadores perto de mim", o Google consulta seu índice e retorna resultados com:
- Nome do negócio, endereço, telefone
- URL do site
- Horários de funcionamento
- Avaliações de clientes (texto, classificação, data, autor)
- Fotos (contagem, miniaturas)
- Áreas de serviço
- Status de verificação
- ID do local do Google (identificador único)
Esses dados são publicamente visíveis — qualquer um pode acessá-los através da interface do Google Maps. A questão não é se os dados existem; é como você os recupera em grande escala.
Existem três métodos:
- API oficial do Google Maps — Autorizada, documentada, com limite de taxa
- Automação de navegador — Imita o comportamento do usuário, contorna limites de taxa, tecnicamente complexa
- Bases de dados pré-indexadas — Dados já extraídos e organizados, abordagem mais rápida
Método 1: API do Google Maps com JavaScript
A abordagem oficial. O Google fornece várias APIs para diferentes casos de uso.
Quais APIs Extraem Dados de Negócios?
Places API — Retorna listagens de negócios, avaliações, fotos, horários de funcionamento, informações de contato. A mais comumente usada.
Geocoding API — Converte endereços em coordenadas e vice-versa.
Directions API — Calcula rotas, tempo de viagem, distância.
Maps JavaScript API — Exibe mapas e marcadores de negócios em páginas da web.
Para extrair dados de negócios, você precisa da Places API (especificamente os endpoints "Nearby Search" e "Text Search").
Passo 1: Configure Seu Projeto no Google Cloud
- Vá para console.cloud.google.com
- Crie um novo projeto (dropdown no canto superior esquerdo → "Novo Projeto")
- Nomeie-o (ex: "Extração de Dados do Maps")
- Aguarde 30 segundos para a criação
- Selecione o projeto
- Vá para APIs & Serviços → Biblioteca
- Pesquise por "Places API" → Clique nela → Ativar
- Vá para APIs & Serviços → Credenciais
- Clique em Criar Credenciais → Chave da API
- Copie sua chave da API (você precisará disso para cada solicitação)
Custo: O Google oferece €200/mês em créditos gratuitos. A maioria das extrações em pequena escala se encaixa nisso.
Passo 2: Entenda os Preços da API
Você paga por solicitação, não por resultado.
| API | Custo por 1.000 solicitações | Notas |
|---|---|---|
| Places API (Básica) | $32 | Nome, endereço, telefone, site, horários de funcionamento |
| Places API (Contato) | $17 | Mesma coisa + email, telefone |
| Places API (Atmosfera) | $17 | Mesma coisa + avaliações, classificações, fotos |
| Geocoding API | $5 | Endereço ↔ Coordenadas |
| Directions API | $5 | Rota, tempo de viagem, distância |
Custo de exemplo: Extraindo 10.000 negócios com informações básicas = 10.000 solicitações = $320. Com €200 em créditos gratuitos, você paga $120 do próprio bolso.
Se você precisar de 100.000 negócios, isso custará $3.200 — caro para projetos em grande escala.
Passo 3: Exemplo de Geocoding (Converter Endereço em Coordenadas)
Caso de uso: Você tem uma lista de endereços e precisa de latitude/longitude para mapeamento.
Código:
const https = require('https');
const address = "1600 Pennsylvania Avenue NW, Washington, DC";
const apiKey = "SUA_CHAVE_API_AQUI";
// Codifique o endereço para URL (espaços → %20, vírgulas → %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(`Latitude: ${location.lat}`);
console.log(`Longitude: ${location.lng}`);
console.log(`Endereço Formatado: ${result.results[0].formatted_address}`);
}
});
}).on('error', (err) => {
console.error('Erro:', err);
});
Saída:
Latitude: 38.8951
Longitude: -77.0369
Endereço Formatado: 1600 Pennsylvania Avenue NW, Washington, DC 20500, EUA
O que está acontecendo: Você envia o endereço para os servidores do Google. Eles o comparam com seu banco de dados, retornam as coordenadas mais próximas e a versão formatada. Simples consulta um-para-um.
Passo 4: Exemplo de Busca Próxima (Encontrar Negócios por Categoria + Localização)
Caso de uso: Encontre todos os restaurantes em um raio de 1 km de um ponto específico.
Código:
const https = require('https');
const apiKey = "SUA_CHAVE_API_AQUI";
const latitude = 40.7128; // Nova 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(`
Nome: ${place.name}`);
console.log(`Endereço: ${place.vicinity}`);
console.log(`Avaliação: ${place.rating} (${place.user_ratings_total} avaliações)`);
console.log(`ID do Local: ${place.place_id}`);
});
// Verifique se há mais resultados
if (result.next_page_token) {
console.log(`
Mais resultados disponíveis. Use next_page_token: ${result.next_page_token}`);
}
});
}).on('error', (err) => {
console.error('Erro:', err);
});
Saída:
Encontrados 20 restaurantes:
Nome: Balthazar
Endereço: 80 Spring Street, Nova York
Avaliação: 4.5 (1.203 avaliações)
ID do Local: ChIJIQBpAG2fwoAR_L12E10P3MQ
Nome: Eleven Madison Park
Endereço: 11 Madison Avenue, Nova York
Avaliação: 4.7 (892 avaliações)
ID do Local: ChIJ0ZHZd6eewokRkurJVcf33V4
...
Limitações dessa abordagem:
- Retorna no máximo 20 resultados por solicitação
- Para obter todos os resultados, use
next_page_token(requer múltiplas chamadas de API = custo mais alto) - Sem extração de e-mail (é necessário visitar o site separadamente)
- Sem texto de avaliação (apenas contagem de avaliações)
- Limites de taxa: 50 solicitações/segundo no máximo
- Sem filtragem por pontuação de avaliação, status de verificação ou número de fotos
Método 2: Automação de Navegador (Selenium, Puppeteer)
Se a API do Google for muito cara ou limitada, você pode automatizar um navegador para imitar o comportamento do usuário.
Como funciona: Um script abre o Chrome/Firefox, pesquisa no Google Maps por "encanadores em Chicago", clica nos resultados, extrai dados do DOM (HTML da página) e os salva.
Por que Usar Automação de Navegador?
✅ Sem custos de API (apenas os custos do seu servidor)
✅ Acesso a todos os dados visíveis (avaliações, fotos, conteúdo do site)
✅ Sem limites de taxa (tecnicamente — mas o Google pode detectar e bloquear)
❌ Mais lento (leva de 5 a 10 segundos por negócio contra 0,1 segundo via API)
❌ Configuração complexa (requer instalação do Chrome/Firefox)
❌ Frágil (o Google muda o layout da página → o script quebra)
❌ Arriscado (o Google bloqueia ativamente scrapers)
Exemplo Básico de Puppeteer
Configuração:
npm install puppeteer
Código:
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Navegar para a pesquisa do Google Maps
await page.goto('https://www.google.com/maps/search/plumbers+in+chicago');
// Aguardar o carregamento dos resultados
await page.waitForSelector('[data-item-id]');
// Extrair listagens de negócios
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 que isso é arriscado: O Google detecta padrões de automação de navegador (cliques rápidos, sem movimentos de mouse, cabeçalhos ausentes). Eles bloqueiam o IP ou mostram CAPTCHAs. Você precisaria de proxies, atrasos e falsificação de cabeçalhos — complexo e pouco confiável.
Veredicto: A automação de navegador funciona para extrações em pequena escala (< 100 negócios), mas falha em grande escala.
Método 3: Bases de Dados de Negócios Pré-Indexadas
A abordagem mais rápida: alguém já extraiu e organizou os dados.
Como funciona: Uma empresa (como a IBLead) executa scrapers 24/7, extrai listagens do Google Maps mensalmente, limpa os dados e vende acesso via API ou interface web.
Vantagens:
- Sem necessidade de codificação
- Resultados instantâneos (dados já extraídos)
- Custo menor que a API do Google (preços em massa)
- Inclui dados enriquecidos (e-mails, tecnologias detectadas, texto de avaliações)
- Suporta filtros complexos (classificação, contagem de avaliações, status de verificação, etc.)
Trade-offs:
- Os dados têm de 1 a 30 dias (não em tempo real)
- Você depende da precisão do fornecedor
- Modelo de assinatura (não pago por uso)
Exemplo: A IBLead extrai mais de 5 milhões de listagens do Google Maps em mais de 15 países, atualizadas mensalmente. Você pesquisa por cidade/categoria/filtros e exporta para CSV em 2 cliques.
Considerações Legais: É Legal Scrapear o Google Maps?
Resposta curta: Depende de como você faz isso.
Usando a API Oficial do Google Maps
✅ Legal — Você está usando o serviço autorizado do Google, seguindo seus termos de serviço. Você paga pelo uso. Sem problemas.
Automação de Navegador / Scraping Direto
⚠️ Área cinza — Tecnicamente possível, mas:
-
Viola os Termos de Serviço do Google — Seção 10.3: "Você não... tentará acessar ou pesquisar o Google Maps por qualquer meio que não sejam as interfaces publicamente suportadas pelo Google."
-
Viola a Lei de Fraude e Abuso de Computadores (CFAA) nos EUA — Acesso não autorizado a sistemas de computador. Os tribunais decidiram que o scraping pode violar isso.
-
Preocupações de direitos autorais — Nomes de negócios, endereços e avaliações são protegidos por direitos autorais. Reproduzi-los sem permissão é uma infração de direitos autorais.
-
Aplicação prática — O Google bloqueia ativamente scrapers. Seu IP é banido. Você precisaria de proxies (adiciona complexidade e custo).
Caso real: Em 2020, uma empresa foi processada por scrapear perfis do LinkedIn. O tribunal decidiu que mesmo dados visíveis publicamente estão protegidos se você violar os termos de serviço para acessá-los.
Melhor Prática
Use a API oficial do Google Maps ou um fornecedor de dados licenciado (IBLead, etc.). Você permanece legal, evita banimentos de IP e obtém dados confiáveis.
Se o custo for uma preocupação, compare:
- API do Google: $320 por 10.000 negócios
- IBLead: €44/mês por 10.000 créditos (1 negócio = 1 crédito) = €44 por 10.000 negócios
- Automação de Navegador DIY: $0 upfront, mas $500+ em proxies/infrastrutura, além do risco de ação legal
A abordagem licenciada é mais barata e mais segura.
Fluxo de Trabalho Prático: Da Pesquisa à Exportação CSV
Vamos passar por um cenário real: Você precisa encontrar 500 eletricistas em Los Angeles com números de telefone e sites.
Opção A: API do Google Maps
Passo 1: Geocodifique "Los Angeles" para obter coordenadas.
// Obter coordenadas de LA: 34.0522, -118.2437
Passo 2: Faça solicitações de busca próxima para "eletricista" dentro de um raio de 15 km.
// Primeira solicitação: retorna 20 resultados + next_page_token
// Segunda solicitação: use next_page_token para obter os próximos 20
// ... repita 25 vezes para obter 500 resultados
Passo 3: Para cada negócio, faça uma solicitação separada de "Detalhes do Local" para obter o número de telefone e o site.
// Cada negócio precisa de uma chamada de API separada
// 500 negócios = 500 solicitações adicionais
Total de solicitações: 25 (busca próxima) + 500 (detalhes do local) = 525 solicitações
Custo total: (525 / 1.000) × $32 = $16.80
Tempo para codificar: 4-6 horas (se você souber JavaScript)
Tempo para executar: 10-15 minutos
Opção B: IBLead
Passo 1: Vá para app.iblead.com
Passo 2: Pesquise "eletricistas" em "Los Angeles"
Passo 3: Aplique filtros (avaliação > 4, negócios verificados, etc.)
Passo 4: Exporte para CSV
Passo 5: Importe para o CRM
Custo total: €44/mês (cobre 10.000 créditos; você usa 500)
Tempo para codificar: 0 (sem codificação)
Tempo para executar: 2 minutos
Recursos bônus no IBLead:
- Endereços de e-mail (extraídos de sites)
- 160+ detecções de tecnologia (WordPress, Shopify, HubSpot, etc.)
- Texto e sentimento de avaliações do Google
- Dados SIRET/SIREN (apenas França)
- Filtragem por pontuação de avaliação, contagem de avaliações, fotos, status de verificação
Extraindo Avaliações do Google Maps (Caso de Uso Avançado)
Avaliações são valiosas para monitoramento de reputação, pesquisa de mercado e análise competitiva.
O Desafio
A API do Google Maps NÃO retorna texto de avaliações. Você obtém a contagem de avaliações e a classificação média, mas não avaliações individuais.
Resposta da API:
{
"name": "Joe's Diner",
"rating": 4.3,
"user_ratings_total": 287
}
Você não obtém:
- Texto de avaliação individual
- Nome do revisor
- Data da avaliação
- Classificação por avaliação
Abordagem de Automação de Navegador
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
// Navegar para um negócio no Google Maps
await page.goto('https://www.google.com/maps/place/Joes+Diner');
// Rolagem pela seção de avaliações
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();
})();
Saída:
[
{
"author": "Sarah M.",
"rating": "5 estrelas",
"text": "Melhor café da manhã da cidade! Altamente recomendo as panquecas.",
"date": "há 2 semanas"
},
{
"author": "John D.",
"rating": "3 estrelas",
"text": "Boa comida, mas serviço lento.",
"date": "há 1 mês"
}
]
Por que isso importa:
- Monitoramento de reputação: Identifique automaticamente negócios com novas avaliações de 1-2 estrelas
- Análise competitiva: Extraia avaliações de concorrentes para entender o que os clientes valorizam
- Análise de sentimento: Use NLP para categorizar avaliações por tópico (comida, serviço, preço, etc.)
A pegadinha: O Google bloqueia isso em grande escala. Após 50-100 avaliações, você enfrenta CAPTCHAs ou banimentos de IP.
Abordagem da IBLead (Recurso Exclusivo)
A IBLead scrapeia texto de avaliações, autor, classificação e data para cada negócio. Você pode filtrar por:
- Classificação mínima/máxima
- Intervalo de datas (últimos 30 dias, último ano, etc.)
- Palavra-chave no texto da avaliação
Caso de uso: Encontre todos os negócios com média < 3 em seu mercado → personalize o contato para mencionar suas avaliações baixas → ofereça serviços de reparo de reputação.
Desafios Comuns e Soluções
Desafio 1: Limitação de Taxa
Problema: A API do Google Maps limita você a 50 solicitações/segundo. Se você fizer mais, as solicitações falham.
Solução: Adicione atrasos entre as solicitações.
function delay(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
for (let i = 0; i < 100; i++) {
// Fazer solicitação da API
await makeRequest();
// Aguardar 200ms antes da próxima solicitação
await delay(200);
}
Desafio 2: Dados Ausentes
Problema: Alguns negócios não têm números de telefone ou sites listados no Google Maps
Pronto para começar?
Aceda a todas as empresas do Google Maps, enriquecidas com emails e dados legais.
Experimente o IBLead gratuitamenteArtigos relacionados
10 Dicas Comprovadas para Fazer Clientes Deixarem Mais Avaliações no Google Maps
Aprenda 10 estratégias práticas para aumentar as avaliações no Google Maps. Táticas que realmente funcionam.
7 Erros de Cold Email para Evitar: Exemplos e Modelos
Evite esses 7 erros de cold email que matam as taxas de resposta. Exemplos reais, modelos AIDA e soluções comprovadas para melhor prospecção.
Dados do Google Maps para ABM: O Guia Estratégico Completo
Descubra como os dados do Google Maps para marketing baseado em contas geram 208% mais receita. Crie listas de alvos precisas com 50M+ empresas.