Outrings
AI agents and automation

How do I track website changes over time?

Building a history of what your site actually served, so you can answer "when did this break" instead of guessing.

3 min read
Short answer

Snapshot the measured state on a schedule and compare successive snapshots. The valuable question is rarely "what is my score" — it is "what is different from last week", and only a stored history can answer that.

Why a point-in-time audit is not enough

A single audit tells you the current state. It cannot tell you whether that state is new, and the second question is usually the operational one.

  • Was that header always missing, or did it disappear on Tuesday?
  • Did our accessibility score drop after the redesign, or before it?
  • When did the certificate change issuer?
  • Has the third-party script count been creeping up all quarter?

Each of these is trivial with history and unanswerable without it. Reconstructing the past from memory and deploy logs is much harder than it sounds, particularly for changes nobody deployed.

Reading the stored history

curl -s "https://outrings.com/api/v1/history?url=example.com" | jq '{
  snapshotHost,
  points: [.history[] | {at, score, grade}]
}'

This endpoint reads history only and never fetches the target, so it still works while the site is down — which is exactly when you most want to know what changed.

Snapshots are filed under the host the audit ended on after redirects, not the one you asked for. Ask about example.com when it redirects to www.example.com and the history lives under the second. The response reports which one it used as snapshotHost, so you are never guessing.

Comparing two points

curl -s "https://outrings.com/api/v1/changes?url=example.com" | jq '{
  comparable,
  scoreDelta,
  categories: [.categories[]? | select(.delta != 0) | {category, from, to, delta}],
  appeared: [.newProblems[]?.id],
  cleared:  [.resolved[]?.id]
}'

This re-audits, compares against the most recent stored snapshot, and reports the difference. comparable: false means there was nothing earlier to compare with — history starting, not an error.

What to keep an eye on longitudinally

TrendWhat it usually means
Third-party script count risingMarketing tags accumulating; privacy and performance both degrading quietly
Accessibility drifting downwardNew components shipped without the checks the old ones had
Security flat then a sudden dropAn edge or CDN configuration change, not a deploy
Content scores falling as pages growPublishing volume outpacing editing standards
Certificate issuer changing unexpectedlyWorth confirming it was intentional

The first row is the one that catches most teams. No single tag addition is significant, and twenty of them over a year is a different website.

A sensible cadence

  1. Snapshot daily, or on every production deploy if you ship less often than that.
  2. Alert on new high and critical findings, not on score movement.
  3. Review the trend monthly rather than the daily numbers — that is the timescale at which drift becomes visible.
  4. Before concluding anything from a comparison, check the ruleset version matches.

Snapshots are stored at most once per site every six hours, so a daily job is a natural fit and more frequent runs will not produce more history.

What our audit reports about this

Every item below is measured directly, not inferred. Run it against your own site and the result names the exact rule or header responsible.

  • Stored snapshots per site with a history endpoint that never re-fetches the target.
  • A comparison endpoint reporting new problems, resolved findings and per-category deltas.
  • Snapshot host resolution after redirects, reported explicitly so history is never silently filed under a host you did not expect.
  • Version stamps on every snapshot, so a longitudinal comparison can be validated as like for like.

For agents and scripts, the same measurement is at /api/v1/summary?url=yoursite.com — see the API documentation.

Related questions

How long is history kept?

Snapshots accumulate per site at a maximum of one every six hours. The history endpoint returns what has been stored for that host, oldest to newest.

Is page content stored in the history?

No. Snapshots hold the hostname, the scores, and which checks failed — never page content, paths or query strings. The privacy page itemises every field that is written.

Why is my history empty?

Most often the redirect issue: history is filed under the final host after redirects. Check the snapshotHost field in the response — asking about the apex when the site serves from www will look empty until you ask about the right one.

Can I export it?

Yes — the history endpoint returns JSON, so it drops straight into a spreadsheet, a dashboard or a notebook without any scraping.

Read next

All 100 guides · How every check works · API for agents