Workflow

n8n Google Maps to Email Outreach CRM Workflow

Automate local lead generation: search Google Maps via n8n, extract business data, enrich with web search, and push to your CRM for email outreach.

Overview

Cold email agencies manually search Google Maps, copy business details into spreadsheets, then import into outreach tools. This n8n workflow automates the entire pipeline: search Google Maps by industry and location, extract contact details, enrich with Google search data, and push qualified leads directly to the CRM. 1,000 leads cost $10 (Maps search + enrichment).

Trigger

Daily cron at 6 AM or triggered by new location added to the watchlist.

Schedule

Daily at 6 AM UTC

Workflow Steps

1

Load Target Industries and Locations

Read the list of industry-location pairs from a Google Sheet or database. Each row defines a search query for Google Maps.

2

Search Google Maps for Businesses

For each industry-location pair, search Google Maps via Scavio API. Extract business name, phone, address, rating, review count, and website.

3

Filter by Quality Signals

Remove businesses below the minimum rating threshold (default 3.5 stars) and those without websites or phone numbers.

4

Enrich with Google Search Data

For each qualified lead, run a Google search for the business name to pull company description, social profiles, and recent news.

5

Push to CRM and Outreach Tool

Create or update contacts in HubSpot, Salesforce, or a Google Sheet. Tag leads with source, industry, and quality score.

Python Implementation

Python
import requests, os

API_KEY = os.environ["SCAVIO_API_KEY"]

def maps_to_leads(industry: str, location: str, min_rating: float = 3.5) -> list:
    # Step 1: Search Google Maps
    resp = requests.post(
        "https://api.scavio.dev/api/v1/search",
        headers={"x-api-key": API_KEY, "Content-Type": "application/json"},
        json={"query": f"{industry} {location}", "platform": "google-maps", "country_code": "us"},
        timeout=15,
    )
    maps_data = resp.json()
    leads = []
    for place in maps_data.get("local_results", []):
        if place.get("rating", 0) < min_rating:
            continue
        if not place.get("phone"):
            continue
        # Step 2: Enrich with Google search
        enrich = requests.post(
            "https://api.scavio.dev/api/v1/search",
            headers={"x-api-key": API_KEY, "Content-Type": "application/json"},
            json={"query": place.get("title", ""), "country_code": "us"},
            timeout=10,
        )
        enrich_data = enrich.json()
        leads.append({
            "name": place.get("title", ""),
            "phone": place.get("phone", ""),
            "address": place.get("address", ""),
            "rating": place.get("rating"),
            "reviews": place.get("reviews"),
            "website": place.get("website", ""),
            "description": enrich_data.get("knowledge_graph", {}).get("description", ""),
        })
    return leads

leads = maps_to_leads("roofing contractors", "Dallas TX")
print(f"{len(leads)} qualified leads ready for CRM")

JavaScript Implementation

JavaScript
const H = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
async function mapsToLeads(industry, location, minRating=3.5) {
  const r = await fetch('https://api.scavio.dev/api/v1/search', {method:'POST', headers:H, body:JSON.stringify({query:industry+' '+location, platform:'google-maps', country_code:'us'})});
  const d = await r.json();
  const leads = [];
  for (const p of (d.local_results||[]).filter(p=>(p.rating||0)>=minRating && p.phone)) {
    const er = await fetch('https://api.scavio.dev/api/v1/search', {method:'POST', headers:H, body:JSON.stringify({query:p.title, country_code:'us'})});
    const ed = await er.json();
    leads.push({name:p.title, phone:p.phone, address:p.address, rating:p.rating, reviews:p.reviews, website:p.website, description:ed.knowledge_graph?.description||''});
  }
  return leads;
}
const leads = await mapsToLeads('roofing contractors','Dallas TX');
console.log(leads.length+' qualified leads');

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

Cold email agencies manually search Google Maps, copy business details into spreadsheets, then import into outreach tools. This n8n workflow automates the entire pipeline: search Google Maps by industry and location, extract contact details, enrich with Google search data, and push qualified leads directly to the CRM. 1,000 leads cost $10 (Maps search + enrichment).

This workflow uses a daily cron at 6 am or triggered by new location added to the watchlist.. Daily at 6 AM UTC.

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.

n8n Google Maps to Email Outreach CRM Workflow

Automate local lead generation: search Google Maps via n8n, extract business data, enrich with web search, and push to your CRM for email outreach.