# Validate every new HubSpot contact email before outreach

> Every new contact's email is checked the moment it lands, tagged with a clear verdict in your CRM, and flagged in Slack when it will bounce.

- Workflow type: agent
- Services: Mailgun, HubSpot, Slack Bot
- Categories: Sales, Operations
- Published: 2026-08-07

## What it does

- Checks the email address on every new contact the moment the record is created, before a rep or a campaign touches it
- Sorts each address into a plain verdict: good to send, will bounce, throwaway address, generic inbox like info@ or sales@, or a risky domain that accepts anything
- Writes the verdict and a short reason onto the contact record, so reps can filter lists and build segments around email quality
- Posts a short note to your sales ops channel only when an address will bounce or is a throwaway, so someone can chase a better one while the lead is still warm

## What you'll need

- A Mailgun account with email validation enabled
- A HubSpot login with permission to edit contact records
- Two custom contact properties in HubSpot, one for the verdict and one for the reason. You can name them whatever you like and point the workflow at them
- A Slack workspace and a channel for the alerts, such as #sales-ops

## Prompt

Whenever a new contact is created in HubSpot, check their email address with Mailgun before anyone wastes outreach on it. Use a webhook trigger fed by HubSpot's contact creation event, so this runs the moment the record appears rather than on a schedule.

Take the email address from the incoming contact and run Mailgun's Validate Single Address operation on it. That returns a result of deliverable, undeliverable, do_not_send, catch_all, or unknown, plus a risk level of low, medium, high, or unknown, boolean flags called is_disposable_address and is_role_address, an array of reasons, and a did_you_mean value holding the closest suggestion when the domain looks like a typo.

Interpret those signals into one short verdict a salesperson can act on. Deliverable with low risk is a pass. Undeliverable means the address will bounce. A true is_disposable_address flag means a throwaway inbox. A true is_role_address flag means a generic inbox such as info@, sales@, or support@ that reaches a shared mailbox rather than a named buyer. A catch_all result, or do_not_send, or medium and high risk, all mean risky: the mail server accepts anything, so nobody can confirm the person actually exists. Use judgement when the signals conflict, for example a role address that is also undeliverable should be reported as undeliverable because that is the more actionable problem. Alongside the verdict, write one short human-readable reason drawn from the reason array, and mention the did_you_mean suggestion when Mailgun offers one, since a typo is usually fixable on the spot.

Use HubSpot's Search Contacts operation to locate the contact record by email address, then use Update Contact to write the verdict into one custom contact property and the short reason into another. Keep the verdict values to a small consistent set such as Deliverable, Undeliverable, Disposable, Role-based, Risky, and Unknown, so reps can filter lists and build segments on that property rather than reading free text. Always write the property, including for deliverable addresses, so that every contact carries a known state instead of a blank.

When the verdict is undeliverable or disposable, post a short note to the #sales-ops Slack channel using Slack Bot's Send a Message operation. Name the contact, give the email address, and say in one line why it failed, including the suggested spelling if Mailgun provided one. Keep it to a few lines so someone can glance at it and go find a better address while the lead is still warm.

Deliverable addresses pass silently with no Slack message at all. Role-based and risky catch-all addresses are recorded on the contact record but do not warrant a ping either, since they are a segmentation concern rather than something to chase. Only genuinely dead or throwaway addresses should interrupt anyone.

## How to customize

- Change which verdicts are worth an alert. Some teams also want generic inboxes like info@ and sales@ surfaced, others only care about hard bounces
- Point the workflow at different contact properties, or add a third one to capture the suggested spelling when someone mistypes their email domain
- Swap the Slack channel, or send the alert as a direct message to the contact owner instead of posting it publicly

## FAQ

### Will this work on HubSpot Free?

Yes. It reads and updates ordinary contact records. You do need to be able to add custom contact properties to store the verdict, which HubSpot supports on paid tiers and on Free within its property limits.

### Does this send a test email to the contact?

No. The address is checked without delivering anything, so the person never receives a message and has no idea they were verified.

### What happens to addresses that are fine?

They get tagged as deliverable on the contact record and nothing else happens. Good addresses pass silently so your Slack channel only ever shows problems worth acting on.

### Why would I want info@ or sales@ addresses flagged?

Generic inboxes usually land in a shared mailbox rather than with a named buyer, so they get answered less often and can drag down your sender reputation. Flagging them lets a rep decide whether to go find a real person instead.

### What is a catch-all domain and why is it treated as risky?

Some company mail servers accept every address sent to them, even ones that do not exist, so there is no way to confirm the person is real. Rather than call that clean, the workflow marks it as risky so you can weigh the gamble.

Use this prompt in General Input: https://www.generalinput.com/prompts/validate-every-new-hubspot-contact-email-before-outreach