To audit SaaS spend from Xero, run the Account Transactions report scoped to your software-related expense accounts (commonly coded 400-range accounts like "IT Software and Consumables" or custom "Subscriptions" codes) over the last 15 months, export it to CSV, then group the rows by Contact to identify each vendor's billing cadence and estimate renewal dates. Xero holds the most complete record of what you have actually paid — but like any ledger, it knows nothing about auto-renewal clauses or notice deadlines, so the audit ends by moving the cleaned vendor list into a renewal tracker that alerts you before decisions are due.

This is the Xero counterpart to our QuickBooks renewal-tracking walkthrough; the logic is identical, the report names and columns are not. There is no automatic sync between Xero and Satellite — this is a deliberate manual CSV workflow that keeps your accounting record and your operational renewal calendar cleanly separated.

Step 1: Run the Account Transactions Report

In Xero:

  1. Go to Accounting → Reports → Account Transactions.
  2. Under Accounts, select your software-related expense accounts. In a default Xero chart of accounts this is often a single account like IT Software and Consumables; many firms add custom codes such as Subscriptions, Software, or Dues & Subscriptions. If you are unsure which accounts catch SaaS, also include General Expenses — miscoded subscriptions land there constantly.
  3. Set the Date Range to the last 15 months (you need to see at least one full annual cycle plus a margin).
  4. Click Update, then use the Columns selector to include: Date, Contact, Description, Reference, Account Code, Debit.
  5. Export → Excel or Export → CSV.

Fifteen months matters: a 12-month window can clip an annual charge that landed thirteen months ago, making an active annual vendor invisible.

Don't Forget the Other Entry Points

Xero data quality depends on how transactions arrive:

  • Bank feed transactions coded via bank rules — check that your rules aren't lumping multiple SaaS vendors under one generic contact.
  • Bills entered from supplier invoices — usually the cleanest rows, with real contact names and references.
  • Expense claims — SaaS bought on personal cards and reimbursed shows up here, not in the main expense accounts. Run a quick pass over expense claims for recognizable software vendors.

Step 2: Clean the Export

Open the CSV. You are working with five useful columns: Date, Contact, Description, Reference, Account Code, Debit. The cleaning pass:

  1. Sort by Contact, then Date. Vendors appearing ~monthly are subscriptions on monthly billing; a single large Debit once in 15 months is an annual contract — your renewal-risk list.
  2. Unmask payment processors. Rows where Contact is "Stripe," "Paddle," or "PayPal" are often a SaaS vendor hiding behind its biller — the Description or Reference field usually names the real product.
  3. Merge duplicate contacts. Bank-rule-created contacts ("Google *GSUITE") and bill-created contacts ("Google Ireland Ltd") for the same vendor must be consolidated, in the audit and ideally in Xero itself.
  4. Estimate renewal dates. For each annual vendor: most recent annual Debit date + 365 days.
  5. Flag for contract lookup. Anything over $5,000/year gets two extra columns the ledger cannot fill: auto-renewal (yes/no) and notice period (days) — sourced from the order form in someone's inbox.

Worked Example: A 10-Row Xero Export, Audited

A condensed Account Transactions export from a 35-person agency (most recent charge per contact, columns exactly as Xero exports them):

Date Contact Description Reference Account Code Debit
2026-05-02 Xero* (this row excluded — accounting fees) 412 $99.00
2026-05-01 Figma Organization plan — monthly INV-2204 429 $540.00
2026-02-14 Monday.com Annual plan, 30 seats MON-99812 429 $10,800.00
2026-05-03 Stripe NOTION.SO 35 USERS 429 $560.00
2026-04-28 Adobe Systems Creative Cloud Teams — annual ADB-3321 429 $5,178.00
2026-05-05 Google *GSUITE Workspace Business Std 429 $504.00
2026-05-06 Google Ireland Ltd Workspace — add 3 users BILL-0455 429 $43.20
2025-12-01 Hubdoc (acquired feature — verify if still billed) 412 $0.00
2026-01-22 Webflow Annual site + workspace plan WF-77120 429 $3,228.00
2026-03-09 Deputy Annual scheduling, 35 staff DEP-1108 429 $1,890.00

The audit pass on these rows:

  1. Cadence: Figma, Notion-via-Stripe, and the two Google rows are monthly; Monday.com, Adobe, Webflow, and Deputy are annual — four contracts on the renewal-risk list totaling $21,096/year.
  2. Unmask: the Stripe row's Description names Notion — recode the contact.
  3. Merge: "Google *GSUITE" (bank rule) and "Google Ireland Ltd" (bill) are one vendor at ~$6,566/year combined — material once merged, invisible while split.
  4. Renewal estimates: Monday.com → 2027-02-14; Adobe → 2027-04-28; Webflow → 2027-01-22; Deputy → 2027-03-09.
  5. Contract lookups: Monday.com ($10,800) and Adobe ($5,178) clear the $5,000 bar. Monday.com's order form reveals a 30-day notice clause → real decision deadline 2027-01-15, four weeks before the date the ledger implied.

Ten raw rows became four tracked annual contracts, one unmasked vendor, one merged contact, and two contract lookups — about 25 minutes against an export this size.

Step 3: Move the Audit Into a Renewal Tracker

A finished audit spreadsheet is a snapshot; it starts rotting the day you save it. The durable output is the cleaned list — Contact, estimated renewal date, annual Debit total, owner — imported into a tracker that does the remembering for you.

In Satellite, the CSV import maps those columns to contract fields, and you can then attach order forms, record notice periods, assign owners, and set 60/30-day alerts. Satellite's expense-based discovery will also flag charges in future uploads that don't match any tracked contract — which is how the next miscoded or processor-masked subscription gets caught. From there, run the 90-day renewal process on everything material.

Repeat the Xero export quarterly: re-run the saved Account Transactions report for the trailing 90 days, diff the contacts against your tracker, and reconcile new vendors, price changes, and cancellations. It is a 30-minute habit once established.

What This Audit Will Not Catch

  • SaaS on personal cards never claimed back — invisible to Xero entirely.
  • Free tiers about to convert to paid — no transaction yet, no row.
  • Contract terms — auto-renewal, escalation clauses, and notice methods live in order forms, not in the ledger. The Debit column tells you what a miss costs; only the contract tells you when the miss becomes irreversible.

FAQ

Does Satellite sync with Xero automatically?

No — this workflow is manual CSV export by design. Your Xero ledger stays the accounting record of truth; the renewal tracker is the forward-looking operational layer. A quarterly export keeps them reconciled without any API coupling.

Which Xero report is best — Account Transactions or Payable Invoice Summary?

Account Transactions is the right default because it captures bank-feed spend, not just bills. If your SaaS is mostly invoiced through Bills, a payables report can supplement, but card-paid subscriptions — usually the majority at SMBs — only appear in transaction-level reports.

What if our chart of accounts has no software-specific code?

Run the export against General Expenses and any "Subscriptions"-flavored codes, identify the SaaS vendors, and then create a dedicated software expense code going forward. The first audit is harder; every subsequent one gets cleaner.

How long does the first full audit take?

For a typical 30–60 person company: the export takes minutes, cleaning takes 45–90 minutes depending on how many processor-masked and duplicate contacts you hit, and contract lookups for material vendors add an hour or two spread over a week.


Run the export today, clean it once, and put the result somewhere that talks back. The free renewal tracker takes your Xero CSV directly — or sign up for Satellite at a flat $299/month, self-serve, no demo.