How to Contra Invoices Against Bills in Xero

· by HedgeFlows · Payments & Operations

A contra is what you do when a business is both your supplier and your customer. Instead of paying their bills and waiting for them to pay your invoices, you set one against the other and settle only the difference.

It’s routine in freight forwarding, where overseas agents bill you for one leg of a shipment and you bill them for another, and common with distributors, agencies and group companies. The trouble is Xero: it has no contra function, so the bookkeeping is done by hand.

This guide explains what a contra is, why Xero makes it awkward, the three ways finance teams do it today, and the controls that stop it going wrong.

What is a contra?

A contra (or contra entry, or set-off) offsets what you owe a counterparty against what they owe you, so only the net amount changes hands.

Say an agent has sent you three bills totalling €8,995.50, and you have invoiced them €5,855.50. Rather than paying €8,995.50 and waiting for €5,855.50 to come back, you agree a contra: both sides mark everything as settled, and you pay the agent €3,140.00.

Amount
We owe them (3 bills)€8,995.50
They owe us (2 invoices)€5,855.50
Net to pay€3,140.00

One payment instead of two, one set of bank fees, and both ledgers clear on the same day.

Not to be confused with: in a cash book, and in software like Tally, a “contra entry” means a transfer between your own cash and bank accounts. That is a different thing. This guide is about offsetting receivables against payables.

Does Xero have a contra function?

No. Xero can’t offset a sales invoice against a bill for the same contact, and the request has been open on Xero Product Ideas since 2017.

You also can’t do what Sage or NetSuite users do and post a journal between the sales and purchase ledgers. In Xero, Accounts Receivable and Accounts Payable are locked system accounts, and manual journals can’t post to them (Xero Product Ideas: allow journals to AR/AP).

So every Xero contra comes down to the same thing: each bill has to be paid and each invoice received against something, so Xero marks them as settled. The three methods below differ in what that something is.

Method 1: Match in bank reconciliation when the net cash lands

Best for: a few documents, one currency, and a net payment that has already gone through the bank.

When you pay (or receive) the net, the bank feed shows one statement line. You can reconcile that single line against all the documents in the contra:

  1. In Reconcile, open the statement line for the net payment and go to Find & Match.
  2. Search by the contact’s name.
  3. Tick Show Spent Items and Show Received Items (or the equivalent filters in your version), so both the bills and the sales invoices are listed.
  4. Select every bill and invoice in the contra. Xero nets them off; the total should equal the statement line.
  5. Click Reconcile.

This is quick when it works. It breaks down with dozens of documents, with credit notes, when one line is disputed, or when the documents are in two currencies. It also only happens after the cash moves, so there’s no record of what was agreed beforehand.

Method 2: Settle everything through a contra bank account

Best for: regular contras, larger volumes, and contras you want to close before any cash moves.

This is how most finance teams handle contras in Xero, and it’s the method behind the contra apps.

Set up the contra account (once per currency)

  1. Add a new bank account in Xero for contras only, in the currency of the contra, for example “Contra – EUR”. It doesn’t need a real bank behind it; use a placeholder account number.
  2. Use it for nothing else. That way its balance always equals the contra nets still to be settled.

A bank-type account in the document currency matters for two reasons. Xero only lets you settle a foreign currency invoice from a bank account in that currency or your base currency, so a EUR account avoids an FX gain or loss line on every EUR document. And bank accounts support transfers, which is how you clear the net.

Run the contra

  1. Agree the figures first. Send the counterparty a statement listing both sides and the net, and get their confirmation in writing.
  2. Pay each bill from the contra account. Open the bill, record a payment for the amount due, paid from “Contra – EUR”, dated the contra date. For base-currency bills you can do this in one go with a batch payment marked as paid; foreign currency bills have to be done one at a time.
  3. Receive each sales invoice into the contra account. Same again for the invoices, as receipts into “Contra – EUR”.
  4. Apply credit notes. Allocate supplier and customer credit notes to their bills and invoices, or refund the remaining credit into the contra account.
  5. Check the balance. The contra account now holds the net: a negative balance if you owe the counterparty, positive if they owe you. It should match the agreed statement to the cent.
  6. Settle the net. When you pay (or receive) the balance, record a transfer between your real bank account and the contra account for the net amount, and reconcile the bank statement line against that transfer. The contra account goes back to zero.

The catch is volume. Every document is a separate payment or receipt, so a contra with 40 bills and 40 invoices is 80 entries by hand, plus the transfer.

Method 3: Use an app that prepares and posts the contra

Best for: contras with the same counterparties every month.

Method 2 works, but most of it is mechanical: selecting the documents, building the statement, posting a payment or receipt per document, and recording the transfer. A contra app does those steps for you against the same contra account, so your Xero books end up exactly as they would by hand.

When you compare tools, check they:

  • Post to your existing contra or clearing account, rather than adding another account to reconcile.
  • Produce a statement both sides can agree, and store the confirmation with the contra.
  • Lock documents in an open contra, so nothing is counted twice.
  • Let you exclude disputed lines without holding up the rest.
  • Keep an audit trail of who changed what and when.

HedgeFlows Agent Contras does this for Xero: pick the counterparty, tick the documents, send the statement, then close every document in Xero and pay or collect the net in one flow. See how Agent Contras works. It’s in early access for same-currency contras.

Contras in two currencies

Cross-currency contras are where Xero gets genuinely painful. If you owe an agent in USD and they owe you in EUR, there is no single account both sides can settle against, so you need:

  1. A contra account in each currency.
  2. Each document settled in its own currency’s contra account.
  3. A transfer between the two contra accounts at an agreed exchange rate, which leaves the net in one currency to settle.

The hard part is usually not the bookkeeping but the rate. Agree it, the date it applies from, and who approved it before posting anything, and keep that with the statement. Some businesses use Xero’s daily rate, some use the rate the original job was booked at, and some let the party receiving the money choose the currency. Whichever you use, write it down.

Controls that keep contras clean

Contras go wrong in predictable ways. Whatever method you use:

  • One agreed statement. List both sides, credit notes, any excluded lines and the net. It’s your evidence for the auditor and, for large net payments, for your bank if it asks what the payment covers.
  • Written confirmation. A reply to the statement is enough for most counterparties. Keep it with the contra.
  • Disputed lines stay out. Settle what’s agreed and leave the disputed document open for a later contra.
  • Nothing counted twice. Track which documents are in which contra, especially if more than one person works on the same account.
  • Settle in full or not at all. Keep each document either fully in the contra or out of it. Partly settled documents are where allocation errors come from.
  • Same date for everything. Date every payment, receipt and transfer in the contra the same day, so the contra account nets to zero cleanly.

How Sage and QuickBooks handle contras

If you’ve moved to Xero from Sage, the missing contra function is a noticeable gap:

  • Sage 50 and Sage 200 have a built-in contra entry that matches a customer account against a supplier account and clears the selected transactions (Sage 200 guide).
  • QuickBooks Online has no dedicated contra screen either; the usual method is a journal between Accounts Receivable and Accounts Payable, which is then applied to the invoices and bills (QuickBooks UK guide).
  • Xero blocks journals to Accounts Receivable and Accounts Payable, which is why the contra bank account in Method 2 is the standard workaround.

Frequently asked questions

Does Xero have a contra function?

No. Xero has no built-in way to offset sales invoices against bills for the same contact. The request has been open on Xero Product Ideas since 2017. Finance teams use one of three workarounds: matching documents in bank reconciliation once the net cash lands, settling everything through a contra bank account, or using an app that prepares and posts the contra for them.

Can I post a contra as a manual journal in Xero?

Not against the sales and purchase ledgers. Accounts Receivable and Accounts Payable are locked system accounts in Xero, so manual journals can't post to them. That is why most Xero users settle each bill and invoice against a contra bank account instead.

What account should I use for contras in Xero?

A bank-type account in the currency of the contra, used only for contras, for example 'Contra – EUR'. Bills are paid from it, invoices are received into it, and its balance is the net still to settle. A bank-type account in the document currency avoids an FX gain or loss on every document and lets you clear the net with a bank transfer.

Does a contra change the VAT on the original invoices?

No. A contra settles the invoices and bills; the VAT on each one stays as it was. If you account for VAT on a cash basis, the contra date may count as the payment date for those documents, so check the treatment with your accountant.

Do I need a formal contra agreement with the other party?

Most businesses agree a contra by exchanging statements and confirming the net by email. Some counterparties ask for a formal agreement. Either way, keep the agreed statement and the confirmation with the contra, because it is what your auditor and your bank will ask for.

How do I handle a disputed invoice in a contra?

Leave it out. Settle the documents both sides agree on, show the disputed one on the statement as excluded, and keep it open in Xero so it can go into a later contra once it is resolved.

Need help managing your international finances? Our advisory team can help you build a treasury strategy that fits your business.

Book a Treasury Review