phone-verification-waterfall
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'.
Packaged view
This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.
Install command
npx @skill-hub/cli install scientiacapital-skills-phone-verification-waterfall-skill
Repository
Skill path: active/phone-verification-waterfall-skill
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'.
Open repositoryBest for
Primary workflow: Ship Full Stack.
Technical facets: Full Stack, Testing.
Target audience: everyone.
License: Unknown.
Original source
Catalog source: SkillHub Club.
Repository owner: scientiacapital.
This is still a mirrored public skill entry. Review the repository before installing into production workflows.
What it helps with
- Install phone-verification-waterfall into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
- Review https://github.com/scientiacapital/skills before adding phone-verification-waterfall to shared team environments
- Use phone-verification-waterfall for development workflows
Works across
Favorites: 0.
Sub-skills: 0.
Aggregator: No.
Original source / Raw SKILL.md
---
name: "phone-verification-waterfall"
description: "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'."
---
<objective>
Maintain a continuously refreshed inventory of callable leads with verified phone numbers. Automates the waterfall from HubSpot lead identification → Apollo phone verification → Clay enrichment (for Apollo misses) → HubSpot sync. Ensures Tim ALWAYS has 50+ verified dial prospects queued and ready, eliminating "nobody to call" downtime and maximizing daily dial velocity.
Built on: Lead lifecycle → phone verification → queue prioritization by ICP + intent signals.
</objective>
<quick_start>
**Standalone run (manual trigger):**
"verify phones" or "phone waterfall" or "callable leads" or "who can I call" → pulls all HubSpot leads missing phones → enriches via Apollo + Clay → writes back to HubSpot → outputs sortable callable queue
**Scheduled run:**
Every Monday & Wednesday 6:15 AM (between prospect-enrich 6:00 AM and prospect-refresh 6:30 AM) — keeps phone inventory fresh twice-weekly and allows newly refreshed leads to be phone-verified before daily calls
**Trigger phrases:**
- "verify phones"
- "phone waterfall"
- "callable leads"
- "who can I call"
- "dial list"
- "always have someone to call"
- "phone check"
- "enrich phones"
</quick_start>
<success_criteria>
- HubSpot lead pull returns 100+ contacts missing phones from all ICP verticals
- Apollo phone lookup succeeds for 40-50% of contacts (baseline)
- Clay waterfall fills 60-70% of remaining Apollo misses
- HubSpot phone field updated for 70%+ of missing numbers
- Final callable queue contains 50+ contacts sorted by ICP score + intent
- Zero contacts belong to customers (lifecycle_stage = 'customer') — Golden Rules block them
- Zero contacts owned by Account Executives (Lex, Phil, Ron, Anthony) — no AE lead theft
- Zero channel partners or existing device owners included
- Execution time under 8 minutes (HubSpot → Apollo → Clay → sync)
</success_criteria>
<workflow>
## Pipeline Stages
```
STAGE 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 → → → →
```
## Stage 1: Pull Leads Needing Phones
**HubSpot Query:**
```
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 Classification Gate (applied after Golden Rules)
Classify each contact by job title using approved ATL/BTL definitions (see CLAUDE.md § ATL/BTL Classification v1.0):
**ATL Title Keywords (budget authority — PRIORITY DIAL):**
Chief (CIO, CTO, CFO, COO) • VP (AVP, SVP, EVP) • President • Provost • Vice Provost • Superintendent • Director (of IT, Technology, Facilities, Academic Technology, Procurement, Materials Mgmt, Medical Education, Court Administration) • Dean • Court Administrator • Clerk of Court • City Manager • County Manager • Senior Pastor • Executive Pastor
**BTL Title Keywords (no budget authority — LOWER PRIORITY):**
Technician • Specialist • Coordinator • Support • Administrator (Systems/Network/Database) • Engineer (AV/Network/Systems) • Operator • Instructor/Professor/Faculty • Designer • Assistant • Clerk (non-Court Admin) • Volunteer • Intern • Student • Resident • Help Desk
**NEVER ATL — Auto-classify BTL regardless of other signals:**
Warehouse Manager • Network Manager • Systems Administrator • AV Technician • Graphic Design Instructor • Program Administrator • Web Designer • Classroom Support • Lab Coordinator • Maintenance • Building Engineer • Multimedia Services Manager • Video Production Specialist • Streaming Crew
**Gray Zone — Flag for manual review:**
Manager (AV/Facilities/IT) — ATL only if reports to Director+ AND has delegated budget >$25K
Department Chair • Program Director • Director of Educational Technology
Tag each contact: `atl_btl_tier = 'ATL' | 'BTL' | 'GRAY'`
**Output:** Unsorted list of 100+ contacts with:
- contact_id (HubSpot)
- first_name, last_name
- email (primary business email)
- company_name
- hs_job_title
- hubspot_owner_id, hubspot_owner_name
- company.industry, company.num_employees, company.hs_lead_status
- first_conversion (for Golden Rules check)
**Tool:** `hubspot_search_contacts` with filters applied
</Stage 1>
## Stage 2: Apollo Phone Lookup
**For each contact from Stage 1, run in parallel batches:**
```
Input: 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 free
```
**Logic:**
- Apollo returns mobile_phone or corporate_phone (both acceptable for dial)
- If phone returned: tag contact `apollo_phone_source = true`
- If no phone: move to Stage 3 (Clay waterfall)
- Keep all results for final merge
**Tool:** `apollo_people_match` (batch parallel)
</Stage 2>
## Stage 3: Clay Waterfall Enrichment
**For contacts where Apollo returned NO phone, use Clay:**
**Option A: Company-level enrichment (recommended for speed)**
```
find-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" }
]
}
)
```
Then for contacts found, run `add-contact-data-points` to enrich phones:
```
add-contact-data-points(
taskId: "{from find-and-enrich response}",
dataPoints: [
{ type: "Custom", customDataPoint: "phone number from multiple providers" }
],
entityIds: [extracted contact IDs]
)
```
**Option B: Direct contact enrichment (if company approach yields few)**
```
find-and-enrich-list-of-contacts(
contactIdentifiers: [
{
contactName: "{first_name} {last_name}",
companyIdentifier: "{company_domain}"
}
],
dataPoints: {
contactDataPoints: [
{ type: "Custom", customDataPoint: "verified phone number" }
]
}
)
```
**Expected yield:**
- 30-40% of Apollo misses will get phones via Clay
- Combined success rate: 40-50% (Apollo) + 30-40% of remainder (Clay) ≈ 65-70% total
**Cost:** Clay credits consumed (monitor spend against monthly allocation)
**Tool:** `find-and-enrich-contacts-at-company` or `find-and-enrich-list-of-contacts`
</Stage 3>
## Stage 4: HubSpot Sync
**For all contacts with verified phones (Apollo + Clay combined):**
```
Batch 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)
```
**Sync strategy:**
- Use HubSpot API in batches (500 contacts per batch)
- Tag with `phone_source` (apollo, clay, manual)
- Tag with `phone_verified_at` timestamp
- Log completion to deal/company object if linked
**Tool:** HubSpot REST API (contacts batch update) via `hubspot_contacts_update` or direct HTTP
</Stage 4>
## Stage 5: Callable Queue & Prioritization
**Build final output sorted by:**
1. **ATL/BTL Tier (primary):** ATL contacts first, then GRAY, then BTL
2. **ICP Vertical Score (secondary):**
```
Higher Ed ..................... 90
Courts/Legal ................... 85
Government ..................... 80
Corporate AV ................... 80
Healthcare ..................... 75
Houses of Worship .............. 70
K-12 Schools ................... 65
```
3. **Intent Signals (tertiary):**
- Hiring active AV/IT roles: +15 points
- Recent facility expansion news: +10 points
- Tech stack shows obsolete AV (Extron, Matrox replacement signal): +12 points
- Published RFP or procurement event: +10 points
- Website mentions studio/control room/broadcast: +8 points
- Recent funding/acquisition: +5 points
4. **Engagement Recency (quaternary):**
- Touched within 30 days: top of queue
- Touched 31-60 days: middle
- No recent touch: bottom (but still callable)
**Final Callable Queue Format:**
```
═══════════════════════════════════════════════════════════════════════════════
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
═══════════════════════════════════════════════════════════════════════════════
```
**Output formats:**
- **Chat:** Rich formatted table (above) with top 10-20 by ICP score
- **CSV download:** Full queue with all data for import to dialpad/Aircall
- **By Vertical:** Secondary view grouped by industry for vertical hunting
- **Integration:** Link to import queue to Dialpad, Aircall, or sales engagement tool
**Tool:** Assemble from Stage 4 output, sort, format, and present
</Stage 5>
## Reply-Scan Integration
**Automated queuing from reply scans (10 AM, 1 PM, 3 PM):**
When reply scans discover new leads with missing phone numbers:
- These leads are automatically queued for the next scheduled phone waterfall run (Monday or Wednesday 6:15 AM)
- Standard enrichment workflow applies (Apollo → Clay waterfall → HubSpot sync)
**Urgent high-ICP lead handling:**
- For leads scoring 80+ ICP and deemed high-priority prospects, trigger an immediate single-contact Apollo lookup
- If Apollo succeeds, append phone to contact record and add to current day's dial queue
- If Apollo fails, hold for next scheduled waterfall run (standard workflow)
**Logic:**
```
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)
```
This ensures urgent prospects get callable status same-day while maintaining efficiency of batch enrichment for standard leads.
## Scheduled Automation
**Cron:** Every Monday & Wednesday 6:15 AM (UTC, or Tim's local timezone)
```
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)
```
**Why 6:15 AM Monday & Wednesday?**
- **Monday:** Sunday evening prospect research populates HubSpot with new prospects; 6:00 AM enrich ensures firmographic data is current; 6:15 AM phone verification catches those prospects while fresh; 6:30 AM velocity refresh gives Tim complete picture before first calls
- **Wednesday:** Mid-week lead refresh captures newly added prospects from Tue-Wed research; ensures stable of callable leads remains 50+ through week; separate task (`bdr-v3-phone-waterfall-midweek`) allows independent scheduling and monitoring
**Operational notes:**
- If phone waterfall takes >8 min, send Slack alert (indicates API slowness or large backlog)
- Log success rate to dashboard (aim for 65%+ total verified)
- If Apple/Apollo API rate limits hit, queue and retry with exponential backoff
- On error: skip Clay enrichment and return Apollo-only results (better to have some phones than none)
</workflow>
<dependencies>
## Required MCP Tools
### Epiphan CRM (primary data source)
- `hubspot_search_contacts` — Pull leads with phone = null, apply Golden Rules filters
- `hubspot_get_contact` — Retrieve full contact details if needed
- `crm_search_customers` — Check company against Epiphan customer database (device_count, channel flag)
### Apollo (phone verification stage 2)
- `apollo_people_match` — Look up person by name + email + company, return verified phone
- *(No cost — included in Apollo plan)*
### Clay (phone waterfall stage 3)
- `find-and-enrich-contacts-at-company` — Batch enrich by company + job title filters
- `add-contact-data-points` — Add custom phone data point to enrich results
- `find-and-enrich-list-of-contacts` — Enrich specific contacts by name + company
- `get-existing-search` — Poll for async enrichment results
- *(Costs Clay credits — monitor spend)*
### HubSpot API (sync stage 4)
- `hubspot_contacts_update` (batch via REST API) — Write verified phones back to HubSpot
- Or native HubSpot bulk import if preferred
## Sibling Skills & Related Tasks Referenced
- `prospect-research-to-cadence-skill` — Lead quality gates, Golden Rules filter, ICP scoring
- `sales-revenue-skill` — ICP vertical definitions, intent signal weighting
- `hubspot-revops-skill` — HubSpot bulk operations, contact filtering patterns, owner ID mapping
- `CLAUDE.md § ATL/BTL Classification v1.0` — Approved title keyword patterns for ATL/BTL/Gray classification (2026-03-17)
## Upstream & Downstream Scheduled Tasks
- `bdr-v3-prospect-enrich` — Monday 6:00 AM firmographic refresh (runs before phone waterfall)
- `bdr-v3-phone-waterfall-midweek` — Wednesday 6:15 AM mid-week phone verification run (NEW)
- `bdr-v3-prospect-refresh` — Monday 6:30 AM velocity refresh (runs after phone waterfall)
## External Dependencies
- **HubSpot API:** Contact search + bulk update
- **Apollo API:** People match (no additional cost)
- **Clay API:** Waterfall enrichment (requires active subscription + available credits)
- **Dialpad/Aircall API:** Optional integration for direct dial queue sync
## Estimated Monthly Cost
- **Apollo:** $0 (included)
- **Clay:** $150-300 depending on contacts enriched (monitor waterfall stage)
- **HubSpot:** Already in use
- **Total variable:** ~$200-300/month (Clay credits)
</dependencies>
<scheduled_automation>
**Task IDs:**
- `bdr-v3-phone-waterfall` (Monday 6:15 AM run)
- `bdr-v3-phone-waterfall-midweek` (Wednesday 6:15 AM run)
**Trigger:** Recurring, every Monday & Wednesday at 6:15 AM (user's local timezone)
**Slack Notification on Completion:**
```
✅ Phone Waterfall Complete (Mon 6:15 AM)
Pulled: {N} leads
Verified: {X+Y} phones ({%})
HubSpot Sync: ✓
Queue: Ready to dial
Leads/hour: {rate}
```
**On Error:**
```
⚠️ Phone Waterfall Partial (Mon 6:15 AM)
Apollo completed ({X%})
Clay failing — check credits
Manual action: Continue with Apollo-only queue
```
</scheduled_automation>
---
## Reference: Golden Rules Filter
**These are hard gates — if ANY condition matches, skip the contact entirely:**
| Condition | Value | Action |
|-----------|-------|--------|
| `lifecyclestage` | 'customer' | SKIP |
| `first_conversion` | contains 'Pearl' OR 'setup' OR 'Connect' | SKIP |
| Company `device_count` | >= 1 | SKIP |
| Company `is_channel` | true | SKIP |
| `hubspot_owner_id` | 82625923, 423155215, 190030668 | SKIP (AEs: Lex Evans, Ron Epstein, Phillip Sandler) |
**Rationale:**
- Customers are in a different sales motion (success, upsell, retention)
- Product engagers are warm leads for a different sequence
- Device owners are existing relationships or renewals
- Channel partners have their own sales process
- AE-owned leads belong to Account Executives (no BDR lead theft)
</Golden Rules>
---
## Example: Phone Waterfall in Action
**Monday 6:15 AM kick-off:**
```
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%
```
---
## Skill Companion Files
> Additional files collected from the skill directory layout.
### EXAMPLE_OUTPUTS.md
```markdown
# Example Outputs — Phone Verification Waterfall Skill
## Scenario 1: Full Success Run (Monday 6:15 AM)
**Triggers:** "verify phones" or scheduled Monday 6:15 AM
**Console Output:**
```
🔄 Phone Verification Waterfall Starting...
STAGE 1: PULL LEADS FROM HUBSPOT
─────────────────────────────────
Query: phone = NULL AND lifecyclestage != 'customer' AND excludes Golden Rules
Results: 187 contacts with missing phones
Filter Applied: -34 (customers, AE-owned, device owners, channel partners)
Ready for enrichment: 153
Breakdown by ICP Vertical:
Higher Ed: 52 contacts (34%)
Healthcare: 28 contacts (18%)
Government: 25 contacts (16%)
Corporate AV: 24 contacts (16%)
Courts/Legal: 15 contacts (10%)
K-12: 9 contacts ( 6%)
STAGE 2: APOLLO PHONE LOOKUP
─────────────────────────────
Enriching 153 contacts via Apollo people_match...
Batch 1 (50 contacts): 23 matches (46%)
Batch 2 (50 contacts): 25 matches (50%)
Batch 3 (53 contacts): 21 matches (40%)
─────────────────────────────────────────────
Apollo Success: 69 phones verified (45.1%)
Apollo Miss: 84 contacts (54.9%)
Phone Sources from Apollo:
corporate_phone: 41 (59%)
mobile_phone: 28 (41%)
STAGE 3: CLAY WATERFALL ENRICHMENT
───────────────────────────────────
Processing 84 Apollo misses via Clay...
Find Company Groups: 8 unique companies
Running enrichment: find-and-enrich-contacts-at-company
├─ Group 1 (Stanford Univ, 12 people): 7 matched (58%)
├─ Group 2 (UCSF Medical, 8 people): 4 matched (50%)
├─ Group 3 (Berkeley Lab, 7 people): 3 matched (43%)
├─ Group 4 (SF Federal Courts, 9 people): 6 matched (67%)
├─ Group 5 (Cisco Corp, 15 people): 8 matched (53%)
├─ Group 6 (Kaiser Permanente, 12 people): 6 matched (50%)
├─ Group 7 (SF State Univ, 12 people): 5 matched (42%)
├─ Group 8 (Google, 9 people): 4 matched (44%)
Clay Success: 43 phones verified (51.2% of Apollo misses)
Clay Miss: 41 contacts (48.8%)
Total phones found: 69 (Apollo) + 43 (Clay) = 112 verified (73.2% success)
STAGE 4: HUBSPOT SYNC
─────────────────────
Batch updating 112 contacts to HubSpot...
Batch 1 (100 contacts): ✓ updated successfully
Batch 2 (12 contacts): ✓ updated successfully
Fields Updated:
phone ..................... verified number
phone_source .............. "apollo" or "clay"
phone_verified_at ......... 2026-03-15T06:15:32Z
phone_waterfall_pass ...... true
All syncs complete ✓
STAGE 5: CALLABLE QUEUE GENERATION
───────────────────────────────────
Building queue: 112 contacts with verified phones
Sorting by: ICP score (primary) + Intent signals (secondary)
Sample of Top 10:
┌─────┬──────────────────┬─────────────┬──────────────┬─────────────┬──────┬──────────────┬──────────────────────┐
│ # │ NAME │ TITLE │ COMPANY │ PHONE │ ICP │ VERTICAL │ INTENT SIGNAL │
├─────┼──────────────────┼─────────────┼──────────────┼─────────────┼──────┼──────────────┼──────────────────────┤
│ 1 │ Jane Smith │ VP IT/AV │ Stanford │(650)555-001 │ 95 │ Higher Ed │ Hiring AV role +10 │
│ 2 │ Mike Johnson │ Dir Tech │ UC Berkeley │(510)555-002 │ 94 │ Higher Ed │ New media center +15 │
│ 3 │ Sarah Chen │ Manager AV │ UCSF Med │(415)555-003 │ 88 │ Healthcare │ Facility reno +12 │
│ 4 │ David Rodriguez │ VP Ops │ SF Fed Ct │(415)555-004 │ 87 │ Courts/Legal │ Extron aging out +12 │
│ 5 │ Elena Vasquez │ AV Manager │ Cisco │(408)555-005 │ 85 │ Corp AV │ Meeting rms reno +8 │
│ 6 │ Robert Kim │ IT Director │ Kaiser │(510)555-006 │ 82 │ Healthcare │ Digital health +5 │
│ 7 │ Jennifer Wu │ Dir Media │ SF State │(415)555-007 │ 80 │ Higher Ed │ Streaming platform +8│
│ 8 │ Marcus Johnson │ AV Tech │ Google │(650)555-008 │ 78 │ Corp AV │ Conference room +5 │
│ 9 │ Patricia Brown │ VP IT │ Stanford │(650)555-009 │ 77 │ Higher Ed │ IT refresh cycle +10 │
│ 10 │ Christopher Lee │ Manager Ops │ UC Davis │(530)555-010 │ 76 │ Higher Ed │ Expansion project +6 │
└─────┴──────────────────┴─────────────┴──────────────┴─────────────┴──────┴──────────────┴──────────────────────┘
Full queue: 112 contacts | Execution time: 6m 42s ✓
CALLABLE QUEUE READY ✓
═════════════════════════════════════════════════════════════════════
📊 METRICS
──────────
Total Leads Pulled: 187
Golden Rules Filtered: -34 (-18%)
Available for Enrichment: 153
Apollo Verified: 69 (45%)
Clay Verified: 43 (28%)
Total Verified Phones: 112 (73%)
HubSpot Synced: 112 (100%)
Queue Ready to Dial: 112
🎯 PRIORITIES
─────────────
Tier 1 (Higher Ed, ICP 90+): 18 contacts — CALL FIRST
Tier 2 (Health/Gov, ICP 80+): 34 contacts — CALL SECOND
Tier 3 (Corporate AV, ICP 70+):35 contacts — CALL THIRD
Tier 4 (Lower scores, <70): 25 contacts — CALL FOURTH
📲 NEXT STEPS
─────────────
1. Open Dialpad at 7:00 AM
2. Import CSV queue: [download link]
3. Start with Tier 1 prospects (Higher Ed)
4. Target: 50+ dials today
5. Log outcomes → trigger sales cadences
═════════════════════════════════════════════════════════════════════
✓ Success! All systems ready for dialing.
```
---
## Scenario 2: Partial Success (API Constraint)
**Context:** Clay has credit constraints or API latency
**Console Output:**
```
🔄 Phone Verification Waterfall Starting...
STAGE 1: PULL LEADS
Results: 247 contacts with missing phones
Filter: -42 (Golden Rules)
Ready: 205
STAGE 2: APOLLO LOOKUP
Apollo: 97 phones verified (47.3%)
STAGE 3: CLAY WATERFALL
⚠️ WARNING: Clay API responding slowly
Batch 1 (50 contacts): 8 matched (16%) ⏱️ 2:15
Batch 2 (50 contacts): 9 matched (18%) ⏱️ 2:45
Continuing...
⚠️ Clay taking >4 minutes for 2 batches
Remaining: 54 contacts
Estimated time if Clay: 6+ additional minutes
Total would exceed 8-minute window
📌 DECISION: Stopping Clay, returning Apollo-only results
Reason: Keep under 8-minute SLA for Monday 6:15 AM window
STAGE 4: HUBSPOT SYNC
Syncing 97 Apollo-verified phones
✓ Complete: 97 contacts updated
STAGE 5: CALLABLE QUEUE
Queue: 97 contacts (Apollo only)
Missing: 108 potential phones (from Clay misses)
═════════════════════════════════════════════════════════════════════
⚠️ PARTIAL SUCCESS
Total Verified: 97 phones (47.3%)
HubSpot Synced: 97 ✓
Ready to Dial: 97 contacts
Execution Time: 8m 02s (exceeded 8-min SLA by 2 sec)
📌 ACTION ITEMS
───────────────
1. Apollo completed successfully ✓
2. Clay API slow — check Clay status/credits
3. Consider running Clay waterfall separately Wednesday 6:15 AM
4. Check Clay dashboard: [link]
💡 OPTIMIZATION
────────────────
Next Monday, consider:
- Pre-batching Clay requests Thursday
- Checking Clay credits before Monday run
- Running Clay on Tue/Wed if anticipating slowness
📲 USE THIS QUEUE FOR MONDAY DIALS
You have 97 verified phones ready now.
Supplemental 108 phones will come Wed if Clay recovers.
═════════════════════════════════════════════════════════════════════
```
---
## Scenario 3: Error Recovery (API Failure)
**Context:** HubSpot API returns error during sync
**Console Output:**
```
🔄 Phone Verification Waterfall Starting...
STAGE 1-2: PULL & APOLLO
✓ Apollo: 72 phones verified
STAGE 3: CLAY WATERFALL
✓ Clay: 31 phones verified
✓ Total: 103 phones found
STAGE 4: HUBSPOT SYNC
Batch 1 (100 contacts): ✓ updated
Batch 2 (3 contacts): ✗ ERROR
Error Details:
API Response: 429 Too Many Requests
Rate Limit: 100 requests/second (you're at 105)
Retry-After: 60 seconds
⚠️ HUBSPOT RATE LIMIT HIT
Some contacts queued for retry
RETRY STRATEGY:
Waiting 65 seconds...
Retrying Batch 2 (3 contacts)...
✓ Retry successful: 3 contacts updated
STAGE 5: CALLABLE QUEUE
Final: 103 contacts synced to HubSpot ✓
Queue Ready: 103
═════════════════════════════════════════════════════════════════════
✓ RECOVERED FROM ERROR
Total Verified: 103 phones
HubSpot Synced: 103 ✓
Queue Ready: 103 (same as before error)
Execution Time: 7m 45s (includes retry delay)
Retry handled automatically — no manual action needed.
═════════════════════════════════════════════════════════════════════
```
---
## CSV Export Format (for Dialpad/Aircall Import)
**Filename:** `callable_queue_20260315_061532.csv`
```csv
contact_id,first_name,last_name,email,company,title,phone,icp_score,vertical,intent_signals,phone_source,last_enriched
63b4a8f9e9c8d5a2,Jane,Smith,[email protected],Stanford University,VP IT/AV,(650)555-0101,95,Higher Education,Hiring AV role +10; New media center,apollo,2026-03-15T06:15:32Z
63b4a8f9e9c8d5a3,Mike,Johnson,[email protected],UC Berkeley,Director Technology,(510)555-0102,94,Higher Education,Facility expansion +12; Streaming platform,clay,2026-03-15T06:15:32Z
63b4a8f9e9c8d5a4,Sarah,Chen,[email protected],UCSF Medical,Manager AV,(415)555-0103,88,Healthcare,Facility renovation +12; Digital health,apollo,2026-03-15T06:15:32Z
...
```
---
## Dashboard Metrics (Weekly View)
After Monday 6:15 AM run completes, these metrics are logged:
```
PHONE WATERFALL — WEEKLY METRICS
═════════════════════════════════════════════════════════════════
Week of: Mar 15-21, 2026
YIELD ANALYSIS
──────────────
Contacts Pulled: 189
Golden Rules Filtered: -38 (20%)
Available: 151
Apollo Matches: 69 (46%)
Clay Enriched: 43 (62% of Apollo misses)
Total Verified: 112 (74%)
PERFORMANCE
───────────
Apollo Success Rate: 46% (baseline 40-50% ✓)
Clay Success Rate: 62% (baseline 30-40% ✗ HIGH)
Combined Rate: 74% (target 65-70% ✓)
Execution Time: 6m 42s (target <8min ✓)
Callable Leads: 112 (target 50+ ✓)
BY VERTICAL
───────────
Higher Ed: 52 leads verified | ICP avg: 89
Healthcare: 28 leads verified | ICP avg: 78
Government: 25 leads verified | ICP avg: 81
Corporate AV: 24 leads verified | ICP avg: 79
Courts/Legal: 15 leads verified | ICP avg: 84
K-12 Schools: 9 leads verified | ICP avg: 68
INTENT SIGNALS (TOP BOOSTERS)
──────────────────────────────
Hiring AV roles: +15 points (24 contacts detected)
Facility expansion: +12 points (18 contacts detected)
Extron aging out: +12 points (8 contacts detected)
Tech stack gaps: +8 points (34 contacts detected)
Funding/acquisition: +5 points (12 contacts detected)
TREND
─────
vs Last Week: +15 contacts callable (8% growth)
YTD Success: 71% average (trend: ↑)
Monthly Cost: Clay $180 (budget: $200)
═════════════════════════════════════════════════════════════════
```
```
### README.md
```markdown
# Phone Verification Waterfall Skill
**Ensure Tim always has 50+ verified phone numbers queued for daily dials.**
This skill automatically pulls cold prospects from HubSpot, verifies phone numbers via Apollo + Clay waterfall enrichment, syncs back to HubSpot, and outputs a prioritized callable queue sorted by ICP score.
## Quick Start (30 seconds)
**Trigger phrases:**
- "verify phones"
- "phone waterfall"
- "callable leads"
- "who can I call"
- "dial list"
- "phone check"
**Expected output:** CSV of 50-100+ leads with verified phones, sorted by ICP (Higher Ed first, K-12 last)
**Scheduled:** Every Monday 6:15 AM (between prospect-enrich at 6:00 and prospect-refresh at 6:30)
## What It Does
1. **Pull leads** from HubSpot (contacts with phone = null, excluding customers/AE-owned/existing devices)
2. **Apollo lookup** → 40-50% get verified phones (free, no cost)
3. **Clay waterfall** → 30-40% of Apollo misses get phones (paid credits, ~$150-300/month)
4. **HubSpot sync** → Write verified numbers back to contact phone field
5. **Callable queue** → Sort by ICP score + intent signals, output CSV for Dialpad/Aircall
## Key Metrics
| Metric | Target |
|--------|--------|
| Callable leads | 50+ |
| Phone verification rate | 65-70% |
| Execution time | <8 min |
| Cost/month | $150-300 (Clay only) |
## Documentation
- **SKILL.md** — Full skill definition (use when triggering manually)
- **config.json** — Skill metadata, triggers, MCP tools, scheduling
- **IMPLEMENTATION.md** — Setup checklist, troubleshooting, examples
- **INTEGRATION_MAP.md** — Architecture, dependencies, data flow
- **EXAMPLE_OUTPUTS.md** — Real console output from 3 scenarios (success, partial, error)
- **golden-rules-filter.md** — Reusable exclusion logic (also used by prospect-research-to-cadence-skill)
## Integration
**Upstream (requires):**
- prospect-enrich-skill (runs at 6:00 AM, refreshes company data)
- HubSpot data quality (accurate emails, first_conversion tracking)
**Downstream (feeds):**
- Dialpad/Aircall (import CSV queue for dialing)
- Sales engagement platforms (trigger cadences on enriched leads)
- Tim's daily 7 AM dial start (50+ ready-to-call leads)
## Golden Rules (Hard Filters)
These contacts are ALWAYS skipped:
- Customers (lifecycle_stage = 'customer')
- Product engagers (first_conversion contains 'Pearl', 'setup', 'Connect', 'signup')
- Existing device owners (company.device_count >= 1)
- Channel partners (is_channel = true)
- Account Executive leads (owned by Lex, Phil, Ron, Anthony)
## Setup Checklist
- [ ] Verify HubSpot API connection
- [ ] Verify Apollo API connection
- [ ] Verify Clay API connection
- [ ] Confirm AE owner IDs (Lex, Phil, Ron, Anthony)
- [ ] Test on small batch (Stanford University, ~20 contacts)
- [ ] Schedule cron: `15 6 * * 1` (Monday 6:15 AM)
- [ ] Add Slack notification to #sales
- [ ] Brief Tim on Monday morning workflow
- [ ] Go live
See IMPLEMENTATION.md for detailed setup steps.
## Performance Targets
**Yield:**
- Leads pulled: 100-250
- Apollo success: 40-50%
- Clay waterfall: 30-40% (of Apollo misses)
- Total verified: 65-70%
**Callable:**
- Queue size: 50+ minimum
- Top tier (ICP 80+): ~30-40 leads
- Mid tier (ICP 60-79): ~20-30 leads
**Timing:**
- Monday 6:15 AM run completes by 6:23 AM (8-min window)
- Results ready for Tim's 7 AM dial start
- CSV exported to Dialpad automatically
## Cost & Resources
- **Apollo:** $0 (included in existing subscription)
- **Clay:** ~$150-300/month (depends on contacts enriched)
- **HubSpot:** Already in use
- **Execution:** <8 min weekly (automated, unattended)
## Common Issues
**Low phone verification rate (<50%)?**
- Check Apollo API quota
- Check Clay credit balance
- Check HubSpot contact quality (emails, company data)
**Execution takes >10 min?**
- API rate limits hit
- Check HubSpot/Apollo/Clay status pages
- Run smaller batch or split across days
**HubSpot sync failing?**
- Check API rate limit errors
- Validate phone number format
- Check API key permissions
See IMPLEMENTATION.md troubleshooting section for full details.
## Next Steps
1. Read IMPLEMENTATION.md (Setup section)
2. Follow the 8-step activation checklist
3. Test on small batch (5 min)
4. Go live Monday 6:15 AM
5. Monitor Slack notifications
---
**Contact:** Tim Knottenbelt (BDR/Application Engineer, Epiphan Video)
**Created:** 2026-03-15
**Version:** 1.0.0
```