Find decision makers at a HubSpot company using Apollo and Make
Prerequisites
- Make account (Core plan or higher recommended for volume)
- HubSpot connection configured in Make via OAuth
- Apollo API key with People Search and Enrichment credits
Why Make?
Make lets you build this workflow visually with no code at all. The built-in HubSpot CRM module handles OAuth and pagination, and the Iterator module loops through Apollo results automatically. If you're already using Make for other automations, this keeps everything in one place.
The trade-off is operations cost. Each person in the loop uses 4-5 operations (iterate + enrich + dedup check + create + associate). A company with 10 decision makers = ~50 operations. On the Free plan (1,000 ops/month), that's only 20 companies. For high-volume prospecting, code or n8n is more cost-effective.
How it works
- Watch Companies module (or Webhook) triggers when a company is tagged as an ABM target
- HTTP module calls Apollo People Search by company domain, filtered to VP+/C-suite titles
- Iterator module loops through each person in the Apollo results
- Inside the loop: HTTP module enriches via Apollo People Match → HTTP module checks HubSpot for duplicates → HubSpot Create Contact module creates new contacts → HTTP module associates with the company
Step 1: Add a trigger for target companies
Create a new scenario. Choose your trigger:
Option A — Watch Companies module:
Add a HubSpot CRM → Watch Companies module set to watch updated companies. Use a router + filter after it to only process companies where abm_tier equals Tier 1.
Option B — Webhook trigger: Add a Webhooks → Custom Webhook module. Call this webhook from HubSpot workflows whenever a company is tagged as a target account. The payload should include the company ID and domain.
Step 2: Fetch company details
If using the Watch Companies trigger, add an HTTP module to fetch the company domain:
- URL:
https://api.hubapi.com/crm/v3/objects/companies/{{1.id}} - Method: GET
- Headers: Use HubSpot connection for auth
- Query String:
properties=domain,name,industry
Step 3: Search Apollo for decision makers
Add an HTTP module for Apollo's People Search:
- URL:
https://api.apollo.io/api/v1/mixed_people/search - Method: POST
- Headers:
Content-Type: application/json,X-Api-Key: {{your_apollo_key}} - Body:
{
"q_organization_domains_list": ["{{2.properties.domain}}"],
"person_titles": ["VP Sales", "CRO", "VP Marketing", "CMO", "VP RevOps", "Head of Sales"],
"person_seniorities": ["vp", "c_suite", "director"],
"page": 1,
"per_page": 25
}Instead of hardcoding titles in the HTTP body, create a Make variable or data store for your ICP titles. This makes it easier to adjust the search criteria without editing the HTTP module.
Step 4: Iterate through results
Add an Iterator module and set the array to {{3.people}} (the people array from Apollo's response).
Step 5: Enrich each person
Inside the iterator, add an HTTP module to call Apollo's People Match endpoint:
- URL:
https://api.apollo.io/api/v1/people/match - Method: POST
- Headers:
Content-Type: application/json,X-Api-Key: {{your_apollo_key}} - Body:
{
"first_name": "{{4.first_name}}",
"last_name": "{{4.last_name}}",
"organization_name": "{{4.organization.name}}",
"reveal_personal_emails": false
}Step 6: Check for existing contacts
Add an HTTP module to search HubSpot for existing contacts by email:
- URL:
https://api.hubapi.com/crm/v3/objects/contacts/search - Method: POST
- Body:
{
"filterGroups": [{
"filters": [{
"propertyName": "email",
"operator": "EQ",
"value": "{{5.email}}"
}]
}]
}Add a Filter between this module and the next: continue only if total equals 0.
Step 7: Create contacts in HubSpot
Add a HubSpot CRM → Create a Contact module (or HTTP module):
- Email:
{{5.email}} - First Name:
{{5.first_name}} - Last Name:
{{5.last_name}} - Job Title:
{{5.title}} - Company Name:
{{5.organization.name}}
Step 8: Associate contacts with the company
Add an HTTP module to associate each new contact with the original company:
- URL:
https://api.hubapi.com/crm/v3/objects/contacts/{{7.id}}/associations/companies/{{1.id}}/contact_to_company - Method: PUT
- Headers: Use HubSpot connection for auth
Each person in the loop uses ~4-5 operations (iterate + enrich + search existing + create + associate). Processing a company with 10 decision makers = ~50 operations per company. On the Free plan (1,000 ops/month), that's only 20 companies.
Step 9: Activate
- Run the scenario once manually with a test company
- Verify contacts appear in HubSpot with correct associations
- Set the scenario schedule and toggle to Active
Troubleshooting
Common questions
How many Make operations does one company use?
Each person in the loop uses 4-5 operations (iterate + enrich + search HubSpot + create contact + associate). A company with 10 decision makers = ~50 operations. On the Free plan (1,000 ops/month), that's about 20 companies.
Can I limit how many decision makers are processed per company?
Yes. Add a Tools > Set Variable module after the Iterator with a counter, and add a Filter that stops processing after 5 or 10 contacts. This caps operations per company and focuses on the most senior contacts (Apollo returns results sorted by relevance).
What if Apollo returns no results for a company?
The Iterator module will simply produce no iterations, and the scenario continues without errors. Add an IF module after the Apollo HTTP request to check if the people array is empty, and send a notification (Slack, email) if no decision makers were found for follow-up.
Cost
- Free plan: 1,000 ops/month. ~50 ops per company = ~20 companies/month.
- Core plan: $10.59/mo for 10,000 ops. ~200 companies/month.
- Apollo credits: 1 credit per search result + 1 per enrichment. Budget ~2 credits per person found.
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.