Unbilled Time & AR Digest
The business side of the firm gets the same weekly discipline as the practice side.
What it does
Two tabs in, one worklist out:
- Unbilled time per matter — hours, value at the recorded rate, and the age of the oldest unbilled entry. Anything older than your threshold is called out separately: bill it or write it off.
- Accounts receivable in 1–30 / 31–60 / 61–90 / 90+ buckets, worst first, with a total outstanding.
It also counts rows it had to skip because a date or amount would not parse, rather than dropping them quietly.
No AI in this workflow at all
Every figure is arithmetic over what the firm entered. There is no model in this pipeline and nothing is estimated.
What it will not do
It does not issue an invoice and it does not contact a client. The worklist goes to the billing partner.
It does not read, reconcile or report on a trust or IOLTA account. This is deliberate and it is not a gap to fill later. Trust accounting is a regulated obligation with jurisdiction-specific rules, three-way reconciliation requirements, and real consequences for getting it wrong. Point this at an operating ledger. Do not point it at a trust ledger, and do not extend it to do so without your bar's rules in front of you.
The honest limit
It measures recorded time. Work nobody entered is invisible, so a low unbilled figure means a light week or an unrecorded one. That is a prompt to ask, not a finding.
Setup
1. Google Sheets — two tabs in one spreadsheet
TimeLog:
| person | date | matter | hours | rate | status |
|---|---|---|---|---|---|
status=billedremoves a row from the unbilled figurerateis the rate for that line; blank counts as zero value
AR:
| client | invoice | amount | due_date | status |
|---|---|---|---|---|
status=paidremoves a row- Only invoices past their
due_dateare aged; anything not yet due is ignored
2. Credential + contact
<<GOOGLE_WORKSPACE_CREDENTIAL>>— Google Workspace credential with Sheets read scope<<BILLING_SHEET_ID>>— the spreadsheet holding both tabs<<UNBILLED_STALE_DAYS>>— the age at which unbilled time gets called out, e.g.30<<BILLING_PARTNER_PUBLISHER>>— who receives the worklist
3. Schedule
Weekly. Friday afternoon, or Monday morning before the week fills up.
Customization
- Stale threshold.
<<UNBILLED_STALE_DAYS>>. Thirty days is conventional; firms billing monthly often use 45. - AR buckets. The bucket boundaries are in
compose. Some firms prefer 0–30 / 31–60 / 61+. - Per-partner worklists. Column A of
TimeLogis the person; filter and run once per partner for a book-by-book view. - Chasing the AR. This produces the list.
invoice-reminder-sheetssends escalating reminders — note that one does email clients directly, so wire it deliberately.
Source
workflow.iml