Built to make enrichment extraordinarily intelligent.
An AI agent that descends the waterfall, judges signals, and learns each domain. The cascade is the best way to enrich contacts with AI.
1def enrich(linkedin_url: str) -> Result:
2 # AI agent descends the waterfall, exits early on match
3 seeds = extract_seeds(linkedin_url)
4
5 # Tier 0 — 20+ free signals
6 signals = await gather_free_signals(seeds)
7 candidate = await ai_judge.fuse(signals)
8
9 # SMTP probe with gateway detection
10 verified = await smtp.probe(candidate, mx_aware=True)
11
12 if verified:
13 domain_memory.learn(seeds.domain, candidate.pattern)
14 return Result(email=candidate, tier=0, exit="verified")
15
16 # otherwise descend to T1 → T2 → T3 → T4
17 return await descend(candidate, tier=1)
C
Cascade Agent
RUNNING
✓
Extracted 8 seed permutations
✓
Gathered 20+ free signals
✓
AI judge fused signals → ranked candidate
◴
SMTP probe with gateway detection
○
Verify domain pattern, write to memory
○
Return result + tier_exited
Pending result
→ jane.doe@acme.com · tier 0 exit · cost $0.00
// what cascade does
An AI agent. Not a chatbot.
The agent decides which tier to run, fuses signals, ranks LinkedIn sources, and learns every domain it touches. No prompt engineering required.
// AGENT
Runs autonomously
The AI agent decides which tier to run, when to stop, and what to verify. No prompts required.
// JUDGE
Fuses weak signals
Twenty-plus public-records signals are weighed and ranked. The AI judge produces one candidate per row.
// LEARNS
Domain memory
Every successful exit teaches the agent the domain's pattern. Next call on that domain is free.
Try the AI agent.
Free tier · 200 enrichments/month · no credit card required.