Automatice el descubrimiento de clientes potenciales locales consultando Google Maps a través de una API de búsqueda para encontrar empresas que coincidan con sus criterios objetivo en áreas geográficas específicas. La obtención manual de clientes potenciales de Google Maps es tediosa y no se extiende más allá de unos pocos códigos postales. Este tutorial crea una canalización que toma una categoría de negocio y una lista de ubicaciones, consulta el punto final de búsqueda de Google de Scavio con intención local y genera una lista estructurada de clientes potenciales con nombre, dirección, teléfono y sitio web. Cubre el procesamiento por lotes, la deduplicación y la exportación a CSV.
Requisitos previos
- Python 3.8+ instalado
- solicitudes y bibliotecas csv (ambas en Python stdlib excepto solicitudes)
- Una clave API de Scavio de scavio.dev
- Una lista de ubicaciones objetivo y categorías comerciales
Guia paso a paso
Paso 1: Definir ubicaciones y categorías de destino
Configura la matriz de búsqueda de tipos de negocio y áreas geográficas que deseas prospectar.
import os, requests, csv
API_KEY = os.environ['SCAVIO_API_KEY']
CATEGORIES = ['plumber', 'hvac contractor', 'roofing company']
LOCATIONS = ['Austin TX', 'Denver CO', 'Nashville TN']
def build_queries(categories: list, locations: list) -> list:
queries = []
for cat in categories:
for loc in locations:
queries.append(f'{cat} in {loc}')
return queries
print(f'Generated {len(build_queries(CATEGORIES, LOCATIONS))} search queries')Paso 2: Buscar y extraer datos comerciales locales
Consulta Scavio con intención local y analiza listados de empresas a partir de los resultados.
def search_local_leads(query: str) -> list:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'platform': 'google', 'query': query}, timeout=15)
resp.raise_for_status()
data = resp.json()
leads = []
for r in data.get('local_results', data.get('organic_results', [])):
leads.append({
'name': r.get('title', ''),
'address': r.get('address', ''),
'phone': r.get('phone', ''),
'website': r.get('link', ''),
'rating': r.get('rating', ''),
'query': query,
})
return leadsPaso 3: Deduplicar entre consultas
Elimine las empresas duplicadas que aparecen en varias consultas haciendo coincidir el nombre y el número de teléfono.
def deduplicate_leads(all_leads: list) -> list:
seen = set()
unique = []
for lead in all_leads:
key = (lead['name'].lower().strip(), lead.get('phone', ''))
if key not in seen:
seen.add(key)
unique.append(lead)
return unique
def collect_all_leads(queries: list) -> list:
all_leads = []
for q in queries:
leads = search_local_leads(q)
all_leads.extend(leads)
print(f'{q}: {len(leads)} leads')
return deduplicate_leads(all_leads)Paso 4: Exportar a CSV
Escriba los clientes potenciales deduplicados en un archivo CSV listo para importar a su CRM o herramienta de divulgación.
def export_csv(leads: list, filename: str = 'local_leads.csv'):
if not leads:
print('No leads to export')
return
fields = ['name', 'address', 'phone', 'website', 'rating', 'query']
with open(filename, 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=fields)
writer.writeheader()
writer.writerows(leads)
print(f'Exported {len(leads)} leads to {filename}')
queries = build_queries(CATEGORIES, LOCATIONS)
leads = collect_all_leads(queries)
export_csv(leads)Ejemplo en Python
import requests, os, csv
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def find_leads(category, location):
data = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': f'{category} in {location}'}).json()
return [{'name': r.get('title', ''), 'url': r.get('link', '')}
for r in data.get('local_results', data.get('organic_results', []))]
for lead in find_leads('plumber', 'Austin TX'):
print(lead['name'])Ejemplo en JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function findLeads(category, location) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H,
body: JSON.stringify({platform: 'google', query: `${category} in ${location}`})
});
const data = await r.json();
return (data.local_results || data.organic_results || []).map(r => ({name: r.title, url: r.link}));
}
findLeads('plumber', 'Austin TX').then(leads => leads.forEach(l => console.log(l.name)));Salida esperada
A CSV file of deduplicated local business leads with name, address, phone, website, and rating, collected from Google Maps results across multiple locations.