Reconcile bank transfers with sales orders
Quick summary: Match an incoming bank transfer to a sales order. Odoo can then confirm the order, create and post its invoice, and reconcile the transaction.
Choose the right process
Section titled “Choose the right process”Compare the transaction amount with the total of the selected orders and agree what should happen to any difference before reconciling.
- Exact payment — MATCH: the invoice is fully settled.
- Overpayment with a partial return — MATCH & REFUND: the invoice is settled and an outbound payment is created for the difference; you still have to send it to the customer.
- Overpayment with no return: create the invoice manually and use bank reconciliation. The invoice is settled and the approved difference is posted to the selected account.
- Underpayment with a write-off: create the invoice manually and use bank reconciliation. The invoice is fully settled and the approved difference is written off to the selected account.
- Underpayment with an open balance — MATCH for one order: the invoice remains partially paid with an open balance.
- Payment received by mistake — FULL REFUND: no sales order is matched; Odoo records the receipt and creates an outbound payment for the full amount.
Find the sales order
Section titled “Find the sales order”Skip this section for a mistaken payment that will be refunded in full. Use the Full refund tab below directly from the transaction list.
- Open Sales > Reconciliation. The list contains unreconciled incoming transactions from bank and cash journals.
- Check the date, journal, reference, payer, bank account, and amount. If the transaction is unrelated to sales, turn off Sale Relevant to hide it from the default view.
- Click MATCH on the transaction. Odoo opens sales orders that are not yet paid and uses available transaction details as search filters.
- For an overpayment or underpayment, remove the preselected Total Amount filter if it hides orders whose totals differ from the transaction.
- Verify the customer, order, currency, and total. Do not accept an automatic suggestion solely because its reference or amount is similar.
Process the payment
Section titled “Process the payment”For one order, click MATCH on its row. If the transfer exactly settles several orders, select them and use MATCH above the list. The action can confirm unconfirmed orders, create and post their invoices, reconcile the complete transaction, and send the invoices to the customer.
Before clicking, check the order, invoice details, and customer email address. When it finishes, open the invoice and verify that no amount remains and the transaction has left the reconciliation list.
Return the difference
- Select the order or orders settled by the receipt. Their combined total must be less than the transaction amount.
- Click MATCH & REFUND. Odoo processes the orders and invoices as for an exact payment and creates an outbound payment for the excess.
- Review the created refund, amount, recipient, and bank account. Creating the payment does not mean the bank has transferred the money.
- Send the refund through your approved banking process. When the debit appears on the statement, reconcile it with the created outbound payment.
Keep the difference
There is no direct order-reconciliation button for this case. First use the normal workflow to confirm the order and create and post its invoice, then open regular bank reconciliation.
- Click Reconcile on the bank transaction, choose the posted invoice, and click Select. The transaction’s excess remains unmatched.
- Click Set Account for the remaining amount and choose the account approved by accounting for this kind of difference. If necessary, edit the line so it contains only the actual excess.
- Save the reconciliation and verify that the bank transaction is fully reconciled and the invoice is fully paid.
Do not use MATCH & REFUND when the difference will not be returned: that option creates an outbound payment.
Leave the balance open
For one order, click MATCH. Odoo reconciles the received amount and leaves the invoice partially paid with an open balance. Match a later receipt to the same invoice in regular bank reconciliation.
The direct underpayment process is not available for several orders because allocation of the difference would be ambiguous. In that case, create the invoices manually and allocate the receipt in regular bank reconciliation.
Write off a small balance
First use the normal workflow to create and post the invoice, then open regular bank reconciliation.
- Click Reconcile on the bank transaction, choose the posted invoice, and click Select. Odoo initially shows a partial payment and the invoice’s open balance.
- Choose the fully paid link on the matched line. Allocate the remaining difference with Set Account to the approved write-off account.
- Save and verify that the invoice is fully paid, the bank transaction is reconciled, and the write-off equals only the approved difference.
Use this option when the customer made the payment by mistake and the entire receipt must be returned without matching a sales order.
- In Sales > Reconciliation, verify the incoming transaction’s customer, amount, currency, reference, and customer bank account. Do not click MATCH or select a sales order.
- Click FULL REFUND. Odoo records and reconciles the incoming payment, then creates a posted outbound payment for the same amount.
- Review the created refund’s recipient, bank account, amount, currency, and reference. Creating the payment does not mean the bank has transferred the money.
- Send the full refund through your approved banking process. When the debit appears on the statement, reconcile it with the created outbound payment.
The transaction must contain the customer’s bank account number. If the account is missing, correct the transaction before trying the refund again.
If you start from Accounting > Bank Matching, Odoo also provides a native sales-order suggestion after you set the partner. That workflow creates the invoice from the bank transaction; the Implex workflow on this page handles the order, invoice, reconciliation, and sending in one action.
For manual differences, see the bank reconciliation guide and the official Odoo 19 bank reconciliation documentation.