a pen being offered across a desk over printed documents
Accounts Payable · Missing and Duplicate · Hub

AI Agents for Missing
and Duplicate Invoices

Accounts payable is built around documents that arrive. The expensive failures are the ones that never did.

Key takeaways
  • An invoice driven workflow cannot see a missing invoice, because the trigger for every step is a document that does not exist.
  • An open purchase order file is four populations at once, and an accrual built over the whole file is wrong by whatever the administrative residue happens to be.
  • Received and not invoiced is the only one of those four that is a real unrecorded liability.
  • Exact matching on vendor and invoice number catches the duplicates that were never going to be paid twice, and misses the rekeyed and second vendor record cases that were.
  • Bank details and the vendor document are stronger duplicate signals than the internal invoice number, which is the field a rekey changes first.

AI agents for missing and duplicate invoices work from the open purchase orders and the goods receipt history rather than from the invoice queue, because that is the only side of the transaction that is present when an invoice never arrived. ChatFin separates the real unrecorded liability from the administrative residue before it accrues or chases anything.

The same inversion applies to duplicates. Nearly every system checks vendor number and invoice number for an exact match, which is the weakest available signal and the one a rekey changes first. ChatFin matches on the vendor document, the amount, the date and the bank details, which is where the duplicates that actually clear are visible.

Accounts payableMissing invoicesDuplicate paymentsOpen purchase ordersGoods receiptsAP accrualsVendor follow upAI agents for finance
01

Every accounts payable process is blind to what did not arrive

Accounts payable is built around documents that show up. Invoices arrive, they get processed, and the measures of success all count throughput. ChatFin finds the expensive failures sit in the opposite place: the invoice that never came, for goods that were received, in a period that has already closed.

SituationWhat accounts payable seesWhat is actually true
Goods received, no invoiceNothing at allA real liability, unrecorded
Invoice sent to the wrong addressNothing at allThe vendor thinks you are late
Invoice in a personal inboxNothing at allIt will surface after close
Vendor stopped invoicingNothing at allReads as a saving until it does not
Order fulfilled, never closedAn open POWhich may or may not be a liability

Four of those five rows are literally invisible to an invoice driven workflow, because the trigger for every step is a document that does not exist. ChatFin works from the open purchase orders and the receipt history instead, which is the only side of the transaction that is actually present.

In ChatFin

ChatFin reads open orders and goods receipts rather than the invoice queue, so a missing invoice becomes a finding instead of a silence.

02

Reading an open purchase order file honestly

Every open purchase order file contains three populations that look identical and mean completely different things. Treating them as one list is why the file is usually ignored.

Received and not invoiced. A genuine unrecorded liability and the reason to read the file at all. It should be accrued and chased.
Ordered and not received. Not a liability yet. It belongs in commitment reporting, not in an accrual.
Complete but never closed. Administrative residue. It inflates the file, it hides the first group, and nobody has an incentive to clean it.
Cancelled in practice, open in the system. The order will never be fulfilled and the vendor has moved on, which only the vendor knows.

ChatFin separates those four before proposing anything, because an accrual built over the whole file is wrong by whatever the residue happens to be, and a chase list built over the whole file annoys vendors who owe you nothing.

a pen being offered across a desk over printed documents
An open order file is four populations pretending to be one list.
In ChatFin

ChatFin splits the open order file into received and not invoiced, ordered and not received, and administrative residue, then accrues and chases only the first.

03

Duplicates survive because the obvious check is the weakest one

Nearly every finance system checks vendor number and invoice number for an exact match. That check catches the duplicate that was never going to be paid twice anyway, and misses the ones that were.

Duplicate typeWhy the exact check misses itHow it is caught
Same invoice, second vendor recordDifferent vendor numberMatch on bank details
Invoice number with a suffix addedNot an exact matchMatch on amount and date
Statement paid alongside the invoiceDifferent document typeClassify before matching
Credit note applied as a paymentOpposite signMatch on the offset invoice
Rekeyed after a rejectionNew internal numberMatch on the vendor document

Every row is a payment that clears and never returns unless somebody notices. ChatFin matches on the vendor document, the amount, the date and the bank details rather than on the internal invoice number, which is the field most likely to have been changed.

In ChatFin

ChatFin matches duplicates on bank details and the vendor document rather than the internal invoice number, which is the field a rekey changes first.

04

Where this underperforms

Three, and the first is common.

Goods receipting is unreliable. If receipts are entered in batches at period end, the received and not invoiced population is an artefact of the entry timing rather than a real liability.
Purchase orders are not used for most spend. Then the open order file covers a minority of the liability and the missing invoice question has to be answered from recurring payment patterns instead.
Vendor bank details are not held centrally. Then the strongest duplicate signal is unavailable and matching falls back to amount and date.
Start with received and not invoiced. It is one join between receipts and invoices, it needs read access only, and it is the population that turns into an audit finding if it is wrong.

Deeper in missing and duplicate invoices

The use cases this hub covers.

Worked on this page
Vendor follow up for missing invoices · Missing invoice detection from open POs · Duplicate invoice detection

Covered as sections here
Open order populations · Received not invoiced · Bank detail matching · Rekeyed invoices

Questions AP managers ask first

How can software find an invoice that was never sent?

By reading the other side of the transaction. If goods were received against an open purchase order and no invoice has been matched to that receipt, there is a liability regardless of whether any document arrived. ChatFin reports that population and separates it from orders that were never received and from orders that were completed but never closed.

Why does duplicate checking miss so much?

Because the standard check is an exact match on vendor number and invoice number, and every duplicate that actually clears has broken one of those two fields. A second vendor record changes the vendor number, a rekey after a rejection changes the invoice number. ChatFin matches on bank details, amount, date and the vendor document instead.

Is the open purchase order file worth reading at all?

Only once it is split. Most open order files are dominated by orders that were fulfilled and never closed, which is why finance teams stop reading them. ChatFin separates that residue from received and not invoiced, and only the second group becomes an accrual or a vendor chase.

How ChatFin works on missing invoices

Read the side of the transaction that exists.

ChatFin works from open orders and goods receipts, so an invoice that never arrived becomes a reported finding rather than a silence in the queue.

It splits the open order file before accruing or chasing, and matches duplicates on bank details rather than on the invoice number.

Bring your open purchase order file. The split takes an hour.

Book a demo
AM
Ashok Manthena
CEO and co founder, ChatFin

Ashok Manthena is the CEO and co founder of ChatFin, an AI agent platform for enterprise finance that runs across NetSuite, Acumatica, JD Edwards, SAP and Dynamics 365. He works with CFOs and controllers on governed automation of the close, payables, receivables and reporting. Connect on LinkedIn.

Image credits. Header photograph: a pen being offered across a desk over printed documents, sourced from Pexels and used under the Pexels licence.
All images are served from the Pexels content network. No third party product screenshots, vendor logos or licensed media are used on this page.
Get started

Bring your open purchase order file.

We will split it through ChatFin into received and not invoiced, ordered and not received, and residue, and show you which of it is a real liability.

✓Received and not invoiced identified from receipts
✓Administrative residue separated before accrual
✓Duplicates matched on bank details and vendor document
Request a demo
Confidential & private