Most GST problems in Odoo do not surface on invoice one. They surface eleven weeks later, when someone opens the BAS report and the 1A figure reconciles to nothing in the general ledger. By then a full quarter of transactions carry the wrong tax code, and the cleanup costs more than the configuration would have.
This Functional guide walks it end to end, assuming you already know your way around Odoo Accounting. It treats Odoo GST setup Australia as what it actually is: a reporting architecture decision, not a tax rate you type into a field. Every tax you configure is a mapping instruction telling Odoo which BAS label a transaction belongs to.
What the Australian Localization Actually Installs
The Australian fiscal localization is layered, and the layers matter commercially.
The base module, l10n_au, installs the Australian chart of accounts aligned to AASB structures, the standard GST tax codes at the 10 percent rate, and the tax grid definitions BAS reporting depends on. This is available in Community.
The BAS report is a different story. The report, the closing journal entry, and the Taxable Payments Annual Report sit in the accounting reports layer that ships with Enterprise. Install Community only and you get correct tax codes with no BAS report to run them through. Any ERP buyer evaluating Odoo for an Australian entity should be clear on this before signing.
One more thing before you start: two-factor authentication cannot be switched off on the Australian fiscal localization. It is a government requirement baked in, so build it into user onboarding rather than treating it as a surprise.
Step 1: Install l10n_au and Configure Your Company Profile
Install the localization before you create a single invoice. Retro-fitting a chart of accounts onto a database with posted entries is a migration project, not a settings change.
Set the company country to Australia first, then install the localization package from Accounting settings. Odoo uses the country to decide which localization to offer, and getting this backwards loads the wrong chart of accounts.
Then complete the company profile. Your ABN belongs in the company tax ID field, because it flows through to invoice layouts, and an invoice without an ABN is not a valid tax invoice under ATO rules. Confirm the fiscal year end is 30 June for most Australian entities, and check that tax-inclusive pricing matches how you quote. Retail and hospitality usually want GST-inclusive display; B2B wholesalers usually do not.
Step 2: Audit the Pre-Loaded GST Tax Codes
Odoo loads a long list of GST taxes, and the volume is misleading. Most sit at either 0 percent or 10 percent. What differentiates them is not the rate but the tax grid each one writes to.
Do not delete taxes you think you will not use. Archive them. Deleting removes the grid mapping, and rebuilding it manually is slow and error-prone.
Sales Taxes and Their BAS Grid Mapping
The localization gives you separate sales taxes for standard taxable supplies, GST-free supplies, input-taxed sales, and exports. Each writes to a different combination of BAS labels.
Standard taxable sales feed G1 for the gross amount and 1A for the GST component. GST-free supplies such as basic food, most medical services, and education feed G1 and G3. Exports feed G1 and G2. Input-taxed sales, typically residential rent and certain financial supplies, contribute to G1 without generating any 1A liability.
The GST-free versus input-taxed distinction catches people out constantly. Both charge no GST on the sale, but only GST-free supplies preserve your right to claim input tax credits on related purchases. Using them interchangeably quietly distorts your 1B position.
Purchase Taxes, Capital and Non-Capital
Step 3: Set Default Taxes on Products, Accounts, and Partners
Defaults are where GST accuracy is actually won. Relying on users to pick the right tax per line is not a control, it is a hope.
Work through three levels. Set customer and vendor tax on every product and service template, and split product categories so GST-free stock is genuinely separate from taxable stock rather than mixed in one category with manual overrides. Set default taxes on income and expense accounts as a backstop for miscellaneous journal entries. Then check Accounting settings for the company-wide defaults that apply when nothing more specific is found.
Precedence runs from most specific to least: product beats account default, which beats company default. Build that hierarchy deliberately instead of letting it accumulate.
Step 4: Use Fiscal Positions for Exports and Exceptions
Fiscal positions handle what defaults cannot. They are tax mapping rules that swap one tax for another based on who the transaction is with.
The classic Australian case is export customers. Your products carry standard 10 percent GST, correct for domestic sales. An export fiscal position mapped to that customer automatically substitutes the GST-free export tax, sending the transaction to G2 instead of 1A without anyone touching the invoice line.
Attach a fiscal position directly to a customer record, or configure automatic detection based on customer country. For businesses selling domestically and overseas from the same catalogue, automatic detection removes an entire category of manual error.
The same mechanism drives the Taxable Payments Annual Report. In construction, cleaning, courier, IT, or security services, Odoo pairs specific purchase tax variants with fiscal positions to flag reportable contractor payments. Those variants ship inactive, so switch them on deliberately.
Step 5: Configure Tax Return Periodicity and GST Accounts
Two settings here have outsized consequences.
First, tax return periodicity in Accounting settings. Set it to monthly or quarterly to match your actual ATO obligation. It drives the default reporting period on the BAS report and the cadence of your closing entries.
Second, and easier to miss: the GST payable and GST receivable accounts must be defined on the tax group before your first BAS closing entry. Odoo prompts you when they are missing, but that prompt lands during period close when everyone is busy and inclined to click past it. Set them during implementation. Once configured, the closing entry generates automatically and offsets both balances against the tax clearing account on the group.
The Odoo Calendar Quarter Trap
Odoo runs on calendar quarters. The Australian financial year does not.
July to September is Q1 of the Australian financial year. In Odoo it is Q3. Select a quarter from a dropdown without checking the underlying dates and you pull the wrong three months into your BAS. Set the period start date explicitly using the period selector on the report, verify the range on screen every time, and put that check in your period-close checklist rather than trusting recall.
Step 6: Choose Accrual or Cash Basis GST Reporting
Odoo defaults to accrual. GST is recognised when the invoice is issued or the bill received, regardless of payment. This suits most businesses and matches how the ledger already behaves.
Cash basis is available under the ATO turnover threshold for cash accounting, currently 10 million dollars aggregated. It recognises GST when money actually moves, which is a real cash flow advantage if you carry long payment terms.
To use it, enable tax cash basis in settings and configure the cash basis transition account. Odoo then generates separate cash basis entries when payments reconcile, and the tax report follows payment dates. Decide before go-live, because switching mid-year requires ATO approval and creates a transition period nobody enjoys reconciling.
Step 7: Validate the BAS Report Before Lodgement
Never lodge straight from a freshly generated report. Run three checks.
Start with the arithmetic. Your 1A figure should be roughly one eleventh of G1 minus G2 minus G3, and 1B roughly one eleventh of G10 plus G11. If either is materially off, transactions are sitting on the wrong tax code, and the variance size tells you roughly how many.
Next, compare G1 against total revenue on your profit and loss for the same period. A gap usually means revenue posted without a tax code, or entries dated outside the period you think you are reporting.
Finally, drill into each tax grid label from the report to open the underlying journal items. That is the fastest way to spot a single miscoded transaction inflating a line. For prior period errors, the ATO permits correcting smaller net GST amounts in a later statement within published limits that vary by turnover. Confirm the current threshold before relying on it, since a larger error requires a formal amendment.
GST Setup Mistakes That Surface at Lodgement
Five patterns account for most of the remediation work I see: configuring GST after transactions exist, which leaves untagged entries to correct line by line; mixing GST-free and input-taxed treatment, which distorts input tax credits without throwing an error; leaving product tax defaults blank so accuracy depends on user memory; skipping the GST payable and receivable setup until the first close, which stalls period end; and selecting a quarter from the dropdown without verifying dates.
None of these are exotic. All are cheaper to prevent than to fix.
If your BAS figures are not reconciling to your ledger, or you want the tax grid mapping reviewed before your first lodgement rather than after it, Book a Consultation and we can work through your setup together.
Conclusion
Australian GST in Odoo 19 is not difficult, but it is unforgiving of shortcuts. The system will post transactions against whatever tax code it is given and produce a BAS report that looks entirely plausible while being wrong.
The sequence that holds up: install the localization before any transactions exist, audit the pre-loaded tax codes against how your business actually trades, push defaults down to product and account level so accuracy is structural rather than behavioural, use fiscal positions for exceptions, set periodicity and GST accounts during implementation, and validate every report before it reaches the ATO.
Get that right and BAS lodgement becomes a fifteen minute review instead of a week of reconciliation. This article covers Odoo configuration rather than tax advice, so confirm your specific obligations with your accountant or registered BAS agent.
Frequently Asked Questions
Do I need Odoo Enterprise to lodge a BAS?
You need Enterprise to generate the BAS report inside Odoo. Community gives you the Australian chart of accounts and correct GST tax codes, but the BAS report, closing entry automation, and TPAR functionality sit in the accounting reports layer. On Community you can still export tax data and prepare the statement externally, minus the automation.
What happens if I install the Australian localization after posting invoices?
The localization loads its chart of accounts and tax codes, but existing entries keep whatever accounts and taxes they were posted against. They will not retroactively map into the BAS tax grids. Correcting this means reviewing and reposting affected entries, which is why installing first matters.
Can Odoo handle deferred GST on imports?
Yes, for businesses approved under the Deferred GST scheme. Odoo ships a deferred GST tax and a deferred GST liability account, both inactive by default, so activate them manually. The scheme requires monthly tax return periodicity, and a separate miscellaneous journal keeps the deferred entries clean.
How do I handle a customer who is GST-free for some products but not others?
Handle it at product level, not customer level. Fiscal positions apply across an entire transaction, so they are the wrong tool when the distinction is per line item. Set the correct tax on each product or category and let each invoice line pick up its own treatment.
Should I use cash or accrual basis for GST?
Accrual is Odoo’s default and suits most businesses. Cash basis is worth considering if you are under the ATO turnover threshold and regularly wait on customer payments, since you are not remitting GST before collecting it. The trade-off is reconciliation complexity, and changing later requires ATO approval, so decide before go-live.