Auto-enrich new HubSpot contacts with Apollo using Make
Prerequisites
- Make account (Free plan works for low volume; Core plan for higher throughput)
- HubSpot connection configured in Make via OAuth
- Apollo API key from Settings → Integrations → API
Why Make?
Make offers the lowest per-contact enrichment cost among no-code platforms. The Free plan includes 1,000 credits/month — enough for ~333 enrichments — and the Core plan ($29/mo) handles over 3,000. Make's Router and Filter modules also make it easy to add conditional logic, like skipping personal email domains or routing different lead sources through different enrichment paths.
The trade-off is Make's array indexing (1-based, not 0-based) and its credit multiplication with Iterator modules. Each downstream module execution counts as a separate credit, so complex workflows consume credits faster than you might expect. For simple enrich-and-update flows, Make is very cost-effective.
Step 1: Create a scenario with a HubSpot trigger
Create a new scenario in Make. Add a HubSpot CRM module:
- Module: Watch Contacts
- Connection: Your HubSpot OAuth connection
- Watch: New contacts only
- Limit: 10 (per poll cycle)
Make will poll HubSpot for new contacts at the schedule interval you configure.
On the Free plan, Make polls every 15 minutes. On Core ($29/mo) and above, you can set intervals as low as 1 minute. For enrichment, 15 minutes is usually fine — contacts don't need to be enriched instantly.
Step 2: Call the Apollo People Enrichment API
Add an HTTP module (Make a request):
- URL:
https://api.apollo.io/api/v1/people/match - Method: POST
- Headers:
x-api-key: Your Apollo API keyContent-Type:application/json
- Body type: Raw
- Content type: JSON
- Request content:
{
"email": "{{1.properties.email}}"
}Map the email from the HubSpot trigger module (module 1).
Step 3: Add a filter for matched results
Click the connector line between the Apollo HTTP module and the next module. Add a Filter:
- Label: Apollo matched
- Condition:
personfrom the HTTP response → Exists
This prevents downstream modules from executing when Apollo has no data for a contact.
Apollo returns a 200 with person: null for unmatched emails — it doesn't throw an error. The filter catches these. However, if the API key is invalid or you've exceeded rate limits, Apollo returns 401 or 429. Add a Resume error handler on the HTTP module with a 10-second delay to handle rate limiting gracefully.
Step 4: Update the HubSpot contact
Add a HubSpot CRM module:
- Module: Update a Contact
- Connection: Your HubSpot connection
- Contact ID: Map from module 1 (
{{1.id}}) - Job Title:
{{2.person.title}} - Company Name:
{{2.person.organization.name}} - Phone:
{{2.person.phone_numbers[].sanitized_number}}
For custom properties like linkedin_url, switch to the HTTP module approach:
- Method: PATCH
- URL:
https://api.hubapi.com/crm/v3/objects/contacts/{{1.id}} - Headers: Authorization handled by HubSpot connection
- Body:
{
"properties": {
"jobtitle": "{{2.person.title}}",
"company": "{{2.person.organization.name}}",
"phone": "{{2.person.phone_numbers[1].sanitized_number}}",
"linkedin_url": "{{2.person.linkedin_url}}",
"industry": "{{2.person.organization.industry}}"
}
}Make uses 1-based array indexing. The first phone number is phone_numbers[1], not phone_numbers[0]. This is a common source of bugs when translating API documentation examples.
Step 5: Add error handling and activate
- Right-click the HubSpot Update module → Add error handler → Resume (retries after a delay)
- On the Apollo HTTP module → Add a Break error handler (saves failed contacts for manual retry)
- Click Run once to test with a real contact
- Verify the contact's fields updated in HubSpot
- Set the scenario schedule (e.g., every 15 minutes) and toggle to Active
Troubleshooting
Cost and credits
- Free plan: 1,000 credits/month. Each enrichment run uses ~3 credits (trigger + HTTP + update). Supports ~333 enrichments/month.
- Core plan: $29/mo for 10,000 credits. Supports ~3,333 enrichments/month.
- Apollo: 1 credit per person enrichment. Basic plan ($49/mo) includes 900 credits/month.
- Credit math: If you add ~50 contacts/week, that's ~200/month × 3 Make credits = 600 Make credits. Fits comfortably on the Free plan.
Common questions
How many Make credits does each enrichment use?
A simple enrich-and-update flow uses ~3 credits per contact: 1 for the Watch Contacts trigger, 1 for the Apollo HTTP call, and 1 for the HubSpot update. With the Free plan's 1,000 credits, you can enrich ~333 contacts/month.
What happens when Apollo returns null for a contact?
The Filter module (Step 3) catches null responses and stops processing for that contact. No downstream modules execute, saving credits. The contact simply isn't updated in HubSpot.
Can I use Make's free plan for this workflow?
Yes, with limitations. The Free plan polls every 15 minutes (vs. 1 minute on Core), and the Code module requires Core ($29/mo). Without the Code module, use ifempty() in Set Multiple Variables for conditional field mapping.
Next steps
- Add a Router — branch the flow to handle business vs. personal emails differently (enrich business emails, skip personal ones)
- Batch processing — use a Scheduler module to run enrichment in batches during off-peak hours
- Enrichment tracking — add a second HubSpot Update module to stamp
enrichment_dateandenrichment_sourceon each processed contact
Looking to scale your AI operations?
We build and optimize automation systems for mid-market businesses. Let's discuss the right approach for your team.