This guide shows how to handle a customer prepayment that reaches your bank before the invoice exists: record it, let the bank transaction match it, and apply it to the invoice once you bill the order. The short answer: keep the bank match. Matching the bank transaction only confirms that the money arrived, and the amount stays on the customer's account as an open credit. When you confirm the invoice, Odoo lists that credit under Outstanding credits, and clicking Add settles the invoice. You do not need to delete the bank transaction or register a second payment.
It is written for bookkeepers whose customers pay before goods ship. The steps were verified on Odoo 19 Enterprise.
Before you start
- Version and edition: Odoo 19 Enterprise. The bank reconciliation screen is part of the Enterprise Accounting app. The Outstanding credits section on invoices also exists in Community.
- Apps: Accounting, with a bank journal that receives transactions from a bank connection or a statement import.
- Access rights: working in bank reconciliation needs the Invoicing & Banks or Administrator role for Accounting on the user. The Outstanding credits banner and section show to users with the Invoicing role or read-only accounting access.
- Terms used: bank reconciliation is matching each bank transaction to the Odoo record that explains it. The receivable account holds what customers owe you; money received with no invoice sits there as a credit. An outstanding credit is such an unapplied credit, which Odoo offers on the customer's next invoice. An Outstanding Receipts account is an optional holding account a bank journal can use for payments recorded in Odoo but not yet seen on the bank statement.
Why the payment looks used up
A prepayment goes through two separate matches. The first ties the bank transaction to the payment and proves the money arrived. The second ties the payment to an invoice and settles what the customer owes. They are independent, so the first can happen days before the second.
A confirmed customer payment has the status In Process. Once the bank transaction is matched to it, the status changes to Paid. That status describes the bank side only. Until an invoice takes the money, the amount stays as a credit on the customer's receivable account, which is where the invoice looks for it.
This holds for either bank journal setup. If the journal's incoming payment method has an Outstanding Receipts account, the payment posts to it straight away and the bank match clears it. If it has none, the payment has no journal entry until the bank match, and at that point Odoo books the unapplied amount to the customer's receivable account.
Record the prepayment when it arrives
- Open the Accounting app and go to Customers > Payments, then click New.
- Choose the Customer, enter the Amount, select your bank in Journal, and put the order reference in Memo so the payment is easy to recognise later.
- Click Confirm. The payment now shows In Process.
Let the bank transaction match the payment
- Open the Accounting app. On the dashboard, find your bank journal's card and click the button that shows how many transactions are left to reconcile.
- Find the incoming transaction. Odoo often matches it to the payment by itself when the details line up. If it has not, use the transaction's Reconcile button to search the open journal items for this customer. When the journal uses an Outstanding Receipts account, the payment's line is among them.
- Open the payment again. Its status is now Paid.
Leave the transaction as it is. Even though the invoice does not exist yet, nothing needs to be undone.
Apply the credit on the invoice
- Create the customer invoice as usual, from the sales order or from Accounting > Customers > Invoices, and click Confirm.
- A banner appears at the top of the invoice saying that this customer has outstanding credits listed below.
- Scroll down to the totals. Under the Outstanding credits heading, the prepayment is listed with its date and reference, with an Add button beside it.
- Click Add. The Amount Due drops by the amount of the prepayment.
Use Add rather than the Pay button at the top of the invoice. Pay opens the window for registering a new payment, so the customer would end up with two payments for one order.
Check that it worked
- When the prepayment covers the full invoice, the invoice shows Paid, and the totals area lists the payment as paid on its date.
- If the invoice shows In Payment instead, the payment has not been matched to a bank transaction yet. It changes to Paid once that match is made.
- If the prepayment was smaller than the invoice, the invoice shows Partially Paid with the rest still due. If it was larger, the remainder stays as an outstanding credit for the customer's next invoice.
Working from the bank feed only
Some teams skip recording the payment and work straight from the bank transactions. In bank reconciliation, open the incoming transaction, click Set Partner and choose the customer, then click Receivable. The amount is booked to that customer's receivable account as a credit and appears under Outstanding credits on their next invoice, exactly as above. The drawback is that the prepayment does not exist in Odoo until the bank transaction arrives.
Common mistakes to check first
- The credit does not appear on the invoice. Odoo only offers credits that sit on the same receivable account and the same customer as the invoice. A prepayment entered as a manual journal entry to another account, or recorded against a different customer, is not listed.
- The credit is missing before the bank match. Without an Outstanding Receipts account, the payment has no journal entry until its bank transaction is matched, so no invoice can offer it before then. The account is set per payment method in Accounting > Configuration > Accounting > Journals, on the bank journal's Incoming Payments tab.
- No banner on the invoice. The banner and the Outstanding credits section appear only once the invoice is confirmed and while it is not fully paid.
Steps verified on Odoo 19. Menus and labels can differ on other versions.
Common questions
How do I apply a customer prepayment to an invoice in Odoo 19?
Confirm the invoice, then scroll to the totals. The prepayment is listed under Outstanding credits, and clicking Add next to it applies it to the invoice.
Why does my Odoo payment show Paid when no invoice is attached?
In Odoo 19, a customer payment changes from In Process to Paid once its bank transaction is matched. That only confirms the bank side; the amount stays on the customer's account as a credit until an invoice uses it.
Do I need to delete the bank transaction to apply a prepayment in Odoo?
No. The bank match and the invoice match are separate. Leave the bank transaction matched and apply the credit from the invoice with Add.
Why does a customer prepayment not show under Outstanding credits?
Odoo only lists credits on the same receivable account and the same customer as the invoice. If the bank journal has no Outstanding Receipts account, the payment also appears only after its bank transaction has been matched.
Can I use the Pay button on the invoice for a prepaid order?
It is better not to. Pay registers a new payment, so the customer would have two payments for one order, while Add uses the credit already on their account.
Talk to the team.
If you are setting this up, or Odoo is not behaving the way this guide describes, book a 30-minute call. We will look at your configuration and tell you what it needs. Calgary studio, in-house team, no offshore handoffs.
Book the call →