Resumen
Las listas de leads locales viven en Google Maps: nombres, webs, teléfonos, direcciones y número de reseñas, todo público. La forma antigua era comprar software de scraping lento (LeadSwift empieza en $24.99/mo por una búsqueda al día) o pelearte tú mismo con los proxies. Una API de búsqueda devuelve ese mismo local pack como JSON estructurado, así que puedes sacar un nicho y una ciudad, filtrar los negocios que están operando de verdad y exportar una lista limpia sin navegador.
Desencadenador
Ejecútalo bajo demanda por nicho y ciudad, o de forma programada para refrescar un mercado objetivo cada semana.
Programación
Bajo demanda, o semanal por mercado objetivo
Pasos del flujo de trabajo
Consulta el endpoint de Maps por nicho y ciudad
Haz un POST a /api/v2/google/maps/search con una consulta como 'hvac contractors in tampa'. El parámetro ll (centro del mapa @lat,lng,zoom) controla de dónde salen los resultados, y para la precisión local importa más que el texto. Devuelve local_results con title, address, phone, website, rating y reviews.
Filtra los negocios que operan de verdad
Quédate con los negocios que tienen web y 10+ reseñas. Como señaló el flujo de r/Coldemailing que alcanzó tasas de respuesta del 4-8%, este filtro elimina las fichas muertas y deja a los operadores reales que merece la pena contactar.
Deduplica y enriquece
Deduplica por teléfono y dominio. De cada superviviente ya tienes la web, que alimenta un paso posterior de búsqueda del responsable de decisión y de verificación de correo.
Exporta a CSV o a tu CRM
Escribe las filas ya limpias. Una sola llamada a Maps cubre un local pack; recorre la ciudad por centros ll de barrio para construir un mercado completo.
Implementacion en Python
import os, csv, requests
H = {"Authorization": f"Bearer {os.environ['SCAVIO_API_KEY']}", "Content-Type": "application/json"}
def maps(query, ll=None):
body = {"query": query}
if ll: body["ll"] = ll
return requests.post("https://api.scavio.dev/api/v2/google/maps/search",
headers=H, json=body).json()
res = maps("hvac contractors in tampa", ll="@27.9506,-82.4572,12z")
leads = [b for b in res.get("local_results", [])
if b.get("website") and (b.get("reviews") or 0) >= 10]
with open("leads.csv", "w", newline="") as f:
w = csv.writer(f); w.writerow(["name","phone","website","rating","reviews"])
for b in leads:
w.writerow([b.get("title"), b.get("phone"), b.get("website"),
b.get("rating"), b.get("reviews")])
print(len(leads), "qualified leads")Implementacion en JavaScript
import { Scavio } from "scavio";
import { writeFileSync } from "fs";
const client = new Scavio({ apiKey: process.env.SCAVIO_API_KEY });
const res = await client.google.mapsSearch({
query: "hvac contractors in tampa", ll: "@27.9506,-82.4572,12z",
});
const leads = (res.local_results || [])
.filter(b => b.website && (b.reviews || 0) >= 10);
const rows = [["name","phone","website","rating","reviews"],
...leads.map(b => [b.title, b.phone, b.website, b.rating, b.reviews])];
writeFileSync("leads.csv", rows.map(r => r.join(",")).join("\n"));
console.log(leads.length, "qualified leads");