intermediate45 minutes3 min read

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.

How to batch enrich HubSpot contacts missing job title or company size

This recipe includes a downloadable n8n template and Claude Code skill.

Workflow

Weekly schedule
Find incomplete contacts
Enrich via Apollo
Update HubSpot contacts

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_date and enrichment_source to every updated contact for tracking
What you'll get
HubSpot Contact
Job Title
(empty)Director of Marketing
Phone
(empty)+1 (212) 555-0198
Company Size
(empty)201-500
LinkedIn URL
(empty)linkedin.com/in/slee

How it works

Every approach follows the same three-phase pattern:

  1. Search for gaps — query HubSpot's Search API with NOT_HAS_PROPERTY filters to find contacts missing critical fields like job title or company
  2. 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
  3. 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

Prerequisites
  • 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

n8n

medium
Cost: $0-24/mo
Latency: polling
Code: low
Reliability: 24/7 cloud

Zapier

medium
Cost: $20-50/mo
Latency: real-time
Code: none
Reliability: 24/7 cloud

Make

medium
Cost: $10-29/mo
Latency: polling
Code: none
Reliability: 24/7 cloud

Code + Cron

medium
Cost: $0
Latency: real-time
Code: high
Reliability: Self-hosted

Claude Code

low
Cost: Usage-based
Latency: on-demand
Code: none
Reliability: On demand

n8n

medium

Schedule → HubSpot Search (missing fields) → Loop → Apollo enrich → HubSpot Update

Downloadable templateView guide

Zapier

medium

Schedule trigger → Webhooks to HubSpot search → Code to enrich → Update

Cost: $20-50/moView guide

Make

medium

Scheduler → Search Contacts → Iterator → Apollo HTTP → Update Contact

Cost: $10-29/moView guide

Code + Cron

medium

Python script to search, enrich, and update contacts in batches

Cost: $0View guide

Claude Code

low

Guided Claude Code skill with API references — batch enrich contacts conversationally, on a schedule, or via Cowork

Downloadable skillView guide

Related Recipes

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.