# HubSpot Integration: Email Validation

URL: https://email-validation.org/integrations/hubspot/
Updated: 2026-11-06

> Documentation index: https://email-validation.org/llms.txt

Check each contact’s email address as it enrolls in a HubSpot workflow, and save the status in a contact property. It runs in HubSpot’s Custom code action with your API key, so there is no app to install.

[Read the full setup guide](https://email-validation.org/docs/guides/hubspot/) [Get an API key](https://email-validation.org/signin/)

- Status: Setup guide
- A Custom code action in your workflow

**Custom code action** Node.js

Action settings

```text
Secret          EV_API_KEY = your API key
Property        email = the contact’s Email
Code            the script from the guide
Data outputs    status, reason, action,
                did_you_mean, error_code (String)
```

## At a glance.

- **Status**: **Setup guide.** Not listed on a marketplace yet: you set it up yourself in a few steps, below and in the full guide.
- **For**: HubSpot teams who want every new contact’s email checked automatically, so a sequence or a marketing email can skip the addresses that will bounce.
- **You need**: HubSpot Data Hub Professional or Enterprise (for the Custom code action), a single-line text contact property for the result, and an [API key](https://email-validation.org/app/api-keys/) made for it, with a [daily credit cap](https://email-validation.org/docs/authentication/#limits).
- **Costs**: 1 credit = 1 validated address, as with any API request. Free: unknown results, API errors, malformed addresses and test addresses on sandbox.email-validation.org.
- **Full guide**: [Read the full setup guide](https://email-validation.org/docs/guides/hubspot/)

## Typical uses.

- **Validate new contacts**: Enroll contacts when they are created and store each one’s status, valid, invalid, catch\_all, unknown or disposable, on the contact.
- **Branch on the action**: Decide what happens next from the recommended action: send, send\_with\_caution, remove or retry\_later.
- **Handle errors**: When a check cannot finish, the status is empty and error\_code says why, so an If/then branch can notify someone instead.

## Set it up. 4 steps.

The short version of the [full setup guide](https://email-validation.org/docs/guides/hubspot/), which stays the reference when a step does not match what you see.

1. **Add Custom code**: In a contact-based workflow, add the Custom code action with the Node.js language.
2. **Store your key**: Add a secret named EV\_API\_KEY with your key, and include the contact’s Email property as email.
3. **Paste the script**: Replace the code with the script from the guide and add five String outputs: status, reason, action, did\_you\_mean and error\_code.
4. **Save the status**: Test on a contact with `accepted@sandbox.email-validation.org`, then add an Edit record action that sets your property to the status output.

## Good to know.

- When the API is busy or the key hits its rate limit, the script hands the error back to HubSpot, which runs the action again later.
- The script does not resend a check that got no answer, because it may already have counted: re-enroll that contact instead.
- A workflow that enrolls many contacts at once can reach the rate limits: set a rate limit on the action in the workflow editor.
- For EU data residency, change the script’s `API_URL` to the address in the comment above it. For a whole list, upload it as a [bulk list](https://email-validation.org/docs/bulk/) and import the results.

## Related

- [The full HubSpot setup guide](https://email-validation.org/docs/guides/hubspot/)
- [Every error\_code and what to do](https://email-validation.org/docs/guides/hubspot/#errors)
- [Statuses and reasons](https://email-validation.org/docs/statuses/)
- [Rate limits](https://email-validation.org/docs/rate-limits/)
- [All integrations](https://email-validation.org/integrations/)
