A wholesale distributor sells cleaning supplies to 2,400 commercial accounts. Net-30 terms. At any given time, 900 invoices are past 60 days. Two AR specialists make calls. They reach maybe 30 accounts a day between them. By the time they get to most of the list, invoices have aged to 90 days. Then 120. Then write-off.
This is not a staffing problem. It is a math problem. And the math does not wait.
The Math Nobody Wants to Do
The recovery rate on invoices past 90 days drops to 18%. On invoices contacted within the first 10 days of becoming overdue, it is 74%. The difference is not effort. It is speed. And speed at this volume requires more people or fewer phone calls per resolution.
The compounding problem: Every day an invoice goes uncontacted, its recovery probability drops. Two specialists reaching 30 accounts a day means 870 invoices aging without contact each day. At current rates, most of the list hits 90 days before anyone picks up the phone.
They cannot hire four more AR specialists. The margin on cleaning supplies does not allow it. So the list grows. The write-offs grow. And the cash flow constraint tightens quarter over quarter.
This is not an AI problem. It is a cash flow problem that compounds every day it goes unsolved.
What the AR Team Actually Does
Break the AR workflow into its five actual steps and something becomes clear. Three different types of intelligence are required. Most platforms handle one. Production requires all three.
Pull overdue invoices from the ERP
Batch operation. Connect to the ERP, query invoices where days_past_due > 30, pull the full dataset.
Filter, prioritize, check business rules
Batch operation. Sort by amount multiplied by days_past_due descending. Check time zones. Apply account-level rules. Output a prioritized call list.
Call each account, determine status
Streaming operation. Voice AI places outbound calls, conducts conversations, captures structured dispositions in real time.
Log outcomes, schedule follow-ups, update CRM
Batch operation. Every call disposition writes back to the CRM. Follow-ups get scheduled. Escalations get routed.
Predict which accounts need early intervention
Traditional ML. A model trained on historical payment data and call outcomes identifies which accounts will default before they hit 60 days.
Three types of intelligence. One operation. Batch handles the logic. Streaming handles the conversations. ML handles the prediction. Most platforms do one well. Production AR requires all three working together.
Batch Workflows - The Logic Layer
The batch workflow runs Monday and Thursday at 7am. It connects to the ERP. Pulls every invoice where days_past_due is greater than 30. Sorts by amount multiplied by days_past_due, descending. Checks the time zone for each account so West Coast accounts are not called at 5am. Outputs a prioritized call list.
This is not a cron job with a SQL query. It is a visual workflow with conditional logic, data source connections, and scheduling built in. The AR manager can see every step. She can add a rule that says "if the account has a credit memo pending, skip it." She can change the priority weighting. She can add a new data source. No code required.
Why visual workflows matter here: The AR manager is the domain expert. She knows that accounts with pending credits should not be called. She knows that restaurant accounts always pay late but always pay. The workflow needs to encode her knowledge, and she needs to be the one encoding it.
The output is a structured JSON list. Account name, contact number, invoice number, amount, days overdue, time zone, priority score, and any special handling notes. This list feeds directly into the streaming workflow.
Streaming Workflows - The Conversation Layer
For each record on the call list, the system places an outbound call. The AI agent identifies itself. States the invoice number and amount. Asks a direct question: "Can you confirm when payment will be sent?"
The conversation branches based on what the person says. Each branch has a defined outcome and a set of structured fields to capture.
"Already sent payment"
Log the response. Verify against bank records. Schedule a follow-up in 5 business days to confirm receipt.
"Cash flow issues"
Offer a payment plan with predefined terms. If the account accepts, log the agreement. If not, transfer to the AR manager for negotiation.
"That invoice is wrong"
Log the dispute. Capture the specific reason. Route to the billing team with the invoice number, disputed amount, and the account's stated issue.
"Wrong number"
Capture the updated contact information if available. Flag the account for CRM update. Move to the next record.
No answer
Retry in 48 hours. After 3 failed attempts, escalate to email outreach. After email fails, flag for human follow-up.
Every call produces a structured disposition. Not a summary. Not a transcript. Specific fields: payment_status, expected_payment_date, dispute_reason, new_contact_info, escalation_needed, retry_date.
300 calls a day. Structured data from every one. The AR team handles the 15 that need a human. That is 15 conversations with context, not 300 dials into the void.
“The AI does not replace the AR specialists. It gives them 285 fewer calls to make and 15 conversations that actually need their expertise.
Traditional ML - The Prediction Layer
After 90 days of call data, a model trains on outcomes and payment history. It learns patterns that the AR team has always known intuitively but could never act on at scale.
Restaurant accounts pay 12 days late but always pay
The model learns that restaurant accounts in this distributor's portfolio have a 96% eventual payment rate. They are slow but reliable. Calling them on day 31 is wasted effort. The system deprioritizes them automatically.
"Payment in transit" is accurate 78% of the time
When an account says payment is in transit, the model knows from historical data that 78% of the time, the payment arrives within 7 business days. The system schedules a verification check instead of an immediate escalation.
Second-time promise breakers have a 6% chance of paying without escalation
An account that missed a promised payment date twice has a 6% chance of paying without human intervention. These accounts jump to the top of the list and get routed directly to the AR manager on the next call.
The batch workflow uses these predictions. Restaurants drop to the bottom of the call list. Repeat offenders jump to the top. The AR manager gets a weekly report of likely write-offs before they hit 90 days, with enough lead time to intervene.
Why This Compounds
The recovery rate does not stay flat. It compounds. Because every call generates data. The data trains the model. The model makes the next batch smarter. Here is what that looks like over six months.
“The recovery rate does not stay flat. It compounds. Because every call generates data. The data trains the model. The model makes the next batch smarter.
The Day Two Question
This is not about the demo. It is about month 7. About the Tuesday morning when the batch workflow runs, the ML model has six months of data, and the call list is ordered by predicted recovery probability instead of simple aging.
Cash flow problems do not announce themselves. They accumulate. One unpaid invoice is a line item. Nine hundred is a constraint on the business. It limits what you can buy, who you can hire, which opportunities you can pursue.
The question for the founder reading this: what is the cost of reaching 30 accounts a day when 900 need to be reached this week? And what changes when that number is 300?
Batch workflows handle the logic. Streaming workflows handle the conversations. ML models handle the prediction. Built together, they do not just collect receivables. They shorten the cash cycle permanently.
That is AI that compounds, not expires. Each week the system runs, the data gets richer, the predictions get sharper, and the AR team focuses on fewer, higher-value conversations. The ROI on month 6 is materially better than the ROI on month 1.
What Is Costing Your Operations Team Time?
Talk to an FDE this week about the workflows that compound.
Talk to an FDE