Notification preferences
In-app vs email, quiet hours, muted domains.
Notification preferences decide which anomaly alerts reach you, and how. They're personal to you, not shared across the workspace — your teammate can run email-loud while you stay in-app-only. Find them at /dashboard/account/notifications (or the Notification settings link off the Alerts page).
In-app is always on. Email is opt-in.
Every alert always lands in the in-app Alerts inbox — that costs nothing and never spams you. Email is the only thing you opt into, and it's off by default. The delivery control has three modes:
- In-app only (default) — alerts appear in the dashboard; no email is ever sent.
- Email + in-app — you also get a digest email when something fires.
- Off — suppress email entirely (in-app still records everything, so nothing is lost).
ℹ One digest, never a storm
notified_at, and the same alert won't email you again for 72 hours, so a lingering open alert can't turn into a daily nag.Tell me about…
Independent of the channel, you choose which classes of anomaly are worth an email. Each toggle maps to the alert types in Anomaly alerts:
- Drops — a tag suddenly fires far less than usual (
volume_dropand related silent-drift / imbalance signals). On by default. - Spikes — a tag fires far more than usual, or a day-over-day jump (
volume_spike,dod_spike). On by default. - New scenario appeared — a scenario fires for the first time on a site (
new_scenario). On by default. - No activity — a previously-active scenario goes quiet. You set the threshold: alert after N days of silence (1–30, default 3).
goal_achieved notifications aren't behind one of these toggles — if you've opted into email, a goal you hit always rides along in the digest, because it's a positive, low-volume event you actually want to hear about.
Quiet hours
Quiet hours defer emails overnight rather than dropping them. If an alert comes due inside your quiet window, the digest is held — the alert is not marked notified — and goes out on the next cron run after the window closes. Default window is 22:00–08:00 UTC; both bounds are configurable.
⚠ Quiet hours are in UTC
Muted domains
Each domain you monitor can be muted from your email digest — ideal for a dev or staging site whose tracking churns constantly and isn't worth paging you over. Muting is per-user: it keeps that domain's alerts out of your inbox while a teammate who didn't mute it still gets them. The muted domain still appears in the in-app Alerts list so nothing is hidden, just un-emailed.
Who actually receives the email
Recipients are resolved straight from the database — the users in your org who own a monitored domain. There's a known edge here: an org member who has never created a domain won't be in the email list (a cron can't reach the Clerk directory), though they still see every alert in-app. If a teammate should get the emails, make sure a domain is registered under their account.
Why so conservative by default?
TrackingCoder deliberately ships in-app-only out of the box. Anomaly email is genuinely useful — but only when you asked for it. Defaulting everyone to email would mean sending mail nobody requested, which is both costly and the fast lane to a spam folder. So the bar to send is: you flipped the channel to email, the alert class is one you want, you're outside quiet hours, the domain isn't muted, and the 72-hour window has elapsed. Clear all five and you get a tidy digest; otherwise it stays quietly in-app.