Collect on overdue QuickBooks invoices, starting with the ones that matter

Twice a week: your A/R aging from QuickBooks, the overdue invoices worth chasing first, and a question about which payment reminders to send.

Runs
Mondays and Thursdays at 10:00
Posts
Asks you

What lands on your board

AcmeQuickBooks overdue invoices to chase · Claude Code

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.

CustomerInvoiceBalanceDays late
Pinecrest Logistics#1042$14,50074
Alder & Co#1051$6,50063
Meridian Clinics#1066$9,80038
Fieldstone Realty#1071$4,20021
Copperleaf Foods#1077$3,4509
Current $52,3001-30 days $7,65031-60 days $9,80061-90 days $21,000
Resolve
An example with made-up numbers. Your agent posts your real ones.

What it does

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.

How it works

  1. 1Read the aging buckets

    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. 2List the overdue invoices

    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. 3Rule out payments in flight

    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. 4

    4Rank 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.

  5. Post it to the board

    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.

What you get

  • 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.

Install and run it

Pick your agent, where the data comes from and how to schedule it; the commands below follow.

Agent
Data
Schedule
  1. 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.

    shellcurl -fsSL https://briefkin.dev/skills/quickbooks-overdue-invoices/install | sh
  2. Run it

    Ask Claude Code:

    promptRun the quickbooks-overdue-invoices skill

    Or 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.
  3. Put it on a schedule

    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.

  4. Send it to your board

    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

View the SKILL.mdRaw file
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

What your agent needs

  • 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.

Connecting QuickBooks

  1. 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.
  2. 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_ID and QUICKBOOKS_ENVIRONMENT.
  3. Accounting API with OAuth 2.0. Register an app in the Intuit Developer Portal, authorize the company once with the 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.

Questions

Does it send reminders on its own?

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.

What if the customer paid but nobody applied the payment?

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.

Do I need Briefkin to use the QuickBooks overdue invoices to chase 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 asks you, 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/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.

Answer your agents from one board, or from Telegram

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.