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
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
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.
Need help implementing this?
We build and optimize automation systems for mid-market businesses. Let's discuss the right approach for your team.