Salesforce Xero Integration: Apps, API and Setup Guide

In this article
- A Salesforce Xero integration should do one thing reliably: a won deal or accepted quote becomes a contact and an invoice in Xero, and payment status flows back to Salesforce so sales sees who paid.
- Salesforce and Xero offer no free official connector of their own. US small businesses choose between apps listed in the Xero App Store (Breadwinner, TwoCanConnect, SFX Connect and others), Zapier or Make for simple flows, an iPaaS (integration platform as a service) such as Workato, or a custom build on the Xero Accounting API.
- Xero changed its developer pricing on March 2, 2026: custom apps now sit on tiers with connection caps, and the free Starter tier allows 1,000 API calls per day per organization instead of 5,000. Check this before you plan a do-it-yourself build.
- Decide ownership first: Salesforce owns accounts, deals and quotes; Xero owns invoices, payments, items and sales tax. Most failures come from duplicate contact names, currencies and unmapped products.
Jump to
- What a Salesforce Xero integration should do
- Your Salesforce Xero integration options
- Xero API pricing and limits in 2026
- Which system owns what: object mapping
- How to set up the integration, step by step
- Pitfalls and how to fix them
- What not to sync
- When a custom integration makes sense
- Go-live checklist
- Where Gilzor fits
What a Salesforce Xero integration should do
Many small businesses sell in Salesforce and keep their books in Xero, where invoices, payments and sales tax live. With no link between the two, every won deal gets typed into Xero by hand, and reps have to ask the bookkeeper who has paid.
A good integration covers the quote-to-invoice loop and little else:
- Quote or deal is accepted in Salesforce. The opportunity is Closed Won, or a Salesforce quote is accepted, with products, quantities and prices.
- Xero gets a contact and an invoice. The account becomes a Xero contact (or matches an existing one), and the quote or opportunity lines become invoice lines.
- Payment status comes back. Xero’s invoice status, amount paid and amount due show on the Salesforce account and opportunity.
Resist syncing more than this. Mirroring all of Xero inside Salesforce leaves your bookkeeper reconciling two versions of the same figures.
Your Salesforce Xero integration options
Neither Salesforce nor Xero ships a free connector between the two. Xero’s app store has an “Integrate Xero with Salesforce” collection, and some Salesforce apps listed in the store, such as Breadwinner, are built as Salesforce apps on AppExchange. That leaves four routes:
| Option | What syncs | Direction | Cost level | Effort | Limits |
|---|---|---|---|---|---|
| Salesforce Xero app (Breadwinner, TwoCanConnect, SFX Connect) | Contacts, invoices, payments, credit notes; some add quotes, bills and purchase orders | Two-way, with Xero data stored as Salesforce records | Low to medium: monthly subscription | Days to a few weeks, mostly configuration | Your process must fit the app’s data model; pricing grows with users or orgs |
| No-code automation (Zapier, Make) | What you build: usually “closed won → contact → invoice” | One-way flows chained together | Low | Hours to days | Weak on multi-line invoices, partial payments and duplicate matching |
| iPaaS (Workato and similar) | Anything both APIs expose, plus other systems in the same flow | Two-way, event-driven or scheduled | High: annual platform license | Weeks; needs an integration owner | Worth it only if Xero is one of several connected systems |
| Custom build on the Xero Accounting API | Exactly what you define | Two-way; webhooks for some Xero events | Medium to high: build, maintenance and a Xero developer tier | Weeks to a few months | Xero’s per-organization rate limits; you own monitoring and API changes |
The main Xero apps for Salesforce
- Breadwinner. According to its Xero App Store listing, it is a native AppExchange app that brings Xero contacts, invoices, payments and credit notes into Salesforce objects. It creates invoices from accounts, opportunities, orders or custom objects, and supports several Xero organizations and currencies. The listing offers a 15-day free trial.
- TwoCanConnect. Listed as a two-way Salesforce sync for invoices, payments, quotes and purchase orders, without middleware; quotes and purchase orders come with its higher plans.
- SFX Connect. Listed as syncing invoices, bills and credit notes between Salesforce and Xero.
Xero states that it reviews apps but does not guarantee them, and listings and prices change. Check the current listing, reviews and plan before you commit, and test in a sandbox.
No-code and iPaaS tools fill the gaps. Zapier and Make both list Salesforce triggers and Xero actions such as creating contacts and invoices, and Workato has a Xero connector with triggers for new or updated contacts, invoices and payments.
Which Salesforce Xero integration fits you?
Xero API pricing and limits in 2026
If you plan to build your own integration, read this section first. Xero moved from revenue share to tiered developer pricing: the change was announced on December 4, 2025 and took effect on March 2, 2026, according to Xero’s developer FAQ. New apps start on the Starter tier.
| Xero developer tier | Monthly fee (Australian dollars, tax exclusive) | Max connections | API calls per day, per organization |
|---|---|---|---|
| Starter | No charge | 5 | 1,000 |
| Core | A$35 | 50 | 5,000 |
| Plus | A$245 | 1,000 | 5,000 |
| Advanced | A$1,445 | 10,000 | 5,000 |
| Enterprise | Price on application | No limit | 5,000 |
Source: Xero’s developer pricing page, as of October 2026. Xero publishes these fees in Australian dollars (A$), not US dollars. Paid tiers include a monthly data egress allowance with an overage fee per GB; incoming data is unlimited on every tier.
What this means for a US small business connecting one Xero organization:
- Starter may be enough for a light sync, but 1,000 calls a day goes fast if you poll for payment changes every few minutes or backfill history.
- Rate limits per organization still apply. Xero’s developer documentation lists 5 concurrent calls and 60 calls per minute for each connected organization, plus 10,000 calls per minute across all of an app’s organizations, on top of your tier’s daily limit. Xero says it can’t raise these limits on request.
- Custom Connections are a separate option. Xero offers them for machine-to-machine integrations with a single organization in the US, UK, Australia and New Zealand. They are a paid monthly subscription for each connection, need no refresh tokens, and can be tested free on the demo company. Xero says they keep their existing commercial terms; check the current price in Xero before you decide.
- Scopes changed too. According to Xero’s developer documentation, Custom Connections created from April 29, 2026 use granular scopes. Request only the scopes the sync needs.
If you use an app from the Xero App Store, the developer tier is the vendor’s cost and is built into its pricing.
Which system owns what: object mapping
For a small business the split is usually clear: sales data starts in Salesforce, money data lives in Xero. For each object, the system of record is the only place edits happen; the other system just displays a copy.
| Salesforce | Xero | Direction | System of record |
|---|---|---|---|
| Account (plus billing contact) | Contact (customer) | Salesforce → Xero on first invoice | Salesforce for name and owner; Xero for payment terms and tax status |
| Quote or Closed Won Opportunity | Invoice (draft or approved), or a Xero quote | Salesforce → Xero, once | Salesforce until sent; Xero after the invoice exists |
| Quote Line Item / Opportunity Product | Invoice line item | Salesforce → Xero | Xero after creation |
| Product2 | Item | Xero → Salesforce | Xero (item carries sales account and tax) |
| App’s or custom Invoice object | Invoice number, status, amount due, amount paid, due date | Xero → Salesforce | Xero |
| App’s or custom Payment object | Payment | Xero → Salesforce | Xero |
| Account field “Xero Contact ID” | ContactID; Contact Number holds the Salesforce ID | Written back after create | The link itself; never edited by hand |
The last row prevents most duplicate problems. Xero’s API documents a Contact Number field meant to identify contacts in external systems; it can only be set through the API and shows as Contact Code in Xero. Store the Salesforce account ID there and the Xero ContactID on the account, and later syncs match exactly.
Two Xero terms to know. Xero uses one contact list for customers and suppliers; a contact is flagged as a customer once it has a sales invoice. Invoices move through statuses such as DRAFT, SUBMITTED, AUTHORISED, PAID and VOIDED, so decide whether the integration creates drafts for review or approved invoices.
How to set up the integration, step by step
These steps follow the most common path, a Salesforce Xero app. The order is the same for an iPaaS or custom build.
- Agree ownership with your bookkeeperDecide which system owns each object (use the table above), what triggers an invoice (Closed Won, accepted quote, signed order), whether invoices land as drafts or approved, and who fixes sync errors.
- Check your Xero planOn Xero’s US pricing page, the Early plan lists a limit of 20 invoices, and Xero notes that transactions from connected apps may count toward that limit. Multiple currencies are only on the Established plan. Upgrade before go-live if either applies.
- Clean both sidesDeduplicate Salesforce accounts and Xero contacts, and archive Xero contacts you no longer use. Align the Salesforce price book with Xero items, or plan to pull items from Xero.
- Create a dedicated integration userConnect the app with a dedicated Salesforce user, not an admin’s login. Supported editions include a limited number of free API-only Salesforce Integration user licenses, according to Salesforce. Give it a permission set with only the objects the sync touches. In Xero, authorize the app with a user account the bookkeeper controls, not a salesperson’s.
- Install in a sandbox and connect the Xero demo companyInstall the app in a Salesforce sandbox and connect it to Xero’s demo company, not your live books. Load a handful of real accounts and products.
- Map contacts and matching rulesMap account fields to contact fields. Match on the stored Xero ContactID first, then on an exact field you trust, and send anything unmatched to a review queue instead of creating a new contact.
- Map invoices, items and taxMap quote or opportunity lines to Xero item codes, set payment terms and decide on discounts. Let Xero calculate US sales tax; send the address and exempt status, not tax amounts.
- Set up the return flowBring invoice number, status, amount due and payments back to Salesforce, read-only, on the account and opportunity layouts. Use Xero webhooks or a schedule; stay well under the daily call limit.
- Test the awkward cases, then go live in stepsPick ten real deals that cover a new customer, an existing one, a five-line quote with a discount, a tax-exempt customer, a foreign-currency deal, a partial payment, a credit note. Have the bookkeeper check each in Xero. Then start production with deals created after a cut-off date, and read the error log every day for the first two weeks.
Built by Gilzor
Results we’ve shipped




Talk to the people who build it. Tell us about your project and get a free estimate of scope, timeline and cost.
Pitfalls and how to fix them
| Problem | Why it happens | Fix |
|---|---|---|
| Duplicate contact name errors | Xero requires a contact name to be unique across all active contacts, while Salesforce allows two accounts named “Acme Inc”. The second invoice fails, or lands on the wrong contact. | Match on the stored ContactID, not the name. Add a naming rule for clashes (for example, add the city). |
| Customers and suppliers mixed | Xero keeps one contact list for both, so a vendor that is also a customer already exists. | Search Xero contacts before creating; link to the existing contact. |
| Wrong sales tax | Tax amounts pushed from Salesforce don’t match Xero. Xero’s US auto sales tax, powered by Avalara, sets rates from your business address, the customer’s location and the item. | Let Xero calculate tax. Sync addresses and exempt status; test invoices created by the integration in the sandbox. |
| Items vs. products | A Salesforce product has no matching Xero item. Xero item codes are capped at 30 characters in its API, so long Salesforce product codes don’t fit. | Make Xero the source of items, keep a code mapping field and block closing deals with unmapped products. |
| Currency mismatch | Salesforce multi-currency is on, but the Xero plan or contact uses only USD. | Confirm the Xero plan supports multiple currencies, set the contact’s default currency on first sync and send the invoice currency from the opportunity. |
| Sync loops | Both systems can edit the same field, so each sync sets off another one in the opposite direction. | Let each field flow one way only, and have the sync skip edits made by its integration user. |
| Partial payments shown as paid | The sync reads only a “paid” flag. | Sync amount due and amount paid, not just status. |
| Rate limit errors (HTTP 429) | Backfills or frequent polling exceed 60 calls a minute or the daily limit. | Backfill overnight in batches, use Xero’s 100-record pages and the If-Modified-Since header, and prefer webhooks. |
| Sync silently stops | The Xero connection is revoked or the authorizing user leaves. | Use a dedicated integration user, send errors to a shared channel, review the log weekly. |
What not to sync
- Bank reconciliation, bills and payroll. These are bookkeeping work, not sales information, and parts of them are sensitive.
- Journals and the chart of accounts. A CRM should never post accounting entries; that is a fast way to damage the books. The sales account belongs on the Xero item.
- Tax amounts. Send the inputs; let Xero calculate.
- Years of invoice history. Twelve to twenty-four months usually covers renewals and collections, and keeps you inside the daily call limit.
When a custom integration makes sense
Apps fit most small businesses. A custom build on the Xero Accounting API pays off when:
- Billing follows rules an app can’t express: milestones, usage lines, deposits, revenue split across several Xero organizations.
- Deal data lives in custom Salesforce objects the apps don’t handle well.
- The same quote-to-invoice logic must feed other systems, such as a customer portal or a payment platform.
A typical build covers OAuth 2.0 or a Custom Connection, contact matching using Contact Number, and idempotent invoice creation so a retry never creates a second invoice. It also needs Xero webhooks plus a scheduled check for payments, a retry queue that respects rate limits, and an error view for the bookkeeper.
For cost ranges by integration type, see our API integration cost guide. Comparing accounting systems? The Salesforce QuickBooks integration guide covers the same flow for QuickBooks Online, and the Salesforce ERP integration guide covers the move up when Xero no longer fits.
Go-live checklist
Salesforce Xero go-live readiness
FAQ
Does Xero integrate with Salesforce?
What is the best Salesforce Xero integration app?
Can Zapier connect Salesforce and Xero?
How much does the Xero API cost in 2026?
What are the Xero API rate limits?
How much does a Salesforce Xero integration cost?
Where Gilzor fits
Most Xero users should start with an app; a custom build earns its cost only when your billing rules don’t fit one. In that case Gilzor, a software development company with engineers in Poland and Cyprus and not a Salesforce reseller, can map the Salesforce to Xero data flow, build the integration on the Xero API and support it after launch. See our Salesforce integration services, or the Salesforce integration guide for the patterns that repeat across every system.
No sales pitch
Get a straight answer for your project
Tell us what you’re building. We’ll reply with options, a rough cost and timeline. If we’re not the right fit, we’ll say so.

CTO of Gilzor. Responsible for architecture and the engineering standards our teams work by.
LinkedIn →Gilzor · Web Development partner
Need a team for your web product?
Services
Web DevelopmentCustom websites and web apps — front-end, back-end, launch and support.→By company type
Selected projects






The team behind them





