How to batch enrich HubSpot contacts missing job title or company size
Run a weekly search for HubSpot contacts missing job title or company, batch-call Apollo's enrichment API, and write back only empty fields with an audit timestamp.

This recipe includes a downloadable n8n template and Claude Code skill.
Workflow
Why batch enrich?
Every CRM accumulates data gaps. Event imports arrive with just a name and email. List purchases come without titles. Form fills skip optional fields. Over time, 30-50% of contacts in a typical HubSpot portal are missing at least one field that scoring, routing, or personalization depends on.
The cost of incomplete data compounds. Leads without a job title can't be scored. Contacts without a company size get routed to the wrong rep. Sequences that merge on industry send a blank. A weekly batch enrichment job finds these gaps and fills them automatically:
- Finds contacts with gaps — searches HubSpot for contacts missing job title, company, phone, or industry
- Enriches in bulk — calls Apollo's bulk match endpoint with up to 10 contacts per request, reducing API calls and processing time
- Protects manual data — only writes to fields that are currently empty, never overwriting values a rep entered
- Stamps audit metadata — writes
enrichment_dateandenrichment_sourceto every updated contact for tracking
How it works
Every approach follows the same three-phase pattern:
- Search for gaps — query HubSpot's Search API with
NOT_HAS_PROPERTYfilters to find contacts missing critical fields like job title or company - Enrich via Apollo — send each contact's email to Apollo's People Match or bulk match endpoint to retrieve title, company, phone, LinkedIn, and industry
- Write back selectively — update only the empty fields on each contact, preserving any data that was manually entered or previously enriched
The pipeline runs on a weekly schedule, catching contacts imported during the previous week before Monday's scoring and routing workflows fire.
What you'll need
- HubSpot account with API access
- Apollo API key with enrichment credits
- A defined list of "critical fields" to check (e.g., job title, company, company size)
Which approach should I use?
- n8n — best for teams that want a visual workflow with full control over branching and error handling. Self-hosted n8n is free with unlimited executions, so the only variable cost is Apollo credits. Requires configuring 7-8 nodes with HTTP requests and Code nodes.
- Zapier — works if you're already on Zapier and enriching fewer than 20 contacts per week. Looping charges tasks per step per iteration, so costs escalate quickly with batch sizes above 15. No native Apollo integration — uses Webhooks by Zapier.
- Make — good middle ground between visual and cost-effective. The Iterator handles batching naturally, and
ifempty()functions simplify the "only fill empty fields" logic. Credit costs are lower than Zapier's task model. - Code + Cron — most cost-effective for batches over 50 contacts. Zero platform fees, full control over the bulk_match endpoint (10 contacts per request), and easy to extend with custom field mapping or CSV export. Requires maintaining a script and scheduling environment.
- Claude Code — a guided skill that lets you batch enrich conversationally ("enrich contacts missing job titles") or on a cron schedule. No code to write — the agent reads API reference files and handles the search, enrich, and update steps. Best for ad-hoc enrichment or teams testing Apollo's fill rates before committing to a platform.
Choose your approach
Select an approach below to see the full step-by-step guide.
Compare approaches
| Approach | Complexity | Cost | Latency | Code | Reliability |
|---|---|---|---|---|---|
n8n | medium | $0-24/mo | polling | low | 24/7 cloud |
Zapier | medium | $20-50/mo | real-time | none | 24/7 cloud |
Make | medium | $10-29/mo | polling | none | 24/7 cloud |
Code + Cron | medium | $0 | real-time | high | Self-hosted |
Claude Code | low | Usage-based | on-demand | none | On demand |
n8n
mediumZapier
mediumMake
mediumCode + Cron
mediumClaude Code
lown8n
mediumSchedule → HubSpot Search (missing fields) → Loop → Apollo enrich → HubSpot Update
Zapier
mediumSchedule trigger → Webhooks to HubSpot search → Code to enrich → Update
Make
mediumScheduler → Search Contacts → Iterator → Apollo HTTP → Update Contact
Claude Code
lowGuided Claude Code skill with API references — batch enrich contacts conversationally, on a schedule, or via Cowork
Related Recipes
How to waterfall enrich HubSpot contacts across Apollo, Clearbit, and People Data Labs
HubSpot + Apollo + Clearbit + People Data Labs
How to automatically enrich new HubSpot contacts with Apollo
HubSpot + Apollo
How to find and verify work emails for a HubSpot prospect list using Apollo and Hunter
HubSpot + Apollo + Hunter
How to automatically enrich new Salesforce contacts with Apollo
Salesforce + Apollo
Frequently Asked Questions
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.