Resumen
Local SEO agencies necesita business datos: NAP consistency, resena counts, ratings, categorias, y competidor presence. Este flujo de trabajo searches Google Maps for businesses in un objetivo area, enriquece cada resultado con Google Search datos for web presence verification, y salidas un structured conjunto de datos listo for SEO audits o lead qualification. One pipeline replaces manual directory verifica.
Desencadenador
On-demand per cliente engagement, o semanal for ongoing monitoreo.
Programación
Semanal
Pasos del flujo de trabajo
Define Target Area y Categories
Set el geographic area (city, zip code) y business categorias to search.
Search Google Maps for Businesses
Call Scavio con google-maps plataforma to encontrar businesses coincidencia el criterios.
Extraer Business Details
Analizar nombre, address, phone, rating, resena conteo, sitio web, y categoria de Maps resultados.
Verify Web Presence via Google Search
For cada business, ejecutar un Google search to verificar if they tienen un actual sitio web y como they clasificar.
Salida Structured Dataset
Save resultados as CSV o JSON con todos business campos, web presence flags, y SEO oportunidad puntuaciones.
Implementacion en Python
import requests, os, json, csv
API_KEY = os.environ["SCAVIO_API_KEY"]
H = {"x-api-key": API_KEY, "Content-Type": "application/json"}
def search_maps(query: str) -> list:
resp = requests.post(
"https://api.scavio.dev/api/v1/search",
headers=H,
json={"query": query, "platform": "google-maps"},
timeout=15,
)
return resp.json().get("local_results", [])
def check_web_presence(business_name: str, city: str) -> dict:
resp = requests.post(
"https://api.scavio.dev/api/v1/search",
headers=H,
json={"query": f"{business_name} {city}", "country_code": "us"},
timeout=15,
)
results = resp.json().get("organic_results", [])
has_website = any(business_name.lower().replace(" ", "") in r.get("link", "").lower().replace(" ", "") for r in results[:5])
return {"has_website": has_website, "google_results": len(results)}
def collect_local_data(categories: list, city: str):
all_businesses = []
for cat in categories:
query = f"{cat} in {city}"
maps_results = search_maps(query)
for biz in maps_results:
name = biz.get("title", "")
web = check_web_presence(name, city)
all_businesses.append({
"name": name,
"address": biz.get("address", ""),
"phone": biz.get("phone", ""),
"rating": biz.get("rating", ""),
"reviews": biz.get("reviews", 0),
"category": cat,
"has_website": web["has_website"],
"google_results": web["google_results"],
})
return all_businesses
businesses = collect_local_data(["plumber", "dentist", "accountant"], "Austin TX")
print(f"Collected {len(businesses)} businesses")
no_website = [b for b in businesses if not b["has_website"]]
print(f"Without website: {len(no_website)} (lead opportunities)")Implementacion en JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function searchMaps(query) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {method:'POST', headers:H, body:JSON.stringify({query, platform:'google-maps'})});
return (await r.json()).local_results || [];
}
async function checkWebPresence(businessName, city) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {method:'POST', headers:H, body:JSON.stringify({query:businessName+' '+city, country_code:'us'})});
const results = (await r.json()).organic_results || [];
const hasWebsite = results.slice(0,5).some(r=>(r.link||'').toLowerCase().replace(/ /g,'').includes(businessName.toLowerCase().replace(/ /g,'')));
return {hasWebsite, googleResults:results.length};
}
async function collectLocalData(categories, city) {
const all = [];
for (const cat of categories) {
const mapsResults = await searchMaps(cat+' in '+city);
for (const biz of mapsResults) {
const name = biz.title || '';
const web = await checkWebPresence(name, city);
all.push({name, address:biz.address||'', phone:biz.phone||'', rating:biz.rating||'', reviews:biz.reviews||0, category:cat, hasWebsite:web.hasWebsite, googleResults:web.googleResults});
}
}
return all;
}
const businesses = await collectLocalData(['plumber','dentist','accountant'], 'Austin TX');
console.log('Collected '+businesses.length+' businesses');
const noWebsite = businesses.filter(b=>!b.hasWebsite);
console.log('Without website: '+noWebsite.length+' (lead opportunities)');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