Loading...
Loading...
Always-on callable lead pipeline for BDRs: HubSpot lead pull → Apollo phone lookup → Clay waterfall enrichment → HubSpot sync → callable queue. Ensures 50+ daily dials by maintaining verified phone inventory. Runs scheduled Mon & Wed 6:15 AM (between prospect-enrich 6:00 and prospect-refresh 6:30). Use when: 'verify phones', 'phone waterfall', 'callable leads', 'who can I call', 'dial list', 'always have someone to call', 'phone check', 'enrich phones'.
npx skill4agent add scientiacapital/skills phone-verification-waterfallSTAGE 1: PULL LEADS STAGE 2: APOLLO PHONE STAGE 3: CLAY WATERFALL STAGE 4: HUBSPOT SYNC STAGE 5: CALLABLE QUEUE
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
HubSpot Query → Apollo People Match → Clay Enrichment → Update Phone Field → Prioritized CLI
phone = null/empty → (Name + Email + Org) → (Multiple Providers) → (API bulk update) → ICP Score Sort
lifecycle_stage → Return: Verified # → Return: Verified # → Mark: enriched_at → Intent Signals
!= 'customer' → Success Rate: 40-50% → Success Rate: 30-40% → (Contact & Company) → Output: CSV + Chat
No Excluded Owner → (No cost) → (Find + Enrich) → Log completion → Time-to-dial: <5s
Golden Rules Pass → → → →Criteria (ALL must match):
- phone IS NULL OR phone = '' (empty string)
- lifecyclestage != 'customer'
- NOT hubspot_owner_id IN (82625923, 423155215, 190030668)
(Exclude AEs: Lex Evans, Ron Epstein, Phillip Sandler)
Golden Rules Hard Gate (SKIP if ANY match):
- first_conversion contains ['Pearl', 'setup', 'Connect', 'signup']
(Existing product engagers — not cold prospects)
- company.device_count >= 1
(Already owns equipment — likely existing relationship)
- is_channel = true
(Channel partners excluded)
- engagement_overview contains ['Pearl', 'trial', 'demo', 'customer']
(Existing touchpoints)atl_btl_tier = 'ATL' | 'BTL' | 'GRAY'hubspot_search_contactsInput: contact_id, first_name, last_name, email, company_name
↓
apollo_people_match(
first_name: "{first_name}",
last_name: "{last_name}",
email: "{email}",
organization_name: "{company_name}",
domain: "{company_domain}",
reveal_personal_emails: false
)
↓
Output: phone (mobile_phone or corporate_phone, verified)
↓
Match rate: 40-50% success (Apollo baseline)
↓
NO COST — Apollo is included freeapollo_phone_source = trueapollo_people_matchfind-and-enrich-contacts-at-company(
companyIdentifier: "{company_domain}",
contactFilters: {
job_title_keywords: extracted from hs_job_title,
locations: optional if available
},
dataPoints: {
contactDataPoints: [
{ type: "Email" },
{ type: "Summarize Work History" }
]
}
)add-contact-data-pointsadd-contact-data-points(
taskId: "{from find-and-enrich response}",
dataPoints: [
{ type: "Custom", customDataPoint: "phone number from multiple providers" }
],
entityIds: [extracted contact IDs]
)find-and-enrich-list-of-contacts(
contactIdentifiers: [
{
contactName: "{first_name} {last_name}",
companyIdentifier: "{company_domain}"
}
],
dataPoints: {
contactDataPoints: [
{ type: "Custom", customDataPoint: "verified phone number" }
]
}
)find-and-enrich-contacts-at-companyfind-and-enrich-list-of-contactsBatch update HubSpot contacts:
For each contact:
UPDATE contact {contact_id}
SET:
phone = "{verified_phone}"
phone_source = "apollo" OR "clay" (track origin)
phone_verified_at = NOW()
phone_waterfall_pass = true
Log event to company:
ADD ACTIVITY: "Phone verified via Apollo/Clay waterfall"
(Creates audit trail for Sales)phone_sourcephone_verified_athubspot_contacts_updateHigher Ed ..................... 90
Courts/Legal ................... 85
Government ..................... 80
Corporate AV ................... 80
Healthcare ..................... 75
Houses of Worship .............. 70
K-12 Schools ................... 65═══════════════════════════════════════════════════════════════════════════════
CALLABLE QUEUE — Phone Waterfall Results
Generated: {timestamp} | Success Rate: {70-80%}
═══════════════════════════════════════════════════════════════════════════════
SUMMARY:
Total Leads Pulled: {N}
Apollo Matches: {X} ({X%})
Clay Enrichments: {Y} ({Y%})
Total Verified Phones: {X+Y} ({(X+Y)%})
HubSpot Updated: {X+Y}
ATL Contacts: {A} ({A%})
Gray Zone: {G} ({G%})
BTL Contacts: {B} ({B%})
READY TO DIAL (sorted ATL first, then ICP score + intent):
# │ NAME │ TIER │ TITLE │ COMPANY │ PHONE │ ICP │ VERTICAL │ INTENT SIGNAL
────┼──────────────────┼──────┼──────────────────┼──────────────────┼──────────────┼──────┼──────────────┼─────────────────
1 │ Jane Smith │ ATL │ VP IT/AV │ Stanford Univ │ (650)xxx-xxx │ 93 │ Higher Ed │ New AV role + hiring
2 │ Mike Johnson │ ATL │ Dir Technology │ Federal Courts │ (202)xxx-xxx │ 87 │ Courts/Legal │ Extron aging out
3 │ Sarah Chen │ GRAY │ Manager IT │ UCSF Medical │ (415)xxx-xxx │ 78 │ Healthcare │ Facility upgrade
4 │ David Lee │ BTL │ AV Technician │ Cisco Corp │ (408)xxx-xxx │ 82 │ Corp AV │ Meeting room reno
5 │ ... │ ... │ ... │ ... │ ... │ ... │ ... │ ...
═══════════════════════════════════════════════════════════════════════════════
DIALER QUICK LINKS:
- Download CSV: [queue.csv]
- Import to Dialpad: [sync button]
- Import to Aircall: [sync button]
- By Company: [grouped view]
- By Vertical: [vertical view]
- By ATL/BTL Tier: [tier view]
NEXT STEPS:
1. Prioritize ATL contacts first (decision-makers with budget authority)
2. Review GRAY zone contacts for manual budget authority verification
3. Import to your dialpad tool
4. Dial 50+ per day, log outcomes, let Sales Engagement cadences trigger
═══════════════════════════════════════════════════════════════════════════════IF reply_scan_found_lead AND lead.phone IS NULL
IF lead.icp_score >= 80 AND lead.priority = 'high'
→ TRIGGER immediate apollo_people_match(lead)
→ IF success: append phone, mark urgent_dial = true
→ ELSE: queue for next waterfall run
ELSE
→ Queue for next scheduled waterfall (Mon or Wed 6:15 AM)MONDAY MORNING SEQUENCE:
6:00 AM → bdr-v3-prospect-enrich (refresh prospect company data)
6:15 AM → phone-verification-waterfall-skill (verify phones on refreshed data)
6:30 AM → bdr-v3-prospect-refresh (refresh deal velocity metrics)
WEDNESDAY MORNING SEQUENCE (mid-week refresh):
6:00 AM → bdr-v3-prospect-enrich (refresh prospect company data)
6:15 AM → bdr-v3-phone-waterfall-midweek (verify phones on mid-week refreshed data)
6:30 AM → bdr-v3-prospect-refresh (refresh deal velocity metrics)bdr-v3-phone-waterfall-midweekhubspot_search_contactshubspot_get_contactcrm_search_customersapollo_people_matchfind-and-enrich-contacts-at-companyadd-contact-data-pointsfind-and-enrich-list-of-contactsget-existing-searchhubspot_contacts_updateprospect-research-to-cadence-skillsales-revenue-skillhubspot-revops-skillCLAUDE.md § ATL/BTL Classification v1.0bdr-v3-prospect-enrichbdr-v3-phone-waterfall-midweekbdr-v3-prospect-refreshbdr-v3-phone-waterfallbdr-v3-phone-waterfall-midweek✅ Phone Waterfall Complete (Mon 6:15 AM)
Pulled: {N} leads
Verified: {X+Y} phones ({%})
HubSpot Sync: ✓
Queue: Ready to dial
Leads/hour: {rate}⚠️ Phone Waterfall Partial (Mon 6:15 AM)
Apollo completed ({X%})
Clay failing — check credits
Manual action: Continue with Apollo-only queue| Condition | Value | Action |
|---|---|---|
| 'customer' | SKIP |
| contains 'Pearl' OR 'setup' OR 'Connect' | SKIP |
Company | >= 1 | SKIP |
Company | true | SKIP |
| 82625923, 423155215, 190030668 | SKIP (AEs: Lex Evans, Ron Epstein, Phillip Sandler) |
INPUT: HubSpot query finds 247 contacts with phone = null and meeting Golden Rules
APOLLO STAGE (2 min):
Batched 247 into 5 parallel requests
Success: 118 phones verified (47.8%)
→ Synced 118 to HubSpot immediately
→ Remaining: 129 needs Clay
CLAY STAGE (4 min):
Batched 129 into company+title groups
Ran find-and-enrich-contacts-at-company for each company
Waterfall returned phones for 41 additional contacts (31.8%)
→ Synced 41 to HubSpot
→ Final miss: 88 (no phone found)
SYNC STAGE (30 sec):
HubSpot batch updated 159 contacts (118 Apollo + 41 Clay)
Tagged phone_source = 'apollo' or 'clay'
QUEUE STAGE (30 sec):
Sorted 159 by ICP score (Higher Ed first, K-12 last)
Output: Callable queue ready for 50+ dials
TOTAL TIME: 7 min 30 sec | CALLABLE: 159 verified | SUCCESS: 64.4%