← All posts
Operator Series · 3 of 6

The $440K Gap: When Billable Work Is Done But Nobody Knows the Charges Are Ready

May 2026 · By Chris Scowden · 9 min read

Last week's post was about the gap between “invoice exists” and “invoice delivered.” The average mid-market firm had $298K stuck in that gap. The fix was a panel.

This week's post is about the gap one step upstream. The one most CFOs do not know they have, because they have never been asked to look.

Here is the question for your billing manager this week.

Of all the billable charges that have been approved on placements in the last 30 days, how many are still not on an invoice — and what is the dollar total, broken out by reason?

If your billing manager has that answer in five minutes, with the dollar total and the reason breakdown, you can stop reading. You have already built what I am about to argue for.

If your billing manager says “I'll have to run a few queries and get back to you” — you have the same gap every firm I have walked into this year has. You just have not measured it yet.

The number we keep finding

On the pilot data we have run through the Command Center, the answer to that question lands in roughly the same place every time.

$440K
Approved, billable, and not on an invoice. On average, across the pay/bill cycles we have reviewed in the $100M–$250M revenue band — that is the dollar amount sitting one step upstream of the invoice batch.

Figures cited throughout this post are drawn from representative pay/bill data across multiple mid-market staffing firms in the $80M–$250M revenue band. No individual customer is identified or attributed. Your numbers will differ; the shape will not.

To be clear about what that number includes — and what it does not.

It does not include charges still waiting on a timesheet to be approved. Those are upstream of where billing can act.

It does not include charges that have been pulled into an invoice and are now sitting in the “ready to send” state from last week's post. Those are downstream — same firm, different gap, different $298K.

It does include every charge that has been approved against an active placement, where the bill rate is in the system, the hours are reconciled, and the customer is contractually obligated to pay — and that for some reason has not made it onto an invoice yet.

That is the gap. Forty days of approved, unbilled work. In the same firm. Sitting next to the other $298K.

Why this is not a billing engine problem either

Same instinct as last week. Same instinct that is wrong.

When the CFO sees this number for the first time, the call goes to the head of billing: “why is the billing engine sitting on $440K of approved charges?”

The billing engine is not sitting on anything. The billing engine ran last night. It pulled every charge that was clean and put it on an invoice. It did its job exactly as designed.

What the billing engine does not do is pull charges that have a flag on them. That is by design. The whole point of the flag is to keep a charge out of the batch until a human looks at it. The problem is not that the flag exists. The problem is that the flag goes into a status code on a record, and that status code is never aggregated into a queue anyone is responsible for working.

The charge is now in operational purgatory. It exists. It is billable. Nobody is looking at it.

Where the charges actually get stuck

Walk through the lifecycle of a billable charge and you can see exactly where the gap opens.

Day 0. The candidate's timesheet is approved.

Day 1. The system creates billable and payable charges off that approved time. The bill rate flows in from the placement record. The markup math runs. The charge gets a status.

If everything matches, the status is ready to bill and the next billing batch sweeps it onto an invoice. That is the happy path. It is also not what is driving your DSO worse.

The 15–25% of charges that do not hit ready to bill on Day 1 are where the dollars get stuck.

  • Rate variance flags. The bill rate on the timesheet does not match the bill rate on the placement record. The system flags it and routes it to a review queue. Usually because the placement record was updated mid-week, or because OT kicked in and the customer's OT rate is not what the system applied. The variance is $2.40 an hour on a 40-hour week. Resolution time: ten minutes. Time it actually sits: three weeks.
  • Pay/bill mirror failures. The pay rate and bill rate are out of step with the markup formula. The system holds the charge for review rather than billing on a negative margin. Same problem every time — a manual rate change on one side without the corresponding change on the other. Sits in a flag until someone notices.
  • Customer-required fields missing. A customer requires a cost center, project code, or work order on every charge. The placement record has the right field, but it was not on the charge because the field was added after the placement was first created. Charge sits, customer waits.
  • Placement approval queues. Charges over a threshold on certain accounts route to a placement manager for review before they can hit an invoice. Same dynamic as the large-account invoice queue from last week, just one step earlier. Forty charges in the queue. Eight reviewed per week.
  • VMS reconciliation pending. The internal charge exists, but the VMS file for that week has not been reconciled yet. So nobody knows whether the customer is going to accept the charge on the VMS side. The charge sits until the recon happens. The recon happens when someone has time.
  • Retro corrections. The candidate's hours were corrected after the original timesheet was approved. The original charge needs to be voided and a new one generated. The void happens. The new one ends up in a parking lot waiting on someone to confirm the corrected amount. The customer is billed for the original. The correction never lands.
  • Charge-pair gaps. The PayBill Risk Agent surfaces this category specifically — a billable charge exists with no matching payable charge, or vice versa. The system did half of what it was supposed to do. The other half never happened. Until both sides exist, the charge cannot bill. Most firms have never measured how many of these they generate per week.

Each of these has a fifteen-minute resolution. None of them are conceptually hard. The problem is that they live in seven different flags, on seven different record types, in seven different filters that nobody runs at the same time.

Why this gap is worse than the invoice gap

Last week's $298K was painful because it was visible the moment you looked for it — once the invoice exists, the question “has it been delivered?” is a yes-or-no answer with a date stamp.

The $440K is worse because there is no single record to point at.

The invoice gap is one transition: invoice exists → invoice delivered. One status, one bridge, one owner missing.

The charge gap is seven transitions, with seven different reasons a charge can fail to make it into the next batch, and no aggregate view across them. The CFO who asks “how much approved billable work do we have that has not made it onto an invoice yet?” is asking a question that no built-in ATS report answers. The data is there. It is just spread across seven status filters that nobody opens in the same session.

This is why — in every diagnostic call I do — the $440K number lands harder than the $298K. The CFO can imagine the invoice queue. They cannot imagine the charge queue, because they have never been shown one.

What this is costing the firm

The carry math is straightforward.

At $440K of approved-but-unbilled charges, a one-week delay costs about $850 in financing carry at current rates. A month is roughly $3,600. Those are the small numbers.

The real cost is the structural drag on working capital. Stack the $440K on top of last week's $298K and you have $738K of working capital permanently locked up in the gap between “the work is done” and “the customer has been asked to pay.” In the same firm. At any given moment.

On a $150M staffing operation running 40-day DSO, that is between $1.8M and $2.8M of working capital that is structurally locked. That number does not show up in any single report. It does not show up in your DSO. It does not show up in your aged receivables — because the receivable has not been created yet. The customer does not even know the charge is coming.

The CFO sees the symptom: “our DSO is 42 days when it should be 35.” The seven-day gap is not a collections problem. Half of it is the charge queue. Half is the invoice queue. Neither shows up in the AR aging.

The fix is the next panel over

The reflex response — same as last week — is to scope a billing process re-engineering project. New status codes. New SLAs. New escalation rules. A weekly governance meeting that runs for six months and produces a binder.

That is not the fix. The fix is the Billing panel in the Command Center — the panel that sits between the Time & Expense panel and the Invoices panel in the dashboard. With:

  • A live count of charges in each pre-invoice state — ready to bill, rate variance, pay/bill mismatch, missing customer field, pending approval, VMS recon pending, retro correction, charge-pair gap
  • A dollar total at the top of each segment
  • Aging buckets so the team sees which charges have been sitting longest, by reason
  • Drill-through into the underlying placement and timesheet for every charge
  • Mass-actions to clear the resolvable ones, reassign held ones, or escalate the queues that are not moving
  • An audit trail so finance can see who touched what, when, and why a charge moved

That is the entire intervention. No new process. No new headcount. No new module on top of the ATS. A panel that takes seven flags the system is already generating and puts them in one queue with one owner.

On the pilots where the Billing panel goes live alongside the Invoices panel, the combined gap — the $298K plus the $440K — drops by 65–85% in the first two pay cycles. Not because the team is suddenly faster. Because the work is finally visible.

The cultural shift, again

The DSO and working capital improvement is the easy part. The harder shift is the same one we talked about last week, one step earlier.

For the first time, finance has a real-time view of what billing operations is processing — not the month-end summary, not the post-close report, but the actual charge queue, refreshed every morning, broken out by reason, drillable to the placement.

That view changes the conversations on the Wednesday ops call. Instead of “why is DSO at 42?” the conversation becomes “we have 28 rate variance charges over $1,200 each that have been open more than 21 days — who is working that queue today?” That is a conversation with a deliverable. A conversation that closes the gap permanently rather than complaining about it monthly.

It also surfaces decisions the leadership team has been avoiding. A 40-charge queue stuck on placement-level approval, with the same manager as the bottleneck for six months, is not a billing problem — it is an org design problem the COO has to either fix or accept. Until the queue was visible, the COO did not know it existed. Now they do, and the question is on them.

The mirror, completed

Last week's post described the gap between “invoice exists” and “invoice delivered.” This week's post describes the gap between “charge exists” and “charge is on an invoice.” Together, they are the two transitions that produce the bulk of the silent working capital drag in a mid-market staffing operation.

The mirror is the point. Both gaps are caused by the same thing: a transition between two states that no single owner is responsible for surfacing. The system generated the record. The system flagged the issue. The system did everything it was designed to do. The system was never asked to put the flagged records into a queue and put someone on the queue.

That is the operational layer the middle office has been missing. The Command Center is, structurally, that layer. Five entity panels for the data — placements, time and expense, payroll, billing, invoices — and seven risk categories that watch the seams between them. Posts 2 and 3 of this series cover two of those seams. There are five more.

What to do tomorrow morning

Whether or not you are evaluating software from us, here is the operational ask for this week:

  1. Email your head of billing. Ask them: “Of all the billable charges approved in the last 30 days, how many are still not on an invoice, and what is the dollar total broken out by reason?” Give them 48 hours.
  2. When the answer comes back, add it to last week's number — the count of generated invoices that have not been delivered, and their dollar total.
  3. Sum the two. Compare the total to your current line of credit balance, or to your working capital target. That is the working capital you are silently financing for your own customers.

If the answer to step 1 takes more than 48 hours, or if it requires three people to compile, that is the diagnostic. The gap is real, it is operational, and it is invisible. That is exactly the gap the Command Center was built to close.

The charge was approved. The bill rate is in the system. The work is done. The customer is waiting. The only thing standing between the firm and the invoice is a flag nobody is watching.

Chris Scowden is Founder & CEO of StaffingAgent.ai, the AI Command Center for the staffing middle office. He also serves as CEO of Newbury Partners, a twenty-year-old Bullhorn implementation consultancy. This is post 3 of 6 in the Operator Series.

Next in the Operator Series

4 of 6 · The OT You Did Not Quote: How Approved Hours Quietly Erode 2–4 Points of Gross Margin Before the Month Closes

Two posts on the cash side of the middle office. The next one is on the margin side — hours that look correct on the timesheet but produce a quiet gross margin shortfall when OT rules, mid-week rate changes, and approved-but-anomalous patterns interact. Dropping next week.

See the Billing Panel Against Real Pay/Bill Data

Book 30 minutes and we will show you the Command Center against representative pilot data — including the approved-but-unbilled charge queue your CFO has not seen.

See the Command Center Demo Book a Meeting