Skip to main content

HubSpot

Why Your HubSpot Email Only Reached Part of Your List


A list of roughly 8,000 contacts produced 672 valid recipients. The three suppression reasons behind it, and the step order that breaks rebuilds.

Julia HanneyBy Julia HanneyUpdated August 11, 20268 min read
A HubSpot marketing email recipients tab showing a large not sent count broken down by suppression reason.

Key Takeaways

  • The Recipients tab already tells you why each contact was skipped; diagnose from it rather than from the list size.
  • Non-marketing contacts are silently excluded from marketing email, and HubSpot sets existing contacts to non-marketing by default when the feature is first enabled.
  • When rebuilding a list with a workflow, set marketing contact status inside the workflow before the add-to-list step, or the send drops those contacts anyway.
  • Use a static list when a workflow is populating it; an active list re-evaluates and will fight the workflow.
  • A large drop in reachable contacts is usually the correct answer, not a fault. Spam complaints damage domain reputation, which follows the client wherever they send from.

A client came to us with a newsletter that had gone out to a list of roughly 7,900 contacts and reached about 2,000 of them. Everything in the portal looked healthy. The list was there, the email had sent, the send had not failed. Five thousand people simply were not on the delivery report.

When we finished rebuilding the audience, the list that could legitimately be emailed was 672 people. That number is not a failure. It is the honest size of the audience, and the previous number was the fiction.

If you are staring at a similar gap, the diagnosis is faster than you think, because HubSpot has already told you the answer and put it somewhere nobody looks.

Read the Recipients tab before you change anything

Open the sent email, go to the Recipients tab, and filter by Not sent. HubSpot groups the skipped contacts by reason, and the documented reasons include previously unsubscribed, frequency cap reached, and an Other bucket that covers non-marketing contact status, missing subscription type opt-in, and no lawful basis to communicate where data privacy settings are switched on.

Alongside those, individual contacts can carry more specific messages: the address has bounced before, a previous email was reported as spam, or the contact opted out of that specific subscription type. Low engagement suppression is the other big one, where HubSpot holds back sends to contacts who have not engaged in a long time in order to protect your sending reputation.

Two minutes here saves an afternoon. Most people skip it and go straight to rebuilding the list, which is how the same gap reappears on the next send.

The three reasons that account for most of the gap

On the rebuild above, three reasons covered nearly everything.

Non-marketing contact status. This is the biggest and the least understood. Marketing contacts are the only contacts you can send marketing email to, and they are the only contacts that count toward your tier. Everything else is free and unreachable. Critically, when the feature is first enabled on an account, HubSpot sets all existing contacts to non-marketing by default. A list that has sat in the portal since 2019 can be entirely non-marketing and nobody would know until a send quietly under-delivers.

Prior hard bounces and spam reports. HubSpot blocks these deliberately. A hard bounce means the address does not exist; sending to it again damages your sender reputation for everyone else on the list. A spam report is worse, because complaint rates are measured at the domain level. That reputation follows the client to whatever platform they move to next, which is worth saying out loud when a client asks you to "just send it anyway."

Low engagement suppression. HubSpot withholds sends to contacts with no engagement history over a long period. It is doing you a favour and it feels like an obstruction.

Everything else, unsubscribes, subscription type mismatches, frequency caps, tends to be a smaller and better understood slice.

Subscription types and frequency caps, the two quieter causes

Two more reasons account for most of what is left, and both are configuration rather than data quality.

Subscription type opt-in. HubSpot suppresses a send when the recipient has not opted into the subscription type attached to that email, or has opted out of that specific type while remaining subscribed to others. This is usually correct behaviour that nobody planned for. Portals accumulate subscription types over the years, an email gets assigned to a type that almost nobody is opted into, and the send collapses. Before you blame the list, check which subscription type the email carries and how many contacts are opted into it.

Frequency caps. If an email frequency safeguard is switched on, HubSpot will hold back a send to any contact who has already received the configured number of marketing emails in the window. The gap then moves around depending on what else went out that week, which makes it look intermittent and random. It is neither. Check the safeguard setting and check what else sent in the preceding days.

A useful habit: when a send under-delivers, look at the two or three sends immediately before it. Frequency capping and engagement suppression are both influenced by recent sending history, so the email you are staring at may be paying for a decision made a fortnight ago.

The step order that breaks rebuilds

Here is the detail that costs teams a full send cycle, and the reason it is worth reading this post to the end.

If you are populating a list with a workflow, and the workflow contains a step that sets marketing contact status, that step has to run before the add-to-list step. Not after. Not in a parallel branch.

Put it after, and the sequence is: contact is added to the list, list is used as the email audience, contact is still non-marketing at the moment the send is evaluated, contact is skipped. The list membership count looks perfect. The send does not.

This is one of those errors where every individual component is correct and the order is wrong, so a review of the workflow reads as fine. We check for it by inspecting the order of operations in the workflow canvas before we look at anything else.

The rebuild procedure, as we ran it

The specific sequence on that newsletter, which generalises well:

  1. Rename the existing list rather than deleting it. Append old to the name. You will want to diff against it, and you may need to prove what happened.
  2. Build a static list, not an active one. A workflow is going to populate it. An active list re-evaluates its own criteria continuously and will fight the workflow for control of membership. This choice trips people up because active lists are the default habit.
  3. Write the real membership rule. Ours combined a company-object property with contact-level form submissions across four separate newsletter signup forms. The client knew about two of them. Finding the other two changed the audience materially, and finding them took an afternoon of looking at forms rather than any clever tooling.
  4. Exclude the contacts who should never receive it again. Prior spam reporters, permanently. Hard bounces where the reason is unknown. This is a deliberate, documented exclusion, not an oversight.
  5. Set marketing contact status inside the workflow, before the add-to-list step. As above.
  6. Test the criteria incrementally and watch the count move. We ran the filter set in stages and the intermediate counts were 16, then 421, then 2,260, then 228 as exclusions were layered on. Those numbers are how you know each condition does what you think it does. Building the whole filter set in one go and looking at the final number tells you nothing.

The finished audience was 672 contacts. The client's first reaction was that something must be wrong. The second reaction, once we walked the exclusions, was that they had been reporting open rates against a denominator that had never existed.

Reporting honestly after the list gets smaller

The awkward part of this work is not technical. It is the conversation where the client learns their audience is a fraction of the number they have been quoting internally for years.

Three things make that conversation go well.

Show the exclusions, not just the total. "672" is alarming. "8,000 records, of which 4,100 were never marketing contacts, 1,900 hard bounced, 900 have not engaged in over two years and 400 previously reported us as spam, leaving 672 we can legitimately email" is a diagnosis. Same number, completely different meeting.

Restate the historical metrics. Open and click rates were already being calculated against delivered emails, not against list size, so the rates themselves were probably fine. What was wrong was the reach, and therefore every projection built on it. Say which numbers change and which do not, because the client's instinct will be that everything they have ever reported was fake.

Give the recovery path a shape. A smaller reachable list is not a smaller business. It is a starting point with a growth plan attached: re-permission where there is a defensible basis, capture consent properly on the forms going forward, and stop importing lists that will bounce. Put a number on where the audience could reasonably be in six months.

The underlying discipline is denominator honesty. Reporting reach against list size instead of against deliverable contacts inflates every downstream metric, and it compounds because the unreachable records never leave. We would rather hand a partner a smaller true number than a larger comfortable one, and in our experience so would their client, once the reasoning is visible.

What to do with the contacts you can no longer email

A rebuild like this leaves several thousand records that are real people you cannot legitimately reach through marketing email. They are not worthless.

  • Sales outreach is a different legal and technical basis. One-to-one email from a rep is not marketing email and does not carry the same suppression.
  • Paid audience exclusion and inclusion. Export the same segment to the paid media platforms as an audience. Suppression is a two-system move, and doing it in only one is how you end up paying to advertise to people you have already annoyed.
  • A genuine re-permission campaign, run once, to the subset where you have a defensible basis and an address that has not bounced.
  • A tiered purge policy. Decide the retention window by intent rather than by date alone, write it down, and apply it. Records with no intent signal and no engagement are a cost and a risk, not an asset.

One design principle we hold to here: do not invent lifecycle stages for suppression states. Leave the contact at whatever stage they genuinely reached and express the suppression with lead status plus a suppression list. Lifecycle stage is already carrying too much meaning in most portals, and hanging email eligibility off it makes every downstream report ambiguous.

The bottom line

When a HubSpot email reaches a fraction of the list, the platform has almost always logged the reason and nobody has read it. Start at the Recipients tab, expect non-marketing status and bounce or spam history to be most of the gap, and when you rebuild the audience with a workflow, set marketing contact status before you add anyone to the list.

Expect the reachable audience to be smaller than the old one. That is the point. A list of 672 people who can actually receive email is more valuable than a list of 8,000 that cannot, and it is the only version you can report on honestly.

If your team is inheriting client portals with list hygiene like this and no capacity to do the archaeology, our white-label HubSpot support team runs these rebuilds under your brand. For the underlying mechanics, our guide to creating lists in HubSpot covers the active versus static decision in more depth.

Sources

  1. HubSpot: Analyze marketing email recipients (opens in new tab)
  2. HubSpot: Understand why contacts didn't receive marketing emails (opens in new tab)
  3. HubSpot: Understand marketing contacts (opens in new tab)
  4. HubSpot: Send emails to contacts who previously bounced (opens in new tab)

Frequently Asked Questions

Why did HubSpot not send my marketing email to everyone on the list?

HubSpot suppresses recipients to protect sending reputation. The Recipients tab groups these as Not sent, with reasons including previously unsubscribed, frequency cap reached, non-marketing contact status, missing subscription opt-in, prior hard bounce, prior spam report and low engagement.

What does non-marketing contact mean in HubSpot?

Non-marketing contacts do not count toward your marketing contact tier and cannot be sent marketing email. HubSpot sets all existing contacts to non-marketing when the feature is first enabled on an account, which is why a long-standing list can suddenly appear unreachable.

Why is my HubSpot workflow adding contacts to a list but not sending to them?

Almost always step order. If the workflow adds a contact to the list before setting marketing contact status, the contact is on the list but still non-marketing at send time and is silently skipped. Set marketing status first, then add to the list.

Should I use an active list or a static list for a newsletter?

Use a static list when a workflow populates it, because an active list re-evaluates its own criteria and will conflict with the workflow. Use an active list only when the membership rules can be expressed entirely as list filters with no workflow involvement.

Can I email contacts who previously hard bounced in HubSpot?

Only in limited circumstances, and usually you should not. HubSpot blocks sends to previously bounced addresses to protect deliverability. Contacts who reported a previous email as spam should be excluded permanently, because complaints damage domain reputation, not just portal statistics.

White-Label HubSpot Support

Need a Deeper HubSpot Bench Without Hiring One?

White-label support retainers: our senior HubSpotters handle your clients' portals under your brand, no points, no queues.