How to clean HubSpot contacts

To clean HubSpot contacts, verify their addresses, store each result in a contact property, and build active segments on that property: one to suppress, one to send to with care, one to check again. HubSpot already stops mailing addresses that hard bounce and holds back contacts who ignore your emails, but both happen only after you have sent. You can verify an exported file in bulk, or let a HubSpot workflow check each contact as it enrolls (our custom code recipe). Then set the contacts you will never mail as non-marketing, or delete them, keeping in mind how each choice affects billing.

What HubSpot already does

Bounces

HubSpot's email bounce types article describes four kinds:

The contact property Email hard bounce reason shows why a contact hard bounced. It stays empty for a global bounce that never bounced in your own account. Another HubSpot article notes that globally bounced contacts do not show up in segments or filters of hard bounced contacts (HubSpot: Delete contacts who no longer receive your marketing emails).

Bounces also count toward HubSpot's limits. Its sending suspensions article lists a hard bounce rate of 5% and a spam report rate of 0.1% within a month among the levels that can suspend your marketing email. How these rates compare with other senders' figures is in bounce rate benchmarks.

Graymail suppression

HubSpot defines graymail as email that contacts opted in to but do not open or click. The setting Don't send to unengaged contacts is on by default and skips a contact who never engaged and ignored your last 11 emails, or who engaged before and ignored the last 16 (HubSpot: Understand graymail). Skipped contacts appear under Not Sent with the reason Unengaged.

Graymail suppression is about engagement. It cannot tell you that an address you have never mailed will bounce, and it needs a long run of ignored emails before it acts. Verification answers the other question: can mail to this address arrive at all?

Marketing and non-marketing contacts

On Marketing Hub, only marketing contacts are billed, and they count toward your contact tier (HubSpot: Understand marketing contacts billing). You pay only for the contacts you want to market to; others, such as existing customers you do not plan to engage with through marketing tools, can be set as non-marketing (HubSpot: Set contacts as marketing). Two billing rules shape your cleanup:

Two ways to verify

ItemExport and bulk listCustom code workflow
Best forA one-time cleanup of the whole databaseNew contacts, and re-checks over time
HubSpot planAny plan that can export and import contactsData Hub Professional or Enterprise
How results arriveYou import the result fileThe workflow writes the property

Many teams do both: a bulk cleanup once, then the workflow for every contact created after it. The workflow recipe, with the script and its settings, is in our HubSpot custom code guide.

Step 1: Create properties for the results

Create two single-line text contact properties, for example Email validation status and Email validation action. HubSpot's create and edit properties article gives the path: the settings icon, then Properties, Select an object, Contact properties, and Create property. Enter the label, pick the field type, and save. You cannot edit a property's internal name later, so choose the label with care.

The status property holds one of the five statuses: valid, invalid, catch_all, unknown or disposable. The action property holds send, send_with_caution, remove or retry_later. Build your segments on the action: spam traps and frequent complainers are valid, because their mailbox accepts mail, yet their action is remove (spam traps).

Step 2: Export and verify

Following HubSpot's export records article:

  1. Go to CRM, then Contacts, and open the view you want to check, or All contacts.
  2. Click Export, choose the file format, and name the export.
  3. Under Customize, choose to include all properties: Record ID is then the first column, and it is the safest key for the import back.
  4. Click Export. HubSpot emails a download link that expires after 30 days.

Upload the file as a bulk list and pick the email column. Duplicates, malformed addresses and unknown results cost nothing. When the list is done, download the results with your original columns: Record ID stays in each row, followed by our columns, including ev_status, ev_reason and ev_action.

Step 3: Import the results

HubSpot's import records for a single object article describes an update-only import:

  1. Start an import (the Import button on the contacts index page), click Import data, then Advanced imports (all objects), and select Contacts.
  2. Under Choose how to import contacts, select Update existing contacts only, so no new contacts are created.
  3. Map the Record ID column to Record ID as the unique identifier (or the email column to Email).
  4. Map ev_status to Email validation status and ev_action to Email validation action. Set every other column to Don't import column, so the import cannot overwrite data you did not mean to touch.
  5. Name the import, tick the consent checkbox, and click Finish import.

Step 4: Build active segments by action

An active segment adds and drops contacts by itself as their properties change (HubSpot: Create segments). Go to CRM, Segments, Create segment, Manually, choose Contacts, then + Add filter, the Properties category, and your action property. Pick an operator such as "is equal to", enter the value, choose Active as the segment type, and click Save and process segment. Make three:

SegmentFilter on the action propertyWhat to do with it
Do not mailremoveSuppress now, then set as non-marketing or delete (Step 5).
Send with caresend_with_cautionMostly catch-all addresses, plus role and low-engagement addresses. Send only what matters, and watch bounces and complaints.
Check againretry_laterunknown results. Leave them out of large sends and verify again in a few days.

Add the "Do not mail" segment to the Don't send to recipients of every marketing email, as HubSpot's contact cleanup article suggests for unengaged segments. Because the segment is active, a contact whose address changes and is checked again moves to the right segment by itself.

An invalid result with the reason likely_typo may carry a did_you_mean suggestion. Ask the person to confirm a corrected address rather than changing it yourself (email typos).

Step 5: Set as non-marketing, or delete

Set as non-marketing if you want to keep the record for sales or service. From the contacts index page, select the contacts, open More, and choose Set as non-marketing contacts. For a whole segment, use Account & Billing, Marketing Contacts, Clean up contacts, and pick the segment under segment membership. A workflow with the action Set marketing contact status can do it too, on Professional or Enterprise (HubSpot: Set contacts as non-marketing). Keep the segment in Don't send to as well.

Delete if the record has no other use. A normal delete is restorable for 90 days. If the same address is created or imported again, HubSpot restores its bounces, spam reports, unsubscribes and subscriptions. A permanent delete cannot be undone, and when that address returns, its unsubscribes are not restored (HubSpot: Restorable and permanent contact deletions). Use permanent deletes for privacy requests, not for list cleaning, so an unsubscribe is never lost.

Neither choice lowers your tier before renewal, as the billing rules above explain.

Step 6: Re-check on a schedule

Verification does not replace engagement rules. HubSpot's cleanup article suggests a segment of contacts who have never opened a marketing email, a re-engagement campaign for them, and then adding that segment to Don't send to (re-engagement and sunset policy).

Questions

Does setting contacts to non-marketing lower my HubSpot bill at once?

No. The change takes effect on the next update date, and HubSpot does not downgrade a contact tier mid-term. Fewer marketing contacts help at your next renewal, and keep you from moving up a tier before it.

Does graymail suppression make verification unnecessary?

No. It skips contacts after a long run of ignored emails, but it does not know whether an address you have not yet mailed exists. Verification answers that before the first send.

Should I delete contacts that hard bounced?

HubSpot already excludes them from marketing email, so deleting is optional. If the address is ever created again, HubSpot restores its bounce after either kind of delete, but only a restorable delete also brings back its unsubscribes.

Try it

Check your HubSpot export with bulk email verification, or try one address in the free email checker.

Sources

How we wrote this: drafted by the email-validation.org team with the help of AI writing tools, from our product documentation and the sources linked in the text.

Get up to 500 free credits. No card needed.

New accounts get 500 free credits (100 when you sign up with a free email provider such as Gmail, Outlook or Yahoo, or another personal mailbox such as a paid one like Fastmail or one from your internet provider). Try it on your own list before you buy.

Updated · Maintained by the email-validation.org team