Data freshness — how often analytics update
Last updated: May 19, 2026
Data freshness — how often analytics update
Wevion's analytics aren't real-time. 4 freshness layers stack: platform sync every 15 min, Cross-Channel cache 10 min, audience demographics cache 24h, postback conversions lag 24-72h. Combined: numbers shown can be up to 25 min behind platform reality (per CLAUDE.md cron cadence); conversion / ROAS / CPA values can lag 24-72h. Use last_7d minimum for ROAS / CPA decisions.
Who is this for
Anyone wondering "why doesn't Wevion show what the Meta UI shows right now?" or "why does my ROAS keep changing for yesterday?".
The 4 freshness layers
Layer 1: Platform sync (every 15 min)
Wevion's backend syncs insights from each platform via a cron job:
Cadence: every 15 minutes (per CLAUDE.md cron cadence)
Workers:
insight-collector.service.ts+ per-platform variants (google-,tiktok-,taboola-,snapchat-insight-collector)Stores into
campaign_daily_insighttable + related tables
Implication: data shown in Wevion is at most 15 min behind what the platform reports natively.
Layer 2: Cross-Channel Redis cache (10 min)
Cross-Channel queries are computationally expensive (joining multiple platforms with currency conversion). To keep the dashboard fast:
Redis cache TTL: 10 minutes
Cache prefix:
cca:v2:Cache key: includes date range + platforms + target_currency
Implication: Cross-Channel data may be up to 10 min behind Single Platform data (which doesn't use this cache layer).
Layer 3: Audience demographics cache (24h)
Demographic breakdowns (age / gender / geo / device) cached for 24 hours:
Cache TTL: 24 hours
Service:
audience-insights.service.tsEndpoint:
GET /api/v1/audience-hub/insights/demographics
Implication: demographic numbers refresh once daily, not in real-time.
Layer 4: Postback conversion lag (24-72h)
The slowest layer. Conversion events (purchases, leads, registrations) take time to flow through:
Meta API postback: 24-72 hours typical
Commerce / tracker integration (e.g. Postback from Keitaro / Voluum): seconds to minutes
Server-side conversions API (CAPI): fast (depends on your implementation)
Implication: purchases, purchaseValue, revenue, ROAS, CPA (purchase-based) are incomplete for the last 24-72h.
Combined freshness
For a typical Cross-Channel ROAS view:
Platform sync (15 min) + Redis cache (10 min) + Postback lag (24-72h)
= up to ~73h lag on ROAS for the most recent data
For non-postback metrics (spend, impressions, clicks):
Platform sync (15 min) + Redis cache (10 min, Cross-Channel) = up to 25 min lag
Implications for decisions
Decision | Date range to use |
|---|---|
ROAS / CPA scale-or-pause | last_7d minimum (let postback settle) |
Spend pacing check | last_3d (faster signal) |
CTR / creative fatigue | last_3d (faster signal) |
Daily budget burn | today is fine (no postback dependency) |
Executive monthly | last_30d (smooth + settled) |
For Rules Engine (PRD-17): set time_range on ROAS / CPA rules to last_7d minimum (see rul-116).
Why each layer exists
15-min platform sync
Platform APIs have rate limits. Wevion's 15-min cycle is a compromise between freshness + API quota. Faster polling would risk rate-limit errors + extra API cost.
10-min Redis cache
Cross-Channel queries (joining platforms, converting currencies, aggregating) are expensive. Without cache: every page load runs full SQL aggregation. 10-min cache keeps dashboards fast for repeat views.
24h audience demographics cache
Demographics don't change rapidly. Daily refresh is enough granularity for most decisions. Refreshing more often = excess API + DB load with no decision value gain.
24-72h postback lag
This isn't Wevion's choice — it's how Meta's postback delivery works. Platforms claim conversions asynchronously after the user's purchase event, with reconciliation across attribution windows.
What to look for in numbers
"Yesterday's ROAS just went up"
Postback settling. Conversions from clicks 24-72h ago are still flowing in. Wait for the 7-day window to stabilize.
"Dashboard shows older value than Meta UI"
Single Platform: up to 15 min lag (sync). Acceptable. Cross-Channel: up to 25 min lag (sync + Redis). Acceptable.
If > 30 min lag: check service status.
"Demographic split changed between yesterday and today"
24h cache refresh happened. New data set. Expected behavior.
"Cross-Channel and Single Platform show different ROAS for same campaign"
Currency conversion (Cross-Channel applies
target_currency)Attribution unification (Cross-Channel tries to harmonize across platforms)
Small variance expected; large variance = investigate
How to force fresh data
You can't force a hard refresh from the UI (no "refresh now" button). What you can do:
Adjust date range slightly: bypasses Redis cache hit (different cache key)
Switch from Cross-Channel to Single Platform: skips the Redis cache layer
Wait the cycle: 15 min for sync, 10 min for Redis
For sync issues (data missing entirely): check /status (if available) or contact admin.
Endpoint reference
Endpoint | Cache | Lag from platform |
|---|---|---|
| None | 15 min max |
| Redis 10 min | 25 min max |
| Redis 10 min | 25 min max |
| 24h | up to 1 day |
Postback metrics (ROAS, CPA, purchases) carry an additional 24-72h lag on top of these layers.
Common mistakes
Acting on today's ROAS: postback incomplete; use 7-day window
Comparing Wevion to platform UI 1:1 in real-time: sync + cache lag explains small discrepancies
Refreshing the page expecting fresh data: same cache served; adjust date range to bypass
Expecting demographic data to update during the day: 24h cache; refreshes overnight
Setting Rules Engine on
todaytime_range for ROAS: too noisy; uselast_7d
Common issues
Data missing entirely > 1 hour: sync issue; check status; contact admin
Data older than expected for one platform: that platform's sync failed; retry or check provider status
Demographics empty: cache miss on first load of day; refresh in a few seconds
Cross-Channel slower than Single Platform: 90-day aggregation on large workspace; reduce date range
Related
Postback vs Meta conversions — attribution deep dive
Exchange rates — currency layer
Analytics troubleshooting — full diagnostic guide