Skip to content

Cloud cost tracking

What you’ll build: a daily spend dashboard — today’s total with a trend, plus a breakdown by service — fed by a job that reads your cloud billing API. Catch cost spikes before the invoice does.

pulsedeck.app / dashboards / cost
SCREENSHOT

Finished cost dashboard: a total-spend metric, a 30-day spend chart, and a by-service table.

Drop an image into public/shots/ and pass src.

  • PulseDeck running (Quickstart).
  • A registered source and its pd_… API key.
  • Access to your cost data (AWS Cost Explorer, GCP Billing, a provider export).
  • Category: cost
  • Stream: daily (or one stream per cloud account/project)

A daily job posts a metric for total spend, a chart for the trend, and a table breaking spend down by service. Add an alert when spend crosses a threshold you set.

Terminal window
curl -X POST http://localhost:3001/api/v1/reports \
-H "Authorization: Bearer pd_xxxxx" \
-H "Idempotency-Key: cost-2026-06-23" \
-H "Content-Type: application/json" \
-d @cost.json
{
"version": "1.0",
"source": { "id": "src_…" },
"category": { "slug": "cost" },
"stream": { "slug": "daily" },
"report": {
"title": "Cloud spend — 2026-06-23",
"summary": "Spend up 18% — compute spike.",
"severity": "warning",
"occurred_at": "2026-06-23T05:00:00Z",
"tags": ["cost"]
},
"blocks": [
{
"id": "total", "type": "metric",
"key": "spend", "label": "Spend (today)", "value": 412.5,
"unit": "USD", "format": "currency", "precision": 2,
"trend": "up", "sentiment": "negative", "delta": 63, "comparison_label": "vs yesterday"
},
{
"id": "trend", "type": "chart", "variant": "area",
"title": "Daily spend",
"labels": ["Mon", "Tue", "Wed", "Thu", "Fri"],
"unit": "USD",
"series": [{ "name": "Spend", "data": [340, 355, 360, 349, 412] }]
},
{
"id": "by-service", "type": "table",
"title": "By service",
"columns": [
{ "key": "service", "label": "Service", "type": "string" },
{ "key": "cost", "label": "Cost", "type": "number", "unit": "USD" }
],
"rows": [
{ "service": "Compute", "cost": 268.0 },
{ "service": "Storage", "cost": 96.5 },
{ "service": "Egress", "cost": 48.0 }
]
},
{
"id": "spike", "type": "alert",
"title": "Spend above daily budget", "severity": "warning",
"message": "Compute is 18% over the $350/day budget."
}
]
}
  • A metric widget for total spend.
  • A chart widget for the 30-day trend.
  • An alert_feed on the cost category for budget breaches.
{
"version": 1,
"widgets": [
{ "id": "t", "type": "metric", "span": "third", "row": 0,
"config": { "streamId": "str_daily", "metricKey": "spend", "label": "Spend (today)" } },
{ "id": "tr", "type": "chart", "span": "half", "row": 0,
"config": { "streamId": "str_daily", "metricKey": "spend", "variant": "area", "range": "30d" } },
{ "id": "al", "type": "alert_feed", "span": "full", "row": 1,
"config": { "categoryId": "cat_cost", "limit": 10 } }
]
}
pulsedeck.app / dashboards / cost / edit
SCREENSHOT

Builder with a spend metric, a trend chart, and a budget-alert feed.

Drop an image into public/shots/ and pass src.

  • Per account/project — one stream each under cost; compare them side by side.
  • Per client (agencies) — bill-back reporting: each client’s cloud spend in their own workspace.
  • Threshold alerts — only emit the alert block when spend crosses budget, so the feed stays signal.