Workflow

Discover 100 Local Leads Daily with SERP Enrichment

Workflow that discovers 100 local business leads daily via Google Maps API and enriches each with SERP data. Ready for CRM import.

Overview

Sales teams need a steady pipeline of local leads but manual discovery caps out at 20 per day. This workflow automates Google Maps discovery across target categories and locations, enriches each lead with SERP data (website, reviews, social profiles), and outputs CRM-ready CSV. 100 qualified leads for ~$1 in API credits.

Trigger

Daily at 6 AM, before the sales team starts outreach.

Schedule

Daily

Workflow Steps

1

Load Target Categories and Locations

Read the target business categories (plumber, dentist, HVAC) and geographic locations from a config file.

2

Discover Businesses via Google Maps

For each category-location pair, search Google Maps via Scavio to find businesses with addresses, ratings, and phone numbers.

3

Deduplicate Against Previous Days

Compare discovered businesses against the existing lead database. Skip businesses already in the pipeline.

4

Enrich with SERP Data

For each new lead, search Google for the business name to find their website, social profiles, and recent mentions.

5

Export to CRM-Ready CSV

Format all enriched leads into a CSV with columns: name, address, phone, rating, website, social profiles.

Python Implementation

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)")

JavaScript Implementation

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'));

Platforms Used

Google Maps

Local business search with ratings and contact info

Google

Web search with knowledge graph, PAA, and AI overviews

Frequently Asked Questions

Sales teams need a steady pipeline of local leads but manual discovery caps out at 20 per day. This workflow automates Google Maps discovery across target categories and locations, enriches each lead with SERP data (website, reviews, social profiles), and outputs CRM-ready CSV. 100 qualified leads for ~$1 in API credits.

This workflow uses a daily at 6 am, before the sales team starts outreach.. Daily.

This workflow uses the following Scavio platforms: google-maps, google. Each platform is called via the same unified API endpoint.

Yes. Scavio's free tier includes 250 credits per month with no credit card required. That is enough to test and validate this workflow before scaling it.

Discover 100 Local Leads Daily with SERP Enrichment

Workflow that discovers 100 local business leads daily via Google Maps API and enriches each with SERP data. Ready for CRM import.