Integrations

Simpro and Xero: true job profitability, reconciled

A Simpro job profitability report built from Simpro alone misses the credit notes, supplier bill variances and direct costs that only Xero sees. This guide joins the two systems job by job, with the keys, formulas and a worked example of margin before and after reconciliation.

By Simon DuttonLast reviewed

Simpro knows what a job was quoted at, what labour was booked to it and which purchase orders were raised against it. Xero knows what the customer was actually charged after credits, and what suppliers actually billed. A job profitability report that reads only one of those systems shows a margin that never happened. This page sets out how to pull job revenue and cost out of Simpro, join it to Xero record by record, and report the margin each job really made.

Why the Simpro margin and the accounts disagree

The two figures start from the same job but drift apart for ordinary reasons, none of which is anyone's mistake:

  • Credit notes raised in finance. A customer disputes a return visit, finance issues a credit in Xero, and the job in Simpro still shows the full invoiced value.
  • Bills that differ from the order. Simpro costs materials at the purchase order value. The supplier's bill arrives a fortnight later at a different price, and only Xero sees the difference.
  • Costs that never touched Simpro. Plant hire, skip hire or a last-minute subcontractor gets entered straight into Xero as a bill. If someone tags it to the job, the accounts know; Simpro does not.
  • Orders not yet billed. At month end some purchase orders have no bill. The cost is real, it is just not in the ledger yet.

None of these show up in a single-system report. A job that looks like 28% in Simpro can be under 20% once the ledger has had its say, and the MD only finds out when the management accounts and the job list do not add up.

What each system contributes

Simpro's listing on the Xero App Store describes what its accounting link moves: customer invoices, supplier invoices, credits, payments and contacts sync both ways; timesheets and manual journals go from Simpro to Xero; accounts and tracking categories come from Xero into Simpro. That tells you which records exist on both sides. It does not tell you how they are keyed, which is the part a margin report depends on.

System Record Used for
Simpro Job Job number, customer, site, type, completion date
Simpro Customer invoice Invoice number, job, net value raised from the job
Simpro Labour booked to the job Hours × cost rate, from timesheets
Simpro Purchase orders on the job PO number, supplier, ordered value
Xero Sales invoice (ACCREC) InvoiceNumber, Reference, Contact, SubTotal
Xero Credit note Amount and the invoice it is allocated to
Xero Bill (ACCPAY) Supplier, line Description, line Tracking, net amount

Xero field names above are from Xero's published Accounting API specification. Simpro also documents an API on its developer site; field names there vary by build and version, so confirm the job, invoice and purchase order resources on your own account rather than copying a list from a blog.

The joins, and why invoice numbers are not the key

The easy assumption is that invoice 51247 in Simpro is invoice 51247 in Xero. Do not make it. Xero's specification describes InvoiceNumber on a sales invoice as a unique code that Xero auto-generates from the organisation's invoice settings when none is supplied, so the two sequences can run independently. Xero also has a separate Reference field, which the same specification marks as for sales invoices only.

What your link actually writes into each field depends on how the integration was set up. Before building anything, take twenty invoices raised last month, find each one in both systems, and write down which Xero field holds the Simpro number. That five-minute check decides the join.

From To Key in this example Watch for
Simpro invoice Xero sales invoice Simpro invoice number held in Xero Reference Blank references on invoices keyed by hand in Xero
Xero sales invoice Xero credit note Credit allocated to the invoice Unallocated credits sit on the customer, not the job
Simpro purchase order Xero bill PO number in the bill line Description Reference is not available on bills, so the PO must travel in line text or tracking
Simpro job Xero bill with no PO Tracking option named for the job, or job number in line text Xero allows at most two tracking categories per line

Where a sales invoice has no usable reference, fall back to customer, date and amount, and treat the result as a probable match for someone in finance to confirm. Never let a fuzzy match feed the margin silently.

The formulas

Measure Formula
Simpro margin Simpro invoiced − (labour + PO values + subcontract POs)
Reconciled revenue Invoiced value matched in Xero (unmatched invoices held at Simpro value and flagged) − Xero credit notes allocated to the job's invoices
Reconciled cost Labour + Σ(billed value where a bill matches the PO, else PO value accrued) + Xero bills tagged to the job with no PO
Reconciled margin % (reconciled revenue − reconciled cost) ÷ reconciled revenue
Margin gap Simpro margin − reconciled margin, split by cause

Labour stays at the cost rate Simpro holds. If those rates are stale, every job is wrong by the same proportion, so review them against payroll once a quarter rather than trying to allocate payroll per job.

IVP.ai / Data Layer

Jobs completed in October 2026

Job margin, Simpro vs reconciled · Tarnby Electrical & Mechanical (fictional)

Simpro shows 35.8% margin.
Reconciled with Xero, it is 33.2%.

11 completed jobs. Revenue net of Xero credit notes; cost at billed value, with Xero-only bills added and unbilled purchase orders accrued.

Margin in Simpro
£39,455
35.8% of £110,120
Margin reconciled
£36,060
33.2% of £108,735
Gap
£3,395
2.6 points across 11 jobs
Jobs down over 2 points
5
Reconciled vs Simpro

How each job is joined across the two systems

Keys in this example. Check which field your own accounting link writes before relying on any of them.

  1. SimproJob → invoiceinvoice no. → ReferenceXeroSales invoice (ACCREC)Xero numbers its own invoices; the Simpro number sits in Reference here
  2. SimproInvoiceallocationXeroCredit noteCredits raised in Xero reduce job revenue
  3. SimproPurchase orderPO no. → bill line textXeroBill (ACCPAY)Billed value replaces PO value; unbilled POs are accrued
  4. SimproJobjob no. → tracking or line textXeroBill entered in Xero onlyCost Simpro never saw, added to the job

Job 30440 · Quenby Mews Dental

Refit: lighting and ventilation

Margin bridge for job 30440, from Simpro margin to reconciled margin
Simpro margin£4,13027.9%
Credit note in Xero−£650
Bill above PO value−£165
Bill tagged to job in Xero only−£540
Reconciled margin£2,77519.6%

PO not yet billed, £800 accrued at PO value.

Where the £3,395 went, all jobs

  • Bill tagged to job in Xero only−£1,680
  • Credit note in Xero−£1,385
  • Bill above PO value−£475
  • Bill below PO value+£145

Margin per job, before and after

Gross margin per job as shown in Simpro and after reconciliation with Xero, largest fall first
JobSimproReconciled0–50%Status
30422Orbell & Finch Offices36%12.9%Job 30422: 36% in Simpro, 12.9% reconciledReconciled
30439Brackenrigg Garden Centre48.1%35.8%Job 30439: 48.1% in Simpro, 35.8% reconciledReconciled
30440Quenby Mews Dental27.9%19.6%Job 30440: 27.9% in Simpro, 19.6% reconciledAccrued
30413Wyedale Cold Storage34.5%30.2%Job 30413: 34.5% in Simpro, 30.2% reconciledReconciled
30417Saltmarsh Leisure Club39%36.7%Job 30417: 39% in Simpro, 36.7% reconciledReconciled
30401Harrowgate Lane Lettings39.9%39.9%Job 30401: 39.9% in Simpro, 39.9% reconciledReconciled
30406Pellow Street Bakery30.1%30.1%Job 30406: 30.1% in Simpro, 30.1% reconciledReconciled
30409Corran Park Primary33.7%33.7%Job 30409: 33.7% in Simpro, 33.7% reconciledReconciled
30427Ketterby Care Home44.4%44.4%Job 30427: 44.4% in Simpro, 44.4% reconciledAccrued
30429Fallowfield Print Works32.1%32.1%Job 30429: 32.1% in Simpro, 32.1% reconciledFor review
30435Linnet House Apartments39.2%40.4%Job 30435: 39.2% in Simpro, 40.4% reconciledReconciled

Thin mark: Simpro margin. Thick mark: reconciled margin. Gold where the job lost more than 2 points.

17 of 18 Xero invoices matched on Reference = Simpro invoice number · 1 job for review

Illustrative data

Illustrative, fictional data. Contractor, customers, suppliers, jobs, invoices and bills are invented; not customer results or a live product screenshot.

Worked example (illustrative, fictional)

Tarnby Electrical & Mechanical is an invented contractor. Job 30440 is a lighting and ventilation refit for Quenby Mews Dental, also invented, completed in October 2026.

What Simpro shows. Two invoices: 51247 for £8,000 and 51248 for £6,800, so £14,800 invoiced. Labour booked is £4,120. Three material POs total £5,350 (£2,900 + £1,650 + £800) and one subcontract PO is £1,200. Cost is £4,120 + £5,350 + £1,200 = £10,670. Margin is £14,800 − £10,670 = £4,130, which is 27.9%.

What the join finds in Xero.

  1. Both invoices are there as INV-04427 and INV-04428, each carrying the Simpro number in Reference. The numbers differ; the reference is what links them.
  2. Credit note CN-215 for £650 is allocated to INV-04428 for a disputed return visit. Revenue becomes £14,800 − £650 = £14,150.
  3. PO-8801 was billed at £2,900, as ordered. PO-8802 was ordered at £1,650 and billed at £1,815, so cost rises by £165. PO-8803 for £800 has no bill yet and is accrued at its order value. The subcontract PO was billed at £1,200.
  4. A £540 scaffold tower hire bill was entered in Xero with a tracking option for job 30440. Simpro never saw it.

Reconciled. Cost is £4,120 + £2,900 + £1,815 + £800 + £1,200 + £540 = £11,375. Margin is £14,150 − £11,375 = £2,775, which is 19.6%.

The bridge from one figure to the other is three lines: £4,130 − £650 − £165 − £540 = £2,775. The job lost 8.3 points of margin, and every pound of that has a named cause and a record behind it. The £800 accrual is flagged, not hidden, so it can be swapped for the real bill when it lands.

Across the month. The same logic applied to all eleven October jobs gives £39,455 of margin in Simpro (35.8% of £110,120) and £36,060 reconciled (33.2% of £108,735). The £3,395 gap breaks down as £1,680 of bills tagged to jobs in Xero only, £1,385 of credit notes, £475 of bills above PO value, offset by £145 where a bill came in under the order. Five jobs fell by more than two points. One job has a Xero invoice with a blank reference, so it is held for review rather than counted as reconciled.

Checks before anyone acts on the report

  • Unallocated credits. A credit note left on the customer account rather than allocated to an invoice cannot be pinned to a job. List them separately so they do not vanish.
  • Bills with no link at all. Any bill with neither a PO number nor a job tag should appear on an exceptions list, not be spread across jobs by guesswork.
  • Timing. The integration moves records on its own schedule. State on the report the time each source was last read.
  • Retentions and stage payments. On longer jobs, a margin taken before the final invoice will look worse than it is. Report those jobs as in progress, not complete.
  • Contract work. Visits under a maintenance contract are usually billed by schedule, not per job, so per-job revenue is misleading. Contract-level margin is covered in maintenance contract profitability.

Where this fits in the wider pack

Reconciled job margin is one line in a weekly pack, next to first-time fix, utilisation and unbilled work; field service KPIs sets out the rest. If you run a different job system, the same pattern applies with different keys: see Uptick and ServiceMax. More on field service reporting.

Automating the reconciliation with IVP.ai

Doing this by hand means two exports, a lookup on references, another on PO numbers, and a list of bills to chase, every month. The IVP.ai Data Layer reads Simpro and Xero into one governed warehouse, keeps the joins and formulas above as tested definitions, and refreshes the report on whatever cadence you set. When a link breaks, such as a run of invoices with blank references, the report says so rather than quietly dropping those jobs.

Deskless by IVP.ai can work the exceptions. By default it flags, drafts and waits for a person: it lists bills with no job link, asks the right buyer which job a hire charge belongs to, and holds probable invoice matches for finance to confirm. It only changes records if you configure it to.

A national fire safety and security company used the same approach to unify HubSpot, Uptick and finance spreadsheets into one governed view, and saves 10+ hours a week on reporting (case study). The platform page covers how sources are connected and governed.

To see your own jobs reconciled, start a free 48-hour build. We connect up to three sources, clean the data and set one report or agent running on your real data within 48 hours of read-only access. You then have 14 days of access to decide: choose a plan or walk away.

Questions

Frequently asked questions

Why doesn't my Simpro job margin match the figures in Xero?

Simpro costs a job from what was ordered and booked to it, while Xero holds what was finally charged and billed. Credit notes raised in finance, supplier bills that differ from the purchase order, and costs entered straight into Xero all move margin without touching the job in Simpro. Reconciling means joining the records and adding those differences back to each job.

Do Simpro and Xero invoice numbers match?

Do not assume they do. Xero can generate its own sales invoice numbers from the organisation's settings, and it has a separate Reference field. Which field ends up holding the Simpro invoice number depends on how your link is set up. Check twenty recent invoices in both systems and use whichever field reliably carries the Simpro number as the join key.

How do supplier bills entered in Xero get onto the right Simpro job?

Bills raised against a purchase order can be matched on the PO number, as long as it is carried in the bill's line description. Bills with no order, such as plant hire, need the job identified another way, usually a Xero tracking option named for the job or the job number in the line text. Anything with neither belongs on an exceptions list.

Should job labour be costed from payroll or from Simpro's cost rates?

Use the cost rates held in Simpro for each job, because payroll cannot be split by job without a lot of guesswork. The risk is stale rates, which understate cost on every job by the same proportion. Compare Simpro's rates with actual payroll cost per productive hour each quarter and update them when the gap becomes material.

How often should job margin be reconciled?

Monthly is the minimum, aligned to the management accounts, so the job list and the profit and loss tell the same story. Weekly is better for businesses doing many small jobs, because a run of credits or price rises can be spotted while the customer or supplier conversation is still fresh. Accrue unbilled purchase orders at order value until the bill arrives.

About the author

Simon Dutton

Simon has more than 10 years of experience as a data scientist, working with start-ups, SMEs, Google and the CMA.

Last reviewed 6 November 2026.

Your first report or agent in 48 hours.

Tell us which systems feed it. We connect them, clean the data and set the report running automatically. If it isn’t useful, walk away.