Skip to main content
skill CX Codex

invoice-aging — Claude Code skill: track overdue invoices

Sorts unpaid invoices into aging buckets and flags clients who pay late. Handy when you need to see how much money is stuck with customers.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add openaccountant/skills --skill invoice-aging -a claude-code
Open on GitHub

What invoice-aging does

The skill takes your list of issued invoices — client, amount, invoice date, due date — and works out how many days each one is past due. Then it drops them into buckets: Current (0-30 days), 31-60, 61-90 and 90+. You get a table with totals per bucket and each bucket's share of the overall exposure. Clients with anything in the 90+ column get flagged, and the skill also computes the weighted average days outstanding.

There are two paths. The first leans on the transaction_search tool: the skill pulls incoming payments from each client over the past 6 months and matches them against known invoice amounts and dates to spot gaps. The second is manual — export from QuickBooks (Reports > Customers & Receivables > A/R Aging Summary), FreshBooks (Reports > Accounts Aging) or Wave (Reports > Aged Receivables), or build a sheet with Client, Invoice #, Amount, Invoice Date, Due Date, Paid Date and Paid Amount columns. The formulas for days outstanding, bucket assignment and the pivot are included.

One catch: transaction_search sees bank transactions, not invoices. So you have to supply the issued invoice list yourself, otherwise there is nothing to cross-reference against. Partial payments are handled — if $3,000 of a $5,000 invoice came in, the remaining $2,000 stays outstanding. For clients parked in the 61-90+ buckets, the skill suggests offering an early payment discount such as 2/10 Net 30.

What it helps with

  • sort unpaid invoices into aging buckets
  • spot clients who pay later than everyone else
  • total up the money tied up in receivables
  • match incoming payments against issued invoices
  • handle partial payments and the remaining balance

Example prompts for the agent

  • sort my unpaid invoices into aging buckets
  • find clients with invoices over 90 days past due
  • cross-reference the last 6 months of payments against my invoices and show the gaps

How to install invoice-aging

1Skills CLI (Vercel)

npx skills add openaccountant/skills --skill invoice-aging -a claude-code

2Manually: put the files in place

~/.claude/skills/invoice-aging/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/invoice-aging/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about invoice-aging

How do I install invoice-aging in Claude?

Run npx skills add openaccountant/skills --skill invoice-aging -a claude-code. The skill lands at ~/.claude/skills/invoice-aging/SKILL.md.

What does invoice-aging do?

It calculates days outstanding for each unpaid invoice, sorts them into Current, 31-60, 61-90 and 90+ buckets, flags chronic late payers and reports the weighted average days outstanding.

What do I need before running it?

A list of issued invoices with amounts and due dates. Without it there is nothing to cross-reference, because transaction_search only sees bank transactions.

Source text

SKILL.md · MIT
---
name: invoice-aging
description: >
  Track unpaid invoices by age bucket and flag overdue payments.
---

# Invoice Aging Report

## Overview
Analyze accounts receivable by sorting outstanding invoices into aging buckets: Current (0-30 days), 31-60 days, 61-90 days, and 90+ days. Identifies clients with chronically late payments and calculates total exposure.

## Wilson Tools Used
- `transaction_search` — find payment transactions matched to known clients or invoice references, identify gaps where expected payments are missing

## Workflow
1. Ask for the list of outstanding invoices (client name, invoice amount, invoice date, due date) or ask the user to describe their invoicing pattern.
2. Use `transaction_search` to find all incoming payments from each client over the past 6 months.
3. Cross-reference received payments against known invoice amounts and dates.
4. For each unpaid or partially paid invoice, calculate days outstanding from the due date.
5. Sort into aging buckets:

```
ACCOUNTS RECEIVABLE AGING — as of [Date]
═══════════════════════════════════════════════════════
Client          Current   31-60    61-90     90+     Total
────────────────────────────────────────────────────────
Acme Corp       $2,500      —        —        —     $2,500
Beta LLC            —    $1,800      —        —     $1,800
Gamma Inc           —       —     $3,200      —     $3,200
Delta Co            —       —        —     $5,000   $5,000
────────────────────────────────────────────────────────
TOTALS          $2,500   $1,800   $3,200   $5,000  $12,500
% of Total       20.0%    14.4%    25.6%    40.0%    100%
═══════════════════════════════════════════════════════
```

6. Flag any client with invoices in the 90+ bucket.
7. Calculate weighted average days outstanding.
8. Recommend follow-up actions: send reminder (31-60), escalate (61-90), consider collections (90+).

## Without Wilson
1. Export your invoice list from your invoicing tool (QuickBooks: Reports > Customers & Receivables > A/R Aging Summary; FreshBooks: Reports > Accounts Aging; Wave: Reports > Aged Receivables).
2. If no invoicing tool, create a spreadsheet with columns: Client, Invoice #, Amount, Invoice Date, Due Date, Paid Date, Paid Amount.
3. Calculate days outstanding: `=IF(PaidDate="", TODAY()-DueDate, PaidDate-DueDate)`.
4. Assign buckets with: `=IF(DaysOutstanding<=0,"Current",IF(DaysOutstanding<=30,"Current",IF(DaysOutstanding<=60,"31-60",IF(DaysOutstanding<=90,"61-90","90+"))))`.
5. Pivot table: Rows = Client, Columns = Bucket, Values = Sum of Amount.
6. For weighted average: `=SUMPRODUCT(Amount,DaysOutstanding)/SUM(Amount)`.

## Important Notes
- Wilson tracks cash transactions, not invoices directly. This skill works best when you can provide a list of issued invoices to cross-reference against bank deposits.
- Partial payments should be tracked. If an invoice is $5,000 and $3,000 was received, the remaining $2,000 is still outstanding.
- Consider offering early payment discounts (e.g., 2/10 Net 30) for clients consistently in the 61-90+ buckets.

© openaccountant · MIT · openaccountant/skills

Similar skills

Everything for Finance and business →

From the same set28

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor