June 10, 202611 min read

How to Integrate an Email Finder with HubSpot (2026)

HubSpot contacts often arrive with a name and company but no email address — from trade show badge scans, LinkedIn connection imports, or manual data entry. Finding and verifying those email addresses manually doesn't scale.

Here are three ways to enrich HubSpot contacts automatically with verified emails using emailfinder.dev: a Zapier workflow (no code), a HubSpot custom coded action (low code), and a direct Node.js webhook (full control).

The problem

Manual email finding doesn't scale. If your team adds 50 contacts per week from events, LinkedIn, or lead lists, spending even five minutes finding each email is 250 minutes of wasted time. And that ignores the fact that manually guessed or unverified emails bounce, which damages your HubSpot sending domain.

HubSpot's own email finding is limited — it can sometimes surface email addresses for well-known contacts, but it doesn't live-verify them and coverage is inconsistent. An automated enrichment flow using emailfinder.dev's SMTP-verified results is more reliable.

Method 1: Zapier

The simplest method: create a Zap that fires when a new HubSpot contact is created, calls emailfinder.dev, and updates the contact with the verified email.

Trigger: HubSpot — New Contact. Action 1: Webhooks by Zapier — GET. URL: https://www.emailfinder.dev/api/find-email/person. Params: full_name (mapped from HubSpot first + last name), domain (mapped from HubSpot company domain). Headers: Authorization: Bearer your_api_key. Action 2: HubSpot — Update Contact. Map the email field from the Webhook response to the HubSpot Email field.

This requires no coding. The Zap runs automatically for every new contact. Zapier's free tier handles low volume; higher volumes need a paid Zapier plan.

Method 2: HubSpot custom coded action

HubSpot Workflows support custom coded actions — Node.js functions that run inside a HubSpot workflow step. This keeps everything inside HubSpot without a separate Zapier subscription.

In HubSpot: create a Workflow triggered by Contact enrollment. Add a Custom coded action step. Paste this code:

const axios = require('@hubspot/api-client'); exports.main = async (event, callback) => { const fullName = event.inputFields['firstname'] + ' ' + event.inputFields['lastname']; const domain = event.inputFields['company_domain']; const res = await fetch( `https://www.emailfinder.dev/api/find-email/person?full_name=${encodeURIComponent(fullName)}&domain=${encodeURIComponent(domain)}`, { headers: { Authorization: `Bearer ${process.env.EMAILFINDER_API_KEY}` } } ); const data = await res.json(); callback({ outputFields: { verified_email: data.status === 'found' ? data.email : '', }, }); };

Set your EMAILFINDER_API_KEY in the workflow's secret variables. Add a subsequent Update Contact step that maps verified_email to the Email property.

Method 3: Direct Node.js webhook

For full control — custom logic, logging, enriching multiple properties at once — run your own Node.js server that HubSpot calls via a webhook.

Set up a HubSpot workflow with an outbound webhook step pointing to your endpoint. Your server receives the contact data, calls emailfinder.dev, and updates the HubSpot contact via the HubSpot API:

import express from 'express'; import { Client } from '@hubspot/api-client'; const app = express(); const hubspot = new Client({ accessToken: process.env.HUBSPOT_TOKEN }); app.use(express.json()); app.post('/enrich-contact', async (req, res) => { res.json({ received: true }); // respond immediately const { contactId, firstname, lastname, company_domain } = req.body; const fullName = `${firstname} ${lastname}`; const result = await fetch( `https://www.emailfinder.dev/api/find-email/person?full_name=${encodeURIComponent(fullName)}&domain=${company_domain}`, { headers: { Authorization: `Bearer ${process.env.EMAILFINDER_API_KEY}` } } ).then(r => r.json()); if (result.status === 'found') { await hubspot.crm.contacts.basicApi.update(contactId, { properties: { email: result.email, jobtitle: result.title ?? '' } }); } }); app.listen(3000);

Which method to choose

Zapier: easiest to set up, no code, but requires a Zapier subscription for anything beyond the free tier. Best for small teams with low contact volume.

HubSpot custom coded action: no extra service, runs inside HubSpot workflows, good for teams already invested in HubSpot automation. Some JavaScript knowledge required.

Direct webhook: most flexible, full logging and error handling, enriches multiple properties at once, can apply custom business logic. Requires hosting a Node.js server.

Cost analysis

Each person email lookup costs 1 credit at €0.009. Enriching 1,000 new HubSpot contacts costs €9 in emailfinder.dev credits. Failed lookups (contacts where no verified email is found) cost nothing.

Compare that to a data enrichment tool with a per-seat or per-record pricing model — for a team adding thousands of contacts per month, pay-as-you-go is significantly cheaper.

Start enriching HubSpot contacts free

Free credits included. No credit card required.