RevOps HQ
← BACK TO BLOG
••
Data Model•HubSpot•Implementation

HubSpot Xero Integration: Contact Mapping, Sync Errors, Native Routes and Invoice Origination

HubSpot Xero integration explained: how Xero contacts map to HubSpot, the sync errors that follow, and where invoices are approved since Xero retired its app.

P

Paul Maxwell, PhD

AUTHOR

GET WEEKLY REVOPS INSIGHTS

No spam. Unsubscribe anytime.

In a HubSpot Xero integration, a customer's invoices can sit on its accounts mailbox while its company record shows none, so an account manager preparing a renewal finds no billing. A salesperson invoices the buyer they work with, and the invoice stops on an error about a contact name Xero already holds. A finance team used to approving sales-requested invoices in Xero finds HubSpot invoices arriving finalised, with lines Xero cannot change without breaking the sync.

This article maps Xero's contact record onto HubSpot's companies and contacts under Xero by HubSpot (Data Sync), the native app left since Xero retired its own in 2026. It begins with the mapping and a sample customer, follows that customer through the sync errors it produces, compares where each native route places invoice approval, and closes with costs, a configuration sequence ending in a test invoice, and the limits of the evidence.

A Xero contact is one record per customer or supplier, holding the organisation's name, one primary person and up to five further contact persons, as defined in Xero's Contacts API reference. HubSpot holds the same customer as a company record plus one contact record per person, joined by associations, and an association label names the kind of link, such as Billing contact. Invoice origination is the choice of application, HubSpot or Xero, in which invoices are drafted and approved.

Contact Mapping Between Xero and HubSpot

HubSpot's setup guide makes the app available on all products and plans, requires Super Admin or App Marketplace permissions, and lets contacts, products and invoices each sync one way or both ways. Payments are different: they run on "required default settings that cannot be viewed or edited" and, according to the Xero App Store listing, switch on with the invoice sync. Custom field mappings need Data Hub Starter or above, changes reach Xero within a few minutes and HubSpot every 30 minutes, and the marketplace listing states that quotes do not sync.

For a business customer, Xero's record is organisation-level. The Contacts API reference defines Name as the full name of the contact or organisation, holds the primary person's names and email on the same record, and caps contact persons at five, each with an Include in emails flag for invoice emails. Each invoice carries one contact, and Xero holds customers and suppliers in one contact list, flagging a contact as a supplier once a bill is entered against it.

One Xero contact record mapped onto a HubSpot company and three contacts, with invoices associated with one contactSample data. On the left, one Xero contact record for Harbour Line Ltd holds the name Harbour Line Ltd, which must be unique in Xero; a primary person, Priya Shah, whose email ap@harbourline.com is the matching email; and a contact person, Mere Tane, one of up to five, with include in emails on. Below it, nine Xero invoices worth $41,400, each addressed to the contact Harbour Line Ltd. On the right, HubSpot holds a company, Harbour Line Ltd, and three contacts. The Xero name maps to the HubSpot contact's associated company name, drawn as a dotted line to the company because it is a field mapping rather than a company sync, and the documentation does not say whether a missing company is created. The primary person pairs on email with a HubSpot contact for ap@harbourline.com that the sync created; the listing maps both her names and the Xero name to first and last name without saying which prevails, so the contact's name is not documented. Mere Tane's contact-person entry has no mapping, so her HubSpot contact is never paired and shows no invoices. Dana Wu, in procurement, has no Xero counterpart. The invoice sync carries the nine invoices into HubSpot, mapping each invoice's contact to the HubSpot invoice's associated contacts, so all nine are associated with that paired contact only, shown by a solid line; the company shows no invoices until they are associated by hand or by workflow, shown by a dashed line.XERO · ONE CONTACT RECORDHUBSPOT · COMPANY AND CONTACTSNAMEHarbour Line Ltdunique in XeroCOMPANYHarbour Line Ltd0 invoices until associatedassociated company namecreation not documentedPRIMARY PERSONPriya Shah · ap@harbourline.comthe matching emailCONTACT · CREATED BY THE SYNCap@harbourline.com9 invoices, $41,400pairs on emailname not documentedCONTACT PERSON · 1 OF UP TO 5Mere Tane · mere@harbourline.cominclude in emails: onCONTACTMere Tane0 invoices · not pairedno mappingnever pairedCONTACTDana Wu0 invoices · no Xero recordno Xero counterpartINVOICES9 · $41,400each to contact Harbour Line LtdINVOICES9 · $41,400associated with that contact onlyinvoice synccontact (To) to contactsset by the syncfield mapping onlyby hand or workflow onlyno mapping exists
Sample data: one Xero contact mapped onto a HubSpot company and three contacts, and the contact on which the sync places invoices

HubSpot's app pairs that organisation-level record with a person-level one: Xero Contacts sync with HubSpot Contacts, matched once on email and then held by record ID under its matching rules. The result can be checked on the first sync: every invoice for a customer is associated with exactly one HubSpot contact, the one holding the primary person's email, and with no company.

Xero contact elements and their treatment by HubSpot's Xero app, as documented in October 2026
Xero elementName, unique in XeroHubSpot sideAssociated company name; also first and last nameEffectNo company sync exists; the name maps to the contact's company association
Xero elementPrimary person name and emailHubSpot sideFirst name, last name and primary email, the matching keyEffectOne HubSpot contact pairs with the customer, named from this or the Name mapping
Xero elementContact persons, up to fiveHubSpot sideNo mapping, default or customEffectOther people at the customer never sync
Xero elementAccount Number and Contact CodeHubSpot sideCustom mapping only, Data Hub Starter or aboveEffectA shared identifier costs a paid tier
Xero elementInvoice contact (To)HubSpot sideAssociated contacts on the invoiceEffectCompanies and deals gain the invoice only by hand or workflow

HubSpot's data sync guide states the last row in its own words, "in most cases, data sync can only automatically associate invoices to contacts", and requires invoices to be associated with companies manually. By default, data sync also skips contacts without a valid email address.

Invoice Association for a Sample Customer

The figures below are sample data, invented to make the arithmetic checkable, and describe no client. Harbour Line Ltd is a Xero contact whose primary person is Priya Shah at ap@harbourline.com, with one contact person, Mere Tane, at mere@harbourline.com. In HubSpot the company Harbour Line Ltd has two contacts: Mere, who works with the account manager, and Dana Wu in procurement. In one quarter finance raises nine invoices in Xero, three monthly retainers at $6,000 and six project invoices at $3,900, so $18,000 plus $23,400, or $41,400.

Sample data: where nine Xero invoices for Harbour Line Ltd appear in HubSpot after the first sync
HubSpot recordContact for ap@harbourline.com, created by the syncRelation to the Xero contactPaired on Priya's emailInvoices shown9, $41,400
HubSpot recordMere TaneRelation to the Xero contactA Xero contact person, not mappedInvoices shown0, $0
HubSpot recordDana WuRelation to the Xero contactNo Xero counterpartInvoices shown0, $0
HubSpot recordHarbour Line Ltd, companyRelation to the Xero contactReached only through associationsInvoices shown0 until associated
HubSpot recordThe account's open dealRelation to the Xero contactNo invoice mapping to dealsInvoices shown0

No HubSpot contact held ap@harbourline.com, so the first inbound sync created one and associated all nine invoices with it. Its name may come from Priya's names or from Harbour Line Ltd, since the listing maps both to first and last name without saying which prevails. An account manager working from Mere's record or the company record sees none of the $41,400, and a report of invoiced value by company shows Harbour Line at zero until nine associations are added.

The outbound direction fails differently. The account manager converts a $5,200 deal to a HubSpot invoice with Mere as its contact. Her email exists in Xero only on a contact person, which the sync never matches, so the sync tries to create a Xero contact. Its name comes from the associated company name or from Mere's first and last names, and the listing does not say which prevails. If the company name prevails, Xero refuses a second Harbour Line Ltd with the documented name error, and the invoice fails for want of a customer. If Mere's name prevails, the invoice reaches a new Xero customer called Mere Tane, splitting Harbour Line's receivable across two contacts.

One rule prevents both outbound failures: the invoice contact is Priya, whose email Xero already holds. Labelled as Harbour Line's billing contact, with Use company's billing contact association for all invoices selected in the invoice settings, she is added to every invoice converted from a deal or quote. Mere is copied by address when the invoice is emailed, since the send step in the invoice creation guide accepts up to nine Cc addresses. Associating Mere with the invoice too would give Xero, which takes one contact per invoice, two candidates, and HubSpot does not document which one maps.

The rule moves none of the $41,400: Priya's invoices stay on her record until step 6 of the configuration sequence associates them with the company, which a workflow can do through her company link. Billing contact is a HubSpot-defined label, association type 930 in the associations API guide, and HubSpot's associations guide gates labels to Professional or Enterprise without saying whether HubSpot-defined ones are exempt. Below Professional, the fallback is setting Priya as each invoice's contact by hand.

Sync Errors and the Mechanisms Behind Them

Invoices raised in Xero appear on an unfamiliar contact, such as an accounts mailbox, and on no company or deal. The sync paired on the primary person's email and associates invoices with contacts only; a billing contact holding that email, plus company associations, repairs it.

"A validation exception occurred. The contact name is already assigned to another contact." A HubSpot contact with no Xero match tried to become a new Xero contact under a name Xero already holds. HubSpot's setup guide prescribes renaming: "update the contact's name in HubSpot" until it is unique in Xero. For a contact at an existing customer, renaming creates a second Xero customer and splits the receivable, as Mere's case shows, so invoicing the billing contact is the better repair.

"An invoice should have an associated customer." The invoice's contact matches no Xero contact by email, which follows when the name error above has stopped its creation. Replacing the invoice's contact with the billing contact, whose email Xero holds, clears it.

"Line item or invoice amount modifications in HubSpot native invoices cannot be made through external applications." Finance edited a HubSpot-originated invoice in Xero; the change is reversed in Xero and remade in HubSpot.

Suppliers appear as HubSpot contacts after the first sync, because the inbound contact sync includes every Xero record by default and Xero holds customers and suppliers in one contact list; the filter has to exist before the first save.

Invoice Approval Under the Retired and Remaining Native Apps

For a monthly fee, Xero's own app let a salesperson create a draft invoice in HubSpot for the accounts team to approve and send from Xero, with its status returned to HubSpot, according to the archived listing from October 2025. On 7 October 2026 that listing returned not found in every regional Xero App Store checked, and notices from Xero quoted by third-party app vendors date the disconnection to 13 March 2026.

Where an invoice is created, approved and later changed under each native HubSpot and Xero routeThree rows, one per route, across four columns: created, approved, lines changed later, and what exists after the sync. Steps held in Xero are shaded and steps held in HubSpot are outlined. In the first row, Xero's own app, retired in 2026, a draft is requested in HubSpot and created in Xero, the accounts team approves and sends it from Xero, the invoice remains a Xero document, and its status, sent, paid or overdue, returns to HubSpot. In the second row, HubSpot's data sync app with the invoice raised in HubSpot, the invoice is created in the invoice editor or from a converted deal, approved when it is finalised as Open, since drafts never sync, and its lines can change only in HubSpot, because edits made in Xero stop the sync; Xero holds a copy whose lines are locked to HubSpot, and the status it takes in Xero is not documented. In the third row, the same app with the invoice raised in Xero, finance creates it, approves it through Xero's draft, submitted and authorised states, and can edit it without sync errors, and HubSpot receives a copy on the paired contact with no deal and no company. The approved column changes from Xero in the first row to HubSpot in the second.CREATEDAPPROVEDLINES CHANGED LATERAFTER THE SYNCXERO'S APP · RETIRED IN 2026Xerodraft requestedin HubSpotXeroaccounts teamapproves and sendsXerothe invoice isa Xero documentsyncStatus to HubSpotsent, paid or overdueHUBSPOT'S APP · INVOICE RAISED IN HUBSPOTHubSpotinvoice editor, ora converted dealHubSpotfinalised as Open;drafts never syncHubSpot onlyedits made in Xerostop the syncsyncCopy in Xerolines locked to HubSpot;Xero status not documentedHUBSPOT'S APP · INVOICE RAISED IN XEROXeroraised by financeXerodraft, submitted,then authorisedXeroeditable withoutsync errorssyncCopy in HubSpoton the paired contact;no deal, no companystep held in HubSpotstep held in Xerocopy made by the sync
Where an invoice is created, approved and later changed under each native route: shaded steps happen in Xero, outlined steps in HubSpot

An invoice raised in HubSpot reaches Xero only under three filters that the setup guide says cannot be edited. Its source must be HubSpot, its status Open rather than Draft, and its creation or last change later than the start of the sync. Approval therefore happens when someone finalises the invoice in HubSpot, which the invoice creation guide restricts to Super Admins and users with Create invoice permission. Afterwards lines, prices and payment removals change only in HubSpot; the same edit made in Xero stops the invoice syncing until it is reversed there and repeated in HubSpot. Xero's tax rates are imported into HubSpot's tax library for use on individual lines, invoices using HubSpot's automated sales tax do not sync, and six currencies sync: USD, CAD, EUR, GBP, AUD and NZD.

An invoice raised in Xero keeps the states that Xero's Invoices API reference defines: DRAFT, SUBMITTED for an approval process, and AUTHORISED, which posts journals and awaits payment. The setup guide confirms that such invoices can be edited in Xero without sync issues. What they lose is the deal, because the listing's default mappings associate a synced invoice with contacts and with no other record.

A business leaving Xero's app therefore decides where approval lives. Keeping it in Xero means finance raises invoices there, and HubSpot shows them on a contact with no deal. Moving it into HubSpot means limiting Create invoice permission to the people who approved in Xero, since Xero receives each HubSpot invoice already finalised, in a Xero status HubSpot does not document.

Costs and Returns of HubSpot's Xero App

RevOps HQ implements HubSpot and builds custom integrations, so it stands to gain from a verdict against the native app. The app costs nothing on the listing, runs on every HubSpot plan and is maintained by HubSpot. Its CRM syncs tab lists failing records with the reason for each, and Sync now forces a pass, so diagnosis needs no code. It imports Xero's tax rates and returns payments, keeping a HubSpot-billed customer's payment status current within 30 minutes.

Its costs are the mechanics above: a billing contact to maintain for every customer, company associations made by hand or by Professional workflows, HubSpot invoices that cannot be amended in Xero, and no contact persons. HubSpot's end-to-end revenue guide lists credit memos among the objects to sync with an accounting system, while the Xero setup guide lists contacts, products, invoices and payments and no credit notes.

The app fits a business billing from HubSpot in USD, CAD, EUR, GBP, AUD or NZD, with one paying contact per customer and a finance team that records payments rather than amending invoices. It fits worst where finance approves or rewrites invoices in Xero before issue, where credit notes are frequent, and where Xero runs in a currency outside the six, such as ZAR or SGD. Below Professional, company associations are manual and the Billing contact label may be unavailable. Xero's Connect Xero and HubSpot collection lists third-party connectors, each worth testing against these gaps rather than its listing.

Configuration Sequence and the First Test Invoice

HubSpot's setup guide gives the screens; the sequence below adds the decisions those screens assume.

  1. In Xero, set each customer's primary person to the person and address that receive invoices, and hold everyone else as contact persons, with Include in emails on where they should be copied.
  2. In HubSpot, give each company one contact with that same email, label the association Billing contact, and select Use company's billing contact association for all invoices under Settings > Data Management > Objects > Invoices. Labels need Professional or Enterprise under the associations guide, which is silent on whether this HubSpot-defined one is exempt; below Professional, set that contact on each invoice by hand.
  3. Record where each kind of invoice originates, and if HubSpot origination is chosen, limit Create invoice permission to invoice approvers.
  4. On a portal using HubSpot's free tools, turn on Enforce 2FA to log in under Settings > Security > Login and let its 24-hour grace period pass. HubSpot's replies on the Xero App Store listing say the connection needs 2FA enforced for every user, which the two-factor guide makes mandatory only on paid tiers.
  5. Install the app and configure the contact sync with its inbound filter decided before the first save, since every Xero contact syncs by default and filters limit only which records start syncing. Then configure the product sync, which maps each Xero item code to SKU, a value not to be changed in HubSpot once an invoice uses it, and then the invoice sync, which switches payments on.
  6. On Professional or Enterprise, associate synced invoices with companies by workflow. A Copy associations action with the contact as intermediary record links its invoices to its companies with no matching property; since it links every invoice of the contact to every company or deal associated with it, the action suits companies and over-associates deals. Create associations instead matches exact, case-sensitive property values, and a custom code action needs Data Hub Professional or Enterprise. Below Professional, associate by hand.
  7. Verify with one real invoice. Convert a deal for a billing contact, confirm in Xero that it sits on the existing customer under the same number with the imported tax rate, and note its Xero status. Record its payment in Xero, click Sync now, and confirm it shows paid in HubSpot. Raise one invoice in Xero and confirm after the next pass that it reaches the billing contact and, once step 6 has run, the company. Finally, confirm that the CRM syncs tab shows no failing record a documented rule does not explain.

Scope, Dates and Evidence Limits

Third-party connectors, Xero Practice Manager, payroll and multi-organisation consolidation are outside this article, which treats the two native apps. HubSpot's QuickBooks Online app pairs customers with contacts in the same way, as HubSpot QuickBooks integration sets out, and HubSpot NetSuite integration covers the NetSuite connector.

The documentation, listings and archived page cited were read on 7 October 2026; the HubSpot articles among them carry update dates from April to October 2026, so behaviour is described as documented in October 2026. No portal or Xero organisation was tested, and Harbour Line is invented. Five behaviours are undocumented: the Xero status a synced HubSpot invoice takes; which Name mapping names a contact in either direction; whether a Xero draft syncs to HubSpot; whether the associated company mapping creates a missing company; and whether the HubSpot-defined Billing contact label escapes the Professional gate on labels. Xero's retirement notice went to subscribers and is not publicly retrievable, so its date rests on third-party copies, and HubSpot's Xero partnership page still described the retired app's approval flow on 7 October 2026. Xero's API reference also warns that contact names may stop being unique, which would remove the only documented guard against the duplicate customer in the sample.

In Summary

Xero by HubSpot (Data Sync) has been the native route since Xero withdrew its own app in 2026. It pairs each organisation-level Xero contact with the single HubSpot contact holding the primary person's email, maps contact persons nowhere, and associates synced invoices with that contact only. It sends Xero only Open HubSpot invoices and locks their lines to HubSpot, so sales-raised invoices are approved in HubSpot, while invoices raised in Xero stay editable there and arrive without a deal.

The app suits billing run from HubSpot in its six currencies, with one paying contact per customer and finance recording payments rather than rewriting invoices. It suits poorly where finance amends invoices in Xero or issues credit notes, and below Professional, which lacks association workflows and where HubSpot gates labels without saying whether its own Billing contact label is exempt.

Each customer therefore needs one person whose email is the Xero primary person's and who is the contact on every HubSpot invoice, through the Billing contact label where the portal allows it. For Harbour Line that person is Priya: addressed to her, HubSpot invoices reach the one Xero customer holding her address rather than failing or splitting the receivable, and a Copy associations workflow can follow her company link to put the $41,400 on Harbour Line Ltd as well as on her record.

HubSpot services

Onboarding, implementation, integration, migration, administration and training, each scoped and priced before the work begins

WEEKLY PROGRAM

RevOps Office Hours

A recurring weekly RevOps operating program. Live support plus hands-on HubSpot implementation work.

$1,500/mo
Monthly Operating Program
  • →1 live Office Hours session per week
  • →4 hours of hands-on implementation work per month
  • →Hours allocated against priorities agreed at the start of each period
  • →Recurring monthly cadence