How sales-drop detection works
Exactly what counts as a drop, when ChangeTrace stays quiet, and why a drop might not have emailed you.
This is the page to read if you ever think "sales were clearly down and ChangeTrace said nothing." Usually there is a specific, boring reason.
The daily check
Once a day at 1:00 AM UTC, ChangeTrace takes yesterday — the last complete UTC day — and compares it against the average of the 7 days before it, separately for each of:
- WooCommerce revenue
- WooCommerce orders
- Easy Digital Downloads revenue
- Easy Digital Downloads orders
Each is checked per site. Any of them can open its own incident.
Two tests, both must pass
The drop has to be big — at least 40%
Yesterday must be at least 40% below the 7-day average. A 25% dip does not open an incident.
The drop has to be unusual for your shop — at least 3 standard deviations
The drop must also be more than three standard deviations from your own average. This is the test that keeps ChangeTrace quiet on normal noise.
Two shops, same 50% drop, different answers:
| Shop | Normal daily orders | A 50% drop is… |
|---|---|---|
| Steady: 10, 11, 9, 10, 12, 10, 11 | Very consistent | Far outside normal → incident |
| Swingy: 2, 40, 5, 31, 8, 22, 4 | All over the place | Within its usual range → no incident |
The second shop is not being ignored. Its numbers genuinely swing that much, so a 50% day carries no information. Flagging it would produce an alert nearly every day.
When it deliberately says nothing
Four reasons for silence, all intentional
- Fewer than 5 days of history. Nothing to compare against — this is why a new site is quiet for about a week.
- Your 7-day average is zero. A shop with no sales cannot have a sales drop.
- The number went up. Only drops are incidents.
- One of the two tests failed. Big but normal, or unusual but small.
Severity, and who gets emailed
| Drop | Severity | Emails you? |
|---|---|---|
| 40–69% | Warning | No by default |
| 70% or more | Critical | Yes, to organization owners |
The most common surprise
A 55% revenue drop does open an incident and does not email anybody, because the default email threshold is critical. The incident is sitting in your dashboard.
Want emails for warnings too? Email alerts explains the setting.
A worked example
Your shop takes roughly £2,000 a day. Last Tuesday it took £700.
- Average of the previous 7 days: £2,010
- Tuesday: £700 → a 65% drop ✓ over 40%
- Your daily figures rarely move more than ~£150, so £700 is about 8 standard deviations out ✓ over 3
At 1:00 AM UTC on Wednesday, ChangeTrace opens "Revenue dropped 65% vs 7-day average", severity warning (65% is under 70%). No email by default. Within 30 minutes, ranked causes appear on the incident.
What it does not know about
ChangeTrace compares your shop against its own recent past. It has no idea about:
- Seasonality and holidays — a quiet Christmas Day can flag
- A campaign ending — traffic halving is a real drop, just an expected one
- Deliberate changes — pausing ads, or ending a sale
- Timezone shape — everything is measured in UTC days, so if your shop is far from UTC, a ChangeTrace "day" straddles two of your local ones
This is why an incident is a prompt to look, not a verdict.
{ }For developers
Watched metrics are woocommerce.revenue, woocommerce.orders.created, edd.revenue,
edd.orders.created. Defaults: ANOMALY_BASELINE_DAYS=7,
ANOMALY_MIN_RELATIVE_DEVIATION=0.4, ANOMALY_MIN_SIGMA=3,
ANOMALY_MIN_BASELINE_SAMPLES=5, ANOMALY_MIN_BASELINE_MEAN=0; the critical cut is a 0.7
relative deviation. Each incident carries a deterministic detection_key of
anomaly:<site>:<metric>:<day> with a unique index, so re-runs never duplicate — and because
alerts fire only on a genuinely new row, an incident emails at most once. A day with no metric
row at all is treated as zero, i.e. a drop to nothing.

