cold-emaillead-generationautomation

Cold Email Pipeline: Verified Owner Emails at $0.037 Each

Building a cold email enrichment pipeline using Google Maps and search data to find and verify local business owner contact information.

8 min read

Cold email works when the data is good. It fails when you are blasting generic messages to unverified addresses. The highest-converting cold email pipelines start with real business data -- owner names, business type, location, website -- and use that context to write relevant outreach. This post covers how to build that pipeline using Scavio to pull business data from Google search results.

The Pipeline Architecture

The pipeline has four stages: search, enrich, compose, and send. Scavio handles the first two. You search for businesses in a target niche and location, then enrich each result with additional data from follow-up queries. An LLM writes personalized emails based on the enriched data. A sending tool handles delivery.

The key insight is that Google Maps results contain enough context to write a relevant cold email -- business name, category, rating, review count, and often a website URL. You do not need to buy lead lists from third-party providers.

Step 1: Finding Businesses

Start by searching for businesses in your target niche. Scavio returns structured local results from Google:

Python
import requests

def find_leads(niche: str, city: str, api_key: str) -> list:
    resp = requests.post(
        "https://api.scavio.dev/api/v1/search",
        headers={"x-api-key": api_key},
        json={
            "platform": "google",
            "query": f"{niche} in {city}",
            "type": "search",
            "mode": "full"
        }
    )
    data = resp.json()
    return data.get("local_results", [])

Step 2: Enriching Each Lead

Raw Maps results give you the basics. To write a good cold email, you need more context. Run a follow-up search for each business to find their website, social profiles, and recent mentions:

Python
def enrich_lead(business_name: str, city: str, api_key: str) -> dict:
    resp = requests.post(
        "https://api.scavio.dev/api/v1/search",
        headers={"x-api-key": api_key},
        json={
            "platform": "google",
            "query": f"{business_name} {city} owner contact",
            "type": "search"
        }
    )
    data = resp.json()
    enriched = {"organic_results": data.get("organic_results", [])[:5]}
    kg = data.get("knowledge_graph", {})
    if kg:
        enriched["website"] = kg.get("website", "")
        enriched["description"] = kg.get("description", "")
    return enriched

Step 3: Writing Personalized Emails

Generic cold emails get ignored. The enriched data lets you reference specific details about each business. Here is how to generate personalized outreach using the data you have gathered:

Python
from anthropic import Anthropic

client = Anthropic()

def write_email(lead: dict, enriched: dict, offer: str) -> str:
    context = f"""
Business: {lead.get('title', '')}
Rating: {lead.get('rating', 'N/A')} ({lead.get('reviews', 'N/A')} reviews)
Address: {lead.get('address', '')}
Category: {lead.get('type', '')}
Website: {enriched.get('website', 'none found')}
"""
    msg = client.messages.create(
        model="claude-sonnet-4-20250514",
        max_tokens=512,
        messages=[{
            "role": "user",
            "content": f"Write a short cold email (3-4 sentences) to this business owner. "
                       f"Offer: {offer}. Reference specific details about their business. "
                       f"No fluff, no salesy language.\n\n{context}"
        }]
    )
    return msg.content[0].text

Qualifying Before Sending

Do not email every business you find. Filter aggressively to improve response rates:

  • Skip businesses with over 200 reviews -- they likely already have marketing help
  • Prioritize businesses with no website -- they have an obvious need
  • Target businesses with 3.0-4.0 star ratings -- they have room for improvement and know it
  • Exclude chains and franchises -- focus on independent owners who make their own decisions

A pipeline that sends 50 well-targeted emails will outperform one that sends 500 generic ones. The data from Scavio gives you enough signal to filter effectively.

Putting It Together

The complete pipeline runs in a single script. Search, enrich, qualify, compose, export. The output is a CSV with business name, contact info, and a personalized email draft for each qualified lead. From there, load it into your sending tool of choice. The entire data layer is handled by Scavio -- no scraping, no proxies, no maintenance.