DEV Community

Brittany Bonds
Brittany Bonds

Posted on

The mid-aging checklist I use so an AR aging sheet stays honest

A folder of PDF invoices, a QuickBooks aging export that is three weeks stale, an email chase list, a spreadsheet with due dates that do not match the PDFs, and a Slack that says “can you age these?” are not mid-aging truth. Mid-aging is where the as-of date quietly moves, everything sits in 0–30 because nobody recalculated, a partial payment still looks like the full open balance, disputed or “on hold” invoices hide in a thread, and the same invoice lands twice (PDF + export) so the bucket totals lie.

I am a freelancer admin helper. I turn messy overdue invoice dumps into a clean AR aging sheet. I am not a CPA, bookkeeper, lawyer, or tax advisor — and this is not financial, tax, legal, or accounting advice. It is the checklist I run mid-aging (and again before anyone treats the sheet as what is still open) so the AR aging sheet stays honest while dumps are still arriving.

(If you want the full messy overdue invoice dump → clean AR aging sheet workflow, see my earlier post. This one is the second-pass checklist so as-of drift, bucket theater, silent partials, and disputed/hold burial do not quietly rewrite what clients still owe.)

What "honest" looks like mid-aging

  • Every row has client, invoice #, amount, due date, aging bucket (0–30 / 31–60 / 61–90 / 90+), status, and source — not vibes
  • Buckets are computed from a named as-of date, not guessed from memory or last week’s export
  • Partial payments and credits are flagged with an open amount — not silently left at the full invoice total
  • Disputed or “on hold” invoices sit as status + notes — not buried in Slack while the bucket total pretends they are chaseable
  • Duplicate lines (same invoice in PDF dump + stale aging export) are flagged once — not summed twice
  • Open questions (wrong due date, missing PDF, client name mismatch) are listed once so the handoff is honest

If the only “aging sheet” you have is a green Open column and a thread titled “all chased,” mid-aging honesty has already slipped.

The mid-aging checklist (run it before / while you clean)

Use this against the dump (PDF invoices, stale aging exports, email chase lists, spreadsheets with mixed dates, payment/credit notes) before you paste everything into a pretty template and call the aging current.

1. Inventory the overdue dump (same day you open the pile)

  • [ ] Every scrap is listed once: source, date seen, claim type (open invoice / partial / disputed / credited / on hold / unknown), notes
  • [ ] Duplicate paste of the same invoice across PDF batch + QB export + chase email is labeled duplicate — not counted as two open balances
  • [ ] Partial dumps (“maybe $1,200 from Dana,” a chase note with no due date) are labeled incomplete — not invented into tidy rows
  • [ ] As-of date that matters is named (today, month-end, custom) — older noise stays out or flagged
  • [ ] Anything clearly paid, credited to zero, or superseded is labeled stay-off-open — do not resurrect as this aging’s chase list

2. Lock the as-of date before you trust any bucket

  • [ ] One as-of date sits at the top of the sheet — not three conflicting “as of” notes in different tabs
  • [ ] Buckets (0–30 / 31–60 / 61–90 / 90+) are computed from due date vs that as-of — not copied from a stale export without recalc
  • [ ] If the as-of moves mid-pass, every bucket is recalculated — do not leave last week’s 0–30 as this week’s truth
  • [ ] Rows without a usable due date are ask or incomplete — invented Net-30 folklore is worse than an honest gap
  • [ ] Skim test: you can answer “as of when is this aged?” without opening Slack

3. Kill bucket theater and silent-partial inflation

  • [ ] Status is open / partial / disputed / credited / on hold / paid (if still in dump) / ask — not mood words or a single Open checkbox for everything
  • [ ] Partial rows name original amount and remaining open — “partial” alone is not a balance
  • [ ] Credits applied against an invoice reduce the open amount (or sit as a linked credit note) — not left invisible while the full amount ages
  • [ ] Everything parked in 0–30 “for now” when due dates say otherwise is labeled bucket theater until recalc
  • [ ] Currency mixes are labeled — do not silently sum USD + “local” into one bucket total

4. Park disputes, holds, and gaps in the open, not in silence

  • [ ] Disputed / on-hold invoices stay out of “ready to chase” filters until status says otherwise
  • [ ] Missing invoice #, missing PDF, or client name mismatch sit as ask with what is missing — not deleted to tidy the sheet
  • [ ] Unknown clients sit as ask rows — invented names are worse than honest gaps
  • [ ] Chase-priority notes (if useful) live on the row — not only in a thread titled “please chase these”
  • [ ] Anything you almost guessed (due date, client alias, open amount after partial) stays in notes as guessed — not locked as truth

5. Mid-aging skim before you call the sheet “current”

  • [ ] Totals by bucket (and optionally by client) match a quick mental check of known big open invoices
  • [ ] Duplicate suspects and ask rows are countable in under a minute
  • [ ] As-of label is still correct (you did not accidentally mix last month’s closed invoices into this aging’s open list)
  • [ ] Handback note names what is still open / disputed / ask vs what is already paid or credited — not “sheet is done”
  • [ ] You could hand this to a bookkeeper without them having to reverse-engineer Slack

What I refuse to do mid-aging

  • Invent missing due dates just to clear the incomplete filter
  • Book journal entries, collections strategy, or “how to record this in QuickBooks”
  • Call myself a CPA or claim the sheet is audit-ready
  • Hide disputed / on-hold rows so the open and 90+ totals look prettier

Honest mid-aging tracking is boring on purpose. The point is that when someone asks “what is still open as of Friday?” you are not reconstructing six exports and a chase email.

Soft CTA

If you want the messy dump cleaned for you: I turn an overdue invoice dump into a clean AR aging sheet in about 24 hours.

Product: https://brittanybonds.gumroad.com/l/agingsheet

Shop: https://brittanybonds.gumroad.com/

Catalog mirror: https://brittany-bonds.github.io/

Code ADMIN12 for $2 off.

No fake CPA claims — spreadsheet cleanup so your overdue invoices are easier to chase and reconcile.

Top comments (0)