Resumen
Extraer business leads de Google Maps resultados de busqueda usando un search API instead of scraping Google Maps directamente. El flujo de trabajo consultas location-specific business searches, extrae business datos (nombre, rating, address, phone), y salidas un lead lista for outreach. No proxy rotation o CAPTCHA solving requerido.
Desencadenador
Diario cron at 06:30 UTC
Programación
Diario at 06:30 UTC
Pasos del flujo de trabajo
Cargar ubicacion y categoria lista
Leer objetivo business categorias y ubicaciones de un archivo de configuracion. Example: 'plumbers in Austin TX', 'dentists in Portland OR'.
Consulta Google Maps
For cada location-category pair, search el Google Maps plataforma endpoint to obtener local business resultados con ratings y contact info.
Deduplicate resultados
Comparar contra previously extraido businesses to avoid duplicate outreach. Match on business nombre y address.
Enriquecer con web presence
For nuevo businesses, ejecutar un quick Google search to encontrar their sitio web, social perfiles, y cualquier reciente news.
Salida lead CSV
Escribir nuevo leads to un CSV con: business nombre, categoria, address, phone, rating, resena conteo, sitio web, y enriquecimiento notes.
Implementacion en Python
import requests, os, json, csv
from datetime import datetime
H = {"x-api-key": os.environ["SCAVIO_API_KEY"], "Content-Type": "application/json"}
def extract_leads(category, location, existing_names=set()):
r = requests.post("https://api.scavio.dev/api/v1/search", headers=H,
json={"platform": "google_maps", "query": f"{category} in {location}"}).json()
leads = []
for b in r.get("local_results", [])[:20]:
name = b.get("title", "")
if name in existing_names:
continue
leads.append({
"name": name,
"category": category,
"location": location,
"address": b.get("address", ""),
"phone": b.get("phone", ""),
"rating": b.get("rating", ""),
"reviews": b.get("reviews", 0),
"website": b.get("website", ""),
"extracted": datetime.now().strftime("%Y-%m-%d"),
})
return leads
leads = extract_leads("plumbers", "Austin TX")
print(f"Found {len(leads)} new leads")
for l in leads[:3]:
print(f" {l['name']} - {l['rating']} stars ({l['reviews']} reviews)")Implementacion en JavaScript
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};
async function extractLeads(category, location, existingNames = new Set()) {
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H,
body: JSON.stringify({platform: "google_maps", query: `${category} in ${location}`})
}).then(r => r.json());
return (r.local_results || []).slice(0, 20)
.filter(b => !existingNames.has(b.title || ""))
.map(b => ({
name: b.title || "", category, location,
address: b.address || "", phone: b.phone || "",
rating: b.rating || "", reviews: b.reviews || 0,
website: b.website || "",
extracted: new Date().toISOString().split("T")[0],
}));
}
extractLeads("plumbers", "Austin TX").then(leads => {
console.log(`Found ${leads.length} new leads`);
leads.slice(0, 3).forEach(l =>
console.log(` ${l.name} - ${l.rating} stars (${l.reviews} reviews)`));
});