Health states
Every watch returned by the dashboard, the extension, and the API carries ahealth object with a state, a plain-language reason, and a suggested action.
The dashboard watch list and the extension popup both show this state. The API exposes it on
GET /api/v1/watch/{uuid} and in the watch list response.
When you get an email
Site Spy counts consecutive failed checks per watch and emails the owner once per failure episode.
A single episode produces one email, not one per check. If the watch recovers and later breaks again, or breaks in a different way, you are alerted again. Repeat alerts for the same unresolved problem are suppressed for 7 days.
Each email says what went wrong, what to do about it, and reminds you that change notifications from that watch are paused until it recovers.
Broken CSS/XPath filters have a second, separate alert that fires after the filter misses 3 times in a row.
Retries and auto-pause
A failing watch is not dropped. It is retried on a widening schedule that depends on what went wrong — minutes for a rate limit, hours for a bot wall, a day for a missing page — and the next retry time is visible on the watch. Some failures never lead to a pause, because pausing would not help:- Rate limits always resolve on their own.
- Network errors, browser failures, and internal errors mean the check did not complete, not that the page is unmonitorable — often the fault is ours, not the site’s.
An auto-pause always sends its own email — it is the end of the episode, and you should never discover it by noticing the silence. Resuming or editing the watch from the dashboard clears the error and queues an immediate check.

