The pre-send checklist
The gate we run before a campaign goes out. Ten items, one line each on how to check them, and the three numbers that stop a send outright.
Ten checks stand between a finished campaign and a send. None takes longer than a minute, most take fifteen seconds, and every one of them is on this list because the cost of skipping it lands on the whole domain rather than on the single message. A bad campaign does not just underperform. It teaches Gmail something about you that takes weeks to unteach.
This sheet is for whoever presses send: the person running a newsletter, the one who inherited a list they did not build, the team where three people can start a campaign and nobody owns the outcome. The policy behind it lives in our deliverability handbook. This is the version you tape next to the monitor.
The gate
| # | Check | How to check it | Stop if |
|---|---|---|---|
| 1 | Suppression list applied | Export the send audience, diff it against your suppression list of bounces, complaints and unsubscribes | Any overlap at all |
| 2 | Authentication still passing | Send one copy to a Gmail address, open it, choose Show original | SPF, DKIM or DMARC reads anything but pass |
| 3 | One-click unsubscribe headers | In that same Show original view, search the headers for List-Unsubscribe and List-Unsubscribe-Post | Either header is missing |
| 4 | Plain-text part present | View the raw source of the test: the message is multipart/alternative and the text/plain half reads like English | The text part is missing or is stripped tags |
| 5 | Text to image ratio | Turn image loading off and read what is left | The message is one image, or images carry the message |
| 6 | Links on your own domain | Hover every link and read the hostname | A shortener, or a domain you do not control |
| 7 | From identity unchanged | Compare the From name and address against your last send | Either changed without a reason you can state out loud |
| 8 | Seed test sent and read | Send to a Gmail, an Outlook or Hotmail, and an Apple Mail address, then open all three on a phone | Any copy lands in spam or renders broken |
| 9 | Complaint and bounce rates | Read your last send's report: complaints under 0.1%, bounces under 2% | Complaints at 0.3% or bounces above 2% |
| 10 | Volume inside the ramp | Today's planned volume against yesterday's actual: no more than 10 to 20% higher | The jump is above 30%, or the last send was more than a week ago |
Copy this into your own tracker
- Suppression list applied and diffed to zero overlap
- SPF, DKIM and DMARC all pass on a live test copy
-
List-UnsubscribeandList-Unsubscribe-Postheaders both present - Real plain-text alternative in the message
- Majority of the content is selectable text, alt text on every image
- Every link resolves on a domain you own
- From name and address match the previous send
- Seeds delivered to inbox on Gmail, Outlook and Apple Mail, read on a phone
- Complaint rate under 0.1%, bounce rate under 2%
- Today's volume within the ramp, and no gap since the last send
The four that fail most often
Suppression, because timing beats intent. Checking the list once when you build the audience is not the same as checking it at delivery. A campaign that takes twenty minutes to go out can collect an unsubscribe in minute three, and the rule allows two days to honor it but nobody who just unsubscribed is feeling patient. Our send path checks suppression before every individual message rather than once per campaign, which is the version of this check that a spreadsheet cannot do for you.
The headers, because the platform is not always doing it. RFC 8058 one-click unsubscribe needs both headers, and the mailto or URL has to actually work when a mailbox provider calls it without a human present. Read them in the raw source of a real test message rather than trusting a settings toggle. What both headers should look like, and what breaks them, is in our List-Unsubscribe walkthrough.
The plain-text part, because HTML-only mail scores badly. Filters read it, screen readers use it, and a few clients still prefer it. If your platform auto-generates the text half, read what it generated once; the automatic version is sometimes a wall of link URLs.
The rates, because they are the only checks with a hard floor. Under 0.1% complaints and under 2% bounces is the working target. At 0.3% complaints, Google withholds delivery mitigation until you have been back under that line for seven consecutive days, so recovery is measured in weeks. Our own send path halts itself at 0.3% complaints or 2% bounces with no human judgment in the loop, because the judgment call at the moment of a bad send is always to send anyway. The arithmetic behind both numbers is in the bounce-rate piece.
How to use it
Print one per campaign and keep the filled sheets. That sounds fussy until the first send that goes wrong, when the only useful question is what was different this time, and a stack of dated sheets answers it faster than anyone's memory.
For a team, add two lines at the bottom: who ran the checks, and who approved the send. A checklist with a name on it gets read. On a shared account without one, everybody assumes somebody already did item 1.
If the domain is new or coming back after a quiet stretch, run the warm-up schedule alongside this sheet, because item 10 is the only check here that depends on what you did yesterday.