---
name: mercury-cash-balance-and-burn
description: "Every Monday: total cash across your Mercury accounts, net burn over the last 30 days, runway in months, and where the money went. Use when the user asks for this, or when it runs on a schedule."
---

# Mercury cash balance and burn

Every Monday: total cash across your Mercury accounts, net burn over the last 30 days, runway in months, and where the money went.

For a startup banking with Mercury, cash is the one number that ends the company if you misread it. The dashboard shows balances well; burn and runway are a spreadsheet someone updates monthly, usually after the board asks.

The agent reads balances and the last 30 days of transactions with a read-only token every Monday. It leaves out transfers between your own accounts and failed payments, works out net burn and runway, and lists the five biggest outflows. You see the trend weekly instead of discovering it at month end.

## Two ways to get the data

Use the API or MCP route when you have an MCP server, a CLI or an API token for the app. Otherwise, if you can drive a browser the user is signed in to (Claude in Chrome, a Playwright or Chrome DevTools MCP server), use the browser route. Say which one you used.

## Route A: API or MCP server

### What you need

- A Mercury API token of the Read Only type (Settings > API Tokens; no IP allowlist needed), in `MERCURY_API_TOKEN`, sent as `Authorization: Bearer secret-token:<token>`.
- Or Mercury's MCP server (`https://mcp.mercury.com/mcp`, beta, OAuth), approved with the `read` scope only.

If something is missing, say what and stop; do not invent numbers.

### Steps

1. **Read balances** (Mercury): `GET https://api.mercury.com/api/v1/accounts` and add up `currentBalance` across active checking and savings accounts. Keep each account's name and balance for the breakdown.
2. **Read 30 days of transactions** (Mercury): For each account, `GET /api/v1/account/{accountId}/transactions?start=<30 days ago>&end=<today>&limit=1000`. Drop transactions whose `status` is `failed` or `cancelled`, and every `kind: internalTransfer`, which only moves money between your accounts. Mercury also has a top-level `GET /api/v1/transactions` that lists all accounts at once.
3. **Work out burn and runway**: Split transactions into money in and money out by the sign of `amount` (confirm the sign on one payment you know). Net burn is money out minus money in. Runway is total cash over net burn, in months; if money in exceeds money out, say so instead.
4. **Find where it went**: Group money out by `counterpartyName` and list the 5 largest, so a one-off (an annual insurance bill, a tax payment) is visible next to payroll.
5. **Post the tile**: Total cash is the headline with 8 weekly snapshots of history. Net burn, money in and runway go in the glance; the accounts and the biggest outflows open with the card.

## Route B: the browser

### What you need

- Signed in to Mercury as an Admin, Bookkeeper or a Custom user whose role includes viewing all accounts and Insights; Card-only users cannot see balances.

If something is missing, say what and stop; do not invent numbers.

### Steps

Start at https://app.mercury.com/dashboard. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.

1. **Read the balances**: The **Dashboard** shows total cash across accounts and each checking, savings and Treasury balance. Write down the total and the per-account figures.
2. **Open Insights for burn and runway**: Click **Insights** in the sidebar. In the top-right timeframe picker choose the last 30 days (or **Last month**). Read **Burn rate** (average monthly net spend, internal transfers already excluded) and **Runway**; Mercury hides runway when cashflow is positive, in which case say so.
3. **Read money in and money out**: In the cashflow overview read **Money in** and **Money out** for the period. Switch Money out to **by recipient** and note the 5 largest rows; click a row to see the transactions behind it if a name is unclear.
4. **Cross-check against Transactions**: Open **Transactions**, filter to the last 30 days and all accounts, and use **Export** to CSV if you need to confirm that failed or cancelled payments and internal transfers are excluded from the totals.
5. **Report**: Total cash, net burn, money in, runway in months, the 5 biggest outflows and each account's balance, plus one line if the last week was unusual.

Note: Insights computes burn as an average monthly figure over the selected range and defaults to the last three full months, so set 30 days to match this report. Its runway includes Treasury balances. The Transactions list paginates; export when there are more than a few hundred entries.

## The report

- **Total cash** across Mercury accounts, with an 8-week trend.
- **Net burn** over the last 30 days, with money in and money out.
- **Runway** in months at that burn.
- **Biggest outflows** by counterparty, and the balance of each account.

## Post it to Briefkin

When `BRIEFKIN_TOKEN` is set, or `~/.config/briefkin/env` exists (the installer from https://briefkin.dev/docs writes it), also send the result to the user's Briefkin board as one card. Keep the `item_key` the same on every run so the card updates in place, use a new `event_id` per run, and put today's real numbers in place of the example ones. If the request fails, say so once and carry on.

```bash
[ -n "${BRIEFKIN_TOKEN:-}" ] || . ~/.config/briefkin/env
curl -sS -X POST "${BRIEFKIN_URL:-https://briefkin.dev}/v1/events" \
  -H "authorization: Bearer $BRIEFKIN_TOKEN" \
  -H "content-type: application/json" \
  -d @- <<'JSON'
{
  "v": 1,
  "event_id": "mercury-cash-balance-and-burn/<date of this run, e.g. 2026-10-16>",
  "item_key": "mercury-cash-balance-and-burn",
  "project": "Acme",
  "source": "Mercury cash balance and burn skill",
  "kind": "metric",
  "title": "$1.84M in the bank, 9.3 months of runway",
  "metric": {
    "label": "Cash",
    "value": 1842300,
    "prefix": "$",
    "better": "higher",
    "period_start": "<start of the period, ISO 8601>",
    "period_end": "<end of the period, ISO 8601>"
  },
  "glance": {
    "type": "Grid",
    "props": {
      "columns": 3
    },
    "children": [
      {
        "type": "Stat",
        "props": {
          "label": "30-day net burn",
          "value": 198400,
          "prefix": "$",
          "better": "lower"
        }
      },
      {
        "type": "Stat",
        "props": {
          "label": "Money in",
          "value": 61200,
          "prefix": "$"
        }
      },
      {
        "type": "Stat",
        "props": {
          "label": "Runway",
          "value": 9.3,
          "unit": "months"
        }
      }
    ]
  },
  "widget": [
    {
      "type": "Table",
      "props": {
        "columns": [
          "Biggest outflows, 30 days",
          "Amount"
        ],
        "align": [
          "left",
          "right"
        ],
        "rows": [
          [
            "Payroll (Gusto)",
            "$162,400"
          ],
          [
            "Annual insurance (Vouch)",
            "$31,800"
          ],
          [
            "Amazon Web Services",
            "$24,900"
          ],
          [
            "Office lease",
            "$14,500"
          ],
          [
            "Google Workspace",
            "$2,100"
          ]
        ]
      }
    },
    {
      "type": "Callout",
      "props": {
        "text": "Cash fell $89,400 last week, about twice the usual: the $31,800 annual insurance bill landed in the same week as payroll.",
        "tone": "info"
      }
    }
  ],
  "size": "md"
}
JSON
```

Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.

Set `period_start` and `period_end` to the window the number covers: the tile names it from them ("Last 7 days", "Today", "This month"). For a count right now (open items, a balance), send `"period_label": ""` so no period shows; for another name, send it as `period_label` (at most 24 characters).

## Run it on a schedule

Suggested: Mondays at 8:00 (`0 8 * * 1`). From cron, with the agent signed in on that machine:

```bash
0 8 * * 1 claude -p "Run the mercury-cash-balance-and-burn skill"
# Codex: codex exec, Gemini CLI: gemini -p, Copilot CLI: copilot -p, OpenCode: opencode run
```

Or use the agent's own scheduler (Claude Code routines, Codex automations, Claude or ChatGPT scheduled tasks): https://briefkin.dev/skills/mercury-cash-balance-and-burn#schedule

Source: https://briefkin.dev/skills/mercury-cash-balance-and-burn
