ScavioScavio
ProductoPreciosDocumentación
Iniciar sesionComenzar
  1. Inicio
  2. Tutoriales
  3. Cómo crear una canalización de correo electrónico frío de Google Maps
Tutorial

Cómo crear una canalización de correo electrónico frío de Google Maps

Cree un canal de generación de leads utilizando datos de Google Maps a partir de resultados SERP. Encuentre empresas locales, extraiga contactos y personalice correos electrónicos fríos.

Obtener clave API gratisDocumentacion API

Los listados de Google Maps contienen datos comerciales enriquecidos: nombre, dirección, teléfono, sitio web, horario, calificaciones y reseñas. En lugar de extraer Google Maps directamente (lo que viola los ToS y se rompe constantemente), este tutorial extrae datos de Maps de los resultados SERP. Busque una categoría y ubicación de empresa, y el SERP le devolverá resultados del paquete local con todos los datos que necesita para la comunicación por correo electrónico en frío. Cada búsqueda cuesta $0,005.

Requisitos previos

  • Python 3.9+ instalado
  • solicita biblioteca instalada
  • Una clave API de Scavio de scavio.dev

Guia paso a paso

Paso 1: Busque empresas locales a través de SERP

Busque una categoría y ubicación de empresa. Los resultados SERP incluyen listados orgánicos y datos de paquetes locales con detalles comerciales.

Python
import requests, os, re

SCAVIO_KEY = os.environ['SCAVIO_API_KEY']

def find_local_businesses(category: str, city: str, count: int = 10) -> list:
    query = f'{category} near {city}'
    resp = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
        json={'query': query, 'country_code': 'us', 'num_results': count})
    resp.raise_for_status()
    data = resp.json()
    businesses = []
    # Extract from organic results
    for r in data.get('organic_results', []):
        domain = r['link'].split('/')[2] if '/' in r['link'] else ''
        # Skip aggregator sites
        if any(a in domain for a in ['yelp.com', 'yellowpages.com', 'angi.com', 'thumbtack.com']):
            continue
        phones = re.findall(r'\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}', r.get('snippet', ''))
        businesses.append({
            'name': r['title'].split(' - ')[0].split(' | ')[0].strip(),
            'website': r['link'],
            'domain': domain,
            'phone': phones[0] if phones else '',
            'snippet': r.get('snippet', ''),
            'category': category,
            'city': city
        })
    return businesses

leads = find_local_businesses('dentist', 'Austin TX')
print(f'Found {len(leads)} businesses')
for l in leads[:5]:
    print(f'  {l["name"]}: {l["domain"]} {l["phone"]}')

Paso 2: Enriquezca los clientes potenciales con análisis de sitios web

Busque cada empresa para encontrar señales adicionales: si tienen un blog, presencia en las redes sociales o un diseño de sitio web desactualizado.

Python
import time

def enrich_lead(lead: dict) -> dict:
    domain = lead['domain']
    if not domain:
        return lead
    # Search for the business to find additional info
    resp = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
        json={'query': f'site:{domain}', 'country_code': 'us', 'num_results': 5})
    pages = resp.json().get('organic_results', [])
    lead['page_count'] = len(pages)
    lead['has_blog'] = any('blog' in p.get('link', '').lower() for p in pages)
    lead['has_booking'] = any(w in ' '.join(p.get('title', '') for p in pages).lower()
                              for w in ['book', 'schedule', 'appointment'])
    # Estimate website quality from page count
    if lead['page_count'] <= 2:
        lead['website_quality'] = 'minimal'
    elif lead['page_count'] <= 5:
        lead['website_quality'] = 'basic'
    else:
        lead['website_quality'] = 'established'
    return lead

# Enrich top leads
for i, lead in enumerate(leads[:3]):
    leads[i] = enrich_lead(lead)
    print(f'  {lead["name"]}: {lead["page_count"]} pages, '
          f'blog={lead.get("has_blog", False)}, '
          f'quality={lead.get("website_quality", "unknown")}')
    time.sleep(0.3)

Paso 3: Genera plantillas de correo electrónico en frío personalizadas

Utilice los datos de enriquecimiento para crear plantillas de correo electrónico personalizadas para cada cliente potencial. Haga referencia a la situación específica de su sitio web.

Python
def generate_email(lead: dict) -> str:
    name = lead['name']
    quality = lead.get('website_quality', 'unknown')
    has_blog = lead.get('has_blog', False)
    has_booking = lead.get('has_booking', False)
    # Personalized opening based on website analysis
    if quality == 'minimal':
        opening = (f'I noticed {name} has a fairly simple website. '
                   'Many of your competitors in the area have sites with '
                   'online booking and patient reviews that help them stand out.')
    elif not has_booking:
        opening = (f'I visited the {name} website and noticed you do not have '
                   'an online booking system. Adding one typically increases '
                   'new patient inquiries by 20-30%.')
    elif not has_blog:
        opening = (f'{name} has a solid website, but I noticed there is no blog. '
                   'Local dental practices with blogs rank for 3-5x more '
                   'keywords than those without.')
    else:
        opening = (f'I have been following {name} online and your web presence '
                   'is strong. I think there is an opportunity to improve '
                   'your local search visibility even further.')
    email = f"""Subject: Quick question about {name}'s website

Hi,

{opening}

I help {lead['category']}s in {lead['city']} get more patients through 
their website. Would a 10-minute call this week make sense?

Best regards"""
    return email

for lead in leads[:2]:
    if lead.get('website_quality'):
        email = generate_email(lead)
        print(email)
        print('---')

Ejemplo en Python

Python
import requests, os, re, time

SCAVIO_KEY = os.environ['SCAVIO_API_KEY']

def find_leads(category, city):
    resp = requests.post('https://api.scavio.dev/api/v1/search',
        headers={'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json'},
        json={'query': f'{category} near {city}', 'country_code': 'us', 'num_results': 10})
    leads = []
    for r in resp.json().get('organic_results', []):
        domain = r['link'].split('/')[2] if '/' in r['link'] else ''
        if not any(a in domain for a in ['yelp.com', 'yellowpages.com']):
            phones = re.findall(r'\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}', r.get('snippet', ''))
            leads.append({'name': r['title'].split(' - ')[0], 'domain': domain,
                          'phone': phones[0] if phones else ''})
    return leads

for l in find_leads('dentist', 'Austin TX')[:5]:
    print(f'{l["name"]}: {l["domain"]} {l["phone"]}')

Ejemplo en JavaScript

JavaScript
const SCAVIO_KEY = process.env.SCAVIO_API_KEY;

async function findLeads(category, city) {
  const resp = await fetch('https://api.scavio.dev/api/v1/search', {
    method: 'POST',
    headers: { 'x-api-key': SCAVIO_KEY, 'Content-Type': 'application/json' },
    body: JSON.stringify({ query: `${category} near ${city}`, country_code: 'us', num_results: 10 })
  });
  return (await resp.json()).organic_results?.filter(r => {
    const domain = new URL(r.link).hostname;
    return !['yelp.com', 'yellowpages.com'].some(a => domain.includes(a));
  }).map(r => ({
    name: r.title.split(' - ')[0],
    domain: new URL(r.link).hostname,
    phone: (r.snippet || '').match(/\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4}/)?.[0] || ''
  })) || [];
}

findLeads('dentist', 'Austin TX').then(l => l.forEach(x => console.log(`${x.name}: ${x.phone}`)));

Salida esperada

JSON
Found 7 businesses
  Austin Dental Care: austindentalcare.com (512) 555-0123
  Smile Solutions: smilesolutionsatx.com (512) 555-0456
  Capital City Dental: capitalcitydental.com

  Austin Dental Care: 3 pages, blog=False, quality=basic
  Smile Solutions: 8 pages, blog=True, quality=established

Subject: Quick question about Austin Dental Care's website

Hi,

I visited the Austin Dental Care website and noticed you do not have
an online booking system. Adding one typically increases
new patient inquiries by 20-30%.

I help dentists in Austin TX get more patients through their website.
Would a 10-minute call this week make sense?

Tutoriales relacionados

  • Cómo construir una canalización de clientes potenciales local con enriquecimiento SERP
  • Cómo ejecutar una auditoría SERP para personalización de correo electrónico en frío
  • Cómo encontrar empresas sin sitios web a escala

Preguntas frecuentes

La mayoria de los desarrolladores completan este tutorial en 15 a 30 minutos. Necesitaras una clave API de Scavio (el plan gratuito funciona) y un entorno de Python o JavaScript.

Python 3.9+ instalado. solicita biblioteca instalada. Una clave API de Scavio de scavio.dev. Una clave API de Scavio te da 50 creditos gratuitos al registrarte.

Si. El plan gratuito incluye 50 creditos al registrarte, mas que suficiente para completar este tutorial y crear un prototipo funcional.

Scavio tiene un paquete nativo de LangChain (langchain-scavio), un servidor MCP y una API REST simple que funciona con cualquier cliente HTTP. Este tutorial usa the raw REST API, pero puedes adaptarlo al framework que prefieras.

Recursos relacionados

Best Of

Las mejores API de datos comerciales de Google Maps (mayo de 2026)

Read more
Glossary

Extracción de clientes potenciales de Google Maps

Read more
Best Of

Las mejores herramientas de extracción de datos de Google Maps en mayo de 2026

Read more
Solution

Enriquezca las campañas de correo electrónico frío con datos comerciales de Google Maps

Read more
Solution

Extraiga clientes potenciales de empresas locales de Google Maps a través de n8n

Read more
Use Case

Descubra clientes potenciales B2B a través de datos de Google Maps

Read more

Empieza a construir

Cree un canal de generación de leads utilizando datos de Google Maps a partir de resultados SERP. Encuentre empresas locales, extraiga contactos y personalice correos electrónicos fríos.

Obtener clave API gratuitaLeer la documentacion
ScavioScavio

API de busqueda en tiempo real para agentes de IA. Busca en todas las plataformas, no solo en Google.

Producto

  • Funciones
  • Precios
  • Panel
  • Afiliados

Desarrolladores

  • Documentacion
  • Referencia de API
  • Inicio rapido
  • Integracion MCP
  • Python SDK

Alternativas

  • Alternativa a Tavily
  • Alternativa a SerpAPI
  • Alternativa a Firecrawl
  • Alternativa a Exa

Herramientas

  • Formateador JSON
  • cURL a codigo
  • Contador de tokens
  • Todas las herramientas

© 2026 Scavio. Todos los derechos reservados.

Featured on TAAFT
Terminos de servicioPolitica de privacidad