Auto-enrich new HubSpot contacts with Apollo using 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 from Settings → Integrations → API
Overview
Zapier doesn't have a native Apollo integration, so you'll use Webhooks by Zapier to call the Apollo API directly. The flow is: HubSpot trigger fires on new contact → Webhook calls Apollo for enrichment → Zapier updates the HubSpot contact with enriched fields.
Step 1: Add the HubSpot trigger
Create a new Zap. Choose HubSpot as the trigger:
- Trigger event: New Contact
- Account: Select your HubSpot account
Test the trigger to pull in a sample contact. You'll see the contact's email, id, and any existing properties.
Step 2: Call Apollo via Webhooks by Zapier
Add a Webhooks by Zapier action step:
- Action event: Custom Request
- Method: POST
- URL:
https://api.apollo.io/api/v1/people/match - Headers:
x-api-key: Your Apollo API keyContent-Type:application/json
- Data (raw JSON):
{
"email": "{{contact_email}}"
}Map {{contact_email}} to the email field from Step 1.
Webhooks by Zapier requires the Professional plan ($29.99/mo billed annually). The Starter plan doesn't include Webhooks or Code steps, which are both needed for this workflow.
Step 3: Filter out empty matches
Add a Filter by Zapier step:
- Field: The
personobject from the Webhook response - Condition: Exists
- Continue if: The condition is met
This stops the Zap for contacts that Apollo couldn't match, preventing empty updates to HubSpot.
Filter and Formatter steps in Zapier don't count toward your task usage. Use them liberally to prevent unnecessary downstream actions.
Step 4: Update the HubSpot contact
Add a HubSpot action step:
- Action event: Update Contact
- Contact to update: Map the Contact ID from Step 1
- Job Title: Map
person.titlefrom the Webhook response - Company Name: Map
person.organization.name - Phone Number: Map
person.phone_numbers[0].sanitized_number
For fields that aren't available in Zapier's built-in HubSpot field picker (like LinkedIn URL), use a second Webhooks by Zapier step to call the HubSpot API directly:
- Method: PATCH
- URL:
https://api.hubapi.com/crm/v3/objects/contacts/{{contact_id}} - Headers:
Authorization:Bearer YOUR_HUBSPOT_TOKENContent-Type:application/json
- Data:
{
"properties": {
"linkedin_url": "{{person_linkedin_url}}"
}
}Zapier flattens nested JSON responses. Apollo's person.phone_numbers array becomes individual fields like Person Phone Numbers Sanitized Number. Use the field picker to map these — don't try to reference them with dot notation in expressions.
Step 5: Test and turn on
- Click Test on each step to verify data flows correctly
- Check the Webhook response — confirm
person.titleand other fields have values - Open the test contact in HubSpot to verify fields were updated
- Turn the Zap On
Cost and task usage
- Zapier Professional: $29.99/mo (billed annually) with 750 tasks/month
- Per enrichment: Each Zap run uses 3-4 tasks (trigger + webhook + filter + update). At 750 tasks/month, you can enrich ~187 contacts.
- Apollo: 1 credit per person enrichment. Basic plan ($49/mo) includes 900 credits/month.
- Scale consideration: If you create more than ~180 contacts/month, you'll need the Team plan ($69.99/mo for 2,000 tasks) or higher.
Limitations
- No native Apollo integration — you must use Webhooks for both the Apollo call and any custom HubSpot property updates
- Flat field mapping — Zapier flattens nested Apollo responses, making it harder to access deeply nested fields like organization sub-properties
- No conditional field writing — Zapier's Update Contact action writes all mapped fields, even if the Apollo value is empty. This can overwrite existing HubSpot data with blanks.
Next steps
- Add domain filtering — insert a Filter step after the trigger to skip personal email domains (
gmail.com,yahoo.com) and save Apollo credits - Add a Formatter step — use Formatter by Zapier to clean up phone numbers or standardize job titles before writing to HubSpot
- Track enrichment — add a final Update Contact step to set a custom
enrichment_sourceproperty to "apollo"
Need help implementing this?
We build and optimize automation systems for mid-market businesses. Let's discuss the right approach for your team.