Single Platform — widget grid explained
Configurable widget grid (up to 19 widgets: KPI cards, charts, tables, commerce). Saved layouts + drag-rearrange active. Per-platform native data.
Written By Salvatore Sinigaglia
Last updated About 5 hours ago
Configurable widget grid (up to 19 widgets: KPI cards, charts, tables, commerce). Saved layouts + drag-rearrange active. Per-platform native data.
Single Platform — widget grid explained
Single Platform mode renders a configurable widget grid — up to 19 widgets defined in
WIDGET_DEFINITIONS(apps/frontend/src/pages/analytics/lib/widget-registry.ts), grouped into KPI cards, charts, tables, and commerce. You add/remove widgets from the widget library, drag to rearrange, and save layouts (apps/frontend/src/stores/analytics-store.ts+dashboard-layouts.route.ts). Each widget is backed by its own endpoint. Native platform data — no cross-platform aggregation, no currency conversion.
Who is this for
Anyone in Single Platform mode reading widgets for the first time. Reference for what each widget shows + which endpoint feeds it.
Widget catalog
The widget library groups the 19 available widgets into four groups: KPI cards (spend, revenue, profit, ROAS, CPA, CPM, CTR, conversions, impressions, plus account-health cards — managed accounts, active accounts, disabled accounts, ban rate, rejected ads), charts (spend trend, spend breakdown), tables (metric table, top/flop, creative performance). The key widgets below are the ones you'll use most; the account-health KPI cards feed the same data as an-120 account summary.
KPI cards
Widget 1: KPI strip
Endpoint: GET /api/v1/analytics/kpi
What it shows: top-row metrics for the selected platform + date range:
- Spend (native currency)
- Impressions
- Clicks
- CTR (%)
- Conversions
- ROAS
- CPA
Each metric may show delta vs previous period (if comparison enabled).
Use case: at-a-glance pulse check.
See an-106 KPI strip for metric definitions.
Widget 2: Spend trend
Endpoint: GET /api/v1/analytics/spend-trend
What it shows: line chart of daily spend over the selected date range.
Use case: spot anomalies (sudden spend spike / drop), validate pacing.
Widget 3: Top / Flop
Endpoint: GET /api/v1/analytics/top-flop
What it shows: two ranked lists side-by-side — top N performers + bottom N performers — based on a chosen metric (default ROAS).
Use case: identify scale candidates + pause candidates in one view.
Widget 4: Creative performance
Endpoint: GET /api/v1/analytics/creative-performance
What it shows: per-creative metrics (impressions / spend / CTR / ROAS / CPA). Includes creative thumbnail.
Use case: identify winning / losing creatives across campaigns; informs creative refresh decisions.
Widget 5: Spend breakdown
Endpoint: GET /api/v1/analytics/spend-breakdown
What it shows: pie or donut chart breaking spend by entity (campaign / adset / ad — choose level).
Use case: detect concentration (one campaign consuming 80% of spend) or distribution issues.
Widget 6: Account stats
Endpoint: GET /api/v1/analytics/account-stats
What it shows: account health counts (not financial KPIs) — managed_accounts, active_accounts, disabled_accounts, ban_rate, rejected_ads, total_ads. The account-health KPI cards in the widget library render these.
Use case: account-level health check (how many accounts disabled/banned, how many ads rejected) — same data fueling an-120 account summary. For spend/ROAS/CPA, use the KPI strip widget above.
Common query params
The widgets share these params:
Auth: ROLE_GROUPS.DASHBOARD + app.apiKey('insights').
How widgets render together
The grid is configurable: add or remove widgets from the widget library, drag to rearrange them on the grid, and save named layouts (persisted via analytics-store.ts + dashboard-layouts.route.ts). This is active — not a deferred feature.
Widgets load in parallel. Some take longer (creative-performance with many creatives) than others (KPI strip).
Per-widget refresh
Each widget fetches independently:
- Date range change → all widgets re-fetch
- Platform change → all widgets re-fetch (different platform = different data set)
- Comparison toggle → all widgets re-fetch with previous-period data
No per-widget refresh control — the whole grid refreshes together.
When to use Single Platform widgets vs Ads Manager
Common issues
- Widget empty (no data): date range has no platform data — verify ad accounts active + connected + had spend in window
- Numbers differ from platform UI: 15-min sync lag (see an-114); also postback metrics lag 24-72h
- Widget loads slowly: large date range + many entities = slow; narrow range or filter
- Account-stats vs KPI strip differ: they measure different things — account-stats returns health counts (managed/active/disabled/ban_rate/rejected_ads), while the KPI strip returns financial metrics (spend/ROAS/CPA...). They are not the same numbers
FAQ
What widgets does Single Platform mode show in Wevion Analytics?
Single Platform mode renders a configurable grid drawn from up to 19 widgets (WIDGET_DEFINITIONS), grouped into KPI cards, charts, tables, and commerce. The most-used ones are the KPI strip, Spend trend, Top / Flop, Creative performance, Spend breakdown, and Account stats — each backed by its own endpoint, showing native platform data with no cross-platform aggregation or currency conversion. The KPI cards cover spend, revenue, profit, ROAS, CPA, CPM, CTR, conversions, and impressions.
Can I rearrange or save custom widget layouts in Single Platform mode?
Yes. The grid is configurable: add or remove widgets from the widget library, drag to rearrange them, and save named layouts (persisted via analytics-store.ts and dashboard-layouts.route.ts). This is an active feature. Widgets load in parallel, and some take longer than others — for example, Creative performance with many creatives is slower than the KPI strip.
Why is a Single Platform widget showing no data?
An empty widget usually means the selected date range has no platform data, so verify your ad accounts are active, connected, and actually had spend in that window. If numbers instead differ from the platform's native UI, that's the 15-minute sync lag plus postback metrics lagging 24-72 hours. A very large date range with many entities can also make widgets load slowly.
Which platforms can I select in Single Platform mode?
You can select Meta, Google, TikTok, Taboola, Snapchat, or Outbrain, passed as lowercase API codes in the required platform query param. Widgets share this param along with from_date, to_date, an optional timezone defaulting to account TZ, and an optional currency defaulting to the native ad account currency. Changing the platform re-fetches every widget with the new data set.
Why do Account stats and the KPI strip show different numbers?
They measure different things. Account stats returns account-health counts — managed, active, and disabled accounts, ban rate, rejected ads, and total ads — while the KPI strip returns financial metrics like spend, ROAS, CPA, CPM, and CTR. They're not the same numbers, so don't expect account-stats to report spend or revenue; use the KPI strip for money metrics.