Pest control software that syncs with Xero

Hunter syncs to Xero automatically. Send an invoice in Hunter and it lands in Xero as an authorised accounts-receivable invoice under the same invoice number, line by line, GST-exclusive, with the Hunter PDF attached. Payments move in both directions: record one in Hunter and it posts to Xero, take one in Xero and Hunter pulls it back and marks the invoice paid. Credit notes, invoice voids and card processing fees push across as well, and a Xero webhook tells Hunter when a synced invoice is edited on the ledger side so a person decides which version is right rather than a machine overwriting one of them.

Last reviewed

What syncs

DataDirectionDetail
Customers & contactsBoth waysPushed on first invoice; matched on email, then on exact name, before Hunter creates anything. Existing Xero contacts can be imported into Hunter.
InvoicesBoth waysPushed the moment you send one, line by line, as an authorised ACCREC invoice. Existing Xero invoices can be imported with a dry-run preview first.
PaymentsBoth waysRecorded in Hunter, posted to Xero. Recorded in Xero, pulled back nightly and on webhook, and the Hunter invoice is marked paid.
Credit notesHunter → XeroIssued as an ACCRECCREDIT credit note, then allocated against the original invoice for the amount offset in Hunter.
Invoice voidsHunter → XeroVoiding in Hunter voids the Xero invoice. A void done in Xero is flagged to you as drift rather than applied silently.
Invoice PDFHunter → XeroThe rendered Hunter invoice is attached to the Xero invoice on first push, so the document your customer received is on the ledger record.
Card processing feesHunter → Xero (opt-in)Only when you map a fees account. Books the merchant fee on a Stripe payment as a spend transaction so your bank reconciliation balances.
Chart of accounts, GST rates, tracking categoriesXero → Hunter (read only)Read to build your account mapping and to answer questions in the Hunter agent. Hunter never writes to your chart of accounts.

How the connection is authorised

Connecting Xero is a single OAuth handshake, done by someone with the office role or above. Hunter sends you to Xero’s own consent screen, you approve, and Xero sends you back — Hunter never sees or stores your Xero password.

The scopes requested are the narrowest set that does the job: contacts, invoices, payments, and read-only access to settings, which is where the chart of accounts, GST rates and tracking categories live. Hunter does not ask for bank feeds, payroll or reports, so it cannot read them. That is worth checking on any integration you are evaluating, because the consent screen is the only place the real answer is written down.

Hunter holds one active ledger connection per workspace and posts to the Xero organisation your consent covers, so if you run several organisations, authorise the one Hunter should write to. Reconnecting to a different organisation is safe but deliberately clears your account mapping and every stored ledger id, because those ids belong to the organisation you just left and quietly reusing them would post your invoices into someone else’s books.

Access tokens refresh in the background — Hunter renews an expiring token before it uses it, and retries once if Xero rejects one mid-call. If a refresh genuinely fails, because access was removed in Xero or the consent lapsed, syncing does not quietly stop. The connection flips to an error state, the integrations page shows a red "Reconnect Xero" prompt, and a daily ledger-health routine tells the owner. Reconnecting resumes where it left off: anything that failed while the connection was down is still queued and is retried. Disconnecting clears Hunter’s tokens immediately, though it does not revoke Hunter inside Xero — remove it from Xero’s connected apps screen too if that’s what you want.

What a Hunter invoice looks like in Xero

It looks like an invoice you typed in Xero, because Hunter pushes it line by line rather than as a single summary line. Each line carries its own description, quantity, unit price and account code, so a job with three chemical treatments and an hour of labour reports as three treatments and an hour of labour — not as one number called "Pest control". Your profit and loss keeps the shape your pricebook gave it.

GST is handled the way an Australian ledger expects. Unit prices are GST-exclusive and every line carries its own tax type, so a taxed line and a GST-free line on the same invoice post correctly instead of averaging into a wrong total. You map which Xero tax code means taxed and which means GST-free once, and Hunter suggests both from your own settings when you first connect.

The Xero invoice number is Hunter’s invoice number, which is the detail that makes the rest of your month work: when a customer emails about INV-1043, it is INV-1043 in both systems, and your bank reconciliation matches on the reference your customer actually quoted. Issue date and due date come across as set in Hunter, and the invoice arrives authorised rather than as a draft you have to approve.

Hunter also attaches the rendered invoice PDF to the Xero invoice — the same document your customer received, including your logo, your payment instructions and the pay link. It is attached on the first push only, so editing and re-pushing an invoice doesn’t leave you with four near-identical PDFs on one record. If you use tracking categories, Hunter applies your configured category and option to every invoice line, so revenue splits by branch, technician or division without anybody re-keying it in Xero.

Payments, credit notes and voids

Payments are the only genuinely two-way flow, and they need to be. Record a payment in Hunter — a card payment through Stripe, or a bank transfer you’ve marked off — and it posts to Xero against the right invoice, into the bank or clearing account you mapped. Take the payment in Xero instead, or let your bank feed reconcile it there, and Hunter pulls it back on the nightly run and on the Xero webhook, marks its own invoice paid, and stops chasing the customer. That last part matters more than it sounds: the most expensive integration failure in this category is a follow-up routine chasing an invoice that was paid last Tuesday.

Credit notes push as ACCRECCREDIT credit notes and Hunter then allocates them against the original invoice for exactly the amount it offset locally, so the customer’s Xero balance matches their Hunter balance rather than showing a credit floating unapplied. Voiding an invoice in Hunter voids it in Xero.

Card processing fees are opt-in and off by default. Map a fees expense account and Hunter books the merchant fee on each Stripe payment as a spend transaction, so the amount that hits your bank account and the amount on the invoice reconcile without a manual adjustment every month. Leave it blank and nothing is booked — the fee is still recorded against the payment in Hunter either way, so you can turn it on later without losing history.

Account mapping, suggested from your own chart of accounts

Mapping is the step that stalls most accounting integrations, so Hunter does a first pass for you. On connect, it reads your chart of accounts, your GST rates and your tracking categories, and fills in a proposed mapping: a sales account, a bank or clearing account for payments, the tax codes for taxed and GST-free lines, and a merchant-fee account if one of your expense accounts is obviously named for it. You review it and change what’s wrong.

The suggestion only ever fills blanks. Re-running it will not overwrite a choice you made — it fills what you haven’t answered yet, which means you can connect, sync, and refine the mapping over your first week rather than being blocked at setup by a decision you wanted to ask your bookkeeper about.

Beyond the default sales account, you can split revenue by line type: materials, labour and fees can each post to their own income account, and anything unmapped falls back to the default. Combined with tracking categories, that is usually enough to get pest control revenue reporting the way an accountant wants it without maintaining a parallel structure in two systems.

  • Sales account — where invoice revenue posts by default
  • Revenue split — separate income accounts for materials, labour and fees
  • Payments account — the bank or clearing account payments post into
  • GST codes — which Xero tax code means taxed, and which means GST-free
  • Fees account — optional; booking merchant fees turns on only when set
  • Tracking — a Xero tracking category and option applied to every invoice line

Duplicates, drift and the sync log

Before creating a contact, Hunter looks for an existing one — first by email address, then by exact name — and links to it rather than adding a second copy of a customer you have invoiced for six years. After that first link, Hunter remembers the Xero id for every record it has synced, so it updates rather than re-creates.

Hunter also fingerprints what it sent. If nothing about an invoice has changed since the last successful push, it doesn’t push again, which keeps you comfortably inside Xero’s rate limits and keeps the sync log readable. When a rate limit is hit anyway, Hunter waits the interval Xero asks for and retries, and if it still can’t get through, the record is queued rather than dropped.

The harder problem is drift — someone editing a synced invoice in Xero. Hunter subscribes to Xero’s webhooks, and when a synced invoice changes it compares the two: a different total, a void that only happened on one side, or a payment Hunter hasn’t seen. A payment it pulls in automatically. A total change or a one-sided void it flags to you and stops, deliberately, because there is no safe default. Overwriting Xero destroys the correction your bookkeeper just made; overwriting Hunter destroys the record the technician relied on. So drift is excluded from automatic repair and shows up as something for a person to resolve.

Everything else is visible in one place. The integrations page shows an attention card when records didn’t reach Xero, grouped by cause — a missing account mapping, an expired connection, a rate limit — each with the specific fix and examples of the affected invoices, plus a full sync log with a retry button on any row. A self-healing routine works through the fixable ones on its own each morning and only messages you about what it genuinely can’t resolve. A monthly routine runs a close check and tells you if anything issued this month never made it to the ledger.

What Hunter does not sync to Xero

Some things are out of scope by design, and it’s cheaper to know now than after you migrate.

Hunter does not sync your pricebook to Xero items — invoice lines post as descriptions against an account code, not against an item code, so inventory and stock levels stay in Hunter. It does not sync bills, supplier invoices or purchase orders: Hunter has purchasing and stock, but the accounts-payable side of your ledger is untouched. There is no payroll integration; timesheets export as CSV for whatever you run payroll in. There is no bank feed — Hunter reads no bank data and moves no money in Xero beyond the invoices, payments, credit notes and optional fee transactions listed above.

Credit notes are push-only: one raised directly in Xero doesn’t come back to Hunter. And a ledger-side edit to a synced invoice is never applied to Hunter automatically — it is surfaced as drift for a person to resolve, which is the same restraint described above, stated here as a limitation because that is also what it is.

Common questions

Does Hunter sync with Xero automatically or do I have to press a button?
Automatically. Sending an invoice, recording a payment, issuing a credit note or voiding an invoice each push to Xero straight away, a nightly batch catches anything that failed, and payments recorded in Xero are pulled back on the nightly run and whenever Xero’s webhook fires. There is a manual "Sync now" button, but it’s an override rather than the normal way to use it.
Will Hunter create duplicate contacts in my Xero organisation?
It looks for an existing contact by email address and then by exact name before creating one, and once a customer is linked Hunter remembers the Xero id and updates that contact rather than making another. Duplicates are still possible if the same customer exists in Xero under a different name and a different email, which is worth a tidy-up before you connect.
Do invoices sync to Xero line by line, and does GST come across correctly?
Yes to both. Every invoice line pushes as its own Xero line with its own description, quantity, unit price and account code, and each line carries its own tax type — so an invoice mixing taxed and GST-free lines posts correctly. Unit prices are GST-exclusive throughout, which is what an Australian ledger expects.
What happens if someone edits an invoice in Xero after Hunter has synced it?
Hunter notices via Xero’s webhook and tells you rather than silently overwriting either version. If the change is a payment, it pulls that in and marks the invoice paid. If the total changed or the invoice was voided in Xero only, it is flagged as ledger drift on your integrations page and excluded from automatic retry until a person decides which side is right.
Can I import my existing Xero customers and invoices into Hunter?
Yes. Hunter can import contacts and invoices from Xero, and it shows you a dry-run preview — how many records it would create, how many it would link to customers you already have, and how many it would skip — before anything is committed. Imported customers are matched to existing Hunter customers on email or phone so the import doesn’t duplicate the ones you’ve already entered, and imported invoices are not emailed to anybody.

Other integrations

Get started

Run your whole pest business from one place

Book a walkthrough or start a free trial today. Live in under a week, with no lock-in — and your data is always yours.

14-day free trial · No lock-in contracts · Built for NSW, VIC, QLD, WA, SA, TAS, ACT & NT