Why this matters
Marketing dashboards often pull data from ad platforms, web analytics, and CRMs that update on different schedules. Understanding refresh and latency prevents bad decisions like pausing a performing campaign because conversions look "missing" or reporting the wrong revenue because yesterday is not final yet.
- Budget pacing: Avoid overspending by knowing how fresh spend and conversion data are.
- Campaign optimization: Distinguish true performance change from normal data delays.
- Stakeholder trust: Show clear "Data as of" and freshness indicators so people know when to act.
Concept explained simply
Key terms
- Refresh frequency: How often your dashboard pulls or updates data (e.g., hourly, daily at 07:00).
- Latency: Delay between when an event happened and when it becomes available in your dashboard. Sources: API processing, ETL schedules, warehouse jobs.
- Freshness: How recent the data is right now. A common indicator is "Data as of: 13:00 UTC" or "Freshness: 2h 15m".
- Event time vs. Load time: Event time is when the user action happened; load time is when it landed in your warehouse.
- Finalization: Vendors may restate metrics (e.g., fraud filters). Yesterday might not be final until noon.
Mental model
Think of your dashboard like a restaurant kitchen. Orders (events) come in continuously, but ingredients (data) arrive in batches from different suppliers at different times. You can serve meals only with what has arrived. Label each dish with when the ingredients were last delivered.
Latency sources to watch
- Source system processing: Ads APIs often have 1–6 hour delays; some metrics restate for 24–72 hours.
- ETL/ELT schedule: Hourly, every 15 minutes, or daily windows.
- Warehouse processing: Materialized views or incremental models add their own delay.
- Timezone cutoffs: Marketing is often reported in account time, not UTC.
Worked examples
Example 1: Paid Ads Daily Pacing
Context: Spend updates hourly; conversions have a 3–6 hour delay; ETL runs hourly at :10 past.
- Set dashboard banner: "Spend as of HH:10; Conversions may lag 3–6h."
- For Today view, show a caution tag on conversions until 18:00 local time.
- For Yesterday, add note: "Metrics stabilize by 12:00."
Example 2: Web Analytics vs CRM Leads
Context: GA4 has processing delays; CRM ingestion is near-real-time.
- Use a mixed-grain card: "Site sessions (last updated 30m ago)" and "Leads (last updated 5m ago)."
- Avoid showing conversion rate for the last 2 hours; instead, display last full hour.
Example 3: Weekly Email Campaign
Context: ESP opens/clicks stabilize ~24 hours after send; revenue attribution updates overnight.
- Refresh daily at 07:00 account time.
- Label cards: "Open/Click stable after +24h; Revenue final after next 07:00."
- In trend charts, gray out the rightmost day until finalization.
How to apply: steps
- Inventory sources: For each source, note timezone, typical delay, and restatement window.
- Define SLAs: Example: "95% of hourly loads finish by HH:20; daily close by 07:15."
- Set refresh cadence: Match business need (pacing vs reporting) and source constraints.
- Compute freshness: Store or query last_refresh_at and max(event_time) per dataset.
- Design UI cues: Add "Data as of", color-coded freshness, and tooltips listing known lags.
- Guardrails: Hide or gray out partial windows; show warnings on Today/Current hour.
- Document: Include a collapsible panel with assumptions, cutoffs, and known caveats.
Sample freshness formulas
- Data freshness (minutes) = now() - last_refresh_at.
- Effective latency (minutes) = now() - max(event_time_in_warehouse).
- Finalization cutoff: yesterday is considered final after 12:00 account time.
Helpful UI copy patterns
- "Data as of: 14:10 UTC (Conversions may lag up to 6h)."
- "Today’s conversions are preliminary; expect upward restatement."
- "Last successful refresh: 09:20; next scheduled: 10:20."
Exercises
Do the tasks below, then compare with the provided solutions. You can also take the quick test at the end. Note: the test is available to everyone; only logged-in users have their progress saved.
Exercise 1: Pick a safe refresh plan
Replicate the instructions from the Exercises section below. When done, open the solution to self-check.
Open Exercise 1 details
See the Exercises panel on this page for full instructions and hints. Your output should include:
- A schedule table or bullet list for refresh times.
- UI messages for "Data as of" and known lags.
- Rules for when to gray out preliminary data.
Exercise 2: Build a freshness indicator
Create a simple query and UI text that shows last refresh and max event time per dataset. Compare with the solution.
Open Exercise 2 details
See the Exercises panel on this page for SQL-style logic and expected output.
Self-check checklist
- I can state the difference between refresh frequency, latency, and freshness.
- My dashboard shows "Data as of" in account time and mentions known lags.
- I gray out or hide partial windows (current hour/today) where relevant.
- I track last successful refresh and the next scheduled refresh.
- I documented restatement windows for each source.
Common mistakes and how to avoid them
- Comparing different timezones: Fix by standardizing to account time and labeling it explicitly.
- Treating Today as final: Add preliminary labels and gray out partial windows.
- Mixing event and load time: Use event time for metrics; use load time only for freshness indicators.
- No visibility on failures: Show last successful refresh and a warning if it is stale.
- Ignoring vendor restatements: Call out stabilization times (e.g., conversions stable after +24h).
- Over-refreshing: If the source updates hourly, refreshing every 5 minutes adds cost without benefit.
Quick self-audit
- Open your dashboard at 08:00 and 13:00. Do numbers change predictably or jump due to late arrivals?
- Is "Data as of" visible on every page?
- Do stakeholders know when yesterday becomes final?
Practical projects
- Add a global freshness banner with: Last refresh, Next refresh, Known lags per metric group.
- Implement gray-out for Today’s conversions until 18:00 account time; show a tooltip explaining why.
- Create a "Data Health" page listing each source, SLA, last success, and average latency.
- Simulate a delay by holding back one source; verify warnings trigger and charts behave safely.
Who this is for
- Marketing Analysts building or maintaining BI dashboards.
- Growth and Performance Marketers relying on near-real-time pacing.
- Data-savvy PMs needing reliable reporting windows.
Prerequisites
- Basic understanding of BI tools (e.g., chart building, filters).
- Comfort with time concepts (timezones, daily cutoffs).
- Optional: SQL fundamentals for freshness queries.
Learning path
- Understand refresh vs latency vs freshness.
- Document source schedules and restatement windows.
- Add freshness indicators and safety UI patterns.
- Set SLAs and alerts for missed refreshes.
- Practice with exercises and take the quick test.
Mini challenge
It is 14:35 account time. ETL runs hourly at :10. The ads API lags 2 hours for conversions but only 30 minutes for spend. Should you show conversion rate for "Today"?
Suggested answer
No. Conversions for 12:35–14:35 may be missing. Show spend and CPC for Today, but gray out conversion rate or show it for the last full hour ending at 12:00. Add a tooltip explaining the 2-hour conversion lag.
Next steps
- Finish the exercises and take the quick test below.
- Roll the freshness banner into an existing dashboard.
- Share latency documentation with your team and gather feedback.
Quick Test
Everyone can take this test; only logged-in users have their progress saved.