Single Platform — widget grid explained

Last updated: May 19, 2026

Single Platform — widget grid explained

Single Platform mode renders a grid of 6 verified widgets (apps/backend/src/routes/api/analytics.route.ts): KPI strip, Spend trend, Top / Flop, Creative performance, Spend breakdown, Account stats. Each 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.

The 6 widgets

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: aggregated account health metrics — spend, revenue, profit, ROAS, CPA, CPM, CTR, impressions, clicks, conversions.

Use case: account-level health check — same data fueling an-120 account summary.

Common query params

All 6 widgets share these params:

Param

What

from_date, to_date

Date range

platform

Required: meta / google / tiktok / taboola / snapchat (lowercase API codes)

timezone

Optional; defaults to account TZ

currency

Optional; defaults to native ad account currency

Auth: ROLE_GROUPS.DASHBOARD + app.apiKey('insights').

How widgets render together

The grid is a fixed layout per platform — no drag-rearrange, no saved layouts (that feature is not implemented; see an-101 overview deferred features).

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

Need

Tool

Aggregated view of platform health

Analytics Single Platform

Per-campaign / adset / ad row-level grid

Ads Manager (PRD-16)

Filter to a specific campaign or audience

Ads Manager

Edit / pause / bulk action

Ads Manager

Identify winning creative across campaigns

Analytics → Creative performance

Drill into winning creative's specific campaigns

Ads Manager → filter by name

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: account-stats is aggregated (all accounts for platform); KPI strip respects current scope filters (e.g. campaign filter)

Related