Un fil de discussion sur r/coldemail demandait comment contacter les petites entreprises à grande échelle. Le processus : rechercher des entreprises sur Google Maps par catégorie et emplacement, vérifier si elles ont des sites web, et rédiger des messages personnalisés. Ce tutoriel développe les étapes de collecte de données et de rédaction d'emails.
Prérequis
- Clé API Scavio
- Python 3.8+
- Identifiants SMTP pour l'envoi
- Facultatif : service de vérification d'email
Parcours
Étape 1: Rechercher des entreprises par catégorie et emplacement
Utilisez Google Maps via Scavio pour trouver des entreprises.
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def find_smbs(category, city, state):
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=H,
json={'platform': 'google', 'query': f'{category} in {city} {state}',
'type': 'maps'}).json()
businesses = []
for b in data.get('local_results', []):
businesses.append({
'name': b.get('title'),
'address': b.get('address'),
'phone': b.get('phone'),
'website': b.get('website'),
'rating': b.get('rating'),
'reviews': b.get('reviews', 0),
})
return businessesÉtape 2: Trouver les emails de contact à partir des sites web
Extraire l'email du site web de l'entreprise en utilisant l'endpoint d'extraction de Scavio.
def find_email(website):
if not website:
return None
try:
data = requests.post('https://api.scavio.dev/api/v1/extract',
headers=H,
json={'url': website}).json()
text = data.get('text', '')
# Simple email extraction
import re
emails = re.findall(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}', text)
# Filter out generic emails
generic = ['noreply', 'no-reply', 'support', 'info']
personal = [e for e in emails if not any(g in e.lower() for g in generic)]
return personal[0] if personal else (emails[0] if emails else None)
except:
return NoneÉtape 3: Rédiger des emails de prospection personnalisés
Générer des emails qui font référence à des détails spécifiques de l'entreprise.
def compose_email(business, your_service):
name = business['name']
rating = business.get('rating', '')
reviews = business.get('reviews', 0)
subject = f'Quick question for {name}'
body = (f'Hi,\n\n'
f'I found {name} on Google Maps'
f'{f" -- {rating} stars with {reviews} reviews, nice work" if rating else ""}.\n\n'
f'I help businesses like yours with {your_service}. '
f'Would it be worth a 5-minute conversation this week?\n\n'
f'Best regards')
return {'subject': subject, 'body': body, 'to': business.get('email')}Étape 4: Exporter en CSV pour importation dans un outil de prospection
Instantly ($30/mo) ou Smartlead ($39/mo) peuvent importer le CSV pour un envoi séquencé.
import csv
def export_outreach(businesses, service, filename='outreach.csv'):
with open(filename, 'w', newline='') as f:
writer = csv.DictWriter(f, fieldnames=['name', 'email', 'subject', 'body', 'phone', 'website'])
writer.writeheader()
for b in businesses:
if b.get('email'):
email = compose_email(b, service)
writer.writerow({'name': b['name'], 'email': b['email'],
'subject': email['subject'], 'body': email['body'],
'phone': b.get('phone', ''), 'website': b.get('website', '')})
print(f'Exported {filename}')Exemple Python
import os, requests, re
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def smb_pipeline(category, city):
maps = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': f'{category} in {city}', 'type': 'maps'}).json()
for biz in maps.get('local_results', []):
if biz.get('website'):
page = requests.post('https://api.scavio.dev/api/v1/extract', headers=H,
json={'url': biz['website']}).json()
emails = re.findall(r'[\w.+-]+@[\w-]+\.[\w.]+', page.get('text', ''))
if emails: print(f"{biz['title']}: {emails[0]}")Exemple JavaScript
const maps = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'},
body: JSON.stringify({platform: 'google', query: `dentist in ${city}`, type: 'maps'})
}).then(r => r.json());Sortie attendue
CSV of SMB leads with business name, email, phone, and personalized outreach email. Maps search + website extraction per lead. Compatible with Instantly or Smartlead for sequenced sending.