waterfall-enrich-contacts
Waterfall-Enrich Contacts with External Providers
Fill missing emails, phone numbers, and job titles on HubSpot contacts using an external enrichment provider, then write results back with a full audit trail. The provider layer is pluggable: FullEnrich (a waterfall aggregator that queries 20+ upstream sources until one hits) is the default, with Apollo, Hunter, and Dropcontact adapters included and a template for whatever provider your team already pays for.
Why This Matters
The internal enrichment skills (/enrich-company-name, /enrich-industry, /backfill-geo-data) only move data the portal already has. When a contact's email, direct dial, or title simply isn't anywhere in HubSpot, external enrichment is the only fix — and it costs real money per lookup, which is why this skill is built around cost caps, previews, and typed confirmations.
Provider Landscape
| Provider | Adapter | Strength | Model |
|---|---|---|---|
| FullEnrich (default) | providers/fullenrich.py |
Waterfall across 20+ sources — best hit rates for email + mobile | Credits per lookup, async bulk API |
| Apollo | providers/apollo.py |
Large B2B database, titles + firmographics | Credits; personal-data reveals plan-gated |
| Hunter | providers/hunter.py |
Email finding by name+domain, confidence scores | Requests per plan; email only |
| Dropcontact | providers/dropcontact.py |
GDPR-first, algorithmic (no stored database) | Credits, async |
| Your provider | copy providers/_template.py |
Whatever you already use | — |
| Mock (testing only) | providers/mock.py |
Deterministic fake data for /sandbox-self-test and dry runs — no network |
Free; never use on production |
| HubSpot Breeze Intelligence | (native, no adapter) | In-platform enrichment + form shortening | Credit add-on; programmatic API access is enterprise-gated — which is exactly why this skill defaults to provider-agnostic adapters |