Cookie preferences

Choose what we may use. Strictly necessary cookies keep you signed in and can't be turned off; everything else is your call and changes nothing about how the site works. You can change your mind any time from the footer.

For Xero

Xero holds every sale you closed and none of the reasons.

Export sales invoices, upload your lead and call records beside them, and rank channels on the revenue you actually billed.

No API key Nothing to install in XeroNothing to install No card requiredNo card

CloseRev reads a Xero export of sales invoices — the contact's email or phone, the amount and the date — and matches it against the calls and leads recorded elsewhere. It answers which marketing produced the work you billed, for a business whose ledger is the only complete record of what it sold. Invoices with no matching lead stay in Direct / Unknown rather than being credited to whichever campaign was running.

Last checked against Xero's own documentation on September 24, 2026.

The gap

The ledger is complete and the story is missing. You can tell anyone exactly what you invoiced last quarter and nothing at all about which marketing caused it.

Xero sees

What was sold, to whom, and for how much.

no shared row
Your ad account sees

The click, the keyword, the call, and what each one cost.

The file

What the export needs in it.

Three things carry the match: who, how much, and when. Anything else is optional and only changes how the report can be sliced.

  1. Needed

    Contact email or phone

    On the Xero contact the invoice is raised against. Contacts created by an import or by a connected app are the ones most likely to be missing it.

  2. Needed

    Invoice total

    The billed amount. Gross or net both work as long as the file is consistent — mixing them understates some channels and not others.

  3. Needed

    Invoice date

    The date the invoice was raised. Where you bill in stages, this is the date of the stage rather than of the job.

  4. Optional

    Tracking category

    Whatever you already track by — branch, service line, team. It becomes a cut of the report if it is in the file.

Step by step

Getting the file out of Xero.

Written for somebody with Xero open in the next tab. Report names vary by edition, so each step says what to look for.

  1. Export sales invoices with the contact

    One row per invoice, carrying a contact detail, an amount and a date. Xero's invoice reporting exports to CSV and Excel; the column that matters is the contact's email or phone rather than the contact's name.

  2. Decide gross or net, once

    Whichever you pick, keep it for the whole file. A file that mixes tax-inclusive and tax-exclusive rows makes one channel look better than another for a reason that has nothing to do with marketing.

  3. Export your leads or calls

    Call tracking, a form handler, an ad platform's lead download, or a spreadsheet. It needs the same contact detail and where the lead came from.

  4. Reach further back on the invoice side

    The lead happens first. Start the invoice file earlier than the lead file or you will miss the revenue those leads produced.

  5. Upload both

    The match runs on the email and the phone, normalised on both sides, and reports what it could not place instead of spreading it.

What comes back

The page Xero cannot show you.

Revenue by channel, the count of sales behind each figure, and an honest bucket for the ones nobody could trace. Sample figures, from the worked example on the Accounting Firms page — not from a Xero account.

Traced to a channel$392,00056% of $700,000
Sales matched155 of 276high confidence only
Average sale$2,600per paid sale
ChannelShareSalesRevenue
Google Ads71$182,000
Email marketing26$63,000
Referral partners58$147,000
Direct / Unknown121$308,000

Unmatched sales stay in Direct / Unknown. They are never spread across the paid channels to make the total look better.

The argument

What changes when the invoice and the ad share a row.

A complete ledger with no marketing in it

Xero is unusually good at being the full record. Bank feeds mean almost nothing is missed, reconciliation means the numbers are checked, and for a small business the sales ledger is very often the single most reliable dataset it owns.

It is also, for marketing purposes, mute. An invoice records that somebody bought, what for and for how much. Nothing in it says the customer arrived from a search advertisement in March, and nothing ever will, because that is not what an accounting system is for.

Which makes the pairing straightforward: the most reliable record of revenue a business has, joined to the record of where its enquiries came from. Neither system is modified and neither has to learn about the other.

Tax-inclusive and tax-exclusive are not a detail

Xero files routinely carry both, depending on how each invoice was raised and which template produced it. In a ledger this is unremarkable and correctly handled. In a channel comparison it is a distortion, because it does not fall evenly.

If one line of business is billed one way and another the other way, and the two are produced by different campaigns, the ranking changes for a reason that has nothing to do with advertising. Deciding once, at export, costs nothing and removes the whole problem.

The report will not silently normalise it, because it cannot know which convention you meant. It will show what the file said.

Progress billing spreads one sale across the report

Anybody invoicing in stages — builders, consultancies, agencies on retainer, anyone taking a deposit — has one won job appearing as three or four invoices over several months.

That is right for accounting and misleading for attribution if each invoice is treated as a separate sale. The job was won once, by one thing. Grouping a customer's invoices rather than counting them individually is usually the first adjustment worth making, and the report shows repeat and follow-on revenue separately so the grouping is visible rather than assumed.

Contacts created by other apps are the weak spot

Most Xero files have contacts from several sources: typed in by hand, imported once from a spreadsheet, and created automatically by whatever else is connected — a point of sale, a job system, a payment processor.

The automatic ones are where contact details go missing, because the connected app only passes what it has. The result is a file where recent invoices match well and a particular slice of older ones does not, and the pattern looks like a marketing finding when it is a plumbing one.

The report keeps unmatched rows visible for exactly this reason. A matched share that jumps at a particular date is usually telling you when something changed in the file rather than when something changed in the market.

Fair questions

“Xero already does that.” Not quite.

They say

“Our bookkeeper will not give marketing the ledger.”

We say

They do not have to. What leaves is a contact detail, an amount and a date — no accounts, no bank data, no payroll. It is a report, not the file.

They say

“We invoice in stages, so our revenue is spread out.”

We say

That is normal and the report handles it by keeping a customer's invoices identifiable rather than treating each as a separate win.

They say

“We already tag invoices with a tracking category.”

We say

Then use it. It becomes a cut of the report alongside the channel, which is more than most businesses have.

Questions

Xero, specifically.

Something else? Ask us and a person answers.

No. It reads a file you exported, so no credential to your organisation is held and nothing is written back.

Start today

Two exports, and you will know.

Nothing to install in Xero, no API key, and no need to have been tracking anything until now. Last year works as well as this month.