Oct 25, 2025

Enrich HubSpot Contacts with ExactBuyer & n8n

Keeping HubSpot contact records up to date drastically improves segmentation, lead scoring, and outreach personalization. This post walks through a ready-to-use n8n workflow that enriches newly created HubSpot contacts using ExactBuyer’s contact enrichment API. You’ll learn prerequisites, node configuration, mapping recommendations, error handling best practices, and tips for testing and monitoring. Why enrich HubSpot contacts? […]

Enrich HubSpot Contacts with ExactBuyer & n8n

Keeping HubSpot contact records up to date drastically improves segmentation, lead scoring, and outreach personalization. This post walks through a ready-to-use n8n workflow that enriches newly created HubSpot contacts using ExactBuyer’s contact enrichment API. You’ll learn prerequisites, node configuration, mapping recommendations, error handling best practices, and tips for testing and monitoring.

Why enrich HubSpot contacts?

Contact enrichment adds missing attributes — job title, company name, phone numbers, location, and more — to improve sales and marketing effectiveness. Automating enrichment with n8n and ExactBuyer reduces manual work, shortens time-to-value for new leads, and increases the usefulness of your CRM data for automation and personalization.

Overview of the n8n workflow

This template listens for new HubSpot contacts and performs these steps:

  • Trigger on contact creation in HubSpot (HubSpot Trigger node)
  • Retrieve the contact details (HubSpot node)
  • Extract the contact ID and email (Set node)
  • Check for an email and only continue if present (If node)
  • Call ExactBuyer’s enrichment endpoint with the contact email (HTTP Request node)
  • Map returned enrichment fields back to HubSpot fields and update the contact (HubSpot node)
  • If enrichment returns no data, notify a Slack channel and optionally handle via a no-op/error branch

Prerequisites

  • n8n running (cloud or self-hosted)
  • A HubSpot account with developer OAuth credentials and correct webhook scopes
  • An ExactBuyer API key with permission to use the enrichment endpoint
  • A Slack webhook or API credential for notifications (optional)

Important HubSpot OAuth scopes

HubSpot scopes must match exactly what n8n expects. Typical scopes required for this flow include contact read and write permissions. In many setups the webhook trigger uses a developer credential while the HubSpot nodes that fetch or update contacts use a different OAuth credential — this was called out in the template for security and operational separation.

Node-by-node configuration tips

1) HubSpot contact trigger

Use the HubSpot Trigger node to subscribe to contact.creation events. Configure your developer credentials and the specific event type. Confirm the webhook is active in HubSpot and that the portalId and subscription are valid.

2) Retrieve HubSpot contact

Use the HubSpot node with operation get and pass the contactId from the webhook payload. Note: the workflow template mentions using a different HubSpot credential than the trigger — ensure you set up OAuth2 correctly in n8n.

3) Extract contact keys (Set node)

Create variables for the contact ID and primary email: e.g. user_id = {{ $json.vid }} and email = {{ $json.properties.email?.value }}. You’ll use these keys for the enrichment request.

4) Check email present (If node)

Only call the enrichment API if an email was extracted. Use a simple notEmpty string validation on the email field so you avoid unnecessary API calls.

5) ExactBuyer enrich request (HTTP Request node)

Call: https://api.exactbuyer.com/v1/enrich

Use HTTP header auth with your ExactBuyer API key stored in n8n credentials. Send the email as a query parameter and include required fields to narrow results. Example query parameters used in the template:

?email={{ $json.email }}&required=work_email,personal_email,email

Set the node to continue on error (onError: continueErrorOutput) so you can branch for missing enrichment and alerting.

6) Update HubSpot contact (HubSpot node)

Map fields from the ExactBuyer response into HubSpot contact properties. Example mappings from the template:

  • firstName: {{ $json.result.first_name }}
  • lastName: {{ $json.result.last_name }}
  • jobTitle: {{ $json.result.employment?.job?.title }}
  • companyName: {{ $json.result.employment?.name }}
  • companySize: {{ $json.result.employment.size }}
  • phoneNumber: {{ $json.result.phone_numbers?.[0]?.E164 }}
  • country: {{ $json.result.location?.country }}
  • gender: {{ $json.result.gender }}
  • school: {{ $json.result.education?.[0]?.school?.name }}

Only set fields that are present in the enrichment response to avoid overwriting existing HubSpot values with nulls.

Error handling and notifications

The template uses a no-op (Handle missing enrichment) connected to a Slack node to notify when ExactBuyer returns no enrichment. Best practices include:

  • Notify a Slack channel with the contact email and HubSpot ID when enrichment is missing
  • Log failures to a persistent store for later analysis
  • Implement retries with exponential backoff for transient HTTP 5xx or rate-limit 429 errors
  • Respect ExactBuyer API rate limits — batch or queue enrichment if you exceed thresholds

Testing checklist

  • Confirm webhook subscriptions in HubSpot show delivered events
  • Create a test contact with an email you expect ExactBuyer to resolve
  • Verify the HTTP Request node returns a result object with expected fields
  • Confirm HubSpot contact properties are updated and not overwritten incorrectly
  • Test the missing-enrichment path by creating a contact with an unknown email and confirm Slack notifications

Security and compliance

Treat contact enrichment as processing PII. Follow these guidelines:

  • Store API keys and OAuth tokens in n8n credentials (encrypted at rest)
  • Limit HubSpot and ExactBuyer credentials to the minimal scopes necessary
  • Implement data retention and deletion processes in HubSpot to satisfy GDPR/CCPA requests
  • Document consent sources for enriched contacts where required

Customization ideas

  • Extend to company enrichment by calling ExactBuyer’s company endpoints and updating HubSpot Company records
  • Enrich only high-value leads (filter by source, lifecycle stage, or company size)
  • Store enrichment snapshots (raw ExactBuyer responses) in an audit table for data quality tracking
  • Use enrichment confidence scores to drive workflow segmentation in HubSpot

Monitoring and maintenance

Set up routine checks and alerts:

  • Track enrichment success rate and Slack alert volume
  • Monitor API usage and costs with ExactBuyer
  • Rotate API keys periodically and test credential refreshes
  • Review field mappings quarterly to match HubSpot property changes

Summary

Using this n8n template to enrich HubSpot contacts with ExactBuyer gives you immediate improvements in lead context and personalization. The workflow is modular — you can easily add rate limiting, additional validation, or company enrichment. Proper credential management, testing, and monitoring will ensure the integration runs reliably in production.

Next steps: Import the provided workflow template into your n8n instance, configure HubSpot OAuth credentials and your ExactBuyer API key, and run the testing checklist above.

Get the n8n template or contact us for help adapting it to your CRM processes.

Call-to-action: Import this workflow into n8n, connect your HubSpot and ExactBuyer credentials, and start enriching new contacts to power better sales outreach today.

Leave a Reply

Your email address will not be published. Required fields are marked *