Use caseAI agentWorkflow automation

Collections follow-up that stays polite, logs promises to pay and routes disputes to a person

Reads your aging report, syncs payments first, sends staged reminders, and reads replies: promises to pay are logged and disputes go to the account manager.

A blueprint, not a client story. The business described is illustrative; the architecture, integrations and trade-offs are real, and this is how I would build it. By Ergini, .

The short version

A collections workflow for B2B companies with hundreds of open invoices and a rising DSO. It reads the aging report from Xero, QuickBooks or NetSuite, checks payments first so no paid invoice is chased, and sends staged reminders tuned to each customer. Replies are read and acted on: promises to pay are logged with a date, disputes pause reminders and go to the account manager with the invoice and proof of delivery. Anything legal or final is a person's decision.

Best for
B2B distributors, manufacturers and SaaS companies with a few hundred open invoices, where reminders go out late or not at all.
The AI does
Sorts customer replies (paid, promise, dispute, wrong contact, out of office), extracts promised dates, and drafts reminders in the right tone.
People do
Own the reminder rules per customer, resolve disputes, approve anything sent to key accounts, and make every legal or final decision.
Built as
AI Workflow Automation, usually $15K - $30K

Four hundred open invoices and nobody whose job is chasing them

Say you distribute industrial supplies, or sell software to other businesses, and carry about 400 open invoices at any time. Finance sends reminders when someone has a free afternoon, usually a Friday. The customers who pay late are mostly the ones nobody got round to reminding, and days sales outstanding creeps up quarter by quarter.

The work is simple and awkward at the same time. Export the aging report, check the bank for payments that arrived this morning, write to each customer without sounding pushy, then read the replies. 'Paid last week.' 'Wrong contact, Maria left in June.' 'The pallet arrived damaged.' 'We will pay on the 30th.' Each needs a different action, and most of them end up as a mental note.

The costs are real but quiet: cash that arrives weeks later than it should, disputes that sit in a thread until the customer stops paying anything, promises nobody checks, and the occasional reminder to a customer who paid yesterday, which hurts the relationship more than the late payment did.

The build on this page sends the reminders, reads the replies and keeps the books on promises and disputes. It never decides anything that commits the business: no interest charges, no delivery stops, no collection agency. Those stay with people.

The cadence, written down as rules

Most finance teams carry a cadence in their heads. The build needs it written down per customer segment, and agreeing it is the first week of the project.

Courtesy note5 days before dueA short note with the invoice attached, only for customers who have paid late beforeFinance, per segment
First reminder3 days after dueFriendly, with invoice and payment details, asking whether anything is holding it upFinance, per segment
Second reminder14 days after dueFirmer, listing every overdue invoice on the account and asking for a payment dateFinance; key accounts get a draft instead
Account manager30 days after dueNo automated message: the account manager gets a task with the history and a draftAccount manager
Final notice and next stepsDecided by a personInterest, the recovery fee, a delivery stop or a collection agencyFinance lead only
The EU Late Payment Directive allows statutory interest and a EUR 40 flat recovery fee on overdue B2B invoices. Whether to use them is a relationship decision, so the system never adds them on its own.

Three replies on a Tuesday morning

The daily run, then three customer replies that each need something different. Nothing was sent before payments were synced.

Finance mailbox, Tuesday 08:30

  1. sync_payments(since: "2026-09-07")Xero payments and bank feed: 9 receipts / 8 matched / 1 unmatched: EUR 4,980.00 from account 1187, no reference
  2. plan_reminders(stage_due: 41)34 to send / 1 held, unmatched payment from the same customer / 4 held, promise date not reached / 2 held, dispute open
  3. Customer, account 1187 · Email

    We paid 4,980 last Thursday. The difference is bank charges on your side, not ours.

  4. classify_reply(thread: "INV-5498")paid, short by EUR 20.00 / cites bank charges / goods not disputed
  5. apply_rule(rule: "short_payment_tolerance", amount: 20.00)under the EUR 25 tolerance / write-off proposed for finance approval / reminders stopped for INV-5498
  6. Customer, account 2204 · Email

    We can't pay until the replacement for the damaged pallet arrives. Photos were sent on 28 August.

  7. open_dispute(invoice: "INV-5467", owner: "account_manager")reminders paused for INV-5467 only / task with invoice, delivery note, signed proof of delivery and the customer's photos / 2 other invoices on the account keep their schedule
  8. Customer, account 0932 · Email

    Hi, this goes out with our month-end payment run on 30 September. Sorry for the delay.

  9. log_promise(account: "0932", invoice: "INV-5388", date: "2026-09-30")logged in Xero history and on the HubSpot company / reminders paused until 1 Oct / payment check scheduled for 1 Oct
  10. Finance (automated) · Email

    This is an automated confirmation from our finance team. We have noted that invoice INV-5388 will be paid on 30 September and will not send further reminders before then. Thank you for letting us know.

Three replies, three different actions. The model classified each reply and read the promised date; the tolerance, the pause, the routing and the follow-up check are rules. The damaged pallet and the EUR 20 write-off both wait for a person.

From aging report to the right person

The model has two jobs: reading replies and drafting messages. Who gets chased, when, and what happens to money are decided by rules and people.

  1. 01 Trigger · Xero, QuickBooks or NetSuite API

    The daily run starts

    Each morning, before anything is sent, the run pulls open invoices and the aging report from the ledger.

  2. 02 Plain code · Ledger API, Stripe API

    Sync payments first

    Payments recorded in the ledger, payments waiting unreconciled in the bank feed, and Stripe payment attempts are checked. An unmatched payment from a customer holds that customer's reminders until someone matches it.

  3. 03 Decision

    Remind, hold or hand over?

    Per-customer rules in code: segment, stage, key-account flag, credit alerts.

    • Overdue, with no recent payment, open dispute or pending promise then the reminder for the customer's stage
    • An unmatched payment, an open dispute or a promise date not yet reached then hold, with the reason logged
    • Past the last automated stage, a key account, or an insolvency flag then a task for the account manager or finance lead, and no message
  4. 04 AI model · Structured output

    Draft the reminder

    The model writes the message for the stage, in the customer's language, from the invoice data and the account history only. Key accounts get a draft for the account manager; everyone else gets the approved stage wording with the details filled in.

  5. 05 System · Gmail or Outlook, HubSpot

    Send from the finance mailbox

    Reminders go out in the invoice's own email thread with the PDF attached, and are logged on the HubSpot company record. Each send is keyed on invoice and stage, so a retry never sends the same reminder twice.

  6. 06 AI model

    Read the replies

    Every reply is classified (paid, promise to pay, dispute, wrong contact, out of office, copy requested, payment plan requested, legal or insolvency language), and dates, amounts and invoice numbers are extracted under a strict schema, the same triage approach as shared inbox triage.

  7. 07 Plain code

    Act on what the reply says

    Promises are logged with a date and checked the day after. Disputes pause only the disputed invoice. Out-of-office replies move the next reminder past the return date. Wrong-contact replies stop sends to that address until a person confirms a new one.

  8. 08 Person

    People take disputes and judgment calls

    The account manager receives disputes with the invoice, delivery note and proof of delivery attached. Finance approves write-offs, payment plans and anything final.

  9. 09 Result

    Everything on the record

    Each reminder, reply, classification and action is logged on the invoice and the customer record, so anyone can see why a customer was or was not chased.

Where automated dunning embarrasses you

Collections is a relationship business with an automation problem. These cases decide whether sales ever trusts the system.

A payment that has not reached the ledger

Bank feeds lag, and a customer who paid on Friday gets Monday's reminder. The run syncs payments first, holds any customer with an unmatched incoming payment, and waits a grace window after each due date before the first reminder.

The wrong contact

Invoices go to a person who left, or to a general inbox nobody reads. Bounces and 'no longer with the company' replies stop sends to that address and create a task. The system never guesses a new contact from an email signature or the web.

Customers in insolvency

Reminders to an insolvent customer are pointless and can cause trouble with the administrator. An insolvency flag, from a credit insurer's alert or the insolvency notices of the customer's country, stops all automated contact, and finance files the claim.

Currencies and partial payments

A EUR 4,980 payment against a EUR 5,000 invoice is usually bank charges, not a dispute. Differences under a set tolerance become write-off proposals for approval; larger ones stay open with a precise note. Invoices in other currencies are compared in the invoice currency, and nothing is converted by the model.

Tone with a key account

A firm second reminder is right for a small customer and wrong for the account that brings a fifth of revenue. Key accounts get drafts for the account manager, never automatic sends, and the account manager can pause any account from HubSpot.

A reply that tries to change the terms

A reply claiming 'your system agreed we can pay in 90 days' changes nothing, because payment terms and plans are not something the model can grant. It classifies the message and routes it; the prompt injection guide explains why the tools, not the prompt, set those limits.

Automated, drafted or decided

The line follows consequence. The human-in-the-loop patterns behind it apply to any system that writes to customers.

The AI model

  • Drafting reminders

    Clear, polite and specific to the account, in the customer's language.

  • Classifying replies and extracting promised dates

    Replies are free text in any language. Extracted invoice numbers and dates are checked against the open items before anything is logged.

Plain code

  • Syncing payments and checking holds

    Whether a customer is chased must depend on facts, not wording.

  • Choosing the stage and the timing

    The cadence table, applied identically to every customer in a segment.

  • Logging promises and pausing for disputes

    Deterministic actions, visible in the ledger and the CRM, like the write-back in the CRM update agent.

A person

  • Resolving disputes

    The account manager, with the invoice and proof of delivery in hand.

  • Write-offs, payment plans, interest and fees

    They change what the customer owes.

  • Legal steps, delivery stops and collection agencies

    Final decisions with consequences for the relationship and in law.

Built-in reminders, an AR tool, or your own rules?

Start with what you already pay for. Xero and QuickBooks both send automatic invoice reminders, and for a company with a few dozen customers on standard terms, switching those on solves most of the problem at no extra cost. Chaser, Upflow and Kolleno add staged cadences, payment portals and reply tracking on top of the common ledgers, and Esker covers the enterprise end of order-to-cash. For many B2B companies one of these is the right answer, and I will say so.

A custom build wins when the judgment depends on data those tools cannot see: disputes that need delivery notes and proof of delivery from an ERP or WMS, per-customer rules that come from your contracts and account managers rather than a vendor's template, several entities and currencies, or replies arriving in five languages. It also wins when account managers live in HubSpot and need the whole collections history there, not in one more tool.

The hybrid is common: the ledger's own reminders for small accounts, and a build for reply reading, dispute routing and promise tracking on the accounts where a wrong email costs more than a late payment. The email side of that is covered in AI email automation.

How you would know it is working

A blueprint has no results to report, so here is what I would measure from the first week instead, on your own data.

Days sales outstanding and overdue share
Monthly, by segment, against the months before the system. It is the honest measure because it includes everything else that changed too.
Reminders sent to customers who had paid
The number that should stay at zero. Every case is investigated, and it is usually a bank feed lag or a payment without a reference.
Promises kept
Share of logged promises paid by the promised date, per customer, which tells the account manager whose word to rely on.
Dispute age
From the reply that raised a dispute to its resolution, because disputes are where cash actually gets stuck.
Reply classification accuracy
A weekly sample of classified replies checked by finance, looking hardest at disputes filed as promises and the reverse.

What a build like this costs

This is built as AI Workflow Automation, which runs $3.5K - $60K overall. A build like this one usually lands in the multi-step workflow tier: $15K - $30K, 3-5 weeks. The first working version runs on your real data well before the end of that window.

What it costs to run

Model usage is a small cost per reply read and per reminder drafted, typically well under a hundred dollars a month for a few hundred open invoices. Sending email costs nothing extra and the ledger APIs come with their subscriptions, although Xero's per-minute and daily rate limits shape how the morning run is paced.

What moves the price

  • How many ledgers and entities: one Xero organization, or NetSuite subsidiaries in several currencies
  • Where dispute evidence lives: delivery notes and proof of delivery in an ERP, a WMS or a carrier portal
  • How many segments and exceptions the cadence has, and whether key accounts need draft approval
  • Whether Stripe or another billing system runs alongside the ledger, as it does in most SaaS companies
  • The languages customers reply in, and whether replies must be answered or only read

Who this is for

  • B2B distributors and manufacturers with a few hundred open invoices and nobody whose job is chasing them
  • SaaS companies on annual contracts where Stripe handles cards but invoices paid by transfer go unchased
  • Finance teams whose disputes hide in email threads until the customer stops paying altogether
  • Companies selling across Europe whose customers reply in German, French, Dutch or Italian
  • Account managers who want to hear about a payment problem before the customer brings it up

Questions people ask about this

How do I automate invoice follow-ups without sounding pushy?

Write the cadence down, keep the early stages friendly and specific, and never let a system send the harsh ones. Here the first reminders use approved wording filled from the invoice data, key accounts get drafts for the account manager, and interest, fees or legal steps are a person's decision. Checking payments before every send removes the most embarrassing reminder of all.

Can an AI collections agent handle disputes?

It can recognize and route them, not resolve them. When a reply mentions damaged goods, a wrong quantity or a missing delivery, the disputed invoice is paused and the account manager gets a task with the invoice, the delivery note and the proof of delivery attached. Credit notes, replacements and write-offs stay with people.

Will it chase customers who have already paid?

It is built not to. Every run syncs payments from the ledger and the bank feed first, and a customer with an unmatched incoming payment is held until someone matches it. Reminders to customers who had already paid are tracked as a metric that should stay at zero, and each one is investigated.

Does it work with Xero, QuickBooks and NetSuite?

Yes. It reads open invoices, payments and aging from any of the three through their APIs and logs reminders, replies and promises where the team already looks. It writes nothing to the ledger except notes, unless finance approves a write-off. With HubSpot, the account manager sees the whole collections history on the company record.

Is it legal to send automated payment reminders in the EU?

Yes. Reminding a business customer about an overdue invoice is ordinary contract follow-up, and processing the contact's details for it rests on the contract and legitimate interest under GDPR. When the system answers replies by itself, the message says it is automated, which is what Article 50 of the EU AI Act expects. Late interest and fees are a separate decision the system never makes.

What does accounts receivable automation cost?

The cost section shows the range. One ledger with a single reminder cadence sits near its lower end; several entities with dispute evidence spread across a helpdesk push toward the top. The drivers are the number of ledgers and entities, where the dispute evidence lives, and how many customer-specific rules the cadence carries. If your ledger's own reminders or a tool like Chaser covers it, that is cheaper, and I will tell you.

Sources