← All entries

Warming a domain on real bizop content: Postmaster crashed, delivery didn't, and the test still wasn't clean enough to be conclusive

Google Postmaster Tools graded a domain LOW → MEDIUM → LOW → BAD across three weeks. In the same window, our Gmail acceptance rate held above 99.9%. Here is what the data actually says, why it's more decoupled than you'd expect, and why we still don't feel we've earned a real answer.

Warming a domain on real bizop content: Postmaster crashed, delivery didn't, and the test still wasn't clean enough to be conclusive

The hypothesis

The received wisdom in cold-email warmup is that you throw inbox-to-inbox babble at a fresh sender for a few weeks, let Gmail form an opinion, and only then start sending real campaign content. The babble is often template-generated, reply-heavy, and semantically empty. It teaches Gmail that the sender is "conversational" without ever putting real offer copy in front of the classifier.

We wanted to test something more direct. What happens if you skip the babble and warm the domain with real business-opportunity ("bizop") content from day one? In principle, if we warm the classifier on the exact content we intend to send in production, we would arrive at a healthy reputation without ever having to swap in the "real" copy later.

We ran this test through postmasterops.com, on a single Linode IP and a fresh sending domain. The domain is anonymized in this writeup as the test domain.


The setup

MTA Postfix on a fresh Linode, single IP, single tenant
Domain Fresh registration, no prior sending history, all DNS aligned (SPF pass, DKIM signed with a 2048-bit key, DMARC p=none, MX to our own store)
Content Genuine bizop offers, remixed daily via LLM variant generation. Same voice a real customer would send.
Tracking Every link wrapped through our own tracking domain: https://track.<domain>/c/... → 302 redirect → the actual offer URL
Warmup service postmasterops.com managed the send ramp
Volume Conservative — never above 1,700 Gmail-consumer sends per day

The IP and domain were both new; there was no prior reputation to inherit, good or bad.


Google Postmaster reputation trajectory

Postmaster started reporting on the domain on 07-27 and gave us data (with a few skipped days here and there) all the way through today. Domain reputation, day by day:

Date Google Postmaster domain reputation
07-27 → 08-04 LOW (nine days, steady)
08-05 → 08-08 MEDIUM (four days of the graph climbing)
08-10 → 08-13 LOW (four days back down)
08-14 → today BAD (stuck for over a week and counting)

IP reputation on the sending IP tracked the same curve exactly one day behind the domain grade, ending at BAD from 08-14 onward.

The interesting part of the shape is that first climb. Under continuous bizop content, the domain actually improved from LOW to MEDIUM and held there for four days. Something about the sender identity was earning trust, at least for a moment. Then it slid back down and eventually collapsed.


Gmail acceptance during the same window

Here is where it stops matching the story you'd tell if you looked at Postmaster alone. Daily Gmail consumer sends / bounces / accept rate:

Date Sent to Gmail Bounced Accept %
07-29 1,456 1 99.9%
07-31 1,565 1 99.9%
08-02 1,588 2 99.9%
08-05 1,708 3 99.9%
08-08 1,541 2 99.9%
08-11 1,645 453 78.4%
08-12 1,554 15 99.9%
08-14 1,548 23 99.9% (same day Postmaster went BAD)
08-17 1,525 23 99.9%
08-20 8,035 23 100.0%
08-22 (today) 1,111 12 100.0%

Acceptance held above 99.8% for almost the entire window, with one bad day (08-11: 78.4%, 453 bounces) that looked like it might be the start of something and then wasn't. Even after Postmaster graded the domain BAD on 08-14, individual message acceptance stayed at 99.9%. As of today the domain is at 100% accept on ~1,100 sends per day.

Whatever Postmaster's grading model is scoring, it is not directly gating delivery on this domain. The classifier that decides whether to accept the SMTP transaction is clearly running on different signals than the classifier that assigns the reputation grade you see in Postmaster Tools. In this test they moved in opposite directions for weeks.


The confounders (there are three of them, and they matter enough to make this test inconclusive)

I want to be honest before drawing any conclusions, because there are three variables that moved at roughly the same time as the Postmaster collapse. Any of them could have contributed. Probably all of them did, which is why we don't feel we've earned a real answer here.

Confounder 1 — the final URL landed on Spamhaus mid-test

Our tracking chain was:

email body
    <a href="https://track.<domain>/c/abc123">Learn more</a>
        302 →  the affiliate/offer landing page

The tracking domain itself was clean. It was on our infrastructure, wrapped through nginx, TLS-terminated, no listing exposure. But the final offer URL — the destination after the 302 redirect — got listed on Spamhaus during the test.

Gmail's content classifier is well-documented to follow redirects when scoring messages for reputation. So even though the visible href in the message body was our clean tracking domain, the classifier followed the chain and saw the Spamhaus-listed destination. That is almost certainly counting against us. The question is how much.

We do not have a clean way to isolate this from the content signal. When the Postmaster collapse happened, the URL was on Spamhaus AND the content was pure bizop. Those two variables moved together, and we cannot pull them apart from this run.

Confounder 2 — one day of about 1,000 4xx errors from Gmail

Separately, on one specific day during the test, we saw a burst of roughly 1,000 4xx (transient) errors from Gmail's MX, fleet-wide, not just this domain. This was almost certainly a Gmail-side issue: the errors cleared by the next day and every other domain sending at the same time saw comparable rejections.

But 4xx retries are still visible to Gmail's reputation model. On a domain that was already trending down, adding 1,000 transient failures across a single day accelerates the slide. This one is fully outside our control. It is in the frame anyway.

Confounder 3 — the reputation kept getting worse after the content stopped

This is the one I cannot fully explain. Under a "content is the sole driver" hypothesis, killing the bad content should let the reputation stabilize and eventually recover. Ours got worse in the days after we stopped sending the offending creatives. That does not fit.

It might indicate that Gmail had already committed to a reputation classification and was carrying it forward regardless of what we sent next. It might mean the Spamhaus listing was the dominant signal all along, and cleaning up the content didn't matter because the destination was still poisoning every message that included a link. It might be that Postmaster's grade lags actual signal by so much that we're still seeing the tail of the earlier damage. We do not have a clean way to disaggregate.


What the data unambiguously shows

There are two things we can say with confidence:

  1. The Postmaster grade and the delivery gate are decoupled. For almost the entire window Postmaster was flashing red and Gmail was still accepting 99.9% of messages. Whatever Postmaster is measuring (spam-complaint ratio? aggregate content classifier signal? user engagement decay?), it is not the same thing that the SMTP-accept classifier is measuring. If you optimize for one, you are not automatically optimizing for the other.

  2. The domain earned a genuine Postmaster grade improvement on bizop content. LOW to MEDIUM over four days of continuous real-content sending is a positive signal. Not something the "content is toxic until you've banked reputation" narrative would predict. Something about the sender identity was accruing trust, at least for a while.

What we cannot say

We cannot say whether the eventual Postmaster collapse was driven by:

  • The content itself
  • The Spamhaus-listed final URL in the tracking chain
  • The 4xx storm
  • Some ordering interaction between all three
  • Something else we didn't observe

The Spamhaus confounder alone would be enough to void this test as evidence about bizop content warming. The next run has to isolate the URL variable: same content strategy, tracking chain that terminates on a URL with no Spamhaus history and no chance of one appearing mid-test.


What we're doing next

Two things.

The immediate operational move: we are back to babble-first warmup for every new managed sender on postmasterops.com. Not because this test proved babble is better — it did not prove that — but because babble isolates every one of the variables that made this test unreadable. No tracking chain, no offer URL, no content-classification weight, no possibility of a mid-test Spamhaus event on a page we don't control. When we come back to test bizop-first warming, we will do it with those variables held constant.

The next writeup: the babble pattern that works, the specific inbox-to-inbox behaviors we simulate, and the operational signals we use to catch a reputation slide before it turns into a collapse. Postmaster grade alone is not one of them, for the reason this test made obvious.


The test domain is still sending, still at 100% accept, still graded BAD in Postmaster. It is a good live example of the disconnect. If you want the short version of the lesson from this run: your delivery number and your Postmaster grade are not the same signal, and you should not stop watching either one just because the other one looks green.