B2B Data Decay: Verify Before You Send
B2B contact data decays 30-40% per year. Apollo and ZoomInfo databases go stale. Using search API to verify data freshness before outreach.
B2B contact data decays at 30-40% per year. People change jobs, companies rebrand, phone numbers get reassigned, and email addresses bounce. If you are running outreach campaigns on a database you bought or built six months ago, roughly one in five contacts is already stale. That means wasted send volume, damaged sender reputation, and pipeline metrics built on noise.
Why databases go stale faster than expected
Apollo.io ($49+/mo annual) and ZoomInfo claim databases of 200M+ contacts. The coverage is real, but freshness is the problem. These platforms update records when users contribute data or when their crawlers detect changes. The lag between a person changing roles and the database reflecting it ranges from weeks to months.
- Average job tenure in tech is 2.3 years. That means 43% of contacts change roles annually.
- Company domain changes (acquisitions, rebrands) invalidate entire batches of email addresses overnight.
- LinkedIn profile updates propagate to databases with variable delay -- sometimes days, sometimes never.
- Smaller companies and individual contributors are updated least frequently because they generate less crawl signal.
The cost of stale data
Sending cold emails to outdated contacts is not just ineffective -- it actively damages your infrastructure:
- Bounce rate above 5%: Email providers flag your domain. Above 10%, you risk being blocklisted.
- Wrong-person replies: Reaching someone who left the company six months ago looks unprofessional and burns the account for future outreach.
- Wasted sequences: A 5-step email sequence to 1,000 contacts costs real money in sending tools (Instantly, Smartlead, etc.). If 300 of those contacts are invalid, you paid for 1,500 wasted sends.
Verification before outreach
The fix is to verify contacts against live data before loading them into a campaign. A search API lets you check whether a person still holds the title and works at the company your database claims.
import requests, os
API_KEY = os.environ["SCAVIO_API_KEY"]
def verify_contact(name: str, company: str, title: str) -> dict:
"""Search for a contact to verify current role."""
query = f"{name} {company} {title}"
resp = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"query": query, "num_results": 5},
)
results = resp.json().get("results", [])
# Check if any result confirms the current role
confirmed = False
evidence = []
for r in results:
snippet = r.get("snippet", "").lower()
if company.lower() in snippet and name.lower().split()[0] in snippet:
confirmed = True
evidence.append(r["url"])
return {
"name": name,
"company": company,
"title": title,
"verified": confirmed,
"sources": evidence,
}
# Verify 100 contacts before campaign: 100 x $0.005 = $0.50
contacts = [
{"name": "Sarah Chen", "company": "Stripe", "title": "Head of Partnerships"},
{"name": "James Okafor", "company": "Datadog", "title": "VP Engineering"},
]
for c in contacts:
result = verify_contact(c["name"], c["company"], c["title"])
status = "CONFIRMED" if result["verified"] else "STALE - check manually"
print(f"{c['name']} at {c['company']}: {status}")Enrichment: filling gaps in your database
Beyond verification, search can enrich thin records. Apollo might give you a name and email but no context about the company's current priorities, recent funding, or tech stack. A targeted search fills these gaps:
def enrich_company(company: str) -> dict:
"""Pull recent context about a company for personalized outreach."""
queries = {
"recent_news": f"{company} news 2026",
"tech_stack": f"{company} engineering blog tech stack",
"funding": f"{company} funding round 2026",
}
enrichment = {}
for category, query in queries.items():
resp = requests.post(
"https://api.scavio.dev/api/v1/search",
headers={"x-api-key": API_KEY},
json={"query": query, "num_results": 3},
)
results = resp.json().get("results", [])
enrichment[category] = [
{"title": r["title"], "snippet": r.get("snippet", "")}
for r in results
]
return enrichment
# 3 searches per company x $0.005 = $0.015/company
# Enrich 200 target accounts = $3.00
context = enrich_company("Datadog")
for cat, items in context.items():
if items:
print(f"{cat}: {items[0]['title']}")Building a pre-campaign pipeline
The practical workflow before any outreach campaign:
- Step 1: Export contacts from Apollo, Hunter ($34+/mo annual), or your CRM.
- Step 2: Run verification searches. Flag contacts where the name + company + title combination has no recent search evidence. Cost: $0.005/contact.
- Step 3: For verified contacts, run enrichment searches to gather recent company news and context. Cost: $0.015/contact.
- Step 4: Remove or manually review flagged contacts. Load verified + enriched contacts into your sequence tool.
For a 500-contact campaign: verification costs $2.50, enrichment costs $7.50. Total: $10. Compare that to the cost of a bounced campaign damaging your domain reputation.
Limitations of search-based verification
Search verification is not foolproof. It catches the obvious cases -- someone who left a company and now appears at a new one in search results. It misses:
- People with low online presence (no LinkedIn activity, no company bio page). Absence of evidence is not evidence of absence.
- Very recent role changes (last 1-2 weeks) that have not been indexed yet.
- Common names where search results are ambiguous.
For these edge cases, email verification tools (NeverBounce, ZeroBounce) complement search-based verification. The combination of "is this person still at this company?" (search) and "does this email address accept mail?" (email verification) catches the majority of stale records.
The math that matters
A 1,000-contact campaign with 35% data decay means 350 wasted sends. At $0.03/send (typical for Instantly or Smartlead), that is $10.50 wasted per step, $52.50 for a 5-step sequence. Add the domain reputation damage and the math is clear: spending $5-15 on pre-campaign verification saves multiples in wasted outreach and deliverability recovery.