The Customer About to Churn Has Been Paying You 11 Days Slower for 3 Months — Catch It Earlier
DSO is a customer-by-customer story
The fleet-wide DSO number — 39 days on average, 47-52 days on most mid-size carriers — is a useful headline but a useless management tool. Days-to-cash isn't fleet-wide. It's customer-by-customer. Three customers paying you 65 days drag the average up while fifteen others paying you 28 days look fine. Treat the average and you miss the actual problem.
The real story shows up when you look per customer:
- Customer A — $40K/month, paying 28 days. Healthy.
- Customer B — $80K/month, paying 38 days, slowing 2-3 days/month for
3 months. About to churn or default.
- Customer C — $25K/month, paying 19 days. Unicorn.
- Customer D — $120K/month, paying 51 days, $310K open vs $250K credit
limit. Stop dispatching.
Centrix's customer health layer puts these stories on a single dashboard and ties them to the dispatch decision.
What gets tracked per customer
The `customer_health` service computes daily for every active customer:
- Average days-to-pay — trailing 90 days
- Days-to-pay trend — 30-day vs 90-day average
- Open A/R balance vs credit limit
- Disputed amount outstanding
- Days since last payment
- Payment composition — credit card, ACH, check, factor, none
- Volume trend — load count and revenue 30-day vs 90-day
These combine into a customer health score (0–100), with three tiers:
- Green (80+): healthy, dispatch normally
- Yellow (50–79): monitor; sales / accounting check-in suggested
- Red (<50): hold at next dispatch decision; collections workflow active
Credit limit enforcement at dispatch
This is the piece that changes the operational reality. Most carriers "have" credit limits in their TMS but don't enforce them — the dispatcher books the load anyway, the back office collects later (or doesn't). Centrix enforces at the dispatch layer.
When a dispatcher is matching a load to a truck, Centrix checks the customer's open A/R against their credit limit. If accepting the load would push them over, the load is held with a clear explanation: "Customer XYZ is $310K open against $250K credit limit. Accept anyway? Requires sales/accounting approval."
The override is one click for an authorized user — but it's logged, and the explicit approval shifts the decision back to the right people. Most loads that would have been blindly accepted under the old workflow don't actually need to be accepted; the customer either pays down or the load goes to someone else who paid.
Exposure-ranked collections
The collections workflow surfaces accounts ranked by exposure, not alphabetically or chronologically. Exposure = open A/R × probability of non-payment. A $100K account from a customer paying 60 days slow on a trend isn't equivalent to a $20K account from a Fortune 500 paying 32 days on a stable trend — even if both have the same days-overdue stamp.
The collections role works the highest-exposure list first, with each call backed by:
- Full customer payment history
- Current open A/R aging
- Active disputes
- Sales contact and recent communications
- Last 5 emails / calls logged in the comm hub
The call is supported, not blind. Recovery rates on managed fleets running this workflow consistently outperform legacy aging-only collections processes by 25-40%.
Customer churn early warning
The slowing-payment signal is also the strongest churn signal. Customers don't churn in a single decision — they slow down first. By the time volume drops, the relationship is already gone. Centrix flags slowing- payment trends with a 60-90 day lead time on the volume drop, giving the sales team a window to intervene.
The intervention isn't always defensive ("please don't leave"). Sometimes it's offensive — the customer's volume is steady but their pay is slowing because their cash is tightening, and a small concession (faster invoice schedule, factor relationship) preserves the relationship through their crunch.
Either way, the conversation needs to happen before volume drops, and the customer health layer is what surfaces the moment to have it.
What the math looks like
A $12M-revenue carrier with 80 active customers:
- Bad debt write-offs: 0.8% of revenue baseline = $96K/year
- Customer churn cost: 5-8 customer relationships/year × $200K avg revenue =
$1M-1.6M of revenue gap
- Collections cost: 1 FTE @ $70K loaded = $70K/year
Centrix's customer health workflow targets all three:
- Bad debt: 30-50% reduction = $30K-48K/year saved
- Churn: catch 50% of slow-payment churners with 60-day lead time =
2-4 saved relationships = $400K-800K of revenue preserved
- Collections: per-FTE productivity 30-40% higher because the work is
ranked, not chronological
Total impact on a $12M carrier: $430K to $850K/year depending on the shape of the customer base.
Where to start
If you're 50+ trucks and have never run customer-by-customer health:
- Pull last 12 months of customer payment data into Centrix. The first run
usually identifies 5-12 customers in the yellow / red zone that nobody on ops realized were trending poorly.
- Set the credit-limit enforcement on for the top 20 customers first.
Watch the override rate. Most carriers find <5% of dispatches actually need override.
- Build the weekly collections call list. Run for 60 days and measure
collections recovery vs the prior 60.
Book a customer health review — bring 18 months of A/R aging by customer and we'll show you the trend curves on the customers that matter most.