Un hilo de r/BusinessHub preguntó cómo escalar la generación de leads de Google Maps sin copiar y pegar manualmente. La respuesta que la mayoría de la gente omite: las consultas SERP con alcance en google.com/maps devuelven resultados estructurados de paquetes locales sin un navegador. Este tutorial sigue el patrón.
Requisitos previos
- Python 3.10+
- Clave API de Scavio
Guia paso a paso
Paso 1: Definir la lista de semillas
Parejas ciudad + zona de práctica.
SEEDS = [('Austin TX', 'dentist'), ('Austin TX', 'med spa'), ('Austin TX', 'real estate broker')]Paso 2: Consulta SERP para el paquete local
La consulta con ámbito de mapa devuelve listados de empresas.
import requests, os
API_KEY = os.environ['SCAVIO_API_KEY']
def local_pack(city, practice):
return requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY},
json={'query': f'{practice} {city}', 'search_type': 'local'}).json()Paso 3: Extraer datos comerciales por resultado
Nombre, teléfono, sitio web vuelven estructurados.
def normalize(local):
rows = []
for biz in local.get('local_results', []):
rows.append({'name': biz.get('title'), 'phone': biz.get('phone'), 'website': biz.get('website'), 'address': biz.get('address')})
return rowsPaso 4: Verificar el sitio web y extraer la página de inicio
El punto final de extracción convierte la página de inicio en rebajas.
def verify(rows):
for r in rows:
if r.get('website'):
md = requests.post('https://api.scavio.dev/api/v1/extract',
headers={'x-api-key': API_KEY}, json={'url': r['website'], 'format': 'markdown'}).json()
r['site_excerpt'] = md.get('markdown', '')[:500]
return rowsPaso 5: Deduplicar + escribir CSV
Ingrese a una herramienta CRM o BI.
import csv
with open('leads.csv', 'w') as f:
w = csv.DictWriter(f, fieldnames=['name','phone','website','address','site_excerpt'])
w.writeheader(); w.writerows(verified)Ejemplo en Python
import os, requests, csv
API_KEY = os.environ['SCAVIO_API_KEY']
H = {'x-api-key': API_KEY}
def leads(city, niche):
r = requests.post('https://api.scavio.dev/api/v1/search', headers=H, json={'query': f'{niche} {city}', 'search_type': 'local'}).json()
return [{'name': b.get('title'), 'phone': b.get('phone'), 'website': b.get('website')} for b in r.get('local_results', [])]
print(leads('Austin TX', 'dentist'))Ejemplo en JavaScript
const H = { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' };
export async function leads(city, niche) {
const r = await fetch('https://api.scavio.dev/api/v1/search', { method:'POST', headers:H, body: JSON.stringify({ query: `${niche} ${city}`, search_type: 'local' }) }).then(r => r.json());
return r.local_results || [];
}Salida esperada
About 20 local businesses per (city, niche) seed, with name, phone, website, and address. Verified excerpt for each that has a public site.