Datasheet · Mailer

How to read the Mailer

Eleven automatic emails are moving out of WordPress and into the warehouse. Until they are switched over, the mailer works out who it would email and writes it down, and the gap monitor compares that against what the website actually sent.

Written 5 August 2026, the day the last email was built. Every number on this page is an illustration from that date and moves daily.

What it is

The same emails, sent from the warehouse instead of the website

Today the session-accounting plugin decides who gets a renewal warning, a receipt, a cancellation notice. The mailer does the same work from warehouse data, so the wording lives somewhere you can edit it, every decision is recorded, and nothing depends on a plugin hook firing.

Nothing is switched over yet. All eleven are paused, and the mailer has never sent an email or a text to a client.

The point of pausing. A paused email still does all the work — it finds everyone who qualifies and records exactly who it would have written to. That record is what the gap monitor compares, and it is what makes switching one on safe: anyone already recorded is never decided again, so turning an email on cannot fire a month of backlog at people.
Three states

Paused, seeded, sent

Every row in the send log is one of these. Knowing which is which explains most of what you will see.

paused

We would have emailed this person

The email is switched off, so nothing was sent. This is the evidence the gap monitor reads.

seeded

Backlog, deliberately skipped

When a new email goes live it can see the last 30 days of history. Those are stamped "seeded" so they can never be sent — otherwise switching an email on would email 800 people at once about something that happened weeks ago.

sent

Actually delivered

Currently zero, across all eleven emails and both channels.

The gap monitor

Four words, and only one of them is bad

For each email type, each person, each day, it lines up what the website sent against what the mailer decided.

WordMeansIs it a problem?
MatchedBoth sent, within an hour of each otherNo — this is the goal
MissedThe website sent, we did notThe one that matters. But see below — almost all of today's are explained
ExtraWe would have sent, the website did notUsually not — see below
DriftBoth sent, but more than an hour apartWorth a look. Currently zero
Agreement reads 1%. That is matched divided by everything, and while the two numbers below dominate the totals it will stay low. It is not a health score yet. The number to watch is missed, per email, once the explanations below have aged out.
Why "missed" is big

The triggers were born on 4–5 August; the window is 14 days

The monitor compares the last fortnight. Every trigger was deployed on 4 or 5 August. So every email the website sent in the ten days before that has no decision to pair with, for the simple reason that the mailer did not exist yet.

EmailWebsite sent, 14 daysBefore the trigger existedSince it started
Therapist: New Sessions Purchased39838711
Subscription: Capture Success14112615
Subscription: Renewal Head-Up13612016
Customer: New Account1081071
Therapist: Placement Released1031021
Subscription: Payment Failed60582
Client Cancelled (client + therapist)46442
Payment Failed (Therapist)770
Total99995148

So: about 95% of "missed" is history the mailer could not have seen. It ages out on its own — by around 19 August the window contains only days the mailer was alive for, and the number should collapse. If it does not, that is the real signal.

What good looks like. Of the 48 sends since the triggers started, the mailer matched them within 4–12 minutes each time — the lag is the five-minute data sweep plus the five-minute send loop. That is the number that actually tells you it works.
Why "extra" is big

Almost all of it is one email that WordPress has switched off

Client: Session Completed is disabled on the live site and has been for months. That is exactly why it was chosen to migrate first — turning it on in the mailer cannot regress anything, because nobody receives it today.

It has around 1,222 recorded decisions and zero live sends, so every one of them counts as "extra". That is not a fault; it is the whole point of that email.

The other handful of "extra". On the day an email's backlog was seeded, anyone who also had a genuine new decision that same day gets counted oddly: the seeded row absorbs the website's send, and their real decision has nothing left to pair with. It only affects the seeding day and clears the next. If you see one or two "extra" on a type that is otherwise matching, this is why.
The subject warning

"Check this subject line — Book Your First Session"

Most emails are matched by reading the plugin's own log, which records the email type — nothing to guess and nothing to keep in step. A few are not sent by that plugin, so they are matched on their subject line instead, and that map can go stale.

This warning means: no live send has been seen with the subject "Book your first session". Either the subject was edited on the site and the map is wrong, or the email genuinely stopped sending.

In this case it stopped. It sent four times, all on 10 July, and nothing in the 26 days since. The subject has not changed. That email comes from the therapist directory and only fires for orders stamped with a particular test arm — so the likeliest reading is that the A/B arm stopped being assigned, which may well be deliberate. Worth confirming with whoever runs that test; the warning is doing its job either way.
Texts

Two of these are also text messages

The renewal warning and the payment-failed notice go out as an SMS as well as an email — the head-up alone sent 219 texts last month. The gap monitor shows those beside the email figures as "also 219 by text", because counting them as email sends would read as hundreds of permanent misses.

The mailer can now send texts too, and they have their own switch. Switching an email on does not switch its text on — that was the whole reason those two could not be migrated without this.

When it is ready

What to look for before switching one on

Per email, not for the system as a whole. Each one goes live on its own.

1

Missed is near zero for days the mailer was alive

Ignore anything before the trigger's first decision. Filter the monitor to 7 days once a week has passed.

2

Matched is climbing

Every genuine send since deploy should have a partner within the hour.

3

Extra is explained

Either it is Session Completed, or it is a seeding-day artefact, or it needs looking at.

Switching one on is two steps: turn it on here, then untick it in Session Admin so the website stops sending its copy. Do them in that order and nobody misses an email; do them the other way round and nobody gets two.