This recipe produces an enriched lead database of 200-5,000 contacts pulled from Apollo.io or ZoomInfo APIs, with verified work emails, direct phone numbers, firmographic data (industry, employee count, revenue), and technographic signals. The output includes deduplication and cost tracking per lead, ready for scoring and outreach.
Which path?
├── Budget = free AND scale < 500
│ └── PATH A: Apollo Free Tier
├── Budget = $50-200/mo AND scale 500-2000
│ └── PATH B: Apollo Professional
├── Budget = enterprise AND scale 2000+
│ └── PATH C: ZoomInfo API
└── Maximum coverage
└── PATH D: Waterfall (Apollo + ZoomInfo)
| Path | Tools | Cost | Speed | Output Quality |
|---|---|---|---|---|
| A: Apollo Free | Apollo UI + export | $0 | 30 min/200 leads | Good — limited credits |
| B: Apollo Pro | Apollo API | $79/mo/seat | 20 min/1000 leads | High — full enrichment |
| C: ZoomInfo | ZoomInfo API | $15K+/yr | 15 min/2000 leads | Highest — intent + org charts |
| D: Waterfall | Apollo + ZoomInfo | $79/mo + $15K/yr | 30 min/2000 leads | Maximum coverage |
Duration: 10 minutes | Tool: Apollo.io API
Translate ICP into API query parameters using Apollo's People Search endpoint with company size, title keywords, industry, location, and technology filters.
Verify: API returns 200 status and total_entries > 0.
Duration: 10-30 minutes | Tool: Python script
Loop through pages at 100 results/page, respecting the 100 req/min rate limit. Extract name, title, company, email, phone, LinkedIn URL, company size, industry, and location. [src1]
Verify: Row count > 100. Email populated for > 50% of records.
Duration: 5-15 minutes | Tool: Apollo People Enrichment API
For leads missing email or phone, use the People Match endpoint with first name, last name, company, and LinkedIn URL. Rate limit: 50 req/min on enrichment. [src2]
Verify: Email coverage improves to > 70%.
Duration: 5-10 minutes | Tool: Python (pandas)
Deduplicate by email (primary) and name+company (secondary). Remove rows missing critical fields. Track credit usage per lead for cost analysis.
Verify: Zero duplicates on email column. Credit usage within budget.
Duration: 5 minutes
Add metadata columns (lead_source, date_pulled, credit_cost). Generate summary report with total leads, email/phone coverage rates, total credits used, and cost per lead.
CSV with columns: first_name, last_name, title, company, email, phone, linkedin_url, company_size, industry, city, state, lead_source, credit_cost. Expected 200-5,000 rows, deduplicated on email, sorted by company ascending.
| Quality Metric | Minimum | Good | Excellent |
|---|---|---|---|
| Email coverage | > 50% | > 70% | > 85% |
| Phone coverage | > 15% | > 30% | > 50% |
| ICP match rate | > 75% | > 85% | > 95% |
| Duplicate rate | < 5% | < 2% | < 0.5% |
| Data freshness | > 80% | > 90% | > 95% |
| Error | Cause | Recovery |
|---|---|---|
| 429 Too Many Requests | Rate limit exceeded | Wait 60 seconds, reduce frequency |
| 401 Unauthorized | Invalid API key | Regenerate at Apollo settings |
| Empty results | Query too narrow | Broaden title/industry filters |
| Low email coverage | Free tier credits exhausted | Upgrade or use enrichment pipeline |
| Stale data | Contact left company | Cross-reference with LinkedIn |
| Component | Free Tier | Paid Tier | At Scale |
|---|---|---|---|
| Apollo.io search | 10K records/mo | Unlimited ($79/mo) | Unlimited |
| Email credits | 120/mo | Unlimited (Pro) | Unlimited |
| Mobile credits | 60/mo | 100/mo (Pro) | 200/mo ($199/mo) |
| ZoomInfo (alt) | No free tier | $15K-$25K/yr | $25K-$40K+/yr |
| Cost per lead | ~$0.01 | ~$0.05-0.15 | ~$0.03-0.10 |
Exhausting monthly credits mid-campaign leaves no capacity for enrichment or follow-up. [src3]
Log credit_cost per record. Reserve 20% of monthly credits for enrichment and re-pulls.
120 email credits/month cannot sustain 1,000+ lead outbound campaigns. [src1]
Free for validation (50-100 leads). Professional for sustained outbound. ZoomInfo for enterprise. [src3]
Use when the agent needs to pull leads from a sales intelligence API with structured filters. Ideal for teams with tool budget who want clean, enriched data without LinkedIn rate limit constraints.