5 overdue invoices to chase, $38,450
Send QuickBooks payment reminders for these invoices?
$38,450 is overdue across 5 customers, and $21,000 of it is more than 60 days late.
Twice a week: your A/R aging from QuickBooks, the overdue invoices worth chasing first, and a question about which payment reminders to send.
What lands on your board
Send QuickBooks payment reminders for these invoices?
$38,450 is overdue across 5 customers, and $21,000 of it is more than 60 days late.
Receivables slip because chasing them is awkward, not because anyone forgot. By the time an invoice is 60 days late it has become a conversation with the customer's finance team, and the cash was needed weeks ago.
This skill turns the aging report into a short list: the few invoices big or old enough to chase this week, after checking for payments already in flight so nobody gets a reminder for a bill they paid. You choose who gets one, and QuickBooks sends it with the pay link.
Call GET /v3/company/{realmId}/reports/AgedReceivables as of today for the totals in Current, 1-30, 31-60, 61-90 and 91 and over, per customer and overall.
Query SELECT Id, DocNumber, CustomerRef, TotalAmt, Balance, DueDate, BillEmail FROM Invoice WHERE Balance > '0' AND DueDate < '2026-10-17' ORDERBY DueDate with today's date, paging with STARTPOSITION and MAXRESULTS.
For each customer on the list, look at recent Payment records for an UnappliedAmt above zero, and at open CreditMemo balances. A match goes on its own line to apply, not to chase.
Score each invoice by balance times days overdue, put anything over 60 days or $5,000 on top, and ask which customers get a reminder. On a yes, POST /v3/company/{realmId}/invoice/{Id}/send emails the invoice with its pay link to BillEmail.
With BRIEFKIN_TOKEN set, the agent sends the result as one card that updates in place every run. Without it, you get the report in the chat.
Pick your agent, where the data comes from and how to schedule it; the commands below follow.
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.
shellcurl -fsSL https://briefkin.dev/skills/quickbooks-overdue-invoices/install | shAsk Claude Code:
promptRun the quickbooks-overdue-invoices skillOr paste the prompt instead of installing:
promptIn QuickBooks Online (read only unless I approve sending), run the AgedReceivables report for today and give me the totals per bucket. Then list every invoice with a balance whose due date has passed: customer, invoice number, balance, days overdue. Check each of those customers for unapplied payments or open credit memos that might cover an invoice, and list those separately. Rank the rest by balance times days overdue, with anything over 60 days or $5,000 first. Ask me which customers should get a reminder; only after I answer, send those invoices again from QuickBooks so the customer gets the pay link.Mondays and Thursdays at 10:00, from cron on any machine where Claude Code is signed in:
crontab0 10 * * 1,4 claude -p "Run the quickbooks-overdue-invoices 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.
Connect Briefkin once with curl -fsSL https://briefkin.dev/install | sh and every run lands on your board as a question for you. How setup works
SKILL.md---
name: quickbooks-overdue-invoices
description: "Twice a week: your A/R aging from QuickBooks, the overdue invoices worth chasing first, and a question about which payment reminders to send. Use when the user asks for this, or when it runs on a schedule."
---
# QuickBooks overdue invoices to chase
Twice a week: your A/R aging from QuickBooks, the overdue invoices worth chasing first, and a question about which payment reminders to send.
Receivables slip because chasing them is awkward, not because anyone forgot. By the time an invoice is 60 days late it has become a conversation with the customer's finance team, and the cash was needed weeks ago.
This skill turns the aging report into a short list: the few invoices big or old enough to chase this week, after checking for payments already in flight so nobody gets a reminder for a bill they paid. You choose who gets one, and QuickBooks sends it with the pay link.
## 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
- QuickBooks Online read access through a connector or MCP server, or an Intuit developer app authorized for `com.intuit.quickbooks.accounting`.
- Permission to send invoices, only if you want the agent to send the reminders you approve.
If something is missing, say what and stop; do not invent numbers.
### Steps
1. **Read the aging buckets** (QuickBooks): Call `GET /v3/company/{realmId}/reports/AgedReceivables` as of today for the totals in Current, 1-30, 31-60, 61-90 and 91 and over, per customer and overall.
2. **List the overdue invoices** (QuickBooks): Query `SELECT Id, DocNumber, CustomerRef, TotalAmt, Balance, DueDate, BillEmail FROM Invoice WHERE Balance > '0' AND DueDate < '2026-10-17' ORDERBY DueDate` with today's date, paging with `STARTPOSITION` and `MAXRESULTS`.
3. **Rule out payments in flight** (QuickBooks): For each customer on the list, look at recent `Payment` records for an `UnappliedAmt` above zero, and at open `CreditMemo` balances. A match goes on its own line to apply, not to chase.
4. **Rank and ask**: Score each invoice by balance times days overdue, put anything over 60 days or $5,000 on top, and ask which customers get a reminder. On a yes, `POST /v3/company/{realmId}/invoice/{Id}/send` emails the invoice with its pay link to `BillEmail`.
## Route B: the browser
### What you need
- Signed in to QuickBooks Online as a user who can see sales and reports; sending reminders also needs permission to create and send sales transactions.
If something is missing, say what and stop; do not invent numbers.
### Steps
Start at https://app.qbo.intuit.com/app/invoices. The user is signed in already; never type passwords or codes, and ask if a sign-in page appears.
1. **List the overdue invoices**: Open `https://app.qbo.intuit.com/app/invoices` (**Sales** > **Invoices**, or **All apps** > **Sales & Get Paid** > **Invoices** in the newer navigation) and click the **Overdue** total at the top to filter the list. Read customer, invoice number, balance, due date and the days overdue in the status column. Use the export icon above the table when the list is long.
2. **Read the aging buckets**: Go to **Reports** > **Standard reports** and open **Accounts receivable aging summary** with **Report period** set to today. Read the totals for Current, 1-30, 31-60, 61-90 and 91 and over, overall and per customer.
3. **Rule out payments in flight**: For each customer on the list open them under **Sales** > **Customers** and look through their transactions for a payment with an unapplied amount or an open credit memo. Those go on their own line to apply, not to chase.
4. **Rank and ask**: Rank the rest by balance times days overdue, with anything over 60 days or $5,000 first, and ask which customers get a reminder. Only after the answer, open each approved invoice, choose **Send reminder** from the **Receive payment** dropdown, check the message and click **Send**.
Note: Menu names differ between the classic and the newer QuickBooks navigation; the invoice page URL is the same. The aging summary groups by due date as of today, so an invoice due yesterday sits in 1-30 even though it was current when the last run looked.
## The report
- **Total overdue** and how much of it is past 60 days.
- The aging buckets: current, 1-30, 31-60, 61-90, 91 and over.
- The invoices to chase, ranked: customer, number, balance, days late.
- Unapplied payments or credits that may already settle an invoice.
- The question: which reminders to send.
## 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-overdue-invoices/<date of this run, e.g. 2026-10-16>",
"item_key": "quickbooks-overdue-invoices",
"project": "Acme",
"source": "QuickBooks overdue invoices to chase skill",
"kind": "action",
"title": "5 overdue invoices to chase, $38,450",
"summary": "**$38,450** is overdue across 5 customers, and **$21,000** of it is more than 60 days late.",
"action": {
"request": "Send QuickBooks payment reminders for these invoices?",
"options": [
"Send all 5",
"Only the 2 over 60 days",
"Draft personal emails instead",
"Not today"
]
},
"widget": [
{
"type": "Table",
"props": {
"columns": [
"Customer",
"Invoice",
"Balance",
"Days late"
],
"align": [
"left",
"left",
"right",
"right"
],
"rows": [
[
"Pinecrest Logistics",
"#1042",
"$14,500",
74
],
[
"Alder & Co",
"#1051",
"$6,500",
63
],
[
"Meridian Clinics",
"#1066",
"$9,800",
38
],
[
"Fieldstone Realty",
"#1071",
"$4,200",
21
],
[
"Copperleaf Foods",
"#1077",
"$3,450",
9
]
]
}
},
{
"type": "Badges",
"props": {
"items": [
{
"label": "Current $52,300",
"tone": "ok"
},
{
"label": "1-30 days $7,650",
"tone": "neutral"
},
{
"label": "31-60 days $9,800",
"tone": "warn"
},
{
"label": "61-90 days $21,000",
"tone": "bad"
}
]
}
}
]
}
JSON
```
Widgets come from the Briefkin catalog (https://briefkin.dev/v1/catalog). Without a token, just give the user the report.
## Run it on a schedule
Suggested: Mondays and Thursdays at 10:00 (`0 10 * * 1,4`). From cron, with the agent signed in on that machine:
```bash
0 10 * * 1,4 claude -p "Run the quickbooks-overdue-invoices 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-overdue-invoices#schedule
Source: https://briefkin.dev/skills/quickbooks-overdue-invoices
QuickBooks Online read access through a connector or MCP server, or an Intuit developer app authorized for com.intuit.quickbooks.accounting.
Permission to send invoices, only if you want the agent to send the reminders you approve.
QUICKBOOKS_CLIENT_ID, QUICKBOOKS_CLIENT_SECRET, QUICKBOOKS_REFRESH_TOKEN, QUICKBOOKS_REALM_ID and QUICKBOOKS_ENVIRONMENT.com.intuit.quickbooks.accounting scope, 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.
No, it asks first every time. Approved reminders go out through QuickBooks' own invoice email, so the customer gets your usual template with the online payment link and the send is recorded on the invoice.
That is the most embarrassing reminder to send, so the agent looks for it first. Unapplied payments, deposits and credit memos for the same customer are listed as "apply, don't chase", with the amounts.
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 asks you, so you can glance at it instead of asking again.
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.
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/invoices 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.
Skills are free to use with any agent. Briefkin is where their results land: one board for every report, number and question your agents send, with a ping when something needs you.
Free during the open beta. No card.