Skip to content
Auboros

The AI Freight Audit Agent: How It Checks Carrier Invoices and Dispatch Exceptions in Odoo and MYOB Acumatica

What an AI freight audit agent finds on carrier invoices in Odoo and MYOB Acumatica, the surcharges and re-weighs it flags, and who approves each dispute.

By Bill Alvarez, Practice Manager, Auboros ·

A carrier invoice for a month of deliveries is one of the least-read documents in an Australian business. It arrives as a PDF or CSV with a few hundred consignment lines, the total looks roughly like what the ops manager expected, and it gets coded to freight expense in one lump. Nobody matches the lines to the deliveries they belong to, because the deliveries live in the ERP and the invoice lives in an inbox, and matching 600 of one to 600 of the other is a day’s work nobody has.

That gap is the job an AI freight audit agent is built for. This post covers what the agent reads, what it drafts, what Odoo 19 and MYOB Acumatica already do about freight cost on their own, and the two places (GST coding and heavy vehicle law) where an Australian business needs to think before letting an agent anywhere near its dispatch desk.

What an AI freight audit agent does

An AI freight audit agent is software that reads each carrier invoice line, matches it to the delivery it belongs to in your ERP, compares what the carrier billed with what the carrier quoted at dispatch, and drafts a list of exceptions for a person to act on. It also watches dispatch itself: pickups that didn’t happen, consignments past their expected delivery date, failed delivery attempts. It reads, compares and drafts. It does not pay, dispute, re-bill or contact anyone until a person approves.

The pattern is the one we described in our reconciliation agent post, applied to a supplier bill that happens to have hundreds of lines and a rate card that changes monthly. The reading is cheap. The matching is the expensive part, and the ERP already holds one side of it. This post is about outbound freight; inbound freight on imports is a different job, handled through landed costs.

Why carrier invoices leak money in Australia

Freight is a cost that drifts. Four things make the drift hard to see without help.

  • The fuel surcharge moves every month. Australia Post publishes its fuel surcharge for contract parcel customers 30 days ahead. In 2026 alone the rate went from 4.8% in early April to 12% from 23 April, 19.5% in June, 12.3% in July, 9.9% in August and 6.9% in September, with 11.5% announced for October. A rate card typed into the ERP in March was wrong within six weeks.
  • Weight breaks are billed cumulatively. StarTrack bills on a cumulative weight method: the per-kilogram rate steps down through each weight break, so a 540 kg consignment is charged 500 kg at the first rate and 40 kg at the second, not all 540 kg at the cheaper rate. A spreadsheet that applies the lowest rate to the whole consignment underestimates every heavy shipment.
  • Carriers re-weigh and re-cube. Australian carriers typically charge on the greater of actual and cubic weight, and they measure at the depot, not at your dock. Odoo’s own documentation notes that the package weight it sends to Starshipit is the product weights plus the empty package weight, and that it is not automatically verified. If your product master says 2 kg and the boxed item weighs 3.4 kg, every quote is low and every invoice looks like a surcharge.
  • The bill arrives in a lump. MYOB’s freight documentation says it plainly: the freight cost on a sales order isn’t recorded to an expense account until the carrier’s bill is processed, and that bill may cover every order shipped in a week, a fortnight or a month. Odoo behaves the same way in practice: the carrier price sits on each delivery, and the vendor bill turns up later as one document in accounts payable.

Then there’s GST. Domestic freight is a taxable supply at 10%. The international leg of an import or export is GST-free under the ATO’s international freight transport rules, and the boundary between the two is the “place of consignment”, which the ATO lets forwarders and brokers treat as the port or airport of discharge. A forwarder’s invoice can therefore carry GST-free ocean freight and taxable port-to-door cartage on the same page. Code the whole thing one way and the Business Activity Statement (BAS) is wrong in one direction or the other.

The volume keeps rising. Australia Post’s eCommerce Report 2026 puts online spend at a record $82.6 billion in 2025, up 14%, across 9.8 million households. More parcels, more invoice lines, same number of people to read them.

A worked example: one month of parcels, one carrier invoice

Take a Queensland wholesaler shipping around 600 consignments a month through Starshipit, mostly Australia Post eParcel with StarTrack for pallets. The carrier invoice arrives as a CSV on the third of the month.

The agent’s job, in order:

  1. Read the invoice. Consignment number, service, billed weight, cubic weight, base charge, fuel surcharge, other surcharges and GST, line by line.
  2. Match each line to a delivery. In Odoo that’s the tracking reference on the delivery order; in MYOB Acumatica it’s the tracking number on the shipment. Lines with no match go to an unmatched list rather than being assumed.
  3. Compare billed with quoted. Odoo 19’s Starshipit connector already stores the exact shipping price per delivery (more on that below), so the agent has a quoted figure to test parcels against. For pallets on a rate card, it recalculates using the cumulative weight method and the fuel surcharge that applied on the dispatch date, not the current one.
  4. Draft three outputs. A vendor bill with each line coded to the right freight expense account and GST treatment. A dispute list with the reason for each: a re-weigh of 2.1 kg against a declared 1.2 kg, a residential surcharge on a business address, a consignment billed twice, a label created and cancelled in Odoo but never cancelled with the courier. And a re-bill list for customers whose orders carry freight at real cost.
  5. Wait. The accounts payable officer approves the bill. The ops manager approves the disputes, and decides which ones aren’t worth the carrier’s time. Sales approves any customer re-bill. Nothing posts, sends or adjusts until each person clicks.

In practice the first month’s dispute list is mostly your own data quality: wrong product weights, packaging missing from the package types, addresses flagged residential because nobody filled in the company field. That’s useful. Fix the master data and the second month’s list is shorter and more real.

The freight bill is the one supplier invoice most businesses never check line by line, because the lines only make sense next to the deliveries, and those live in a different screen. The agent’s whole job is putting the two side by side. It doesn’t decide anything. Your AP officer still approves the bill and your ops manager still approves every dispute.

Bill Alvarez, Practice Manager, Auboros

What Odoo and MYOB Acumatica do about freight cost today

No freight audit agent ships in either platform. The numbers one needs do, and here is where they sit. Labels below are shipped, preview or roadmap as at September 2026.

Odoo 19 (shipped)

Odoo’s delivery methods pull a live quote from the carrier connector when you click Get Rate on a quotation, and the shipping cost invoicing docs describe two ways to charge it: a fixed cost agreed up front, or the real cost after delivery, which today means editing the unit price on the draft invoice by hand. The Starshipit connector, an Enterprise module we checked in the v19 source for this post, gets rates from Australasian couriers such as Australia Post, NZ Post and DHL, prints labels when the delivery is validated, and supports returns through Australia Post eParcel, StarTrack, TNT, Couriers Please, Aramex and DHL Express. It also runs a scheduled job after dispatch that fetches the exact shipping price from Starshipit, writes it to the delivery and, if the method is set to invoice real cost, updates the sales order and leaves the salesperson a to-do saying the order can now be invoiced. If the order was already invoiced, it posts a note asking for a manual adjustment instead.

Two things the docs are candid about, and which the agent has to cover: package weight isn’t verified before it’s sent to the courier, and cancelling a delivery in Odoo archives it in Starshipit but does not cancel it with the courier, so you can be billed for a label you never used.

On the AI side, the same v19 source tree has 14 AI modules and none of them touch delivery, stock or freight. Odoo’s shipped AI agents and AI fields are general tools; you could build a freight-checking step with them, and you’d be the one building it. Whatever Odoo 20 adds at Odoo Experience on 24 to 26 September is roadmap until it ships.

MYOB Acumatica (shipped, with one preview)

MYOB Acumatica separates freight cost (what the carrier charges you) from freight price (what you charge the customer), and its freight calculation documentation sets out how each is built. Ship via codes hold a carrier’s rate card by zone and weight break, shipping terms hold the customer-facing formula (a percentage of freight cost, a percentage of order value, handling fees, free-freight thresholds), and the Shop for Rates dialog on a sales order compares live quotes from integrated carriers. When the real cost comes in higher, a premium freight price on the invoice’s Freight tab is the sanctioned way to correct it. The same page notes that local carrier rate cards “can become obsolete”, which is a polite description of the fuel surcharge table above.

Australian carrier connections come through the marketplace rather than the core product. Starshipit’s MYOB Acumatica integration imports orders, writes tracking back and can confirm shipments, and MachShip and 2Ship are listed on MYOB’s app marketplace. On AI, MYOB Acumatica’s AI Studio remains a technology preview with general availability planned for 26 R1. Preview is the accurate label, and in any case it does not read carrier invoices.

Dispatch exceptions, and the line an agent must not cross

The second half of the job is dispatch. The same agent reads tracking events from the carrier and the expected dates on each delivery, and every morning drafts a short list: consignments not scanned by the carrier 24 hours after the label was printed, deliveries past their expected date, failed attempts awaiting redelivery. For each it drafts a customer update from a template and a request to the carrier’s account manager. A person sends both. It’s the outbound twin of the supplier PO chasing agent.

There’s an Australian rule that shapes how the request is worded. Under the Heavy Vehicle National Law, a business that consigns goods for road transport is a party in the Chain of Responsibility, and the National Heavy Vehicle Regulator’s primary duty guidance says that duty includes a prohibition on directly or indirectly causing or encouraging a driver to speed or breach the law, with “communication systems, negotiation, and contracts with other parties” inside its scope. Executives carry a separate due diligence duty, and the regulator notes it is most likely to investigate the business rather than an individual. The maximum Category 1 penalty for a corporation is above $4.1 million.

So the agent never sets a delivery deadline, never promises a customer a time the carrier hasn’t committed to, and never sends the carrier a message that amounts to “get it there by 3pm regardless”. It reports lateness and drafts a request for an update. The people who set delivery windows and negotiate carrier contracts keep doing that, because those are the decisions the law attaches to them. If you want an agent on your dispatch desk, that line goes into its instructions before anything else does.

Where it goes wrong

  • Consignment numbers that don’t match. Carriers reformat references, drop leading zeros or bill child consignments separately. Expect 5% to 10% unmatched in month one. The agent lists them; it must not guess.
  • Partial shipments. MYOB Acumatica can allocate freight to the first shipment or proportionally across all of them; Odoo puts the delivery line on the sales order. A carrier bills per consignment. The agent has to know which allocation rule you use or its re-bill drafts will be wrong.
  • GST coding on forwarder invoices. The GST-free international leg and the taxable domestic leg need separate tax codes. If the agent can’t tell which is which from the invoice, it flags the line for a person rather than picking one.
  • Disputes you’ll lose. A re-weigh is the carrier’s scale against your product master, and the scale usually wins. Fix the weights first, then argue about what’s left.
  • Over-eager chasing. An agent left to email the carrier every time a scan is late will burn the relationship in a week and, per the section above, may be drafting messages your business shouldn’t send. Batch the requests, keep a person on send.

All of which is why it drafts and a person approves, with the agent reading your ERP under a role that can see deliveries, shipments and bills but can’t post, pay or email.

Your carrier invoice has been trying to tell you something for months

Auboros builds drafts-first AI agents over Odoo and MYOB Acumatica from Brisbane for wholesalers and distributors across Queensland and the rest of Australia, with role-scoped read access and a person approving every bill, dispute and re-bill. If you ship a few hundred consignments a month and nobody has matched the last carrier invoice to its deliveries, book a free consultation. We’ll start with one month’s invoice and your delivery data, and if the leakage turns out to be a product-weight problem rather than a carrier problem, we’ll say so and save you the build.

FAQ

Frequently asked questions

What is an AI freight audit agent?

An AI freight audit agent reads each line of a carrier invoice, matches it to the delivery or shipment in your ERP, compares the billed amount with the quoted or rate-card amount, and drafts a coded vendor bill plus a list of exceptions such as re-weighs, duplicate charges and surcharge errors. A person approves the bill, the disputes and any customer re-bills. It does not pay or contact anyone on its own.

Can Odoo or MYOB Acumatica check carrier invoices automatically?

Not out of the box as at September 2026. Odoo 19's Starshipit connector fetches the exact shipping price per delivery after dispatch, and MYOB Acumatica tracks freight cost and freight price per shipment, but neither matches the carrier's consolidated invoice back to those figures. That matching is the agent layer you add, reading both systems under a role that cannot post or pay.

Is GST charged on freight in Australia?

Domestic freight is a taxable supply, so GST at 10% applies and a registered business claims the credit. The international leg of an import or export is GST-free under the ATO's international transport rules, and a forwarder's invoice often carries both a GST-free ocean or air leg and a taxable domestic leg. Each line needs its own tax code; coding the whole invoice one way throws out your BAS.

Does an AI dispatch agent create Chain of Responsibility risk?

It can if it is allowed to set delivery deadlines or pressure carriers. A business that consigns goods by road is a Chain of Responsibility party under the Heavy Vehicle National Law, and its primary duty includes not encouraging a driver to speed or breach the law. Configure the agent to report lateness and draft update requests only, with people setting delivery windows and sending every message.

Want help with your own implementation?

We're a Brisbane-based Odoo Silver Partner and MYOB Acumatica Partner. Book a free consultation and get a straight answer.