Cold email to e-commerce stores works better with enriched data. Instead of blasting generic messages, this pipeline takes a list of store domains and enriches each with product count estimates, tech stack signals, and competitive positioning. Each enrichment query costs $0.005.
Prerequisites
- Python 3.8+
- requests library
- A Scavio API key from scavio.dev
- A list of e-commerce domains to enrich
Walkthrough
Step 1: Enrich e-commerce domains with search data
Search for each domain to find store details, reviews, and market positioning.
import os, requests, json, csv
from datetime import datetime
API_KEY = os.environ['SCAVIO_API_KEY']
SH = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}
TARGET_DOMAINS = [
'allbirds.com',
'brooklinen.com',
'chubbiesshorts.com',
]
def enrich_ecommerce(domain):
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': f'site:{domain}', 'country_code': 'us'}, timeout=10).json()
organic = data.get('organic_results', [])
# Basic enrichment
enriched = {
'domain': domain,
'indexed_pages': len(organic),
'title': organic[0].get('title', '') if organic else '',
'description': organic[0].get('snippet', '')[:120] if organic else '',
'product_pages': sum(1 for r in organic if any(w in r.get('link', '').lower() for w in ['/product', '/shop', '/collection'])),
'has_blog': any('/blog' in r.get('link', '').lower() for r in organic),
}
# Tech stack signals from snippets
all_text = ' '.join(r.get('snippet', '') for r in organic).lower()
if 'shopify' in all_text: enriched['platform'] = 'Shopify'
elif 'woocommerce' in all_text: enriched['platform'] = 'WooCommerce'
elif 'bigcommerce' in all_text: enriched['platform'] = 'BigCommerce'
else: enriched['platform'] = 'Unknown'
return enriched
for domain in TARGET_DOMAINS:
info = enrich_ecommerce(domain)
print(f' {domain:25} | Pages: {info["indexed_pages"]} | Products: {info["product_pages"]} | Blog: {info["has_blog"]}')
print(f' Platform: {info["platform"]} | {info["title"][:45]}')
print(f'\nCost: ${len(TARGET_DOMAINS) * 0.005:.3f}')Step 2: Add competitive context
Find how each store ranks for key terms and who their competitors are.
def competitive_context(domain):
# Search for brand mentions
brand = domain.split('.')[0]
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': f'{brand} review', 'country_code': 'us'}, timeout=10).json()
organic = data.get('organic_results', [])
review_mentions = sum(1 for r in organic if domain in r.get('link', '').lower())
competitor_domains = set()
for r in organic:
link = r.get('link', '')
if domain not in link and any(ext in link for ext in ['.com', '.co']):
comp_domain = link.split('//')[1].split('/')[0] if '//' in link else ''
if comp_domain and 'google' not in comp_domain and 'youtube' not in comp_domain:
competitor_domains.add(comp_domain)
return {
'brand_review_presence': review_mentions,
'competitor_domains': list(competitor_domains)[:5],
'total_review_results': len(organic),
}
print(f'\n=== Competitive Context ===')
for domain in TARGET_DOMAINS:
ctx = competitive_context(domain)
print(f' {domain:25} | Reviews: {ctx["brand_review_presence"]}/{ctx["total_review_results"]}')
if ctx['competitor_domains']:
print(f' Competitors: {", ".join(ctx["competitor_domains"][:3])}')
print(f'\nAdditional cost: ${len(TARGET_DOMAINS) * 0.005:.3f}')Step 3: Export enriched list for cold email
Generate the enriched CSV ready for cold email campaigns.
def build_outreach_list(domains):
leads = []
for domain in domains:
info = enrich_ecommerce(domain)
ctx = competitive_context(domain)
leads.append({**info, **ctx})
# Export
filename = f'ecommerce_leads_{datetime.now().strftime("%Y%m%d")}.csv'
with open(filename, 'w', newline='') as f:
fields = ['domain', 'title', 'platform', 'indexed_pages', 'product_pages', 'has_blog', 'brand_review_presence']
writer = csv.DictWriter(f, fieldnames=fields)
writer.writeheader()
for lead in leads:
writer.writerow({k: lead.get(k, '') for k in fields})
print(f'\n=== E-Commerce Enrichment Summary ===')
print(f' Domains enriched: {len(leads)}')
print(f' Shopify stores: {sum(1 for l in leads if l["platform"] == "Shopify")}')
print(f' With blog: {sum(1 for l in leads if l["has_blog"])}')
print(f' Exported to: {filename}')
print(f'\n Cost: ${len(domains) * 2 * 0.005:.3f} (2 queries per domain)')
print(f' For 100 domains: ${100 * 2 * 0.005:.2f}')
print(f' vs. Clearbit enrichment: $0.20-1.00/lead')
build_outreach_list(TARGET_DOMAINS)Python Example
import os, requests
SH = {'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'}
def enrich(domain):
data = requests.post('https://api.scavio.dev/api/v1/search',
headers=SH, json={'query': f'site:{domain}', 'country_code': 'us'}, timeout=10).json()
results = data.get('organic_results', [])
print(f'{domain}: {len(results)} indexed pages')
enrich('allbirds.com')
print('Cost: $0.005')JavaScript Example
const SH = { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' };
const data = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: SH,
body: JSON.stringify({ query: 'site:allbirds.com', country_code: 'us' })
}).then(r => r.json());
console.log(`Indexed pages: ${(data.organic_results || []).length}`);Expected Output
allbirds.com | Pages: 10 | Products: 4 | Blog: True
Platform: Shopify | Allbirds: Sustainable Shoes and Clothing
brooklinen.com | Pages: 10 | Products: 5 | Blog: True
Platform: Shopify | Brooklinen: Luxury Bedding and Towels
chubbiesshorts.com | Pages: 8 | Products: 3 | Blog: False
Platform: Shopify | Chubbies: The Shorts Company
Cost: $0.015
=== E-Commerce Enrichment Summary ===
Domains enriched: 3
Shopify stores: 3
With blog: 2
Cost: $0.030 (2 queries per domain)
For 100 domains: $1.00
vs. Clearbit enrichment: $0.20-1.00/lead