Find and verify emails for HubSpot prospects using Apollo and Hunter in Zapier
Prerequisites
- Zapier account on the Professional plan or higher (required for Webhooks by Zapier and multi-step Zaps)
- HubSpot account connected to Zapier via OAuth
- Apollo API key with email finder credits
- Hunter.io API key with verification credits
Overview
This Zap runs on a schedule, fetches HubSpot contacts missing email addresses, finds emails via Apollo, verifies them with Hunter, and writes verified emails back to HubSpot. Because Zapier doesn't have native Apollo or Hunter integrations for these endpoints, you'll use Webhooks by Zapier for the API calls.
Step 1: Add a Schedule trigger
Create a new Zap. Choose Schedule by Zapier:
- Trigger event: Every Day
- Time of day: 6:00am
- Timezone: Your team's timezone
Step 2: Search HubSpot for contacts without emails
Add a Webhooks by Zapier action:
- Action event: Custom Request
- Method: POST
- URL:
https://api.hubapi.com/crm/v3/objects/contacts/search - Headers:
Authorization:Bearer YOUR_HUBSPOT_TOKENContent-Type:application/json
- Data:
{
"filterGroups": [{
"filters": [
{"propertyName": "email", "operator": "NOT_HAS_PROPERTY"},
{"propertyName": "firstname", "operator": "HAS_PROPERTY"},
{"propertyName": "company", "operator": "HAS_PROPERTY"}
]
}],
"properties": ["firstname", "lastname", "company", "domain"],
"limit": 20
}Zapier processes one record per Zap run. To process multiple contacts from the search response, you'll need Looping by Zapier (available on Professional plan). Add a Looping step that iterates over the results array from the search response. Each iteration will go through the Apollo and Hunter steps below.
Step 3: Find the email via Apollo
Inside the loop, add a Webhooks by Zapier action:
- Method: POST
- URL:
https://api.apollo.io/api/v1/people/match - Headers:
x-api-key: Your Apollo API keyContent-Type:application/json
- Data:
{
"first_name": "{{first_name}}",
"last_name": "{{last_name}}",
"organization_name": "{{company}}"
}Map the fields from the looped contact data.
Step 4: Filter — only continue if Apollo found an email
Add a Filter by Zapier step:
- Field:
person__emailfrom the Apollo response - Condition: Exists
- Continue if: The condition is met
Add a second filter to skip already-verified emails:
- Field:
person__email_statusfrom the Apollo response - Condition: Does not exactly match
verified - Continue if: The condition is met (send to Hunter for verification)
For already-verified emails, add a separate Path that skips Hunter and goes straight to HubSpot update.
Paths by Zapier (Professional plan) lets you branch the Zap based on conditions. Use Path A for Apollo-verified emails (skip Hunter) and Path B for unverified emails (call Hunter first).
Step 5: Verify with Hunter
On Path B (unverified emails), add a Webhooks by Zapier action:
- Method: GET
- URL:
https://api.hunter.io/v2/email-verifier?email={{person_email}}&api_key=YOUR_HUNTER_KEY
Map {{person_email}} from the Apollo response.
Add a Filter by Zapier step:
- Field:
data__resultfrom the Hunter response - Condition: Exactly matches
deliverable
Step 6: Update the HubSpot contact
On both paths (Apollo-verified and Hunter-verified), add a HubSpot action:
- Action event: Update Contact
- Contact to update: Map the Contact ID from the search results
- Email: Map the email from Apollo
For custom properties, use Webhooks by Zapier with a PATCH to the HubSpot API:
{
"properties": {
"email": "{{verified_email}}",
"email_verification_status": "verified",
"email_source": "apollo+hunter"
}
}Step 7: Test and publish
- Test each step individually to verify data flows correctly
- Run the full Zap with test data
- Check HubSpot to confirm the email and verification status were written
- Turn the Zap On
Cost and task usage
- Zapier Professional: $29.99/mo (750 tasks). Each contact uses ~5-7 tasks per loop iteration.
- With 20 contacts/day: ~100-140 tasks/day = ~3,000-4,200 tasks/month. You'll likely need the Team plan ($69.99/mo, 2,000 tasks) or higher.
- Apollo: 1 credit per lookup ($49/mo Basic = 900 credits)
- Hunter: 1 credit per verification ($49/mo Starter = 1,000 verifications)
Looping in Zapier consumes tasks for each iteration of each step. A 20-contact batch with 5 steps per contact = 100 tasks per run. Daily runs = 3,000 tasks/month. Monitor your task usage closely.
Limitations
- Looping complexity — Zapier's Looping feature works but adds task costs and makes the Zap harder to debug
- No bulk API support — each contact requires individual API calls; there's no way to batch Apollo lookups in Zapier
- Flat response mapping — Zapier flattens Apollo's nested response, which can make field mapping confusing
Next steps
- Add delay steps — insert a Delay by Zapier step (1 second) between loop iterations to stay within Apollo's rate limits
- Add a completion notification — add a Slack message at the end of the Zap summarizing how many emails were found and verified
- Handle risky emails — create a separate Path for Hunter's
riskyresult that flags the contact for manual review
Need help implementing this?
We build and optimize automation systems for mid-market businesses. Let's discuss the right approach for your team.