Xero knows what you invoiced and what got paid. HubSpot knows who the customer is, which rep owns them, and what the pipeline says they are worth next quarter. Keeping those two pictures in agreement is the whole job, and HubSpot's free native connector does more of it than most finance teams expect.
It also stops in places that are easy to miss until quarter end, when someone notices that reported revenue still includes an invoice that was credited in May, or that the department split every board report depends on exists only in Xero. This guide covers what the HubSpot Xero integration actually syncs, how to connect it, the limits both documented and not, and how to tell when your billing has outgrown it. It sits alongside the broader guide to HubSpot integrations, focused on the CRM-to-accounting connection that teams outside the US ask about most.
In this article
1.
2.
3.
4.
5.
6.
7.
8.
9.
Does HubSpot Integrate With Xero?
Yes. HubSpot ships a free native Xero integration, installed from the HubSpot App Marketplace and built on the same data sync engine that powers its other managed connectors.
Once it is authenticated it does three things. It keeps contact and product records in agreement between the two systems. It moves invoices and the payments applied to them, so collection status is visible in the CRM instead of in an accountant's inbox. And it imports your Xero tax rates into HubSpot so quotes and invoices raised on the CRM side use the same rates the ledger does.
For a single-entity business invoicing in one supported currency, that is a strong free offer and the right place to start. The interesting question is not whether it works. It is which parts of your Xero organisation it can see.
What the Native HubSpot Xero Integration Syncs
The integration is a mapping between four object pairs, and the direction is set per pair. Each one can sync between apps, sync only to HubSpot, or sync only to Xero. This table is the most useful thing to internalise before you scope anything.
| HubSpot | Xero | Direction options | Notes |
|---|---|---|---|
| Contacts | Contacts | Two-way or either one-way | Name, email, address |
| Products | Items | Two-way or either one-way | Name, sale price, cost price, description |
| Invoices | Invoices | Two-way or either one-way | HubSpot-created invoices must be edited in HubSpot |
| Payments | Payments on invoices | Two-way or either one-way | Follows the invoice they belong to |
| Tax rates | Tax rates | Xero to HubSpot only | Set them up in Xero first |
The timing is not symmetrical, and this surprises people more than the direction settings do. Changes made in HubSpot are detected within minutes. Changes made in Xero are polled roughly every 30 minutes. That is fine for reporting and for a finance workflow that runs in days. It is not fine for anything a rep is looking at while a customer is on the phone.
The tax rate detail worth reading twice
Tax rates flow one way, from Xero into HubSpot's tax rate library. Rates you create in HubSpot do not go back to Xero. HubSpot also notes that multi-tenant Xero accounts are not supported for tax imports.
The practical consequence is an ordering rule: get your rates right in Xero before you switch the sync on. Doing it the other way round leaves you with a HubSpot tax library that half matches the ledger, and VAT or GST discrepancies are the single most tedious thing to unpick after the fact.
Contact and customer sync
Xero contacts become HubSpot contacts with their billing details attached, and edits can flow back the other way. This is the part that makes accounting data usable for segmentation and for account management.
Item and product catalogue
Xero items sync into HubSpot's product library, including sale price and cost price, so reps build quotes from the same catalogue finance invoices against rather than a separate list that drifts.
Invoices in both directions
Invoices can flow either way, which puts billed revenue into HubSpot reporting and lets an invoice raised on a HubSpot deal land in the ledger without anyone re-keying it.
Payments against invoices
Payments applied to a synced invoice follow it across, so paid, part paid and outstanding are visible in the CRM. This is the property most sales leaders actually wanted when they asked for a Xero integration.
How to Connect HubSpot and Xero
Setup is configuration rather than code, which is why it is quick and also why it can only ever do what its makers built.
1. Install from the App Marketplace
Find the Xero app in the HubSpot App Marketplace and install it. You need to be a super admin or hold App Marketplace permissions in HubSpot.
2. Authenticate your Xero organisation
Log in to Xero in the popup and approve the scopes. Note which organisation you are connecting, because this is the decision that is awkward to revisit if you run more than one.
3. Sort out tax rates in Xero first
Configure the rates you invoice with in Xero before enabling the sync, since rates import into HubSpot in that direction only and cannot be corrected from the HubSpot side afterwards.
4. Turn objects on one at a time, in order
Contacts first, then products from Xero into HubSpot, then invoices, then payments. Each object gets its own direction setting and its own historical import decision. Enabling everything at once makes any mapping mistake much harder to trace.
5. Filter what syncs, then map your fields
Restrict the sync to the records you actually want in the CRM rather than the whole ledger, then map anything custom. Custom field mappings require at least a Data Hub Starter subscription, sold until recently as Operations Hub Starter.
Step 5 deserves more thought than it usually gets, for a reason specific to Xero. Xero keeps customers and suppliers in one contact list. An unfiltered sync therefore pushes your landlord, your hosting provider and your accountant into HubSpot as marketing contacts, where they count towards your contact tier and occasionally receive a nurture email. Filter on the Xero side or with a sync filter, and do it before the first historical import rather than after.
Where the Native Xero Integration Stops
Some of these limits are in HubSpot's documentation. The rest you find in production, usually at month end. Both lists matter, and the second one is more expensive.
The documented limits
Six currencies, and no more. USD, CAD, EUR, GBP, AUD and NZD are supported. Everything else is outside the connector. For a business invoicing in CHF, SEK, SGD or ZAR this is a hard stop rather than a workaround.
Tax rates only import. Rates flow from Xero to HubSpot. Rates created in HubSpot never reach Xero, and multi-tenant Xero accounts are not supported for tax imports at all.
HubSpot-created invoices are locked to HubSpot. Add a line item, change pricing or remove a payment on the Xero side of an invoice that originated in HubSpot and the sync fails rather than reconciling. Invoices created in Xero can be edited in Xero freely.
Credit card fees do not carry across. Fees charged on a HubSpot payment do not appear on the Xero invoice, which leaves a reconciliation gap someone has to close by hand every month.
Custom mappings are gated. Anything beyond the default field set, a PO number for instance, needs both a custom field in Xero and a Data Hub Starter subscription in HubSpot. The app is free, using it properly is not always.
The native app maps four objects between a CRM and a ledger. It does not reason about them. Every requirement that contains the word "unless" lands outside it.
The limits nobody warns you about
Tracking categories are invisible. Xero's tracking categories are how most businesses report by department, region, brand or project, and they cannot be set from HubSpot. Teams end up opening every HubSpot-originated invoice in Xero to tag it by hand, which is exactly the manual step the integration was bought to remove.
Credit notes and refunds do not reverse anything. An invoice creates revenue in HubSpot reporting. A credit note in Xero does not cleanly undo it, and prepayments and discounts that post as negative values tend to land badly. Reported revenue drifts gross while the ledger says net.
Invoices attach to contacts, not companies. Xero bills a contact, so that is where the invoice lands in HubSpot. Any company-level view of what an account has been billed, which is the view most B2B teams want, has to be assembled with rollup properties or custom logic.
The deal to invoice relationship is thin. Invoices arriving from Xero carry limited data and no reliable association back to the deal that produced them, and teams billing a single deal across several invoices, deposits, milestones or staged payments, report having to stitch that relationship together themselves.
Duplicates form quietly. Matching relies on the fields the two systems happen to share. A customer whose Xero contact name is the trading entity and whose HubSpot contact is a person, or a second email on an accounts payable address, produces two records and a split billing history.
One organisation, one connection. Xero scopes everything to a tenant. Groups running an entity per country or per brand cannot consolidate them into one HubSpot portal with the entity preserved, and reconciling the same customer across two ledgers is deduplication logic, which is not something a connector can do for you.
None of this makes the app bad. It is a free, general-purpose connector that has to work for every Xero organisation on earth, and it does the common case well. The point is that the common case is one entity, one currency, one invoice per deal, and reporting nobody makes a decision from. Growing businesses break all four, usually in that order.
HubSpot Xero Integration: Native vs iPaaS vs Custom
There are three ways to bridge a CRM and a ledger, and they are layers rather than rivals. If the middle term is unfamiliar, the guide to iPaaS covers it properly, and the Operations Hub guide explains where HubSpot's own data sync layer draws its line.
Free, fast, maintained by HubSpot, and it puts payment status in the CRM for nothing. Start here always. If you invoice in GBP from one entity and nobody reports by tracking category, you may never need anything else.
Good for reaching something the native sync ignores, or for proving a piece of automation earns its keep before anyone builds it properly. Costs scale per task and reliability degrades as the logic branches, so treat it as a prototype layer, not the thing your revenue reporting depends on.
Built against the Xero API and HubSpot's API directly, so tracking categories are set at the point of invoicing, credit notes reverse what they should, several entities land in one portal with the source preserved, and invoices associate to the deal and the company. Fixed cost, no task meter, monitored like infrastructure.
When to Build a Custom HubSpot Xero Integration
Almost nobody should start with a build. The native app is free and the correct first move. The skill is recognising the moment you have crossed its line, and these are the five signals that show up most.
Signs you have outgrown the native Xero app
You invoice outside the six supported currencies. There is no configuration that adds a seventh. If a meaningful share of your billing is in a currency the connector does not carry, the sync is structurally incomplete on day one.
You run more than one Xero organisation. Multi-entity groups need the entity preserved on every record, consolidated reporting across ledgers, and deduplication where the same customer appears in two of them. All three are outside a one-tenant connector.
Tracking categories drive your reporting. If the board deck splits revenue by department, region or project, and that split lives in Xero tracking categories, then either a person tags every invoice by hand or something sets it programmatically at the point the invoice is created.
Credit notes and refunds have to reverse state. When reported revenue needs to be net rather than gross, and a credited invoice needs to stop counting in HubSpot, something has to apply that logic in flight. Mapping cannot express it.
Billed revenue is a number leadership trusts. The moment a forecast or a board pack reads off HubSpot, the sync needs deduplication, validation, retries and alerting rather than a connector that fails quietly until a month-end discrepancy finds it.
If several of those are true, the next step is not shopping for a different connector. It is scoping the specific gaps and leaving everything the native app handles exactly where it is. Most teams that commission a build keep the free Xero app running for contacts and products, and add a custom layer for tracking categories, credit notes and multi-entity consolidation. That is the same pattern the HubSpot QuickBooks integration guide describes on the other side of the accounting market, and the HubSpot Stripe integration guide describes where the money is collected rather than billed.
One thing to know before you scope a build
Xero's API is rate limited per organisation: 60 calls in a rolling minute, 5,000 in a rolling 24 hours, and five concurrent calls, with a 429 and a Retry-After header when you exceed them. That budget is generous for steady-state syncing and tight for a first import of years of invoices.
It is worth knowing because it is the difference between a build that backfills cleanly and one that spends a week throttled. Any serious Xero integration needs queueing, backoff and a batched historical import designed around those numbers, which is also a fair question to ask anyone quoting you for the work.
What a Custom HubSpot Xero Integration Costs
The native app is free, so the cost conversation only opens once it cannot do the job. When it does, the honest comparison is not build versus free. It is build versus the running cost of the workarounds you already have: the per-task iPaaS bill, the monthly export, the person retagging invoices with tracking categories, and the revenue report nobody quite acts on because it might be counting a credit note twice.
A custom integration is a one-time build plus ongoing maintenance, priced by scope. One-way invoice sync into HubSpot with proper deal and company associations is a smaller build than bidirectional sync across three Xero entities with tracking categories, credit note reversal and cross-entity deduplication. The cost teams underestimate is never the build. It is maintenance, because Xero versions its API, tax rules change, and an unowned sync drifts until it is confidently wrong about money.
A custom build inverts the cost curve of a no-code patch. You pay more up front and then nothing per invoice, so the more you bill, the more the economics favour building it properly.
That inversion is why we productised it. StackTie builds the connection against both APIs directly for a fixed fee and maintains it on a flat monthly retainer, so a sync carrying your billing data keeps working without a task meter running or an owner going missing.
Native Xero app not reaching your currencies, entities, or tracking categories?
When you invoice outside the supported six, run more than one Xero organisation, report on tracking categories, or need credit notes to reverse what HubSpot already counted, that is a build. StackTie builds custom HubSpot Xero integrations for a fixed fee and maintains them on a flat monthly retainer, alongside the free app you already have. Live in 14 days or it's free. Book a free audit and we'll map exactly which gaps are worth closing.
The Bottom Line
HubSpot integrates with Xero through a free native app that syncs contacts, items, invoices and payments, with a direction setting per object, and imports your Xero tax rates into the CRM. Install it first. For one entity invoicing in one supported currency it is the right answer and a custom build would be waste.
It stops in two tiers. The documented limits are six currencies, one-way tax rates, no multi-tenant support, credit card fees that do not reconcile, and HubSpot-created invoices that must be edited in HubSpot. The undocumented ones are the expensive ones: tracking categories it cannot set, credit notes it cannot reverse, companies it cannot associate invoices to, and a second Xero organisation it cannot see. Every one of those is logic, and mapping is not logic. Keep the free app for everything it covers well, and build the specific layer it structurally cannot reach, because for a finance team that layer is usually the one the board report depends on.


