The Problem
Apollo.io enrichment data goes stale fast. Job titles change, people switch companies, and domains expire. Teams running outbound at scale see bounce rates climb past 5-8% because Apollo's database lags behind reality. High bounce rates tank sender reputation, trigger ESP throttling, and waste credits on dead leads. Apollo charges $49/mo+ and still delivers contacts that bounced three months ago.
The Scavio Solution
Before sending any email, run a quick Google search for the prospect name plus company. If the person still appears on the company's team page, LinkedIn, or recent press, the contact is likely valid. If search returns zero association between the person and the domain, flag for removal. This pre-send verification layer catches stale contacts that Apollo's database missed and keeps bounce rates under 2%.
Before
Before adding search verification, a 10,000-contact outbound campaign had a 7.2% bounce rate. ESP flagged the domain after week two. The team spent 3 days warming a new sending domain and lost pipeline momentum. Apollo's built-in verification missed 40% of the bounces.
After
After adding Scavio search verification as a pre-send check, bounce rate dropped to 1.8%. Each contact costs $0.005 to verify. 10,000 contacts verified for $50, cheaper than one month of a dedicated verification tool. Domain reputation stayed clean across 6 consecutive campaigns.
Who It Is For
B2B sales teams and outbound agencies using Apollo.io who need to reduce bounce rates and protect sender domain reputation before launching campaigns.
Key Benefits
- Pre-send verification catches stale Apollo contacts
- Bounce rate reduction from 7%+ to under 2%
- 10,000 contacts verified for $50 at $0.005 each
- Protects sender domain reputation from ESP throttling
- Supplements Apollo's built-in verification with live web signals
Python Example
import requests, os
H = {'x-api-key': os.environ['SCAVIO_API_KEY']}
def verify_contact(name: str, company: str, domain: str) -> dict:
query = f'{name} {company} {domain}'
r = requests.post('https://api.scavio.dev/api/v1/search', headers=H,
json={'platform': 'google', 'query': query}, timeout=10).json()
organic = r.get('organic', [])
matches = [o for o in organic if domain.lower() in o.get('link', '').lower()
or name.lower() in o.get('title', '').lower()]
return {
'name': name, 'company': company,
'verified': len(matches) >= 1,
'confidence': min(len(matches) / 3, 1.0),
'signals': [m['title'][:80] for m in matches[:3]],
}
contacts = [
('Jane Smith', 'Acme Corp', 'acme.com'),
('John Doe', 'Old Startup', 'oldstartup.io'),
]
for name, company, domain in contacts:
result = verify_contact(name, company, domain)
status = 'VALID' if result['verified'] else 'STALE'
print(f'[{status}] {name} @ {company} (confidence: {result["confidence"]:.0%})')JavaScript Example
const H = { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' };
async function verifyContact(name, company, domain) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST', headers: H,
body: JSON.stringify({ platform: 'google', query: `${name} ${company} ${domain}` })
}).then(r => r.json());
const organic = r.organic || [];
const matches = organic.filter(o =>
(o.link || '').toLowerCase().includes(domain.toLowerCase()) ||
(o.title || '').toLowerCase().includes(name.toLowerCase()));
return {
name, company, verified: matches.length >= 1,
confidence: Math.min(matches.length / 3, 1),
signals: matches.slice(0, 3).map(m => m.title.slice(0, 80)),
};
}
const result = await verifyContact('Jane Smith', 'Acme Corp', 'acme.com');
console.log(`[${result.verified ? 'VALID' : 'STALE'}] ${result.name} @ ${result.company}`);Platforms Used
Web search with knowledge graph, PAA, and AI overviews