Skip to main content

Setting up integration to Xero

Connect your Xero organisation to Prospect CRM and start syncing customers, products, orders and invoices.

Written by Heather

Prerequisites

Make sure you have:

  • An active Xero organisation, including multi-currency.

  • A Xero user account with the Adviser or Standard role on the organisation you want to connect.

  • Administrator access to Prospect CRM, as the connection is set up at the operating company level.

  • Clarity on which Xero organisation you’re connecting to if you have more than one.


Set up your integration

Step 1: Connect to Xero

  1. In Prospect CRM, go to System Settings and open the Integration section.

  2. Select Xero from the list of available integrations.

  3. Click Connect to Xero. You’ll be redirected to the Xero login page.

Step 2: Authorise access in Xero

Xero will ask you to sign in and select which organisation Prospect CRM should connect to. After you select an organisation, Xero shows the permissions Prospect CRM is requesting:

  • Read and write Contacts

  • Read and write Transactions (invoices, credit notes, purchase orders)

  • Read Settings (tax rates, currencies, branding themes)

  • Read Reports (customer balances)

  • Read and write Attachments

  • Offline access (keeps the connection active without re-authentication every hour)

Click Allow access. Xero redirects you back to Prospect CRM with the connection established.

📌 Note: The integration is comprehensive — it syncs customers, products, stock, invoices, credit notes, purchase orders, tax rates and currencies, and pushes back new customer records, products and confirmed orders. The permissions listed reflect the data we actually use.

Step 3: Configure your import settings

Once the connection is in place, set your initial preferences.

Setting

What it controls

Display description

Choose whether the CRM shows your Xero account number or the customer name as the display label on Sales Ledger records. Most businesses that use Xero account numbers consistently turn this on.

B2C handling

If you sell to a mix of business and consumer customers, configure the B2C regex rule so the CRM can classify imported contacts automatically. You can also switch to manual classification if you prefer.

Missing record creation

When the CRM imports a customer from Xero with no associated Company, Division or Contact record, the integration can create those structures automatically. Choose whether this runs for active accounts only, all accounts, or not at all. You can also control whether suppliers and B2C accounts are included.

Default account manager

Sets the Account Manager field on any new contacts imported from Xero. Most teams default this to a generic “Unassigned” or “Sales Team” user and assign properly during the first review.

Default role code

Sets the Contact role for any contacts created by the missing-record process.

Default company type

Sets the Type ID for any Company records created by the missing-record process.

Currency import

On by default. Turn this off in System Settings if you prefer to manage currencies manually in the CRM.

Step 4: Wait for the first sync

The first sync is the largest; it imports everything from your Xero organisation relevant to the CRM:

  • Tax rates and currencies.

  • All contacts that are customers, or both customers and suppliers.

  • All contacts are marked as suppliers.

  • All product items, including selling and cost prices, sales and purchase account codes, and tax types.

  • Stock levels for tracked items against the single default warehouse.

  • All invoices, credit notes and purchase orders.

Subsequent syncs only pick up changes since the last successful run, so they’re much faster. You can monitor progress at any time.

🤓 Tip: If the first sync brings in more contacts than expected, it’s usually because of inactive contacts in Xero. The integration only imports currently Active contacts, but contacts that were Active and later Archived will still come through as 'On Stop' in the CRM. See Hints and tips when setting up Xero for how to clean this up before connecting.


Connect more than one Xero organisation

Each Prospect CRM operating company can connect to up to two Xero organisations:

  • Primary connection: The default Xero organisation is treated as the source of truth. All imports run against this organisation, and all new customers, products, and confirmed orders go here.

  • Secondary connection: Used where the CRM’s primary integration is to a different system (such as Unleashed) and Xero plays a supporting role. The secondary Xero connection enriches CRM data with Xero-specific values like analysis codes.

If you operate multiple Xero organisations as separate businesses (for example, one entity per country), use a separate CRM operating company for each, one Xero organisation per operating company.


How tokens are managed

Xero uses OAuth 2.0, so access tokens expire periodically, every 30 minutes and are automatically refreshed by the CRM. The only thing you need to do is keep the user account that authorised the connection in good standing in Xero. If that user is removed from the Xero organisation, the connection will fail, and you’ll be prompted to reconnect.

Connection health is monitored continuously. If a token refresh fails, the CRM flags the integration and surfaces the issue in your status panel. See Checking the status of your integration.


Disconnect from Xero

If you need to disconnect from Xero, for example, to switch to a different Xero organisation, there are two ways to do this.

  1. From Prospect CRM: Go to System Settings > Integration > Xero and select Disconnect. The CRM stops running imports and pushes against the disconnected organisation.

  2. From Xero: Under Settings > Connected Apps, find Prospect CRM and click Revoke access. The CRM-side connection fails on the next token refresh, after which it flags itself as disconnected.

📌 Note: No data is removed from the CRM when you disconnect. Your historical sales orders, invoices, customers and products stay in place.

Did this answer your question?