What we built

The agent that works the aging report.

Reference implementation · fictitious company

This is not a client result. The agent runs against Halstead Facility Services, a fictitious company I invented for this build. Its customers, its invoices, and its email history are made up, and all of it was written before the agent existed. I built it so there would be a working system to point at instead of a slide, and the log of everything it got wrong is still attached to it.

Runs on
A fictitious company's books, written before the agent existed
Halstead's books
42 customers, 33 open invoices, about $533,000
Emails it can send
None. A person approves every one
New software for the client
None

What this job costs today

Somebody opens the aging report on a Monday morning. In Halstead's books that's 33 open invoices, one line each for who owes what and for how long. They read down it and make a call on every single one.

This customer always pays on the 15th, leave it alone. This one has gone quiet for six weeks, chase it. This one disputed an invoice in March and nobody ever closed it out, so say nothing until you check. This one is a good customer having a bad quarter, and the wrong email costs you more than the invoice is worth.

Then they write each email. One at a time, from a blank page, tone matched to the customer.

It's slow, and the awkward ones slide. Not because anyone is lazy. Because the twelfth email of the morning, to the customer you like least, about the invoice you already asked about twice, is the easiest thing in the world to leave until tomorrow.

Halstead's office manager spends about six hours a week on this. I assumed that number when I wrote the company. It's not a survey, and no real office was ever timed for it.

What the agent does

It reads down the aging queue one invoice at a time and makes one of four calls:

  • Draft a follow-up, in the tone that customer has earned
  • Do nothing this week
  • Hold it, because your side has something to fix first
  • Send it to a person, with the briefing already written

It pulls the customer's payment history before it decides anything. That's the difference between a draft that says “caught in a payment cycle” and one that says “caught in your weekly check run.” Six words apart. One is filler and one is true of that customer.

Disputes, broken promises to pay, anything past 91 days, and any sign of real trouble at the customer go to a person. That's a rule in code, not a preference the model can talk itself out of.

It holds every send. There's no approve-everything setting and no confidence score that unlocks one. Outbound email doesn't exist in the code at all, so there's no send button to press by accident. A person reads each draft and approves it, edits it, or throws it out, and that decision goes in the log next to the agent's.

And it plugs into what the business already runs. Nobody on your team installs anything, logs into anything new, or learns another screen. That's a rule I wrote into the system rather than a result I've measured: the build read Halstead's books through a stand-in for the accounting system, and the connector to a live one is designed, not built.

What it got wrong

Every miss went into a dated journal with the root cause, the fix, and the day the fix shipped. Twenty entries by the end. Nothing was ever deleted from it, including the ones that came back.

Three worth reading.

It chased an invoice the customer probably didn't owe.

One customer had two open invoices with the same PO number, the same amount, four days apart. Almost certainly a duplicate. The right move is obvious to anyone who has worked AR: say nothing, send it to bookkeeping.

The agent drafted a collection email on it. The safety filter passed the draft, because nothing in the wording was improper. Then a human approved it. That human was me, reviewing fifteen drafts with full attention, on a system I cared about.

Three layers, all of them missed it. The only reason no damage was possible is that nothing sends.

The fix wasn't a better prompt. Same PO number, same amount, four days apart is arithmetic, and arithmetic belongs in code that runs before the model ever sees the invoice. It now runs on every pass, costs nothing, and catches the case the model kept walking past.

It stayed polite with customers who had already broken two promises.

A customer who says “the check goes out Friday” twice and doesn't send it isn't a writing problem. It's a person problem. The agent would sometimes draft a fourth pleasant reminder instead of handing the account to a human.

The fix was a rule that escalates on the second broken promise no matter what the model thinks. It has fired five times since, which is roughly one in every three full runs of the queue. Five emails that would have been the wrong move, stopped by three lines of code rather than by better wording.

It wrote day names it couldn't actually work out.

Drafts said things like “due this Thursday.” The model was narrating a date rather than counting one, and sometimes it was wrong. A wrong date in a collection email hands the customer the argument.

This one was closed and came back twice before it stayed fixed. Teaching it to be careful worked until it didn't. What finally held is a check that compares the date to the day name and blocks the draft when they disagree. It caught a live mismatch on its first day running.

All three have the same shape. Better instructions move the behavior. Only arithmetic holds it. Anywhere a job can be settled by counting, it should be settled by counting, before the model gets a vote.

What it costs to run

Model calls plus hosting. There's no seat fee and no subscription, because there's no product to subscribe to.

  • About 5 cents per invoice decision, measured on the finished agent's final evaluation boards
  • About 14 cents per draft, counting the whole pass: the total cost of working all 21 invoices divided by the drafts it produced
  • $1.00 to $1.06 for a full pass of the 21 hand labeled test cases the agent is scored against, a slice of Halstead's books rather than the whole aging report
  • $180.12 in API spend to build the whole thing
  • Hosting. Not measured yet. The build ran locally, so there's no bill to quote.

The first three are measured from logged runs against Halstead's books. The build total is the console figure for this project. What a real deployment costs is an extrapolation from those runs, because it depends on how many invoices you carry and how often somebody works the queue. The number worth holding on to is the shape of it: pennies per email drafted, against hours of somebody's Monday.

What this page does not claim

Halstead Facility Services is fictitious. The company, its customers, its invoices, and its email history were written before the agent existed, so it would face a hard test rather than a friendly one. Every measured number above comes from logged runs against those fictitious books. No client's books have been through this system.

The assumptions

  • Six hours a week on collections. I assumed it when I wrote the company. Nobody was timed.
  • The monthly hosting cost. Still unknown. The build ran locally, so no bill exists to quote.
  • What a real deployment costs. An extrapolation from these runs, not a price.
  • That the agent connects to what a business already runs. It's a boundary I hold myself to, and the connector to a live accounting system is designed, not built.
  • The 5 cent figure counts every invoice, including the ones a deterministic pre-check decides for nothing. Producing a draft on its own runs about 4 cents. The 14 cent figure charges the whole pass against the drafts it yields, which is the number that matters if you're the one paying.
  • The per-pass figures are the agent's tokens only. Grading a pass with the LLM judges costs roughly the same again.
  • $58.39 of that $180.12 is the agent's own instrumented runs. The rest is the LLM judges that graded them, plus the ad-hoc runs between evaluation boards. Building the thing cost about three times what running the thing costs. That ratio is worth knowing before you start.

I'd rather show you a real system on fake books than a fake result on real ones.

Two jobs, one week

  1. Read down the aging report this one · every Monday
  2. Write the awkward email again this one · or put it off

Tool · free

Try the small version.

The agent above is a system. This is one piece of it, free, on an invoice sitting on your desk right now.

Write three follow-up emails

Back to case studies

Start

Your week has 5 hours hiding in it.

Collections may not be where yours is leaking. The assessment finds out which jobs are, and names the fix for each one. One call, one report, one walkthrough. $999, refunded in full if the report doesn't show you a path to 5 or more hours a week.

Report in 3 business days, walkthrough the day after.