Skip to main content Skip to content

Showback (cost attribution)

Attribute spend to teams and to cloud tags (including Smart Tag values) with trend charts and resource-level drilldown.

6 min read Last updated: 

Showback answers “whose cost is this?”; by team, by tag, or both. Every report on this page reads from a single attribution table that’s refreshed nightly from cost records and re-refreshed whenever billing sync runs. So team totals and tag totals reconcile against the Reports trend chart down to the dollar.

Two attribution dimensions

You can attribute the same cost record by both team and tag simultaneously. They’re independent.

DimensionWhat it doesSplitting
TeamCost flows to the team(s) that own the resourceCost is split equally across owning teams when a resource has more than one. Unattributed resources are tracked separately.
TagCost flows to each tag key-value pair on the resourceEach tag key-value pair gets the full resource cost: no splitting. A resource tagged env=prod and team=alpha contributes its full cost to both.

The difference matters: if you sum tag totals across all keys, you’ll get more than your total spend (a single resource is counted under multiple tags). Sum team totals and you’ll match the cost trend.

Team attribution

The Teams tab on the Reports page lists every team with its cost for the selected period, sorted by spend.

Click a team to drill in:

  • By provider: AWS / GCP / Azure split
  • By resource type: top resource types in the team’s spend
  • Trend chart: cost over time for the team, with the same granularity controls as the org-wide trend
  • Resources: paginated list of resources attributed to this team, with shared-team indicators

How teams get attributed to resources

Team ownership is resolved per resource via the org’s team / resource bindings. Resources owned by more than one team have their daily cost split equally across the owning teams (shareCount driving the divisor in cost_allocation_daily). Resources with no owning team are tracked separately and surface under Unattributed teams on the Sankey overlay and in the team list.

Tag attribution

The Tags tab is the same shape as Teams but keyed on tag key-value pairs. Each row is a flattened key:value; env:prod, team:alpha, cost-center:engineering.

What gets included

Cost Reports Teams tab showing attribution coverage at 100 percent and a per-team cost-over-time chart across Trading, Risk, Compliance, Payments, Market Data, and Reference Data

Showback → Teams; spend attributed across owning teams with full-coverage tracking and per-team trends.

Three sources of tags feed the attribution:

SourceWhere it comes from
AWS tagsNative EC2/RDS/S3/etc. tags
GCP labelsNative Compute Engine / GKE labels
Azure tagsNative VM / Storage / SQL tags
Smart TagsZopNight’s policy-derived virtual tags you’ve explicitly accepted. Pending (not-yet-accepted) values are not included. Smart Tags live inside ZopNight and are never written back to your cloud.

The dimension_source field on each row tracks whether the tag came from cloud or auto (a Smart Tag). You can filter the Tags trend chart by source if you want to see one or the other. See Smart Tags.

Drilling in

Click any tag row to expand:

  • All values for that tag key (e.g. expand env: to see env:prod, env:staging, env:dev)
  • Provider split for that key-value
  • Resource-type split for that key-value
  • Trend chart for the key-value with provider / type filter dropdowns

Tag trend (batched)

If you want to compare multiple tag values on the same chart; e.g. env:prod vs env:staging vs env:dev; the trend endpoint accepts multiple tagKey / tagValue pairs in a single call. The chart renders one line per pair.

Tag coverage widget

The Dashboard has a Tag Coverage widget; a donut chart showing tagged vs untagged resources as a percentage of cost. A high untagged percentage means your attribution is missing context. Two ways to improve it:

  1. Tag the resources at the cloud level (Terraform, AWS Resource Tagger, etc.)
  2. Define a Smart Tag policy in Settings → Policy → Tagging to derive a consistent virtual tag for untagged resources, then accept the derived values so they count toward attribution; see Smart Tags

Unit economics

For costs in business terms (cost per active user, cost per order, cost per 1000 API requests) define a unit metric and push (or let ZopNight pull) the denominator values.

  1. Define the unit metric

    Reports → Unit economics → New metric. Name (e.g. “Monthly active users”), label, display scale (1 / 100 / 1000), and the source; push, csv, or pull.

  2. Pick the ingest path

    • Push API: POST /orgs/{orgID}/unit-metric-values/{id}; your pipeline POSTs [{date, value}] daily
    • CSV upload: drag a CSV onto the metric (capped at 1 MB / 5,000 rows)
    • Pull: register an HTTPS endpoint + auth + interval. ZopNight fetches it daily at 04:15 UTC, with SSRF guards (no private IPs, no localhost, no link-local, 30s timeout)
  3. View cost per unit on the Reports trend

    The trend chart gains a secondary axis showing infra spend per unit (cost ÷ denominator) for each bucket. Zero-denominator buckets are skipped. A server-side average-of-last-N forecast appears when there are enough data points.

Curated catalogue

Five common metric types are pre-defined: MAU, DAU, API requests, transactions, signups. Add any of these in one click and configure the ingest path after.

Test fetch (for pull metrics)

The “Test fetch” button runs the full pull code path synchronously before the cron schedule starts. Use this to verify your endpoint, auth header, and JSON shape before scheduling the cron; saves a 24-hour feedback loop.

Dimensioned unit economics

If the cost numerator is dimensioned (team or tag), the denominator falls back to the org-wide metric series when no dimensioned values exist. So you can ask “cost per MAU for team alpha” without having to push per-team MAU values; though pushing them gets you a more accurate denominator.

Endpoint paths

The showback endpoints moved from /showback/* to /reports/* in an earlier release. If you have integrations or saved URLs from before that change, update them:

  • /reports/teams, /reports/teams/:teamId, /reports/teams/:teamId/resources, /reports/teams/trends
  • /reports/tags, /reports/tags/:tagKey, /reports/tags/:tagKey/values/:tagValue/resources, /reports/tags/trends
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001 · zero-trust· 30% average cloud cost cut· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001 · zero-trust· 30% average cloud cost cut· 4 platforms · 1 console·