Loading...
Loading...
Optimize provider selection, routing, and credit usage across 150+ enrichment sources for company/contact intelligence.
npx skill4agent add gtmagents/gtm-agents data-sourcingTier 0 (Free): Native operations, cached data, manual inputs
Tier 1 (0.5 credits): Validation, verification, basic lookups
Tier 2 (1-2 credits): Standard enrichments (Apollo, Hunter, Clearbit)
Tier 3 (2-3 credits): Premium data (ZoomInfo, technographics, intent)
Tier 4 (3-5 credits): Enterprise intelligence (PitchBook, custom AI)
Tier 5 (5-10 credits): Specialized services (video generation, deep AI research)# Process in batches for volume discounts
if record_count > 1000:
use_provider("apollo_bulk") # 10-30% discount
elif record_count > 100:
use_parallel_processing()
else:
use_standard_processing()waterfall_sequence = [
{"provider": "cache", "credits": 0},
{"provider": "apollo", "credits": 1.5, "stop_if_success": True},
{"provider": "hunter", "credits": 1.2, "stop_if_success": True},
{"provider": "bettercontact", "credits": 3, "stop_if_success": True},
{"provider": "ai_research", "credits": 5, "last_resort": True}
]Priority: Success rate over cost
Sequence:
1. BetterContact (aggregates 10+ sources)
2. ZoomInfo (if enterprise)
3. Apollo + Hunter + RocketReach
4. AI web research
Expected Success: 95%+
Average Cost: 8-12 creditsPriority: Good success with reasonable cost
Sequence:
1. Apollo.io
2. Hunter (if domain match)
3. RocketReach (if name match)
4. Stop or continue based on confidence
Expected Success: 80%
Average Cost: 3-5 creditsPriority: Minimize cost
Sequence:
1. Cache check
2. Hunter (domain only)
3. Free sources (Google, LinkedIn public)
4. Stop at first result
Expected Success: 60%
Average Cost: 1-2 creditsdef calculate_data_quality_score(data, sources):
score = 0
# Multi-source validation (30 points)
if len(sources) > 1:
score += min(len(sources) * 10, 30)
# Data completeness (30 points)
required_fields = ["email", "phone", "title", "company"]
score += sum(10 for field in required_fields if data.get(field))
# Verification status (20 points)
if data.get("email_verified"):
score += 10
if data.get("phone_verified"):
score += 10
# Recency (20 points)
days_old = get_data_age(data)
if days_old < 30:
score += 20
elif days_old < 90:
score += 10
return score# Combine AI and traditional providers
def hybrid_enrichment(company):
# Fast, cheap base data
base = clearbit_lookup(company)
# AI for missing pieces
if not base.get("description"):
base["description"] = ai_generate_description(company)
# Premium for high-value
if is_enterprise_account(base):
base.update(zoominfo_enrich(company))
return base# Enrich in stages based on engagement
def progressive_enrichment(lead):
# Stage 1: Basic (on import)
if lead.stage == "new":
return basic_enrichment(lead) # 1-2 credits
# Stage 2: Engaged (opened email)
elif lead.stage == "engaged":
return standard_enrichment(lead) # 3-5 credits
# Stage 3: Qualified (booked meeting)
elif lead.stage == "qualified":
return comprehensive_enrichment(lead) # 10+ creditsreferences/provider_cheat_sheet.mdscripts/cost_calculator.py// JavaScript/Node.js template
const enrichContact = async (name, company) => {
// Check cache first
const cached = await checkCache(name, company);
if (cached) return cached;
// Try providers in sequence
const providers = ['apollo', 'hunter', 'rocketreach'];
for (const provider of providers) {
try {
const result = await callProvider(provider, {name, company});
if (result.email) {
await saveToCache(result);
return result;
}
} catch (error) {
console.log(`${provider} failed, trying next...`);
}
}
// Fallback to AI research
return await aiResearch(name, company);
};