---
title: "Deliverability"
description: "Bounce, complaint, and spam-placement health, with the thresholds Warmbly acts on."
---

Deliverability is whether your mail reaches the inbox instead of bouncing, getting marked as spam, or landing in junk. Warmbly tracks it per mailbox and per campaign, and acts automatically when a mailbox looks risky.

These defaults are deliberately stricter than the point where Google or Microsoft start penalizing senders, so action happens before provider enforcement hits your reputation.

## The dashboard

Scope everything to `7d`, `30d`, or `90d` with the range tabs. It updates live, so no refreshing.

| Section | What it shows |
|---------|---------------|
| Headline rates | Deliverability score, bounce rate, complaint rate, spam placement, suppressed count |
| Over time | One metric per day: bounces, complaints, opens, replies, or sent. Use it to find the day something spiked |
| Window totals | Raw counts behind the rates |
| Seed inbox placement | Inbox vs spam share from test deliveries, with the sample count |
| Placement by provider | The same split per Gmail, Outlook, and IMAP/SMTP |
| Warmup placement by domain | Continuous placement per recipient domain, amber at `10%` spam, red at `20%` |
| At risk | Mailboxes and campaigns with bounce or complaint activity, worst first |

The **score** is a `0-100` composite starting at `100`: bounce rate subtracts up to `40` points (maxed at `10%`), complaint rate up to `30` (maxed at `0.30%`), spam placement up to `40` (maxed at `40%`). Bounce rate is highlighted at `5%`, complaint rate at `0.1%`.

Use **Customize** to pick which sections show. Your choices and time window persist per browser.

<Callout type="info" title="Placement needs a sample">
Placement figures only appear once seed data exists, and a small sample is a hint rather than a verdict. Warmbly waits for a meaningful sample before acting.
</Callout>

**Placement by provider is the check before scaling a campaign.** An aggregate rate can look fine while one provider quietly junks everything: Gmail at `95%` inbox with Outlook at `40%` is a provider-specific problem, usually authentication or content, not volume.

**Warmup placement is your continuous signal.** Seed tests are point-in-time probes, but every verified warmup delivery reports inbox or spam, so drift appears here before it becomes complaints on a campaign.

## Health bands

Each mailbox sits in a band, shown as a colored chip. The band controls how Warmbly treats it.

| Band | Spam placement | Complaint rate | Bounce rate | Other triggers |
| --- | --- | --- | --- | --- |
| Watch | `>= 10%` | `>= 0.03%` | n/a | n/a |
| Quarantine | `>= 20%` | `>= 0.10%` | `>= 5%` | Repeated suspicious warmup-token failures |
| Blocked | `>= 40%` | `>= 0.30%` | `>= 10%` | Clear abuse signals (token forgery, repeated spam flags) |
| Catastrophic | `>= 80%` | n/a | n/a | n/a |

A mailbox enters a band by crossing any single threshold. What each band does:

- **Healthy**: sending normally, nothing to do.
- **Watch**: warmup volume lowered and spacing increased. Cold volume is dampened by the same factor, so it slows across both before reaching quarantine.
- **Quarantine**: out of the shared paid warmup pool for `7 days`, as neither sender nor recipient. Cold sending is throttled or paused.
- **Blocked**: out of the shared pool for `30 days`, review required before re-entry.
- **Catastrophic**: immediate long block and a full reputation reset. No automatic return.

**Sample floors** stop one bad event flipping a new mailbox: spam placement needs `20+` warmup deliveries in `7 days`, complaints need `100+` delivered emails in `30 days`.

<Callout type="info" title="Different metrics, different failure modes">
Warmbly never acts on the composite score alone. Complaint rate, spam placement, and bounce rate are tracked separately because they fail for different reasons, so any one can move a mailbox even while the score still looks fine.
</Callout>

### Re-entry after a block

Time elapsing is not enough. A blocked mailbox must requalify: SPF, DKIM, and DMARC still healthy; no recent complaints or hard-bounce spikes; no recent invalid warmup-token attempts; spam placement back under `10%` on a fresh probation sample. Re-entry then starts low, around `5-10/day` of warmup.

## Domain authentication

Gmail, Yahoo, and Outlook all require SPF, DKIM, and DMARC, and failed alignment is the most common silent reason mail lands in spam. Warmbly checks each sending domain in the background about once a day, and on demand from the mailbox.

- **Passing**: SPF and DMARC both present, the two records readable authoritatively from DNS.
- **Failing**: SPF or DMARC missing.
- **Unknown**: not checked yet, or the lookup could not complete. A DNS hiccup never looks like a misconfiguration.

DKIM is advisory: selectors are not discoverable from DNS, so "not found" means unconfirmed, not absent. A domain can pass on SPF and DMARC with DKIM unconfirmed.

A DMARC record on the parent domain covers its subdomains, so a dedicated sending subdomain like `mail.yourdomain.com` passes on the record published at `yourdomain.com`. Where the parent sets `sp=`, that is the policy shown, because `sp=` is what the parent publishes for its subdomains. SPF works the other way: it never inherits, so every sending subdomain needs its own SPF record.

Only the two records that DNS can answer for decide the state. A DMARC policy of `p=none` is Passing, because Google's bulk sender rules ask for a DMARC record at `p=none` or stronger, and stopping mail from a compliant sender would help nobody.

### What a Failing domain stops

A domain that stays Failing past the grace period stops **cold campaign sending** and **warmup sending** from every mailbox on it. The mailbox stays connected, keeps syncing, and keeps receiving warmup mail, so it holds its place in the pool and its inbound capacity. It just stops adding unauthenticated volume to a reputation everyone in the pool shares.

The grace period is set per instance and defaults to `72 hours`, measured from the moment the check first saw the failure, not from when you connected the mailbox. Nothing stops the day a record breaks. You are notified when the clock starts, the mailbox drawer shows the state, and the Advisor card counts down to the date sending stops.

<Callout type="info" title="Your own replies are never blocked">
The gate covers cold campaigns and warmup only. Manual sends and replies from the unibox always go out, whatever the domain state, because stopping a human mid-conversation is worse than the reputation risk of one message. The mailbox picker still ranks an unauthenticated mailbox last and labels it.
</Callout>

### Getting sending back

Add the missing records at your registrar, then open the mailbox and press **Re-check** under Domain authentication. That records the new verdict immediately and sending resumes on the next scheduled send. Waiting for the background check works too, it is just slower: it reaches each domain about once a day.

Re-check is also worth pressing after reconnecting a mailbox that was disconnected while Failing, since its stored state is refreshed from scratch when it comes back.

If a campaign has already been paused because every one of its mailboxes was gated, the activity log says so, and you restart the campaign yourself once the domain reads Passing.

## Built-in protections

**One-click unsubscribe** (RFC 8058) puts a native Unsubscribe control in the recipient's mail client. It drives complaint rate down, because someone who can opt out cleanly rarely hits "mark as spam" instead, and Google's bulk-sender guidance effectively requires it at volume. Unsubscribes are suppressed automatically.

**Pre-send verification** checks an address before sending and skips undeliverable ones, keeping bad addresses from becoming the hard bounces that drive the `5%` and `10%` thresholds above. A skipped lead shows as **Undeliverable** in the campaign's Leads view rather than sitting at Queued, and the campaign's activity log says how many it skipped when it finishes, so a campaign is never quietly held up by addresses it will not send to. Verification only records an address as invalid when the recipient's server rejects the address itself. A server that rejects the check for its own reasons (a policy block, a rate limit, or a greeting it does not accept) leaves the address unverified, and unverified addresses are still sent to. Self-hosted instances should set `EMAIL_VERIFY_HELO_HOST`, described in the [configuration reference](/development/configuration/#pre-send-verification).

**Suppression** is the safety net: a suppressed recipient is never emailed again by any campaign. Warmbly suppresses automatically on a bounce, a spam complaint, or an unsubscribe, because once someone has bounced or complained the safest response is to stop, not to keep collecting negative signals.

The list is held per workspace, and the check runs against the sending campaign's workspace before every send. If a campaign somehow has no workspace, that check cannot be applied, so the campaign is paused with the reason in its activity feed instead of sending unchecked.

Bounces are detected from the delivery-status report the recipient's server sends back. Only permanent failures (`5.x.x`, such as a nonexistent address) record a bounce and suppress; temporary ones (`4.x.x`, such as a full mailbox or greylisting) never do. This works the same for Gmail and Microsoft Graph mailboxes, where the send reports success and the bounce arrives later.

## How to read it

1. Start with the headline numbers. Bounce at `5%` and complaints at `0.1%` are the highlighted danger lines.
2. If a rate looks off, switch the chart to that metric and find the spike day. It usually points at one campaign or one imported list.
3. Check placement by provider and by domain to see whether mail actually reaches inboxes.
4. Read the at-risk lists. The chips show which senders Warmbly is already acting on.
5. Slow down anything in Watch and let it recover. Leave Quarantine and Blocked out of sending until they requalify.

The habit that matters: keep complaint rate and spam placement low. A clean reputation at modest volume beats high volume with rising complaints every time.

## Related guides

<Cards>
  <Card title="Warmup" href="/guides/warmup/" />
  <Card title="Personalization & expressions" href="/guides/expressions/" />
  <Card title="Error codes" href="/api/error-codes/" />
</Cards>
