Why text, not screenshots or raw HTML
Raw HTML changes constantly for reasons nobody cares about: cache-busting asset names, CSRF tokens, analytics snippets, reordered attributes. Screenshots change when a font loads late or a banner slides in. PingWhen compares the visible text instead, so an alert usually means a person would notice the difference too.
How a check works
On your plan's interval we fetch the URL with PingWhenBot/1.0. For HTML we drop scripts, styles and comments, keep the visible text, collapse whitespace, lowercase it, and mask ISO-8601 timestamps. We hash that text. The first successful fetch is the baseline and never alerts. After that, a different hash means a change alert with a one-line excerpt of what is new.
What the notification looks like
Email subject: Changed example.com. Body: Changed on example.com/pricing — text now includes "$19/mo". followed by a link to your watches. Starter excerpts are up to 240 characters; Plus goes to 500.
Webhook destinations get a JSON POST with event, watch_id, url, checked_at, http_status and excerpt, signed in the X-PingWhen-Signature header. If your endpoint fails we retry, and if it answers 410 Gone we delete the watch.
No alert storms
- The same watch never sends the same kind of alert more than once per 30 minutes.
- If a page flaps between changed, down and up, we send one message saying we're pausing for 24 hours, with a link to resume sooner.
- A page that is down is not reported as "changed". That's a down alert, and only if you turned it on.
Honest limits
- We watch the HTML we receive. Pages that only render their content with JavaScript (many single-page apps, some store stock widgets) are not supported: we would see an empty shell.
- We watch the whole page's text, not a CSS selector. Pages with rotating quotes, "5 minutes ago" labels, view counters or ads that change the text on every load will alert often. After a burst of alerts we pause that watch for 24 hours and email you a resume link.
- No logins, cookies, or pages behind a paywall. Public URLs on ports 80/443 only, up to 2 MB.
- No free plan. Cancel anytime in the Stripe customer portal.
Pricing
Starter $9/month: 10 watches, every 15 minutes. Plus $19/month: 40 watches, every 5 minutes. Email, SMS (US/CA), or webhook on both.