Odoo Customer Returns and Credit Notes in Australia: Reverse Transfers, Restocking and GST Adjustment Notes
Odoo handles a customer return as a reverse transfer plus a credit note, and the ATO needs an adjustment note unless the GST is $75 or less. Odoo 20 steps.
By Josh Craig, Managing Director, Auboros ·
In Odoo a customer return is a reverse transfer: open the validated delivery, click Return, adjust the quantities and validate when the goods arrive. If the order is already invoiced, add a credit note from the invoice with Reverse or Reverse and Create Invoice. The ATO requires a valid adjustment note before you claim the GST back on a return, unless the GST involved is $75 or less.
At a glance
- Who it is for: Australian wholesalers, retailers and manufacturers on Odoo who take goods back from customers and need the stock count, the refund and the Business Activity Statement (BAS) to agree
- Problem it solves: returns handled by email and a manual credit, which leaves on-hand stock wrong, credits that never meet their invoices and GST adjustments claimed without the paperwork the ATO asks for
- Platforms: Odoo 20 Sales, Inventory and Accounting apps; Helpdesk after-sales for returns and refunds raised from a ticket; Starshipit return labels through the Enterprise connector
- Typical cost: no extra licence; the Sales, Inventory, Accounting and Helpdesk apps are included from A$43 per user per month at list, yearly billing, ex GST as at October 2026 per our Odoo implementation packages page
- Typical timeline: a returns process (return locations, credit note journal, Helpdesk after-sales options) is configured and tested inside a day or two of a standard implementation in our projects
- Last verified: 29 October 2026 against the Odoo 20 returns and refunds documentation and the ATO’s adjustment notes page
Returns are where a tidy sales process goes to get messy. A customer sends back three cartons from a pallet of ten, the warehouse puts them on a shelf, accounts raises a credit from an email, and three months later the stock count is out by three cartons and the BAS has a GST adjustment nobody can trace to a document. Odoo handles all three parts on one database, but only if you run the steps in the right order. This is the sequence we set up for Odoo clients in Brisbane and across Queensland, with the Australian GST rule that most how-to guides skip.
If you’re still choosing a platform for a stock-heavy business, start with our guide to ERP for wholesale distribution in Australia and come back here for the Odoo detail.
How do you process a customer return in Odoo?
The Odoo 20 returns documentation describes a return as a reverse transfer, and it requires the Inventory app. From the sales order, click the Delivery smart button, open the validated delivery order and click Return. The Reverse Transfer pop-up defaults every line to the quantity that was delivered; reduce the quantities for a partial return or remove lines with the trash icon, then click Return to confirm. Odoo creates a new incoming warehouse operation, and the warehouse team clicks Validate when the goods arrive.
Once the return is validated, the sales order’s Delivered quantity drops by the returned amount. The documentation states that the delivered figure reflects the difference between the initial validated quantities and the returned quantities. If the order has not been invoiced yet and the product invoices on delivered quantities, the invoice you create afterwards bills the customer only for what they kept. No credit note is needed because no invoice was ever wrong.
| Scenario | Stock step | Money step |
|---|---|---|
| Goods back, not yet invoiced, invoiced on delivered quantities | Delivery > Return > Validate | None; the invoice picks up the reduced Delivered quantity |
| Goods back, not yet invoiced, invoiced on ordered quantities | Delivery > Return > Validate | Credit note from the draft or posted invoice, because the invoice does not follow deliveries |
| Goods back after invoicing and payment | Delivery > Return > Validate | Invoice > Credit Note > Reverse, then register the refund payment or allocate the credit to the next invoice |
| Wrong item shipped, swap at the same price | Return, then a new delivery (Helpdesk’s Return for Exchange creates both) | None if the price is unchanged |
| Damaged on arrival, customer keeps nothing, goods are unsaleable | Return > Validate, then Scrap from the return operation | Credit note for the full line |
| Price dispute, goods stay with the customer | None | Partial credit note with the quantity or price edited on the draft |
What happens if the order is already invoiced?
A reverse transfer fixes the stock but not the invoice, because, as the documentation puts it, validated or sent invoices cannot be changed. The money side is a credit note. Open the invoice through the Invoices smart button on the sales order and click Credit Note at the top of the posted invoice. The pop-up asks for a Reason displayed on Credit Note, a Journal and a Reversal Date.
The Odoo 20 credit notes documentation gives you two buttons:
- Reverse. Opens a draft credit note prefilled from the invoice. You edit the Product and Quantity lines before you click Confirm, which is how a partial refund is done: three cartons credited out of ten, or one line credited and the rest left alone.
- Reverse and Create Invoice. Creates a credit note that is validated and reconciled with the original invoice automatically, then opens a new draft invoice prefilled from the original for you to correct. Use it when the whole invoice was wrong (wrong customer, wrong pricelist, wrong date) and the goods are staying put.
Credit notes carry the prefix R in front of the related document number, so RINV/2026/0041 reverses INV/2026/0041, and the journal entry cancels the original invoice’s lines. After you confirm, a blue banner on the customer’s open invoices reads that you have outstanding credits for this customer and offers to allocate them, which is the right move for a trade customer who buys every week. If money is going back to the customer instead, register a payment against the credit note. Our guide to Odoo accounting for Australian businesses covers the journals and reconciliation behind this.
Does a return in Odoo need an ATO adjustment note?
Usually, yes, and this is the step the generic tutorials miss. When you credit a customer for returned goods, your GST liability on the original sale goes down. The ATO treats that as a decreasing adjustment on your BAS, and its adjustment notes page states that you need a valid adjustment note before you can make a decreasing adjustment, unless the adjustment is for GST of $75 or less. The ATO’s own example is a $660 discount on an original sale, which reduces the GST by $60 and so needs no note.
Two more rules from the same page matter for the BAS. You can’t make a decreasing adjustment for a transaction that didn’t include GST, so a credit on a GST-free sale carries no GST adjustment. And if you don’t hold the adjustment note when you lodge, you report the adjustment on the first BAS you lodge after receiving it, not the period of the return. The contents a note must carry are set out in the ATO’s ruling GSTR 2013/2, which the page links; check your credit note layout against it once, with your accountant, and then every credit note Odoo posts carries the same fields. For how those adjustments flow into the BAS report, see our post on Odoo’s Australian localisation.
In practice the Odoo credit note is the adjustment note, provided the reason line says what was adjusted and the document shows the GST. That is why we ask clients to write a real reason in the Reason displayed on Credit Note field (“3 x SKU 4471 returned damaged, DO WH/OUT/00912”) instead of leaving it blank.
Restock, scrap or repair: where do the goods go?
A return that comes back saleable goes to stock. A return that comes back damaged should not. Odoo gives you three destinations:
- Restock. The reverse transfer is an incoming operation, so validating it brings the goods back into the warehouse’s stock. When the return is raised from a Helpdesk ticket, the Return pop-up includes a Return Location field, which is where we point a quarantine or inspection location so returned goods are checked before they are picked again. Our guide to what Odoo Inventory covers for a wholesaler explains locations and routes.
- Scrap. The Odoo 20 scrap documentation lets you scrap from an existing operation: open the operation, click the cog icon and select Scrap. The goods move to a virtual scrap location (the default is Inventory adjustment) so they stop counting as physical stock, a Scraps smart button appears on the operation, and the Moves History report’s Scrapped filter shows every scrapped quantity. A scrap can be reverted from that report if someone scraps the wrong line.
- Repair. With the Repair app, a Helpdesk ticket can open a Repair Reference form with the product, lot or serial number, an Under Warranty box that sets the sale price of all repair parts to zero, and a Parts tab. That is the path for a warranty return that comes back to the customer fixed instead of credited.
Why does the invoicing policy decide how many steps a return takes?
The Odoo 20 invoicing policy documentation sets this per product in the General Information tab, with a default under Sales > Configuration > Settings. With Delivered quantities, the invoice follows the delivery, so a return before invoicing simply reduces what gets billed. With Ordered quantities, customers are invoiced once the quotation is confirmed, so the invoice already exists by the time anything comes back and every return needs a credit note.
Two cautions from the same page. Existing products must have their invoicing policy updated manually on their product forms when you change the default, so a policy switch mid-year leaves old products on the old rule. And with Delivered quantities selected, Automatic Invoicing cannot be activated. Wholesalers who ship from stock usually run Delivered quantities for goods and Ordered quantities for services, which keeps returns of goods to one step wherever possible.
Can Helpdesk raise the return and the refund from a ticket?
Yes, and for a business with a customer service desk it is a clean way to run returns, because the ticket becomes the audit trail. The Odoo 20 Helpdesk after-sales documentation adds Refunds, Coupons, Returns, Repairs and Field Service as options on each Helpdesk team under Helpdesk > Configuration > Helpdesk Teams, and notes that enabling them can install other apps.
On a ticket, the Return button appears only when the customer has a recorded delivery. The pop-up lets you pick the Sales Order or the Delivery to Return, defaults the quantity to the validated delivery and lets you set a Return Location. Return creates the incoming operation; Return for Exchange also creates the outgoing operation for the replacement. The Refund button opens a pop-up where Invoices to Refund and Reversal date are required, the Reason is prefilled with the ticket number, the Journal defaults to the invoice’s journal, and the same Reverse and Reverse and Create Invoice choices apply. The invoice must be posted before a credit note can be generated, and a Credit Notes smart button then sits on the ticket. If your returns volume justifies it, the triage itself can be handed to an agent; our post on an AI RMA and warranty triage agent shows the drafts-first pattern we use.
Return labels through Starshipit
For Australian parcel returns, the Odoo 20 Starshipit documentation lists returns for Australia Post eParcel, TNT, Couriers Please, Aramex, StarTrack, DHL Express and NZ Post Domestic. You click the Return smart button on the delivery order, and if the selected courier supports returns a Print Return Label button appears, provided the connector is configured for returns. One caution from the same page: cancelling a delivery in Odoo archives it in Starshipit but does not tell the courier, so a cancelled return label still has to be cancelled on the courier’s own platform.
What changed for returns in Odoo 20?
The Odoo 20 release notes list simplified returns under Inventory, with the return wizard removed. The 20.0 documentation we verified on 29 October 2026 still describes the Reverse Transfer pop-up, so the exact screen you see depends on the build your database is on; the sequence (return against the delivery, validate on arrival, credit note from the invoice) is the same either way. If you’re planning your move to 20, our post on Odoo 20 inventory and manufacturing changes covers the rest of the Inventory list.
The return that hurts isn’t the one the warehouse processes wrongly, it’s the one that never gets processed at all. Three cartons on a shelf, a credit raised from an email, and the GST claimed with nothing behind it. The fix is boring: return against the delivery, credit note from the invoice, a real reason in the reason field. Once that’s the only way a return can happen, the stock count and the BAS look after themselves.
Josh Craig, Director, Auboros
Goes well with
- Odoo pick, pack and ship for Australian warehouses
- Odoo’s Australian localisation: GST codes, the BAS report, TPAR and ABA files
- An AI RMA and warranty triage agent for ERP
Returns that don’t match your stock or your BAS?
We set up returns, credit notes and the GST side of both for Odoo clients from our Brisbane office, across Queensland and the rest of Australia, as an Odoo partner in Brisbane. If your returns are handled by email and the counts never agree, book a free consultation and we’ll walk through your current process in half an hour. No obligation, and we’ll say so if the fix is a setting you can change yourself.
FAQ
Frequently asked questions
How do I create a credit note for a returned product in Odoo?
Open the posted invoice and click Credit Note. Enter a Reason displayed on Credit Note, check the Journal and Reversal Date, then click Reverse to get a draft credit note you can edit down to the returned quantity, or Reverse and Create Invoice to reverse the whole invoice and open a corrected draft. Credit notes carry an R prefix, so RINV/2026/0041 reverses INV/2026/0041.
Does Odoo automatically create a credit note when a product is returned?
No. The reverse transfer on the delivery fixes the stock and reduces the Delivered quantity on the sales order; the credit note is a separate step from the invoice. If the order was not yet invoiced and the product invoices on delivered quantities, no credit note is needed because the invoice picks up the lower quantity. Helpdesk's after-sales Return and Refund buttons link both steps to one ticket.
Do I need an adjustment note to claim GST back on a customer return in Australia?
Yes in most cases. The ATO states that you need a valid adjustment note before you can make a decreasing adjustment on your BAS, unless the adjustment is for GST of $75 or less. If you do not hold the note when you lodge, you report the adjustment on the first BAS you lodge after receiving it. A properly completed Odoo credit note serves as that note.
Can I charge a restocking fee on a return in Odoo?
Odoo's returns documentation does not describe a restocking fee feature. In practice you process the reverse transfer in full so the stock is right, then use Reverse on the invoice and edit the draft credit note, either reducing the credited amount or adding a restocking fee line, before you confirm it. Keep the reason field specific so the GST adjustment is traceable.
Can Odoo print a return shipping label in Australia?
Yes, through the Starshipit connector. Odoo 20's Starshipit documentation lists returns for Australia Post eParcel, TNT, Couriers Please, Aramex, StarTrack, DHL Express and NZ Post Domestic. Click the Return smart button on the delivery order and, if the courier supports returns and the connector is configured for them, a Print Return Label button appears.