Analytics troubleshooting

Last updated: May 19, 2026

Analytics troubleshooting

The most common Analytics issues, what causes them, and how to fix. For each: 1-line diagnosis + actionable next step. Always start by checking data freshness — sync + cache + postback lag explain most "numbers don't match" complaints.

Who is this for

Anyone hitting a discrepancy or missing feature in Analytics. First stop before contacting support.

Issue 1: Data stale / behind platform UI

Symptoms

Wevion shows older / different numbers than the platform's native dashboard.

Causes + fixes

  1. 15-min sync cadence — Wevion polls platforms every 15 min. Up to 15 min lag is normal.

  2. 10-min Redis cache (Cross-Channel only) — adds up to 10 min on top of sync. Total: up to 25 min lag.

  3. 24h demographics cache — demographic data refreshes daily.

  4. 24-72h postback lag — purchases / ROAS / CPA take 1-3 days to settle.

Fix:

  • Wait the cycle

  • For ROAS / CPA: use last_7d minimum

  • If > 1 hour stale: check service status; contact admin

See an-114 data freshness for the full picture.

Issue 2: Cross-Channel UI missing

Symptoms

Mode toggle doesn't show Cross-Channel option.

Cause

ENABLE_CROSS_CHANNEL_ANALYTICS env flag is off for your workspace.

Fix

Ask your admin to enable the flag. It's a deployment-level setting (env var + service restart).

If admin says it's enabled but you still don't see: check role permissions — Cross-Channel routes require ROLE_GROUPS.DASHBOARD.

Issue 3: Date range > 90 days rejected

Symptoms

Cross-Channel page or export returns error "date range exceeds 90 days".

Cause

MAX_DATE_RANGE_DAYS = 90 hard limit in cross-channel-analytics.service.ts.

Fix

Options:

  • Split into 2 or 3 calls (e.g. last 90 days + prior 90 days), concatenate externally

  • Switch to Single Platform mode (no hard cap; practical limits apply)

  • For exports: same 90-day limit applies (EXPORT_UNIFIED_REPORT SQS worker)

Issue 4: ROAS / CPA wrong vs platform UI

Symptoms

Wevion shows ROAS 1.8; Meta UI shows ROAS 2.3 for the same campaign + date range.

Causes + fixes

  1. Postback lag (most common) — Wevion's postback fetch is 24-72h behind; platform UI may be using more recent data. Use last_7d minimum; let data settle.

  2. Attribution window difference — Meta default is 7d click + 1d view; if Wevion uses a different effective window, totals differ slightly.

  3. Currency conversion — Cross-Channel converts to target_currency; small FX variance.

  4. Conversion event definition — Wevion may track different conversion events than what Meta UI displays. Verify event mapping.

Fix: trust the longer window; pair with tracker postbacks (PRD-14 com-*) for ground truth.

Issue 5: Currency mismatch

Symptoms

Numbers in unexpected currency or stakeholders confused about which currency.

Causes + fixes

  1. target_currency parameter wrong — check URL or workspace default

  2. Cross-Channel converts; Single Platform uses native — mode-dependent

  3. Workspace default changed recently — historical data re-rendered

Fix:

  • Verify workspace currency at /settings → Workspace

  • For consistency: pick one target_currency and stick with it

  • See an-115 exchange rates

Issue 6: Export stuck pending

Symptoms

Export job submitted but status: pending for > 10 min.

Causes + fixes

  1. SQS worker backlog — usually self-resolves within 10-15 min

  2. Large dataset — 90 days + 5 platforms + PDF = slow; budget 10+ min

  3. Subscription expired — request rejected; check /settings/team/billing

Fix:

  • Wait

  • If > 30 min: check error in job_result

  • If error: typically timeout on too-large scope — narrow date range or platforms

See an-116 export.

Issue 7: Export job failed

Symptoms

status: failed + error_message in job_result.

Common error_message → diagnosis

error_message

Cause

Fix

subscription_required

No active subscription

Top up at /settings/team/billing

date_range_exceeds_90_days

Too long

Split

timeout

Too many entities / too long

Narrow scope

provider_error: ...

Upstream platform sync issue

Retry after few min

Issue 8: Demographics outdated

Symptoms

Audience hub demographics show old data; expected refresh didn't happen.

Cause

24h cache on audience-insights.service.ts. Refreshes once daily.

Fix

Wait until next day. No manual refresh available from UI (by design).

Issue 9: Missing tracker enrichment

Symptoms

Tracker columns (tracker_clicks, tracker_conversions, tracker_revenue, etc.) empty.

Cause

No tracker integration connected for this account (see PRD-14 com-*).

Fix

Set up tracker integration. Tracker enrichment requires Keitaro / Voluum / RedTrack / BeMob / TG Tracker connected. See com-106 Keitaro (or relevant integration article).

Issue 10: Cross-Channel cache shows stale data

Symptoms

Cross-Channel data clearly older than Single Platform for same campaign.

Cause

Redis cache (10-min TTL) hit; fresher data exists but cache hasn't expired.

Fix

  • Wait up to 10 min

  • Adjust date range params slightly to bypass cache (different cache key)

  • Switch to Single Platform mode (no Redis layer)

Issue 11: Member / team scoping confusion

Symptoms

Insights show different numbers for different users.

Cause

/api/v1/insights/campaigns accepts member_id and team_owner_id params — filters insights to that user's scope.

Fix

  • Verify which member_id / team_owner_id is in your URL

  • For workspace-wide: leave both unset (or owner_id = workspace owner)

  • Check role + canViewTeam permission

Issue 12: Recommendation contradicts intuition

Symptoms

Budget recommendation suggests shifting away from a platform you believe in strategically.

Cause

Recommendation is rule-based on historical ROAS only (see an-109). Doesn't see:

  • Brand reach value (long-term)

  • New-market testing (intentional low-ROAS)

  • Audience cap / saturation (you can't infinitely scale)

Fix

  • Treat recommendation as input, not output

  • Combine with strategic context

  • Apply partial deltas (50% of recommendation)

  • Verify postback data is settled (last_14d minimum)

Escalation

If none of the above match:

  1. Capture: endpoint + query params + observed value + expected value + timestamp

  2. Check service status (if /status available)

  3. Check audit log for unusual actions

  4. Contact support with details

Related