Resumen
Sales teams necesita un steady pipeline of local leads pero manual discovery caps out at 20 per dia. Este flujo de trabajo automatiza Google Maps discovery a traves de objetivo categorias y ubicaciones, enriquece cada lead con SERP datos (sitio web, resenas, social perfiles), y salidas CRM-ready CSV. 100 qualified leads for ~$1 in API credits.
Desencadenador
Diario at 6 AM, antes de el sales team inicia outreach.
Programación
Diario
Pasos del flujo de trabajo
Cargar Target Categories y Locations
Leer el objetivo business categorias (plumber, dentist, HVAC) y geographic ubicaciones de un archivo de configuracion.
Descubrir Businesses via Google Maps
For cada category-location pair, search Google Maps via Scavio to encontrar businesses con addresses, ratings, y phone numbers.
Deduplicate Against Anterior Days
Comparar discovered businesses contra el existing lead base de datos. Skip businesses ya in el pipeline.
Enriquecer con SERP Datos
For cada nuevo lead, search Google for el business nombre to encontrar their sitio web, social perfiles, y reciente menciones.
Exportar to CRM-Ready CSV
Format todos enriquecido leads en un CSV con columnas: nombre, address, phone, rating, sitio web, social perfiles.
Implementacion en Python
import requests, os, json, csv
from pathlib import Path
API_KEY = os.environ["SCAVIO_API_KEY"]
H = {"x-api-key": API_KEY, "Content-Type": "application/json"}
TARGETS = [
{"category": "plumber", "location": "Austin TX"},
{"category": "electrician", "location": "Austin TX"},
{"category": "dentist", "location": "Austin TX"},
]
def discover_maps(category: str, location: str) -> list:
resp = requests.post(
"https://api.scavio.dev/api/v1/search",
headers=H,
json={"query": f"{category} in {location}", "platform": "google-maps", "country_code": "us"},
timeout=15,
)
return [{"name": p.get("title", ""), "address": p.get("address", ""), "rating": p.get("rating"), "phone": p.get("phone", "")}
for p in resp.json().get("local_results", [])]
def enrich(name: str, location: str) -> dict:
resp = requests.post(
"https://api.scavio.dev/api/v1/search",
headers=H,
json={"query": f"{name} {location}", "country_code": "us"},
timeout=10,
)
organic = resp.json().get("organic_results", [])
return {"website": organic[0].get("link", "") if organic else "", "mentions": len(organic)}
def daily_pipeline():
all_leads = []
for t in TARGETS:
leads = discover_maps(t["category"], t["location"])
for lead in leads:
enrichment = enrich(lead["name"], t["location"])
lead.update(enrichment)
lead["category"] = t["category"]
all_leads.append(lead)
# Write CSV
if all_leads:
with open("leads.csv", "w", newline="") as f:
w = csv.DictWriter(f, fieldnames=all_leads[0].keys())
w.writeheader()
w.writerows(all_leads)
print(f"Discovered {len(all_leads)} leads across {len(TARGETS)} categories")
return all_leads
leads = daily_pipeline()
for l in leads[:5]:
print(f"{l['name']}: {l.get('website', 'N/A')} ({l.get('rating', 'N/A')} stars)")Implementacion en JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
const fs = await import('fs');
const TARGETS = [{category:'plumber',location:'Austin TX'},{category:'electrician',location:'Austin TX'},{category:'dentist',location:'Austin TX'}];
async function discoverMaps(category, location) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {method:'POST', headers:H, body:JSON.stringify({query:category+' in '+location, platform:'google-maps', country_code:'us'})});
return ((await r.json()).local_results||[]).map(p=>({name:p.title||'', address:p.address||'', rating:p.rating, phone:p.phone||''}));
}
async function enrich(name, location) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {method:'POST', headers:H, body:JSON.stringify({query:name+' '+location, country_code:'us'})});
const organic = (await r.json()).organic_results||[];
return {website:organic[0]?.link||'', mentions:organic.length};
}
async function dailyPipeline() {
const allLeads = [];
for (const t of TARGETS) {
const leads = await discoverMaps(t.category, t.location);
for (const lead of leads) {
const e = await enrich(lead.name, t.location);
Object.assign(lead, e, {category:t.category});
allLeads.push(lead);
}
}
if (allLeads.length) {
const header = Object.keys(allLeads[0]).join(',');
const rows = allLeads.map(l=>Object.values(l).join(','));
fs.writeFileSync('leads.csv', header+'\n'+rows.join('\n'));
}
return allLeads;
}
const leads = await dailyPipeline();
console.log('Discovered '+leads.length+' leads');
for (const l of leads.slice(0,5)) console.log(l.name+': '+(l.website||'N/A'));Plataformas utilizadas
Google Maps
Búsqueda de negocios locales con calificaciones e información de contacto
Búsqueda web con grafo de conocimiento, PAA y resúmenes de IA