To improve email deliverability in HubSpot, stop bad addresses at the door. HubSpot already drops contacts from future marketing emails once they hard bounce, but by then the bounce has happened and counted against your sender reputation. A mailbox check when the contact is created catches typos, dead mailboxes and disposable addresses first.
This guide shows three working setups: HubSpot’s own Send a webhook action, a Custom code action, and the Emailvalidation app on Zapier. All three call the same endpoint of our email validation API, GET /v1/info, and write the answer to a contact property you can filter on.
What you get
For every new contact, the API runs six checks: syntax, DNS and MX lookup, an SMTP mailbox check that never sends an email, and detection of disposable, role and free-provider addresses. HubSpot stores the answer. The fields you will use most:
| Field | Values | Use in HubSpot |
|---|---|---|
state | deliverable, undeliverable, unknown | Keep undeliverable out of marketing sends |
reason | for example invalid_mailbox, invalid_mx, low_ | Tell typos from dead domains; low_ marks catch-all domains |
disposable | true / false | Flag throwaway sign-ups |
did_you_mean | a suggested address or empty | Show sales a likely typo fix |
unknown means the receiving mail server gave no clear answer (timeout, no connection). Treat it as “not checked yet”, not as bad. Catch-all domains accept every address, so their mailboxes can’t be confirmed one by one; they come back as deliverable with the reason low_deliverability. The catch-all email guide explains how to handle them.
HubSpot email validation: which setup to use
| Setup | HubSpot subscription | Code | Best for |
|---|---|---|---|
| Send a webhook | Data Hub Professional or Enterprise | None | Most teams with Data Hub |
| Custom code | Data Hub Professional or Enterprise | JavaScript or Python (beta) | Error handling, several outputs at once |
| Zapier | Any HubSpot plan | None | Teams without Data Hub |
HubSpot lists both workflow actions under Data Hub Professional and Enterprise (webhooks, custom code).
Setup in steps: Send a webhook
Before you start, create an API key in your emailvalidation.io account, store it as a secret in HubSpot, and create a single-line text contact property, for example “Email validation state”.
- Go to Automation > Workflows and create a contact-based workflow. Enroll contacts when they are created, or when their Email property changes.
- Click the + icon to add an action. In the left panel, under Data ops, select Send a webhook.
- Set Method to GET and Webhook URL to
https://api..emailvalidation.io/ v1/ info - Set Authentication type to API key. Enter
apikeyas the API key name, choose Request header as the API key location, and select your secret in the API key dropdown. The key never appears in the workflow itself. - Under Query parameters, enter the Key
emailand select the contact’s Email property. - Expand Test action, pick a test contact and click Test. The Response tab shows the JSON answer.
- Select
stateandreasonas outputs. HubSpot advises choosing only outputs that are present in every response; these two always are. - Add an Edit record action and set “Email validation state” to the webhook’s
stateoutput. - Click Save and turn the workflow on.
On the free emailvalidation.io plan, the API accepts 10 requests a minute. If you enroll many contacts at once, open Configure rate limit on the action, turn on Turn on rate limiting and set 10 action executions per minute. Paid plans have no per-minute limit.
Setup in steps: Custom code
The Custom code action gives you full control over errors. It runs Node.js or Python (beta), has 20 seconds to finish and can use the axios library.
- Add an action and search for Custom code.
- Click Add secret and create one named
EMAILVALIDATION_API_KEYwith your API key as the value. - Under Properties to include in code, select the contact’s Email property and name it
email. - Paste the code below.
- Under Data outputs, add
state(string),reason(string) anddisposable(boolean).
const axios = require('axios');
exports.main = async (event, callback) => {
const email = event.inputFields['email'];
try {
const res = await axios.get('https://api.emailvalidation.io/v1/info', {
params: { email },
headers: { apikey: process.env.EMAILVALIDATION_API_KEY },
timeout: 15000,
});
callback({
outputFields: {
state: res.data.state,
reason: res.data.reason,
disposable: res.data.disposable,
},
});
} catch (err) {
const status = err.response ? err.response.status : 0;
// Quota/rate limit (429) or server error: throw, and HubSpot retries the action later.
if (status === 429 || status >= 500) {
throw err;
}
// Anything else (wrong key, bad input, timeout): record "unknown" and let the contact continue.
callback({ outputFields: { state: 'unknown', reason: '', disposable: false } });
}
};
When the code throws a 429 or 5XX error from an axios call, HubSpot retries the action for up to three days, starting one minute after the failure. A 401 (missing or wrong key) or 422 (invalid input) won’t fix itself, so the code records unknown instead of retrying, and so does a request that times out after 15 seconds.
Setup in steps: Zapier
Zapier works with every HubSpot plan. The Emailvalidation app on Zapier has one action, Verify E-Mail Address, and ready-made templates such as “Verify new HubSpot form submissions with Emailvalidation” and “Unsubscribe new HubSpot contacts with invalid emails via Emailvalidation”.
- Connect your emailvalidation.io account in Zapier, as described on the Zapier integration page.
- Create a Zap with the HubSpot trigger New Contact (or New Form Submission).
- Add the Emailvalidation action Verify E-Mail Address and map the contact’s email to E-Mail Address.
- Test the step to see the fields it returns.
- Add the HubSpot action Update Contact and write the result into your “Email validation state” property.
A Zap with three steps needs a paid Zapier plan; Zapier’s free plan runs two-step Zaps and 100 tasks a month (Zapier pricing, checked October 2026). Make’s HTTP app (Make a request) and n8n’s HTTP Request node can call the same endpoint if you use those tools instead.
Example: a workflow that improves HubSpot email deliverability
A B2B team collects leads through a HubSpot form and sends a welcome sequence:
- Trigger: contact is created.
- Send a webhook checks the address and returns
stateandreason. - Edit record writes
stateto “Email validation state”. - A branch based on one property or action output splits on that property:
undeliverable: Add to static list “Undeliverable – do not email” and Send internal email notification to the contact owner, who can ask the lead for a corrected address.deliverableorunknown: continue to the welcome sequence.
- Exclude the “Undeliverable – do not email” list in every marketing email.
Add to static list needs Marketing Hub Professional or Enterprise. Without it, filter your sends on the “Email validation state” property instead.
For contacts you already have, export them to CSV, run the file through the bulk endpoint or our email list cleaning service, and import the results back into HubSpot to set the same property. For a quick look at a handful of addresses, the bulk email verifier on our website takes up to 50 per run.
Removing bad addresses is one part of deliverability. Authentication (SPF, DKIM, DMARC), list hygiene and engagement matter as much; the email deliverability guide covers them, and email bounce rate explains the thresholds mailbox providers watch.
Pricing note
Each check uses 1 credit, and only successful calls count: a request rejected with 422 or a server error costs nothing. The free plan includes 100 credits a month. Paid plans start at $9.99 a month for 5,000 credits (Small), then $34.99 for 25,000 (Medium) and $94.99 for 100,000 (Large), excluding VAT; see email validation API pricing. A workflow that checks only new contacts uses one credit per contact; re-enrolling on every Email property change adds a credit per change.
Sources
Checked October 10, 2026: HubSpot Knowledge Base, Use webhooks with HubSpot workflows (subscription, fields, outputs, retries, rate limits); HubSpot Developers, Custom code workflow actions (secrets, inputs, outputs, 20-second limit, libraries); HubSpot Knowledge Base, Choose your workflow actions; HubSpot Knowledge Base, Email error when sending to a contact and Hard and soft bounces; Zapier, Emailvalidation integrations and HubSpot integrations; Zapier pricing; Make, HTTP app; n8n, HTTP Request node.