How to handle landed cost in Xero
Xero has no landed cost feature. Here is what people do instead, and what goes wrong.
Xero has no landed cost function. It records the supplier bill and the freight bill as separate purchases with no link between them, so nothing spreads freight and duty across the units they relate to. Getting landed cost into Xero means calculating it outside Xero, then posting the result: capitalisable charges to Inventory, and recoverable import GST somewhere else entirely.
Why Xero cannot do it on its own
Xero is an accounting ledger, not an inventory costing engine. When the forwarder bills you $1,800 and the broker bills you $950, Xero sees two bills from two suppliers. It has no concept that they relate to the 1,000 units on a supplier invoice from six weeks earlier, and no mechanism to spread them across those units.
Xero Inventory Items hold a single average cost and do not layer, so even stores using them cannot represent two shipments of the same SKU at two different landed costs. That is the gap every workaround is trying to close.
The three things people actually do
Expense it and move on
Code freight and duty to a Direct Costs or Freight expense account. Fast, and it puts the whole cost into the period the invoice arrived rather than the period the goods sold. Your inventory value on the balance sheet is understated by exactly the amount you expensed.
A spreadsheet, then a manual journal
Allocate the charges by value, quantity, weight or volume in a spreadsheet, then post a journal moving the total from expense into Inventory. Correct in principle. In practice the spreadsheet is the only record of how the number was reached, and nobody can reproduce it a year later.
A costing layer that posts for you
Calculate landed cost per unit from the actual documents, keep the cost layers, and produce the journal. Xero stays the ledger and receives bills, purchase orders and journals with the source PDFs attached.
Which account each charge belongs to
This is where most of the damage happens, and it is not obvious from the bills themselves.
If you are on perpetual inventory, every capitalisable charge posts to Inventory, freight and duty included. Coding the forwarder’s bill to Direct Costs expenses that cost immediately, and then the COGS journal releases it again when the stock sells. The same cost lands in your profit and loss twice.
- •Product cost, freight, insurance, customs duty, clearance, handling: capitalisable, so on perpetual they belong in Inventory and are released to COGS as the units sell.
- •Recoverable import GST or VAT: not a cost of the goods at all, because you claim it back. It belongs against a GST liability account, not inventory.
- •Financing, late fees, demurrage caused by your own delay: generally period expenses rather than a cost of getting the goods to the shelf. Ask your accountant where they draw that line.
The import GST mistake that inflates everything
Customs duty and import GST both arrive on the same broker invoice, both are government charges levied at the border, and they look interchangeable. They are not.
Customs duty is a real, unrecoverable cost of the goods, so it capitalises into unit cost. Import GST or VAT is reclaimed, so it must never be allocated into unit cost. Allocating it inflates landed cost, the cost layers, the inventory valuation, the COGS journal and any cost you push back to Shopify. In Australia that is roughly 10% of CIF plus duty, on every shipment.
The second half of the mistake is worse than the first. When import GST is buried inside a freight allocation, it is not coded to the GST account, so it never reaches your BAS and you never claim it. You overstate your inventory and forgo the refund in the same stroke.
The rule is identical in every GST and VAT jurisdiction, and it simply never fires in the United States. It is not country-specific logic, it is just invisible until you import into a country that has the tax.
Getting the coding right in Xero
One caution if you are verifying import GST yourself: the Xero API reports the split differently from the Activity Statement, so check the statement against an approved transaction rather than the API response. A draft never reaches the BAS at all.
None of this is tax advice. The treatment of a specific charge in your jurisdiction is a conversation with your accountant.
- 1Decide with your accountant whether you are on perpetual or periodic inventory. On perpetual, capitalisable charges go to Inventory; on periodic they go to purchases and the adjustment happens at period end.
- 2Map each cost category to a real account before you post anything. Check the codes rather than assuming: in Xero’s default Australian chart, 400 is Advertising, not Cost of Goods Sold, which is 310. A freight bill posted to 400 will not announce itself.
- 3Give recoverable import GST a current liability account, typically the GST account, rather than an inventory or expense account. In a live Australian org, a bill line coded that way with the GST on imports tax type appears on the Activity Statement correctly.
- 4Code per line, not per bill. A single forwarder invoice can carry international freight that is GST-free and a domestic leg after the place of consignment that is taxable, so one tax rate for the whole bill will be wrong.
- 5Attach the original PDF to the bill. It is what makes the allocation defensible when someone asks in eleven months.
What Landara posts to Xero
Landara reads the purchase order and the freight, duty and broker invoices, allocates the capitalisable charges across the line items by value, quantity, weight or volume, and holds recoverable import tax out of that allocation automatically. The allocation engine filters on capitalisability internally, so a charge cannot be capitalised by mistake.
What reaches Xero is bills and purchase orders with the original PDFs attached, coded per line to the accounts you mapped, plus a period Dr COGS / Cr Inventory journal and revaluation journals where a cost layer changed after the fact. Landara does not post anything on its own: you review the journal and post it.
If a category has no account mapped, the publish blocks and names it rather than falling back to a default. A wrong account surfaces at BAS time with several bills already misposted; a blocked publish surfaces immediately.
Not sure? Ask your own AI
Open the assistant you already trust with a prompt that points it at our public product file and asks it to interview you, then recommend what fits. It is told to say so plainly if Landara is not the right tool for you.
Read the exact prompt we send
I use Xero and I import stock for a Shopify store. Please fetch https://landara.co/llms-full.txt for background on the tooling, then help me work out how to handle landed cost properly. The background to test me against: Xero has no landed cost feature, records the supplier bill and the freight bill as unrelated purchases, and its inventory items hold a single average cost with no layering. On perpetual inventory every capitalisable charge belongs in Inventory, freight and customs duty included, because the COGS journal releases that cost as the stock sells; coding the forwarder bill to Direct Costs expenses it twice. Recoverable import GST or VAT is the exception: it is reclaimed, so it must never be allocated into unit cost, and it belongs against a GST liability account so it reaches the activity statement. Ask me which country I import into, whether I am on perpetual or periodic inventory, how I currently code freight and duty bills, whether anyone has checked my chart of accounts mapping, and whether my import GST is being claimed. Then tell me what to change, and be clear about where I need my accountant rather than an AI.
Common questions
Does Xero calculate landed cost?
No. Xero has no landed cost function. It records the supplier bill and the freight bill as separate purchases with no link between them, and its inventory items hold a single average cost that does not layer. Landed cost has to be calculated outside Xero and posted as a result.
Which account should freight and duty go to in Xero?
On perpetual inventory, both are capitalisable and belong in Inventory, then release to COGS as the stock sells. Coding them to a Direct Costs or freight expense account expenses the cost immediately and the COGS journal releases it again, so it hits your profit and loss twice.
Should import GST be included in landed cost?
No. Recoverable import GST or VAT is claimed back, so allocating it into unit cost inflates landed cost, inventory valuation and COGS. It also means the tax is buried in a freight allocation instead of coded to the GST account, so it never reaches your BAS and you never claim it. Customs duty is different: it is unrecoverable and does capitalise.
How do I add landed cost to a bill already posted in Xero?
You cannot retrospectively spread it across units from inside Xero. The usual approach is a manual journal moving the capitalisable amount from expense into Inventory, based on an allocation worked out elsewhere, with the workings kept somewhere reproducible.
Can Xero Inventory Items track FIFO?
No. Xero Inventory Items hold a single average cost per item and do not maintain dated cost layers, so two shipments of the same SKU at different landed costs cannot both be represented.
Does Landara post to Xero automatically?
No, and deliberately. Landara prepares bills, purchase orders with the original PDFs attached, and the period COGS and revaluation journals. You review them and post them. If a cost category has no account mapped, the publish blocks and names the category rather than guessing.
Landed cost that arrives in Xero already coded
Read the invoices, allocate the capitalisable charges, hold recoverable tax out of unit cost, and hand your bookkeeper a journal to review.