Analytics troubleshooting

Diagnose: data stale, cross-channel UI missing, 90-day rejected, ROAS wrong, currency mismatch, export stuck, demographics outdated, member scoping.

Written By Salvatore Sinigaglia

Last updated About 5 hours ago

Diagnose: data stale, cross-channel UI missing, 90-day rejected, ROAS wrong, currency mismatch, export stuck, demographics outdated, member scoping.

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 toggle greyed out

Symptoms

The Cross-Channel option in the mode toggle is disabled / greyed out (with a tooltip) — it's shown but not clickable.

Cause

ENABLE_CROSS_CHANNEL_ANALYTICS env flag is off for your workspace. When off, cross-channel routes also return 404 (empty payload).

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_messageCauseFix
subscription_requiredNo active subscriptionTop up at /settings/team/billing
date_range_exceeds_90_daysToo longSplit
timeoutToo many entities / too longNarrow scope
provider_error: ...Upstream platform sync issueRetry 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 (the multiplier is already clamped to ±50%)
  • Remember the recommendation uses a fixed 30-day window (not your page date range), and needs ≥14 days with spend + positive ROAS to appear

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

FAQ

Why does Wevion Analytics show older numbers than the platform's native dashboard?

Because of layered lag. Wevion polls platforms every 15 minutes, Cross-Channel adds up to 10 minutes of Redis cache (25 minutes total), demographics refresh daily, and purchases, ROAS, and CPA carry a 24-72h postback lag. Wait the cycle, use a last_7d minimum for ROAS or CPA, and check data freshness before assuming a bug.

Why is the Cross-Channel option greyed out in Wevion Analytics?

The Cross-Channel mode is gated by the ENABLE_CROSS_CHANNEL_ANALYTICS env flag. When off, the toggle option is shown but disabled/greyed (with a tooltip), and cross-channel routes return 404. Ask your admin to enable that deployment-level setting (env var plus service restart). If the admin confirms it's on but it stays disabled, check your role — Cross-Channel routes require ROLE_GROUPS.DASHBOARD permissions.

Why is my Wevion export stuck on pending or failed?

A PENDING export usually clears within 10-15 minutes as the SQS worker catches up, or takes longer for large scopes like 90 days across 5 platforms as a PDF. A FAILED export returns an error message such as subscription_required, date_range_exceeds_90_days, timeout, or provider_error. Fix by topping up billing, splitting the range, narrowing scope, or retrying.

Why does my Wevion ROAS differ from what Meta's UI reports?

The most common cause is postback lag — Wevion's postback fetch runs 24-72h behind, so use a last_7d minimum and let data settle. Other causes include attribution window differences, currency conversion to target_currency in Cross-Channel, and differing conversion event definitions. Trust the longer window and pair with tracker postbacks for ground truth.

Why does Wevion's budget recommendation contradict my strategy?

Because Wevion's budget recommendation is rule-based on historical ROAS only, computed over a fixed 30-day window (clamp(sqrt(roas/averageRoas)), clamped to ±50%). It doesn't account for long-term brand reach, intentional low-ROAS new-market testing, or audience saturation. Treat it as input rather than a directive: combine it with strategic context, and remember it needs ≥14 days with spend and positive ROAS to appear at all.