---
title: "Recipe: Real-Time Email Verification in HubSpot"
description: Streamline email verification in HubSpot with Kickbox integration for real-time validation by sales reps and automated workflows.
image: https://tomdelaney.us/hubfs/Gemini_Generated_Image_c8rku4c8rku4c8rk.png
---

[![White Modern Minimalist Signature Brand Logo (Website) (4)](https://24279033.fs1.hubspotusercontent-na1.net/hubfs/24279033/White%20Modern%20Minimalist%20Signature%20Brand%20Logo%20(Website)%20(4).png)](https://tomdelaney.us)

- [Resume](https://tomdelaney.us/resume)
- [Blog](https://tomdelaney.us/blog)
- [Portfolio](https://tomdelaney.us/portfolio)

[Contact Me](https://tomdelaney.us/contact-me)

Search **the website**

# Recipe: **Real-Time Email Verification in HubSpot**

![](//24279033.fs1.hubspotusercontent-na1.net/hubfs/24279033/raw_assets/public/@marketplace/if_else_agency/Aesthetics/assets/images/icons/arrow-down.svg)

![](https://24279033.fs1.hubspotusercontent-na1.net/hubfs/24279033/Gemini_Generated_Image_c8rku4c8rku4c8rk.png)

## Share this **post**

# Recipe: Real-Time Email Verification in HubSpot

**A Kickbox integration served two ways — on-demand for your sales team, automated for your marketing stack.**

---

## About This Recipe

Most CRM setups treat email verification as an afterthought — a bulk process run occasionally by an admin. This recipe takes a different approach: baking verification directly into HubSpot so that both individual sales reps and automated workflows can validate email quality exactly when it matters.

The result is a two-component integration: a **CRM UI card** for on-demand lookups, and a **custom workflow action** for automated verification at any point in your contact lifecycle.

---

| **Difficulty** | Intermediate |
| --- | --- |
| **Prep Time** | ~30 mins (accounts & environment setup) |
| **Cook Time** | ~1 hour (full implementation) |
| **Serves** | Sales reps, marketing teams, and HubSpot admins |
| **Allergens** | CRM UI card requires any HubSpot **Enterprise** tier; Workflow Action requires **Operations Hub Professional** or higher; both are free on a developer test account |

---

## Ingredients

**Accounts & Keys**

- 1× HubSpot account with admin access — production/sandbox (Enterprise or Ops Hub Pro tier required), or a [free developer test account](https://developers.hubspot.com/get-started) which bypasses tier gates entirely
- 1× [Kickbox Account](https://kickbox.com/) with an API key
- 1× Postman (or any API client) — for the UI card component only

**Environment**

- Node.js 18 or higher
- HubSpot CLI (`npm install -g @hubspot/cli`)
- A code editor (VS Code recommended)
- This repository: `https://github.com/Suixcity/kickbox`

**From the pantry (provided in this repo)**

- React 18 UI extension — the contact record card
- Two serverless functions — backend verification logic
- A complete HubSpot project config — ready to deploy

---

## Method

### Mise en Place — Get Your Station Ready

Before you touch the stove, prep your ingredients:

1. **Choose your HubSpot account** — you can deploy to a production account, a sandbox, or a free developer test account. A test account is the safest place to start if you haven't done this before
2. Enable **CRM Development** and generate a **Personal Access Key** for that account
3. Authenticate the HubSpot CLI with that key:
   
   ```
   hs account auth 
   ```
4. Add your two secrets — think of these as your mise en place, measured out and ready:
   
   ```
   hs secret add kickbox        # Your Kickbox API key hs secret add private_app    # Placeholder for now — you'll swap this shortly 
   ```

> **Chef's note:** Secret names must be exact. `kickbox` and `private_app` are referenced directly in the code. A typo here will leave your dish under-seasoned.

---

### Part One: The UI Card

*A card embedded in the HubSpot contact record — one click, instant verification.*

**1. Clone and deploy**

Pull the recipe from the repo and upload it to HubSpot in two commands:

```
git clone https://github.com/Suixcity/kickbox cd kickbox/Kickbox hs project upload 
```

HubSpot will build and deploy the project. When it finishes, a legacy app called **kickbox-verification** will appear in your HubSpot account — that's your dish coming out of the oven.

**2. Glaze with the real access token**

Grab the access token from the newly created legacy app (Development → Legacy Apps → kickbox-verification → Auth tab → Access Token) and update the placeholder secret:

```
hs secret update private_app 
```

**3. Create the CRM properties**

This step creates the 11 custom contact properties that verification results will be written into. Think of it as setting the table before the guests arrive.

First, create a **property group** in HubSpot named exactly `kickbox`:

> Settings → Properties → Groups → Create group: `kickbox`

Then fire a batch `POST` request to the HubSpot properties API, authenticated with your legacy app token. The full JSON payload is available in the [GitHub repo](https://github.com/Suixcity/kickbox) — it creates all properties in one shot and should return a `201 COMPLETE`. Use Postman (web or desktop) or `curl` — either works fine.

**4. Add the cards to contact records**

Settings → Objects → Contacts → Record Customization → Default view → **+** → Card library

Two cards are available:

- **Kickbox Card - Tab** — full tab view on the contact record
- **Email Verification Card - Side** — compact sidebar version

Add one or both, save, and you're plated.

**5. Taste test**

Open any contact with an email address, click **"Verify Email with Kickbox"**, and confirm the results appear. A success banner and populated properties mean the dish is ready to serve.

---

### Part Two: The Workflow Action

*A custom coded action for automated verification inside HubSpot workflows.*

This component uses a separate secret named `kickboxapi` — note the different name from `kickbox` used in Part One. Both can coexist in the same HubSpot account.

**1. Season with the secret**

Add your Kickbox API key under the new secret name:

```
hs secret add kickboxapi 
```

Or add it directly inside the workflow action editor in the next step.

**2. Build the action**

In HubSpot, go to **Automation → Workflows**, open or create a contact-based workflow, and add a **Custom Coded Action** step:

- **Runtime:** Node.js 20.x
- **Secret:** `kickboxapi`
- **Input:** Email field → mapped to the contact's email property
- **Code:** Paste the full action code from the [GitHub repo](https://github.com/Suixcity/kickbox)

**3. Configure your outputs**

The action returns 10 output fields — the full verification payload from Kickbox. These become data tokens usable in any downstream workflow step:

| Output | Type | What it tells you |
| --- | --- | --- |
| `result` | Enumeration | Deliverable / Risky / Undeliverable / Unknown |
| `reason` | Enumeration | The specific reason code |
| `sendex` | Number | Reputation score 0–1 |
| `disposable` | Boolean | Throwaway email domain? |
| `accept` | Boolean | Domain accepts all mail? |
| `role` | Boolean | Role address (info@, support@)? |
| `free` | Boolean | Free email provider? |
| `nemail` | String | Normalised email address |
| `didyoumean` | String | Spelling correction suggestion |
| `success` | Boolean | Did the API call succeed? |

**4. Build your branching logic**

With the output in hand, add an `If/Then` branch after the action — for example:

```
result = "deliverable"  →  Enrol in sales sequence result = "risky"        →  Flag for manual review result = "undeliverable" → Add to suppression list 
```

This is where the flavour really comes through — email quality becomes an active signal in your automation, not a static field that gets checked once a quarter.

---

## Plating Notes

- Both components write to the same set of HubSpot contact properties, so verification data is consistent whether it came from a sales rep clicking the card or an automated workflow running overnight
- The Kickbox API key is never exposed client-side — all calls pass through serverless backend functions and HubSpot's encrypted secrets store
- Properties are created once and persist on all contact records going forward

---

## Serving Suggestion

A common pattern worth stealing:

> New contact enters the CRM → Workflow action verifies email → Branch on result → Deliverable contacts route to sales → Everything else gets flagged or suppressed

This ensures your sales team only ever receives contacts with verified email addresses — and your marketing lists stay clean without anyone having to run a manual bulk check.

---

## Shelf Life

This recipe is built on HubSpot project platform **v2025.1** — and HubSpot's platform versioning has been, frankly, inconsistent. Features have been dropped and reintroduced between minor versions, and naming conventions have shifted mid-cycle (the CLI still calls the deployed app a `[private app]` in its output while the HubSpot UI lists it under **Legacy Apps**).

The current situation: v2025.1 is unsupported after 1 August 2026. The migration target is v2025.2 — but v2025.2 removes serverless functions, which this recipe depends on for its backend. Serverless is scheduled to return in **v2026.03**, available from ~30 March 2026.

**The plan:** skip v2025.2, wait for v2026.03, and update this recipe at that point. If you're reading this after March 2026 and the guides feel stale, that migration is likely the culprit — check the [HubSpot developer changelog](https://developers.hubspot.com/changelog) for the current state of play.

---

## Full Recipe

The complete source code, detailed step-by-step setup guides, and the full Postman payload are available in the GitHub repository:

**[github.com/Suixcity/kickbox](https://github.com/Suixcity/kickbox)**

---

*Part of a professional portfolio — [view the project brief](https://tomdelaney.us/email-validation-portfolio)*

![Thomas Delaney](https://app.hubspot.com/settings/avatar/6aa77e4b15fadd044100136646f8d3a4)

[**Thomas Delaney**](https://tomdelaney.us/blog/author/thomas-delaney)

People are talking about this blog post

### Related blog posts

[![Recipe: Channel Partners, Matched and Plated at the Table](https://24279033.fs1.hubspotusercontent-na1.net/hubfs/24279033/Gemini_Generated_Image_vpvzanvpvzanvpvz.png) Recipe: Channel Partners, Matched and Plated at the Table on Mar 6, 2026 11:53:11 AM](https://tomdelaney.us/blog/recipe-channel-partners-matched)

[![Recipe: Ad Network Feedback, Finally Worth Serving](https://24279033.fs1.hubspotusercontent-na1.net/hubfs/24279033/Gemini_Generated_Image_eyl073eyl073eyl0.png) Recipe: Ad Network Feedback, Finally Worth Serving on Mar 6, 2026 10:49:30 AM](https://tomdelaney.us/blog/recipe-ad-network-feedback-finally-worth-serving)

[![Recipe: Contracts to CRM, Delivered While Still Hot](https://24279033.fs1.hubspotusercontent-na1.net/hubfs/24279033/Gemini_Generated_Image_lhgafjlhgafjlhga.png) Recipe: Contracts to CRM, Delivered While Still Hot on Mar 5, 2026 11:29:31 AM](https://tomdelaney.us/blog/recipe-contracts-delivered-while-still-hot)

## Related **blog posts**

<https://tomdelaney.us/blog/recipe-channel-partners-matched>

![](https://24279033.fs1.hubspotusercontent-na1.net/hubfs/24279033/Gemini_Generated_Image_vpvzanvpvzanvpvz.png)

**Recipe: Channel Partners, Matched and Plated at the Table**

 Recipe: Channel Partners, Matched and Plated at the Table Yield: Partner assignments that live in HubSpot, not in...

 Read more

<https://tomdelaney.us/blog/recipe-ad-network-feedback-finally-worth-serving>

![](https://24279033.fs1.hubspotusercontent-na1.net/hubfs/24279033/Gemini_Generated_Image_eyl073eyl073eyl0.png)

**Recipe: Ad Network Feedback, Finally Worth Serving**

 Recipe: Ad Network Feedback, Finally Worth Serving Yield: Google Ads and LinkedIn Ads that know what actually happened...

 Read more

<https://tomdelaney.us/blog/recipe-contracts-delivered-while-still-hot>

![](https://24279033.fs1.hubspotusercontent-na1.net/hubfs/24279033/Gemini_Generated_Image_lhgafjlhgafjlhga.png)

**Recipe: Contracts to CRM, Delivered While Still Hot**

 Read more

![White Modern Minimalist Signature Brand Logo (Website) (5)](https://24279033.fs1.hubspotusercontent-na1.net/hubfs/24279033/White%20Modern%20Minimalist%20Signature%20Brand%20Logo%20(Website)%20(5).png)

This website is the personal project of Thomas Delaney and the views and thoughts expressed are strictly his own and do not represent any other entity. 

```json
{
  "@context" : "https://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "Thomas Delaney",
    "url" : "https://tomdelaney.us/blog/author/thomas-delaney"
  },
  "dateModified" : "2026-03-04T16:46:36.617Z",
  "datePublished" : "2026-03-03T21:51:44.000Z",
  "headline" : "Recipe: Real-Time Email Verification in HubSpot",
  "image" : [ "https://tomdelaney.us/hubfs/Gemini_Generated_Image_c8rku4c8rku4c8rk.png" ],
  "mainEntityOfPage" : {
    "@id" : "https://tomdelaney.us/blog/real-time-email-verification",
    "@type" : "WebPage"
  },
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "url" : "https://tomdelaney.us/hubfs/White%20Modern%20Minimalist%20Signature%20Brand%20Logo.png"
    }
  }
}
```