What it does
Runway is the one number a founder should know without looking, and it goes stale the week payroll grows. Working it out means adding up bank balances, deciding what counts as burn and dividing, usually in a spreadsheet nobody has touched since the last board meeting.
The agent does it from the books every Monday with the same rules each time: bank accounts only, the cash-basis loss of the last three full months, cash divided by burn. When burn starts creeping up, the card shows it weeks before the board deck does.
How it works
1Total the bank accounts
Run
SELECT Name, CurrentBalance FROM Account WHERE AccountType = 'Bank' AND Active = truethroughGET /v3/company/{realmId}/queryand add upCurrentBalance. List credit card accounts (AccountType = 'Credit Card') separately instead of netting them.2Pull three months of profit and loss
Call
GET /v3/company/{realmId}/reports/ProfitAndLosswith the last three full months asstart_dateandend_date,summarize_column_by=Monthandaccounting_method=Cash, and read the Net Income row for each month.- 3
3Compute burn and runway
Net burn for a month is its net loss. Average the three months; runway is bank cash divided by that average, to one decimal. If the average is a profit, report the business as cash-flow positive instead of giving a runway.
4Check the books are current
Query the newest
DepositandPurchase(ORDERBY TxnDate DESC MAXRESULTS 1). If nothing has been booked for more than 7 days, say the balance is probably stale and since when.- 5
5Write the report
Months of runway and the change since last week, cash per bank account and in total, net burn for each of the three months, and the month the money runs out at this rate.
Post it to the board
With
BRIEFKIN_TOKENset, the agent sends the result as one card that updates in place every run. Without it, you get the report in the chat.
What you get
- Months of runway and the change since last week.
- Cash in each bank account and the total.
- Net burn for each of the last three months and the average.
- The month the cash runs out at the current burn, and a warning if the books are behind.
Install and run it
Pick your agent, where the data comes from and how to schedule it; the commands below follow.
Install the skill
One command. It puts the SKILL.md in ~/.claude/skills and in ~/.agents/skills, which Codex, Cursor, Gemini CLI, Copilot CLI and OpenCode read too.
shell
curl -fsSL https://briefkin.dev/skills/quickbooks-cash-and-runway/install | shRun it
Ask Claude Code:
prompt
Run the quickbooks-cash-and-runway skillOr paste the prompt instead of installing:
prompt
Using QuickBooks Online (read only): add up CurrentBalance of all active accounts with AccountType Bank, and list credit card balances separately. Pull the ProfitAndLoss report for the last three full months, cash basis, summarized by month, and take each month's net income; a loss is net burn. Average the three months and divide cash by that average for months of runway, to one decimal. Give me runway, cash per bank account and the total, burn per month, and the month the cash runs out. If the newest transactions in the books are more than a week old, warn me the balance may be stale. If the business is profitable, say so instead of giving a runway.Put it on a schedule
Mondays at 8:30, from cron on any machine where Claude Code is signed in:
crontab
30 8 * * 1 claude -p "Run the quickbooks-cash-and-runway skill"Add it with
crontab -e. A laptop asleep at that time runs it when it wakes if you use launchd or Task Scheduler instead; GitHub Actions works for the API route.Send it to your board
Connect Briefkin once with
curl -fsSL https://briefkin.dev/install | shand every run lands on your board as a stat tile. How setup works
View the SKILL.mdRaw file
SKILL.md---
name: quickbooks-cash-and-runway
description: "Mondays: cash across your QuickBooks bank accounts, average monthly net burn over the last three months, and how many months of runway that leaves. Use when the user asks for this, or when it runs on a schedule."
---
# QuickBooks cash and runway
Mondays: cash across your QuickBooks bank accounts, average monthly net burn over the last three months, and how many months of runway that leaves.
Runway is the one number a founder should know without looking, and it goes stale the week payroll grows. Working it out means adding up bank balances, deciding what counts as burn and dividing, usually in a spreadsheet nobody has touched since the last board meeting.
The agent does it from the books every Monday with the same rules each time: bank accounts only, the cash-basis loss of the last three full months, cash divided by burn. When burn starts creeping up, the card shows it weeks before the board deck does.
## 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 QuickBooks Online user or app with read access to accounting data: a QuickBooks connector or MCP server, or an OAuth 2.0 app with the `com.intuit.quickbooks.accounting` scope and the company's realm ID.
- Books kept reasonably current, since a bank balance in QuickBooks is only as fresh as the last bank feed match.
If something is missing, say what and stop; do not invent numbers.
### Steps
1. **Total the bank accounts** (QuickBooks): Run `SELECT Name, CurrentBalance FROM Account WHERE AccountType = 'Bank' AND Active = true` through `GET /v3/company/{realmId}/query` and add up `CurrentBalance`. List credit card accounts (`AccountType = 'Credit Card'`) separately instead of netting them.
2. **Pull three months of profit and loss** (QuickBooks): Call `GET /v3/company/{realmId}/reports/ProfitAndLoss` with the last three full months as `start_date` and `end_date`, `summarize_column_by=Month` and `accounting_method=Cash`, and read the Net Income row for each month.
3. **Compute burn and runway**: Net burn for a month is its net loss. Average the three months; runway is bank cash divided by that average, to one decimal. If the average is a profit, report the business as cash-flow positive instead of giving a runway.
4. **Check the books are current** (QuickBooks): Query the newest `Deposit` and `Purchase` (`ORDERBY TxnDate DESC MAXRESULTS 1`). If nothing has been booked for more than 7 days, say the balance is probably stale and since when.
5. **Write the report**: Months of runway and the change since last week, cash per bank account and in total, net burn for each of the three months, and the month the money runs out at this rate.
## Route B: the browser
### What you need
- Signed in to QuickBooks Online as a user who can see the chart of accounts, banking and reports (Standard user with all access, or Company admin), with the right company open.
If something is missing, say what and stop; do not invent numbers.
### Steps
Start at https://app.qbo.intuit.com/app/chartofaccounts. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.
1. **Total the bank accounts**: Open `https://app.qbo.intuit.com/app/chartofaccounts` (the gear menu > **Chart of accounts**); pick the company first if you have several. Filter or sort by **Type**, add up the **QuickBooks balance** column for the Bank accounts, not the **Bank balance** column, which is the feed's figure, and list the Credit Card accounts separately.
2. **Run the profit and loss by month**: Go to **Reports** > **Standard reports** and open **Profit and Loss**. Set **Report period** to a custom range from the 1st of the month three months ago to the last day of last month, **Display columns by** to **Months**, **Accounting method** to **Cash**, and run it. Read the **Net Income** row for each of the three months.
3. **Compute burn and runway**: A month's net loss is its net burn. Average the three months and divide total bank cash by the average, to one decimal. If the average is a profit, report the business as cash-flow positive instead of a runway.
4. **Check the books are current**: Open **Transactions** > **Bank transactions**. If the account tiles show a backlog in **For review**, or the newest entry on the **Categorized** tab is more than 7 days old, say the balance is probably stale and since when.
5. **Write the report**: Months of runway and the change since last week, cash per bank account and in total, net burn for each month and the average, and the month the money runs out at this rate.
Note: QuickBooks balance is the books; Bank balance is what the feed last saw. They differ by whatever is still in For review. Report controls in the newer report view carry slightly different names from the classic view; the options are the same.
## The report
- **Months of runway** and the change since last week.
- **Cash** in each bank account and the total.
- **Net burn** for each of the last three months and the average.
- The month the cash runs out at the current burn, and a warning if the books are behind.
## 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": "quickbooks-cash-and-runway/<date of this run, e.g. 2026-10-16>",
"item_key": "quickbooks-cash-and-runway",
"project": "Acme",
"source": "QuickBooks cash and runway skill",
"kind": "metric",
"title": "14.9 months of runway at current burn",
"metric": {
"label": "Runway",
"value": 14.9,
"unit": "months",
"better": "higher",
"period_start": "<start of the period, ISO 8601>",
"period_end": "<end of the period, ISO 8601>"
},
"glance": [
{
"type": "Grid",
"props": {
"columns": 2
},
"children": [
{
"type": "Stat",
"props": {
"label": "Cash in bank",
"value": 1284300,
"prefix": "$"
}
},
{
"type": "Stat",
"props": {
"label": "Net burn per month",
"value": 86400,
"prefix": "$",
"better": "lower"
}
}
]
}
],
"widget": [
{
"type": "Table",
"props": {
"columns": [
"Account",
"Balance"
],
"align": [
"left",
"right"
],
"rows": [
[
"Operating checking",
"$412,800"
],
[
"Treasury",
"$850,000"
],
[
"Payroll",
"$21,500"
],
[
"Total cash",
"$1,284,300"
]
]
}
},
{
"type": "Table",
"props": {
"columns": [
"Month",
"Net burn"
],
"align": [
"left",
"right"
],
"rows": [
[
"July",
"$81,200"
],
[
"August",
"$88,900"
],
[
"September",
"$89,100"
],
[
"Average",
"$86,400"
]
]
}
},
{
"type": "Callout",
"props": {
"text": "Burn is up $7,900 a month since July. At $86,400 a month the cash lasts until about January 2028.",
"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:30 (`30 8 * * 1`). From cron, with the agent signed in on that machine:
```bash
30 8 * * 1 claude -p "Run the quickbooks-cash-and-runway 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/quickbooks-cash-and-runway#schedule
Source: https://briefkin.dev/skills/quickbooks-cash-and-runway
What your agent needs
A QuickBooks Online user or app with read access to accounting data: a QuickBooks connector or MCP server, or an OAuth 2.0 app with the
com.intuit.quickbooks.accountingscope and the company's realm ID.Books kept reasonably current, since a bank balance in QuickBooks is only as fresh as the last bank feed match.
Connecting QuickBooks
- QuickBooks connector in Claude. Intuit and Anthropic partnered in 2026 to bring QuickBooks into Claude; where your plan offers the connector, connect it with your Intuit sign-in.
- QuickBooks Online MCP server, Intuit's open-source local server (source). It runs over stdio and reads
QUICKBOOKS_CLIENT_ID,QUICKBOOKS_CLIENT_SECRET,QUICKBOOKS_REFRESH_TOKEN,QUICKBOOKS_REALM_IDandQUICKBOOKS_ENVIRONMENT. - Accounting API with OAuth 2.0. Register an app in the Intuit Developer Portal, authorize the company once with the
com.intuit.quickbooks.accountingscope, and store the same five values. Access tokens last an hour and the refresh token can change on each refresh, so the skill must save the newest one.
The accounting scope has no read-only version; with Intuit's MCP server, set QUICKBOOKS_DISABLE_WRITE, QUICKBOOKS_DISABLE_UPDATE and QUICKBOOKS_DISABLE_DELETE to true so the agent gets only read, search and report tools.
Questions
Should credit card balances come off the cash?
The skill doesn't subtract them, because a card paid in full every month is already part of the burn. It lists them so you see them; if you carry a balance or draw on a line of credit, ask for net cash and it takes them off.
Why cash-basis profit and loss and not the cash flow statement?
For most startups, cash-basis net income is close to operating burn and easy to read month by month. It leaves out financing (a loan, a raise) and equipment purchases. If you have those, ask for the CashFlow report and the agent uses the net change in cash from operating and investing activities.
Do I need Briefkin to use the QuickBooks cash and runway skill?
No. The skill runs with your own agent and gives you the report in the chat. With a Briefkin token set, each run also posts it to your board as a stat tile, so you can glance at it instead of asking again.
Which agents can run it?
Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot CLI, OpenCode, Windsurf and Amp all read SKILL.md files. The install command puts it in ~/.claude/skills and ~/.agents/skills, where they look. ChatGPT, the Claude app and Grok take the prompt instead. Pick your agent under "Install and run it" and the commands change to match.
Can it work without an API or MCP server, from my browser?
Yes. Switch the data source to "Your browser" and the steps change to the QuickBooks pages themselves: the agent opens app.qbo.intuit.com/app/chartofaccounts in a browser you are signed in to and reads the numbers off the page. Claude Code, Codex, Cursor, Claude app and ChatGPT can drive a browser out of the box; Gemini CLI, Copilot CLI and OpenCode need a Playwright or Chrome DevTools MCP server first. It is slower than the API and needs you signed in, so it suits a report you run by hand or from a scheduler on your own computer.