Skip to main content
Freshness monitoring tracks when your data was last updated and alerts you when it becomes stale. Stale data can be just as damaging as wrong data. If your dashboard shows yesterday’s numbers, decisions made today could be wrong.
Prerequisites: Before setting up freshness monitoring, you need:
  • A connected data source with discovery completed
  • Assets with timestamp columns (created_at, updated_at, or similar)
Timeline showing expected update time, warning threshold, and violation with alert trigger

Freshness timeline showing expected vs actual data updates

Why Freshness Matters

Data has an expected update cadence. When that cadence breaks, something is wrong: Stale data problem with and without monitoring

How Freshness Monitoring Works

AnomalyArmor tracks freshness by monitoring timestamp columns:
  1. You specify which column indicates “when data was updated”
  2. Discovery queries the maximum value of that column
  3. We compare against your configured SLA
  4. Alert fires if data is older than allowed

Setting Up Freshness Monitoring

1

Navigate to Asset

Go to Assets and click on the table you want to monitor.
2

Open Freshness Tab

Click the Freshness tab in the asset details.
3

Select Timestamp Column

Choose the column that best represents data recency:
Choose a column that updates when new data arrives. For tables with updates, use updated_at instead of created_at to track the most recent changes.
4

Set Expected Frequency

Define how often you expect new data:
  • Every 15 minutes
  • Hourly
  • Every 6 hours
  • Daily
  • Weekly
  • Custom (specify hours)
5

Configure Alert Threshold

Set when to trigger alerts:Alert Configuration:
  • Warning threshold: 80% of expected (optional)
  • Violation threshold: 100%+ of expected
Example (hourly expectation):
  • Warning: Data is 48+ minutes old
  • Violation: Data is 60+ minutes old
6

Save Configuration

Click Save to activate freshness monitoring.

SLA Strategies

Start Conservative

Set SLAs with buffer room to avoid false positives:
Start lenient and tighten over time. It’s easier to make SLAs stricter than to deal with alert fatigue from SLAs that are too tight.

By Data Criticality

By Update Pattern

For data expected within minutes:

Freshness Alerts

Setting Up Alert Rules

Create rules to notify you of freshness violations:

Alert Content

Freshness alerts include:

Handling Special Cases

Weekends and Holidays

Some data doesn’t update on weekends: Options:
  1. Longer weekend SLA: Set different thresholds for Saturday/Sunday
  2. Pause monitoring: Temporarily disable freshness checks
  3. Adjust expectations: Set SLA to “72 hours” to cover full weekends

Maintenance Windows

During planned maintenance:
  1. Disable rules: Toggle OFF freshness alert rules for affected assets
  2. Document: Note expected staleness
  3. Re-enable: Toggle rules back ON after maintenance

Infrequently Updated Tables

Some tables legitimately update rarely:

Viewing Freshness Status

Asset List View

In the Assets list, freshness status appears as indicators:

Asset Detail View

Click an asset to see:
  • Current freshness status
  • Last update timestamp
  • Freshness history over time
  • SLA configuration
The detail view shows a status card with the current freshness state, last update timestamp, data age, and a progress bar indicating how much of your SLA window has been consumed. Below that, a 7-day history shows freshness status over time. Example freshness status: Freshness History: All checks in the last 7 days were within SLA.

Troubleshooting

Problem: Freshness alerts fire when data is actually fine.Solutions:
  1. Verify timestamp column choice. Is it the right one?
  2. Loosen SLA threshold
  3. Check timezone handling (UTC vs. local)
  4. Review discovery schedule vs. SLA timing
Problem: Data was stale but no alert fired.Solutions:
  1. Verify freshness monitoring is enabled for the asset
  2. Check alert rule configuration
  3. Confirm discovery is running frequently enough
  4. Verify timestamp column has recent values
Problem: Freshness showing incorrect values.Solutions:
  1. Review column choice
  2. For tables with updates, use updated_at not created_at
  3. For ETL tables, use the load timestamp column
  4. Ensure column is always populated (no NULLs)
Problem: Freshness calculations seem off by hours.Solutions:
  1. Check timestamp column timezone
  2. AnomalyArmor normalizes to UTC
  3. Ensure consistent timezone handling in your ETL

Best Practices

1. Start with Critical Tables

Focus monitoring on:
  • Revenue-impacting tables
  • Customer-facing dashboard sources
  • Compliance-required data

2. Align with Business Needs

Ask: “When would stale data cause a problem?”

3. Coordinate with ETL Schedules

4. Use Warning Thresholds

Configure two levels:
  1. Warning: “Heads up, getting stale” → Slack
  2. Violation: “SLA breached” → PagerDuty

Common Questions

Which timestamp column should I pick?

Pick the column that updates when new data arrives. Use created_at for append-only tables like events and logs, updated_at for tables that get updated in place, and the load timestamp for ETL destination tables. Avoid columns that can be NULL.

What’s a sensible starting SLA?

Start lenient, around double the expected cadence. If data is expected hourly, set a 2-hour SLA. It’s easier to tighten thresholds than to fight alert fatigue from SLAs set too tight on day one.

How do I handle tables that don’t update on weekends?

Either extend the SLA to cover the weekend (for example, 72 hours), set different thresholds for weekend days, or pause the freshness rule during known quiet periods. Choose based on how critical the data is. For row count and metric monitors on the same table, operating-period awareness handles weekends automatically by baselining active and dormant periods separately.

Why does the freshness calculation look off by several hours?

Almost always a timezone issue. AnomalyArmor normalizes to UTC, so a timestamp column stored in local time will appear skewed. Confirm your ETL writes timestamps consistently and check the column’s declared timezone.

What’s the difference between a warning and a violation?

A warning fires before the SLA is breached (often at 80% of the threshold) as an early heads-up. A violation fires once the data is officially past SLA. Route them separately, warnings to Slack, violations to PagerDuty.

Do I need freshness monitoring on every table?

No. Focus on tables that power dashboards, revenue reporting, customer-facing products, or compliance processes. Reference tables and historical archives usually don’t need freshness checks.

What’s Next

Set Up Metrics

Track row counts, null percentages, and detect anomalies

Configure Alerts

Get notified when freshness SLAs are violated

Report Badges

Embed freshness status in dashboards

Best Practices

Reduce alert fatigue