Why unreachable contacts are different from "low quality" leads
A contact you can't reach isn't a low-quality lead. It's not a lead at all. There's no path forward — no email to send, no phone to call, no LinkedIn to outreach. The record exists in your CRM but represents nothing actionable.
The cleanup question is: how did these get created? Three common sources:
- Form fills with required fields ignored. Someone filled out only
NameandCompanybecause the form didn't enforce email. Now you have a record with a name and nothing else. - Spreadsheet imports with broken columns. The import mapped a non-email column to email, or the source data simply didn't have contact info.
- Test data left in production.
test@example.com,noreply@,john@test.com,qa@yourdomain.com. Created during integration setup or QA, never cleaned up.
All three create the same problem: HubSpot's contact count includes them, your marketing seat tier is partly paid for them, and they show up in lists where they shouldn't.
What two cohorts the basic filter catches
Two filter conditions in OR:
- All contact channels are blank: Email is unknown AND Phone is unknown AND Mobile phone is unknown.
- Email matches a placeholder pattern: matches
test@,noreply@,example.com,localhost,qa@,donotreply@.
The second case catches the test-data pollution. The first catches the broken-form-fill case.
Why the count keeps growing even with prevention
The placeholder list is open-ended:
Common test domains. example.com, example.org, test.com, localhost, mailinator.com, tempmail, discard.email, guerrillamail.com, yopmail.com. You'd build the keyword list incrementally as you find new patterns in your data.
Common test locals. test@, qa@, noreply@, donotreply@, placeholder@, dummy@, unknown@. Similar incremental list-building.
Personal email vs. corporate. A contact with firstname.lastname@gmail.com isn't unreachable — they have a real personal email. But many sales teams treat personal-email leads as low-priority because they're often from job-seekers or unauthorized buyers. Whether to flag those depends on your motion.
The deeper friction is that "unreachable" is a category that grows over time even with good prevention:
- People change jobs → corporate email bounces → contact becomes unreachable.
- Phone numbers get reassigned → calls go to strangers.
- Domains shut down → all contacts at that domain become unreachable.
A monthly run of this view, paired with archiving the obvious-trash records and re-enriching the rest via Clearbit / ZoomInfo / similar, keeps the count manageable. Skipping a quarter usually means 5-15% of the contact base is unreachable, polluting every list-export and every email send.
The manual HubSpot recipe
Two saved views (blank-channels + placeholder-emails) plus a prevention workflow. Quarterly enrichment fills in the borderline cases.
- Open Contacts → Create view (blank channels)Filter:
Email is unknownANDPhone number is unknownANDMobile phone number is unknown. Catches the broken-form-fill / import-missing-columns case. - Save as 'Contacts — no working channel'Pin to your sales-ops dashboard. Most are safe to archive; spot-check before bulk action.
- Create second view (placeholder patterns)Filter:
Email contains test@ORcontains noreplyORends with @example.comORends with @localhostORends with @mailinator.com. Add patterns as you find new ones in your data. - Save as 'Contacts — placeholder email'Pin alongside. These are usually safe to delete (not just archive) since they're test/QA records.
- Build the import-validation workflow (prevention)Workflows → Create → Contact-based. Trigger: contact created. Branch: email matches placeholder pattern. Action: tag as
qa_placeholder = true, alert sales-ops. Catches the leak before it pollutes the contact base. - Pair with periodic enrichment for the borderline casesPersonal-email-only contacts (
firstname.lastname@gmail.com) aren't unreachable — they're just personal. Decide your motion: keep them at low priority, enrich with corporate emails via Clearbit/ZoomInfo, or archive after X months of no engagement.
What Bloated does instead
Unreachable contacts AND a maintained placeholder pattern list across regions.
Bloated maintains the test/noreply/ISP/disposable-domain pattern list across regions and industries so you don't have to discover them in your data one outage at a time. Personal-vs-corporate distinction is kept explicit — Gmail contacts are flagged separately from test data, so cleanup decisions don't lump them together.
email, phone, mobilephone · HubSpot contact properties