Fill the gaps: email, phone, LinkedIn, title.
Give it a name and company, or a domain, and get contacts or firmographics back. Waterfalls across your tools.
Inside: The waterfall logic across your tools and the fields it fills.
Install it in one line, or paste it in.
~/.claude/skills/ and runs automatically when it is relevant.Connect your context. Set it to your motion.
emails, phones, LinkedIn URLs, and titles, run as a waterfall.
headcount, funding, hiring signals, and technographic profile. Either source alone works at reduced coverage; both run the full waterfall.
To swap a provider, point the contact or company role at a different tool. The method does not change. Only the connector behind the role changes.
| Set this | What it is | Default / Example |
|---|---|---|
| Contact-enrichment tool | Resolves email, phone, LinkedIn, title from a name plus company | Any contact-waterfall provider |
| Company-enrichment tool | Returns headcount, funding, hiring intent, tech profile from a domain | Any company-data provider |
| Identity-validation tool | Cross-checks a returned LinkedIn URL against the input name plus company | Optional people-search tool |
| CRM | System of record you read from and write enriched fields back to | Optional |
| Waterfall order | The sequence providers are tried in for the same field | Cheapest provider first |
| Confidence tags | The labels attached to every returned value | verified_2_sourceverified_1_sourceinferrednot_found |
| Minimum confidence | The lowest confidence you accept for a given use | verified_1 for dialinginferred for research |
| Maximum spend | A per-run cost cap that stops the waterfall when reached | Set a dollar ceiling per run |
Everything the skill does, in full.
This is your data-fill agent. Give it a name and a company, and it finds the email, phone, LinkedIn URL, and title. Give it a domain, and it returns headcount, funding, a technographic profile, and hiring intent. It works one contact at a time or across a whole list, tries the cheapest provider first, and tags every value it returns with how confident it is. It never invents a value it could not find.
- 1The core pattern is a cost-aware waterfall. For any field, try providers in order, cheapest first, and stop the moment you get a confident answer.
- Read the input. For each row you need a name plus a company (contact mode) or a domain (company mode). Note fields already present so they are not re-bought.
- Run the contact waterfall. For email, phone, LinkedIn, and title, try providers in order. Take the first confident hit. Tag each field with its confidence.
- Run the company pass. For a domain, return headcount, funding, hiring signals, and the technographic profile.
- Discover the buying committee. For a "who are the decision makers" request, return the senior roles per account, each with confidence-tagged identifiers.
- Validate every LinkedIn URL. Cross-check the name and company on the profile against the input. If they do not match, do not return the URL.
- Track spend. Log credits per provider. If the run hits the cap, stop and return partial results with a note.
- Return confidence-tagged rows plus an audit of providers used, the confidence breakdown, and total cost.
- Confidence-tagged outputs. Every enriched field comes back with its source confidence, never a bare value.
- Identity validation on LinkedIn URLs before they ship. This blocks returning the wrong person.
- Cost-aware waterfall. The cheapest provider is tried first. Per-provider credit use is logged.
- Honest "not found." If a value cannot be found, return null plus not_found rather than guessing.
Enrichment Complete · 5 contacts processed Name | Email | Phone | Title -----------|---------------------------|--------------|------------------- Contact A | a@example.co (verified_2) | +1-555-0101 | VP Sales (verified) Contact B | b@example.co (verified_1) | not_found | CRO (inferred) Contact C | c@example.co (verified_2) | +1-555-0102 | CFO (verified) Contact E | not_found | not_found | not_found Audit: Confidence breakdown: 8 verified_2, 4 verified_1, 1 inferred, 3 not_found Total cost: within run cap Skip Contact E: source the LinkedIn URL manually before reaching out.
By default the waterfall tries providers cheapest-first and stops at the first confident hit, so the same field is never paid for twice. Confidence tags come from the providers: two independent sources is verified_2, one is verified_1, a pattern-derived guess is inferred, and a value no provider could confirm is not_found. Cost figures are the per-provider credit prices of the tools you connect. To change the economics, reorder the waterfall, swap in a cheaper provider, or lower the maximum spend.
Where an operator takes this next.
The manual run proves the waterfall works. Here is where it goes once you trust it.
The list stops being a spreadsheet and starts being a living record.
Wire a scheduled Claude task to run the waterfall the moment a new lead lands in Salesforce or HubSpot, so reps never work a blank record.
Chain the same cheapest-first provider order inside Clay, so the enrichment runs where your list already lives.
Have a scheduled task post the not_found rows to Slack each morning so someone can source them by hand before they go stale.
One skill is the on-ramp.
A single skill does one job. Chained into a playbook, or run as a full build, it becomes a system. Here is where this one plugs in.