Prospección automática sin bloqueos: Extrae leads de Google Maps con Scrapling y Claude
Guía completa para automatizar la extracción de datos de Google Maps y redes sociales usando Scrapling (37k estrellas en GitHub) y analizarlos con Claude para conseguir clientes sin coste de APIs de terceros.
Por Martin Reche ·
Martin Reche · Sistemas de conversión con IA para negocios
Hemos construido sistemas de conversión para más de 50 negocios: desde el anuncio en Meta Ads hasta el cliente cerrado, pasando por la cualificación del lead y la venta. Todo lo que ves en esta guía está funcionando en negocios reales.
QUÉ ES Y POR QUÉ TE INTERESA
Consigue clientes sin pagar por bases de datos ni sufrir bloqueos
Scrapling es una librería Python de código abierto (37k estrellas en GitHub) que extrae datos de páginas complejas como Google Maps, Instagram o LinkedIn usando navegadores stealth indetectables. Al combinarlo con Claude, puedes pasar de 'buscar manualmente negocios' a tener una lista CSV limpia con nombres, teléfonos, webs y análisis de oportunidad en minutos — todo gratis y sin depender de APIs pagadas de Google o servicios de scraping caros.
Importante sobre el código: El material original no incluye el enlace directo al repositorio de Scrapling. Búscalo literalmente como "Scrapling GitHub" en Google antes de continuar. Es el repo de D4Vinci en GitHub.
El flujo completo
1. Prepara
Instala Python y Scraping con soporte stealth
2. Extrae
Scrapea Google Maps sin que te detecten ni bloqueen
3. Analiza
Pasa los datos a Claude para limpiar y priorizar leads
4. Exporta
Genera CSV/Excel listo para campañas de venta
VÍA RÁPIDA: QUE LO HAGA EL AGENTE
Instalación automática con Claude Code o Cursor
Si tienes Claude Code o Cursor instalados, no necesitas tocar la terminal ni configurar entornos manualmente. Copia este prompt y pégalo al agente. Él instalará todo, creará el script inicial y verificará que funcione.
Instala Scrapling en mi equipo con todas las dependencias necesarias para scraping indetectable (incluyendo navegadores stealth y playwright si hace falta). Crea un entorno virtual Python aislado para este proyecto. Luego prepara un script Python funcional que:
1. Busque "restaurantes en [mi ciudad]" en Google Maps usando Scrapling con modo stealth activado
2. Extraiga nombre, dirección, teléfono, sitio web y puntuación de los primeros 20 resultados
3. Guarde los datos en un archivo CSV
4. Incluya manejo de errores básico
Configura todo tú solo, verifica que el script se ejecute sin errores, y dime exactamente qué comando debo usar para lanzarlo después. Ve contándome cada paso que haces.El agente descargará Chrome/Chromium automáticamente si no lo tienes. Al finalizar, te dará un comando tipo `python scrape_leads.py` listo para usar.
REQUISITOS
Qué necesitas antes de empezar (instalación manual)
Si prefieres hacerlo tú mismo o el agente falló, estos son los componentes necesarios:
Python 3.9+
Lenguaje necesario para ejecutar Scrapling
python --versionpip (gestor de paquetes)
Viene con Python, pero verifica que esté actualizado
python -m pip install --upgrade pipCuenta de Anthropic (opcional)
Para analizar los datos extraídos con Claude API. Plan gratuito disponible con créditos de inicio.
console.anthropic.com¿Te trabas en algún paso? Lo vemos en una llamada desde 49€, con acciones por escrito.
Ver sesionesINSTALACIÓN MANUAL
Si prefieres hacerlo a mano (o algo falló)
Verifica e instala Python
Abre tu terminal (CMD en Windows, Terminal en Mac/Linux) y escribe `python --version`. Si no aparece 'Python 3.9' o superior, descárgalo desde python.org marcando 'Add Python to PATH' durante la instalación. Verificación: al escribir el comando deberías ver 'Python 3.11.x' o similar.
Crea una carpeta de trabajo y entorno virtual
Esto aisla las librerías del proyecto para no ensuciar tu sistema. Entra en la terminal y ejecuta:
mkdir prospeccion-claude
cd prospeccion-claude
python -m venv venv
venv\Scripts\activatemkdir prospeccion-claude
cd prospeccion-claude
python3 -m venv venv
source venv/bin/activateInstala Scrapling
Con el entorno activado (verás '(venv)' al inicio de la línea de comandos), instala la librería:
pip install scraplingScrapling instalará automáticamente Playwright y otros componentes necesarios para simular un navegador real. Si te pide instalar navegadores de Playwright, acepta con `playwright install chromium`.
TU PRIMER SCRIPT DE EXTRACCIÓN
Extrae negocios de Google Maps sin bloqueos
Creamos un script que busca negocios en una zona específica. Scrapling usará técnicas stealth para evitar que Google Maps detecte que es un bot.
Crea el archivo de extracción
En tu carpeta 'prospeccion-claude', crea un archivo llamado `extraer_maps.py` y pega este código completo:
import csv
import time
from scrapling import Fetcher
def extraer_negocios(termino_busqueda, ciudad, max_resultados=20):
"""
Extrae negocios de Google Maps buscando el término en la ciudad especificada.
Nota: Google Maps cambia su estructura frecuentemente, este es un ejemplo base.
"""
# Configurar fetcher con modo stealth (indetectable)
fetcher = Fetcher(stealth=True, headless=True)
# Construir URL de búsqueda
query = f"{termino_busqueda} en {ciudad}"
url = f"https://www.google.com/maps/search/{query.replace(' ', '+')}"
print(f"Accediendo a: {url}")
try:
# Obtener la página
response = fetcher.get(url)
# Esperar a que cargue el contenido dinámico
time.sleep(5)
# Selector CSS para las tarjetas de negocios (puede variar, esto es un ejemplo)
# Google Maps usa clases dinámicas, por eso usamos selectores de atributos
negocios = response.css('[data-result-index]')
resultados = []
for i, negocio in enumerate(negocios[:max_resultados]):
try:
# Extraer datos usando selectores CSS
nombre = negocio.css('h3::text').get() or negocio.css('[role="heading"]::text').get()
# Buscar teléfono (patrón típico en Maps)
texto_completo = negocio.text
import re
telefono = re.search(r'(\+?\d[\d\s-]{8,}\d)', texto_completo)
telefono = telefono.group(0) if telefono else "No encontrado"
# Buscar web (empieza con http)
web = negocio.css('a[href^="http"]::attr(href)').get()
if web and 'google.com' in web:
web = "No encontrada"
direccion = negocio.css('[data-result-index] > div > div::text').get() or "Ver en Maps"
if nombre:
resultados.append({
'nombre': nombre.strip(),
'direccion': direccion.strip() if direccion else "N/A",
'telefono': telefono,
'web': web if web else "No tiene",
'fuente': url
})
print(f"✓ Extraído: {nombre}")
except Exception as e:
print(f"Error en negocio {i}: {e}")
continue
return resultados
except Exception as e:
print(f"Error general: {e}")
return []
def guardar_csv(datos, filename="leads_maps.csv"):
"""Guarda los resultados en un archivo CSV."""
if not datos:
print("No hay datos para guardar")
return
with open(filename, 'w', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=['nombre', 'direccion', 'telefono', 'web', 'fuente'])
writer.writeheader()
writer.writerows(datos)
print(f"\n✅ {len(datos)} negocios guardados en {filename}")
# Ejemplo de uso
if __name__ == "__main__":
print("🔍 Iniciando extracción de leads...")
# Personaliza aquí tu búsqueda
TIPO_NEGOCIO = "restaurantes" # Cambia por: dentistas, clínicas, abogados...
CIUDAD = "Madrid" # Tu ciudad objetivo
CANTIDAD = 10 # Número de resultados
leads = extraer_negocios(TIPO_NEGOCIO, CIUDAD, CANTIDAD)
guardar_csv(leads)
print("\n📋 Primeros resultados:")
for lead in leads[:3]:
print(f"- {lead['nombre']} | {lead['telefono']}")Ejecuta el script y verifica
En la terminal (con el entorno virtual activo), ejecuta:
python extraer_maps.pyLa primera ejecución puede tardar 1-2 minutos mientras descarga Chromium. Verás mensajes de 'Downloading Chromium' — es normal. Al finalizar, deberías ver '✅ X negocios guardados en leads_maps.csv'.
ANALIZA CON CLAUDE
Limpia y prioriza tus leads automáticamente
Ahora que tienes un CSV con datos 'sucios' (pueden tener duplicados, teléfonos mal formateados o negocios irrelevantes), usaremos la API de Claude para limpiarlos y añadir análisis de oportunidad. Esta pieza es solo la entrada del embudo: aquí tienes el sistema de captación completo, explicado.
Obtén tu API Key de Anthropic
Ve a console.anthropic.com → Settings → API Keys → Create Key. Copia la clave (empieza con sk-ant-...). No la compartas.
Instala el SDK de Anthropic
En la misma terminal con entorno virtual activo:
pip install anthropicCrea el script de análisis
Crea un archivo nuevo `analizar_con_claude.py` y pega este código (reemplaza TU_API_KEY con tu clave real):
import os
import csv
import json
from anthropic import Anthropic
# Configura tu API Key aquí
client = Anthropic(api_key="TU_API_KEY") # <--- REEMPLAZA ESTO
def analizar_lead(lead_info):
"""Envía un lead a Claude para análisis de oportunidad."""
prompt = f"""Analiza este negocio extraído de Google Maps y determina si es un buen prospecto para servicios de marketing digital:
Nombre: {lead_info['nombre']}
Dirección: {lead_info['direccion']}
Web actual: {lead_info['web']}
Teléfono: {lead_info['telefono']}
Responde ÚNICAMENTE en formato JSON con esta estructura:
{{
"puntuacion_oportunidad": 1-10,
"tiene_web": true/false,
"observaciones": "breve análisis",
"recomendacion_contacto": "mensaje corto sugerido para llamada/email"
}}
"""
try:
response = client.messages.create(
model="claude-3-haiku-20240307", # Modelo rápido y económico
max_tokens=300,
messages=[{"role": "user", "content": prompt}]
)
# Extraer JSON de la respuesta
respuesta_texto = response.content[0].text
return json.loads(respuesta_texto)
except Exception as e:
print(f"Error analizando {lead_info['nombre']}: {e}")
return {
"puntuacion_oportunidad": 0,
"tiene_web": lead_info['web'] != "No tiene",
"observaciones": "Error en análisis",
"recomendacion_contacto": "Llamar directamente"
}
def procesar_csv(input_file="leads_maps.csv", output_file="leads_analizados.csv"):
"""Procesa todo el CSV añadiendo columnas de análisis de Claude."""
with open(input_file, 'r', encoding='utf-8') as f:
leads = list(csv.DictReader(f))
print(f"Analizando {len(leads)} leads con Claude...")
resultados = []
for i, lead in enumerate(leads):
print(f"Procesando {i+1}/{len(leads)}: {lead['nombre']}")
analisis = analizar_lead(lead)
# Combinar datos originales + análisis
lead_completo = {**lead, **analisis}
resultados.append(lead_completo)
# Pequeña pausa para no saturar la API
import time
time.sleep(0.5)
# Guardar resultado
with open(output_file, 'w', newline='', encoding='utf-8') as f:
if resultados:
writer = csv.DictWriter(f, fieldnames=resultados[0].keys())
writer.writeheader()
writer.writerows(resultados)
print(f"\n✅ Análisis completo. Guardado en {output_file}")
print(f"⭐ Mejores oportunidades:")
# Mostrar top 3
top_leads = sorted(resultados, key=lambda x: x.get('puntuacion_oportunidad', 0), reverse=True)[:3]
for lead in top_leads:
print(f" {lead['nombre']} (Score: {lead['puntuacion_oportunidad']}/10)")
if __name__ == "__main__":
procesar_csv()Ejecuta el análisis
Asegúrate de haber reemplazado 'TU_API_KEY' con tu clave real en el código anterior, luego ejecuta:
python analizar_con_claude.pyEl coste es mínimo: analizar 20 leads con Claude 3 Haiku cuesta aproximadamente $0.01-$0.02. Usa el modelo Haiku (el más barato) para este tipo de tareas estructuradas.
ERRORES COMUNES Y SOLUCIONES
Si algo falla, aquí está el arreglo
Google Maps me bloquea o sale CAPTCHA
Scrapling debe ejecutarse con `stealth=True` (ya está en el código). Si sigue fallando, añade `headless=False` para ver el navegador y reduce la velocidad añadiendo `time.sleep(10)` entre peticiones. También puedes usar una VPN para cambiar tu IP.
No extrae datos o el CSV está vacío
Google Maps cambia sus selectores CSS frecuentemente. Abre el navegador manualmente, inspecciona la página (F12) y busca las clases actuales de las tarjetas de negocios. Actualiza los selectores en el script según lo que veas.
Error 'Chromium not found'
Ejecuta manualmente: `playwright install chromium`. Si sigue fallando en Linux, necesitas instalar dependencias del sistema: `playwright install-deps chromium`.
Claude devuelve 'rate limit' o errores de API
Has alcanzado el límite del plan gratuito. Espera unos minutos o verifica tu saldo en console.anthropic.com. Para extracciones masivas, procesa los leads en lotes de 10 con pausas de 1 minuto entre lotes.
QUÉ PUEDES HACER AHORA CON ESTO
4 formas de monetizar esta herramienta hoy mismo
🍽️
Agencia de marketing para restaurantes
Extrae todos los restaurantes de tu ciudad sin web o con mala puntuación. Usa el análisis de Claude para priorizar los que más necesitan ayuda y envíales un email con una propuesta de rediseño web o gestión de redes.
🦷
Software para clínicas dentales
Scrapea dentistas en un radio de 50km. Filtra por 'no tiene web' y usa el script de Claude para generar un mensaje personalizado tipo: 'Ví que la Clínica X no aparece en Google, ¿sabías que el 70% de pacientes busca online?'.
🏠
Agencia inmobiliaria (cold calling)
Extrae inmobiliarias antiguas o particulares de Google Maps. Cruza los teléfonos con el CSV y usa el análisis de Claude para clasificar por 'probabilidad de vender pronto' según la antigüedad de la ficha.
📊
Venta de datos B2B en nichos
Crea listas ultra-específicas (ej: 'talleres mecánicos en Barcelona con web antigua') y véndelas en marketplaces como Fiverr o a agencias de email marketing. El valor está en que los datos vienen limpios y puntuados por IA.
Resultado esperado: Al finalizar tendrás un archivo `leads_analizados.csv` con columnas: nombre, dirección, teléfono, web, puntuacion_oportunidad (1-10), observaciones y recomendacion_contacto. Puedes importar esto directamente a herramientas como Pipedrive, HubSpot o Excel para empezar tu campaña de ventas.
Si quieres ir más rápido
Sistemas de conversión que funcionan, no demos de IA
Soy Martin Reche. Hemos construido sistemas de conversión para más de 50 negocios: desde el anuncio en Meta Ads hasta el cliente cerrado, pasando por la cualificación del lead y la venta. Todo lo que ves en esta guía está funcionando en negocios reales. Si quieres aplicarlo a tu caso, lo vemos en una llamada: te digo qué montar, con qué y en qué orden, y te lo dejo por escrito. Y si prefieres que lo montemos por ti, eso es NovaChat.
Sistemas de conversión
Del anuncio al cliente cerrado: captación, seguimiento y venta en un solo flujo que funciona.
Cualificación de leads
Cada contacto se filtra, se atiende y se lleva a la venta sin que nadie lo persiga a mano.
Agentes de IA que atienden y venden
Voz, WhatsApp, web e Instagram: responden, cualifican y cierran citas 24/7.
Consultoría 1:1
Desde 49 €: te digo qué montar, con qué y en qué orden, por escrito.
Consultoría 1:1 · Google Meet
Una llamada y sales sabiendo qué hacer y qué no
Me cuentas tu caso en un formulario de dos minutos, pagas, eliges hora. Garantía simple: si en los primeros 10 minutos veo que no te puedo ayudar, te devuelvo el importe. Pack de 3 Revisiones por 249 € si quieres que te acompañe 90 días.
49€
30 min · Diagnóstico 1:1
99€
60 min · Revisión 1:1
149€
90 min · Estrategia 1:1
¿Prefieres que lo montemos por ti?
En NovaChat IA construimos agentes de voz, chatbots y automatizaciones para pymes. Tú lo usas, nosotros lo mantenemos.