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.
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.
Every row in the send log is one of these. Knowing which is which explains most of what you will see.
The email is switched off, so nothing was sent. This is the evidence the gap monitor reads.
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.
Currently zero, across all eleven emails and both channels.
For each email type, each person, each day, it lines up what the website sent against what the mailer decided.
| Word | Means | Is it a problem? |
|---|---|---|
| Matched | Both sent, within an hour of each other | No — this is the goal |
| Missed | The website sent, we did not | The one that matters. But see below — almost all of today's are explained |
| Extra | We would have sent, the website did not | Usually not — see below |
| Drift | Both sent, but more than an hour apart | Worth a look. Currently zero |
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.
| Website sent, 14 days | Before the trigger existed | Since it started | |
|---|---|---|---|
| Therapist: New Sessions Purchased | 398 | 387 | 11 |
| Subscription: Capture Success | 141 | 126 | 15 |
| Subscription: Renewal Head-Up | 136 | 120 | 16 |
| Customer: New Account | 108 | 107 | 1 |
| Therapist: Placement Released | 103 | 102 | 1 |
| Subscription: Payment Failed | 60 | 58 | 2 |
| Client Cancelled (client + therapist) | 46 | 44 | 2 |
| Payment Failed (Therapist) | 7 | 7 | 0 |
| Total | 999 | 951 | 48 |
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.
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.
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.
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.
Per email, not for the system as a whole. Each one goes live on its own.
Ignore anything before the trigger's first decision. Filter the monitor to 7 days once a week has passed.
Every genuine send since deploy should have a partner within the hour.
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.