Overview
Agencies that serve local businesses (restaurants, dentists, plumbers, gyms) need a steady flow of new prospects. This workflow searches Google daily for local businesses in target cities and verticals, filters for businesses with weak online presence (no website, outdated listings, poor reviews), and pushes qualified leads to the sales pipeline. One API call per search, no scraping required.
Trigger
Cron schedule (daily at 9 AM UTC)
Schedule
Daily at 9 AM UTC
Workflow Steps
Load target markets
Read list of target cities, verticals (dentist, plumber, restaurant), and qualifying criteria from config.
Search for local businesses
For each city-vertical combo, query Google via Scavio for business listings. Extract names, addresses, and URLs.
Identify weak online presence
Filter for businesses without a website, with poor Google ratings, or with outdated information in snippets.
Check for existing outreach
Compare against your CRM to skip businesses you have already contacted.
Score and prioritize
Score leads by opportunity signals: no website = high priority, bad reviews mentioning fixable issues = medium.
Push to outreach pipeline
Format leads with context (why they need help) and push to your CRM or outreach tool.
Python Implementation
import requests, os, json
H = {"x-api-key": os.environ["SCAVIO_API_KEY"]}
MARKETS = [
{"city": "Austin TX", "verticals": ["dentist", "plumber", "restaurant"]},
{"city": "Denver CO", "verticals": ["chiropractor", "gym", "salon"]}
]
def find_local_leads():
leads = []
for market in MARKETS:
for vertical in market["verticals"]:
query = f"{vertical} in {market['city']}"
r = requests.post("https://api.scavio.dev/api/v1/search", headers=H,
json={"platform": "google", "query": query}, timeout=10).json()
for o in r.get("organic", [])[:10]:
snippet = o.get("snippet", "").lower()
has_website = bool(o.get("link"))
low_rating = "rating" in snippet and any(
f"{n}" in snippet for n in ["1.", "2.", "3."])
leads.append({
"business": o.get("title"),
"url": o.get("link"),
"city": market["city"],
"vertical": vertical,
"snippet": o.get("snippet"),
"opportunity": "no_website" if not has_website else
"low_rating" if low_rating else "standard"
})
return leads
for lead in find_local_leads():
print(json.dumps(lead))JavaScript Implementation
const H = {"x-api-key": process.env.SCAVIO_API_KEY, "Content-Type": "application/json"};
async function findLocalLeads(markets) {
const leads = [];
for (const market of markets) {
for (const vertical of market.verticals) {
const r = await fetch("https://api.scavio.dev/api/v1/search", {
method: "POST", headers: H,
body: JSON.stringify({platform: "google", query: vertical + " in " + market.city})
}).then(r => r.json());
for (const o of (r.organic || []).slice(0, 10)) {
leads.push({
business: o.title, url: o.link, city: market.city,
vertical, snippet: o.snippet
});
}
}
}
return leads;
}Platforms Used
Web search with knowledge graph, PAA, and AI overviews