Overview
Outbound sales teams waste time on unqualified leads because CRM data is stale. This workflow triggers on each new lead (via webhook or batch), searches for the company and contact on Google, extracts signals like company size, recent funding, tech stack mentions, and job postings, and appends enrichment data to the lead record before routing to a sales rep. Each enrichment costs 1-2 credits ($0.005-$0.01) depending on search depth. Replaces expensive enrichment tools that charge $0.10+ per record.
Trigger
New lead webhook or batch import
Schedule
On-demand
Workflow Steps
Receive Lead Data
Accept the lead record with company name, domain, and contact name from the webhook or batch file.
Search Company Profile
Call Scavio search on Google for the company name to find recent news, funding, and company size signals.
Extract Enrichment Signals
Parse search results for revenue indicators, employee count, recent press, tech stack, and hiring signals.
Score Lead Quality
Assign a lead score based on enrichment signals: funded companies with hiring activity score highest.
Route Enriched Lead
Append enrichment data to the lead record and route to the appropriate sales rep or sequence.
Python Implementation
import requests, os, json, re
API_KEY = os.environ["SCAVIO_API_KEY"]
SH = {"x-api-key": API_KEY, "Content-Type": "application/json"}
SIGNAL_PATTERNS = {
"funding": r"raised|funding|series [a-d]|seed round|venture",
"hiring": r"hiring|job opening|careers|we.re growing",
"enterprise": r"fortune 500|enterprise|large.scale",
"recent_news": r"announced|launched|partnership|acquired",
}
def search_company(company: str) -> list:
resp = requests.post(
"https://api.scavio.dev/api/v1/search",
headers=SH,
json={"query": f"{company} company news 2026", "platform": "google"},
timeout=15,
)
resp.raise_for_status()
return resp.json().get("organic", [])
def extract_signals(results: list) -> dict:
signals = {k: False for k in SIGNAL_PATTERNS}
snippets = " ".join(r.get("snippet", "") for r in results).lower()
for signal, pattern in SIGNAL_PATTERNS.items():
if re.search(pattern, snippets, re.IGNORECASE):
signals[signal] = True
return signals
def score_lead(signals: dict) -> int:
score = 50
if signals.get("funding"):
score += 25
if signals.get("hiring"):
score += 15
if signals.get("enterprise"):
score += 10
if signals.get("recent_news"):
score += 5
return min(score, 100)
def enrich_lead(lead: dict) -> dict:
results = search_company(lead["company"])
signals = extract_signals(results)
lead_score = score_lead(signals)
return {
**lead,
"enrichment": {
"signals": signals,
"lead_score": lead_score,
"top_results": [{"title": r.get("title", ""), "url": r.get("url", "")} for r in results[:3]],
},
}
# Example: process a batch of leads
leads = [
{"company": "Vercel", "contact": "Jane Doe", "email": "jane@vercel.com"},
{"company": "Supabase", "contact": "John Smith", "email": "john@supabase.com"},
]
for lead in leads:
enriched = enrich_lead(lead)
score = enriched["enrichment"]["lead_score"]
signals = enriched["enrichment"]["signals"]
active = [k for k, v in signals.items() if v]
print(f"{lead['company']}: score={score}, signals={active}")JavaScript Implementation
const SH = {'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json'};
const SIGNAL_PATTERNS = {
funding: /raised|funding|series [a-d]|seed round|venture/i,
hiring: /hiring|job opening|careers|we're growing/i,
enterprise: /fortune 500|enterprise|large.scale/i,
recentNews: /announced|launched|partnership|acquired/i,
};
async function searchCompany(company) {
const r = await fetch('https://api.scavio.dev/api/v1/search', {method:'POST', headers:SH, body:JSON.stringify({query:company+' company news 2026', platform:'google'})});
return (await r.json()).organic || [];
}
function extractSignals(results) {
const text = results.map(r=>r.snippet||'').join(' ');
const signals = {};
for (const [key, pattern] of Object.entries(SIGNAL_PATTERNS)) {
signals[key] = pattern.test(text);
}
return signals;
}
function scoreLead(signals) {
let score = 50;
if (signals.funding) score += 25;
if (signals.hiring) score += 15;
if (signals.enterprise) score += 10;
if (signals.recentNews) score += 5;
return Math.min(score, 100);
}
const leads = [
{company:'Vercel', contact:'Jane Doe', email:'jane@vercel.com'},
{company:'Supabase', contact:'John Smith', email:'john@supabase.com'},
];
for (const lead of leads) {
const results = await searchCompany(lead.company);
const signals = extractSignals(results);
const score = scoreLead(signals);
const active = Object.entries(signals).filter(([k,v])=>v).map(([k])=>k);
console.log(lead.company+': score='+score+', signals='+JSON.stringify(active));
}Platforms Used
Web search with knowledge graph, PAA, and AI overviews