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_insight table + 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.ts

  • Endpoint: 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

/api/v1/analytics/kpi (single platform)

None

15 min max

/api/v1/analytics/unified (cross-channel)

Redis 10 min

25 min max

/api/v1/analytics/channel-mix

Redis 10 min

25 min max

/api/v1/audience-hub/insights/demographics

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 today time_range for ROAS: too noisy; use last_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