Who can use this: Owner, Manager, Accountant. URL / Route:
/finance/ar/retainers(finance.ar.retainers.index). Detail:finance.ar.retainers.show,create,store. Action endpoints:finance.ar.retainers.allocate,allocations.reverse,refund,void. Plan / feature gate:feature:finance.retainers(default: enabled on standard plans). Permissions:sales.invoices.view,sales.invoices.create,sales.invoices.unpost.
Purpose
A Retainer records money received from a customer in advance, before any invoice has been issued. Use it for:
- a deposit at the start of a project,
- a prepayment on a future service or order,
- a security advance you'll later apply against the customer's invoices.
The retainer sits as a liability on the books — it's the customer's money until you earn it by issuing an invoice and allocating the retainer against it.
Compared with a Credit note: a credit note is issued by you (reduces a receivable). A retainer is received from the customer (creates a liability). Both can end up offsetting future invoices.
Step by step
Browse retainers
Open /finance/ar/retainers. Each row shows the retainer number, date, customer, amount received, amount allocated, unallocated balance, and status.
Create a retainer
Route: finance.ar.retainers.create / store. Permission: sales.invoices.create.
- Click New retainer.
- Pick the Customer.
- Set the Date.
- Pick the Deposit account (Cash / Bank).
- Enter the Amount and a Reference / Method.
- Save.
Posting writes the GL journal:
- Debit the Cash / Bank account.
- Credit the Customer Deposits / Retainer Liability account.
Allocate a retainer to an invoice
Route: finance.ar.retainers.allocate. Permission: sales.invoices.create.
From a retainer with an unallocated balance, click Allocate to invoices. Tick one or more open invoices for that customer and enter the amount to apply to each — the total cannot exceed the retainer's unallocated balance.
Allocating writes a journal:
- Debit the Customer Deposits / Retainer Liability account.
- Credit the AR control account (reducing the invoice's open balance).
Reverse an allocation
Route: finance.ar.retainers.allocations.reverse. Permission: sales.invoices.create.
Removes a specific allocation, freeing the retainer to be allocated elsewhere or refunded.
Refund a retainer
Route: finance.ar.retainers.refund. Permission: sales.invoices.create.
If the project is cancelled or the customer asks for the deposit back, refund the unallocated balance. This creates a Refund receipt linked to the retainer — money out of Cash / Bank, the retainer liability is cleared.
Void a retainer
Route: finance.ar.retainers.void. Permission: sales.invoices.unpost.
Reverses the retainer's GL journal, removes any allocations, and marks the retainer Void. The document number stays for the audit trail.
How the journal looks
A JOD 500 retainer received from a customer for an upcoming project:
| Account | Debit | Credit |
|---|---|---|
| Bank | 500.00 | |
| Customer Deposits (liability) | 500.00 |
No revenue is recognised yet — the money is a liability until you earn it.
Allocating JOD 300 of the retainer against a JOD 300 invoice for milestone 1:
| Account | Debit | Credit |
|---|---|---|
| Customer Deposits (liability) | 300.00 | |
| AR — Customer control | 300.00 |
The retainer's unallocated balance drops to JOD 200; the invoice flips to Paid.
Refunding the remaining JOD 200 unallocated balance because the project was cancelled (this creates a linked Refund receipt):
| Account | Debit | Credit |
|---|---|---|
| Customer Deposits (liability) | 200.00 | |
| Bank | 200.00 |
The retainer's unallocated balance becomes zero and the deposit liability is fully cleared.
When to use which customer-advance pattern
| Situation | Use this |
|---|---|
| Customer pays before any service is delivered or invoice exists | Retainer (this page) |
| You've issued an invoice already and want a deposit line on it | Deposit line on the invoice |
| You over-billed and want to reduce AR without cash moving | Credit note |
| Customer cancelled — return their unallocated retainer balance | Refund receipt linked to the retainer |
The retainer is the cleanest pattern when the money lands before you know exactly what invoices it will cover.
Common mistakes
- "My retainer didn't reduce the customer's AR." That's correct — a retainer sits as a liability, not as negative AR. Until you Allocate it against an invoice, it shows on the customer's profile as "unallocated retainer," separate from their AR balance.
- Allocation greater than retainer balance. Allocations cannot exceed the retainer's unallocated balance — the form blocks it. Apply only what's available; create a new retainer (or take more cash) if you need more.
- "Voided retainer left allocations behind." Void reverses the GL and removes every allocation — invoices it was allocating to flip back to open. Re-allocate from a different retainer or take a fresh payment.
- Period locked. Posting, voiding, allocating, and refunding all require an open period.
- Currency. The retainer is in the customer's currency. Allocating to an invoice in a different currency is not allowed — match currencies, or take a fresh payment.
Behaviour and rules
- Retainers are a liability, not income. Receiving a retainer does not affect revenue — it parks the money on the books until you earn it.
- Allocation moves the money from liability to AR. Only when allocated against an invoice does the customer's receivable balance change.
- Retainer JE source label. On the Journal entries page, the retainer JE is tagged with the green Retainer chip.
- Payments page. Retainers also surface on the Payments page as a "Retainer" row under Money In.
- Period lock. Posting / voiding / allocating require the date's period to be open.
Permissions / restrictions
- View / create / allocate / refund:
sales.invoices.{view,create}. - Void:
sales.invoices.unpost.
Related
- Customers — retainer balances shown on the customer profile.
- Invoices — retainers are allocated against open invoices.
- Refund receipts — refund an unallocated retainer.
- Payments — every retainer appears here as a "Retainer" row.
- Reports — Customer Balance Summary, Customer Deposits.