Only in Mage Pro.Try our fully managed solution to access this advanced feature.
Configuration
To set up the Xero source, provide the following configuration parameters:| Key | Description | Sample Value | Required |
|---|---|---|---|
client_id | Client ID issued when you create your Xero app. | abcdefg | ✅ |
client_secret | Client secret generated when you create your Xero app. | abcdefg | ✅ |
tenant_id | Tenant ID associated with your Xero organization. | abcdefg | ✅ |
start_date | The start date for syncing data. Format: YYYY-MM-DDTHH:MM:SSZ. | 2021-01-01T00:00:00Z | ✅ |
refresh_token | OAuth refresh token (required if refresh_token_secret_name is not provided). | abcdefg | ⚠️ |
refresh_token_secret_name | Name of the Mage secret containing the refresh token (recommended for production). | XERO_REFRESH_TOKEN | ⚠️ |
You must provide either
refresh_token or refresh_token_secret_name. Using refresh_token_secret_name is recommended because Xero uses rotating refresh tokens (each token can only be used once), and this option automatically persists the new token after each refresh.Option 1: Direct Refresh Token
Option 2: Mage Secret (Recommended)
- Open a pipeline edit page
- Expand the right side panel
- Click the “Secrets” tab
- Click “Add new secret”
- Enter your chosen secret name (e.g.,
XERO_REFRESH_TOKEN) and your initial refresh token as the value - Copy the secret name to your Xero config’s
refresh_token_secret_namefield
The tap will automatically update the secret with the new refresh token after each sync, ensuring reliable long-term operation.
Supported Streams
The Xero source supports the following streams:Incremental Streams
These streams support incremental syncing based on thestart_date configuration and bookmark state:
| Stream | Primary Key | Replication Key |
|---|---|---|
accounts | AccountID | UpdatedDateUTC |
bank_transactions | BankTransactionID | UpdatedDateUTC |
bank_transfers | BankTransferID | CreatedDateUTC |
contacts | ContactID | UpdatedDateUTC |
credit_notes | CreditNoteID | UpdatedDateUTC |
employees | EmployeeID | UpdatedDateUTC |
expense_claims | ExpenseClaimID | UpdatedDateUTC |
invoices | InvoiceID | UpdatedDateUTC |
items | ItemID | UpdatedDateUTC |
journals | JournalID | JournalNumber |
linked_transactions | LinkedTransactionID | UpdatedDateUTC |
manual_journals | ManualJournalID | UpdatedDateUTC |
overpayments | OverpaymentID | UpdatedDateUTC |
payments | PaymentID | UpdatedDateUTC |
prepayments | PrepaymentID | UpdatedDateUTC |
purchase_orders | PurchaseOrderID | UpdatedDateUTC |
quotes | QuoteID | UpdatedDateUTC |
receipts | ReceiptID | UpdatedDateUTC |
users | UserID | UpdatedDateUTC |
Full Table Streams
These streams are fully synced on each run (no incremental support):| Stream | Primary Key |
|---|---|
branding_themes | BrandingThemeID |
contact_groups | ContactGroupID |
currencies | Code |
organisations | OrganisationID |
repeating_invoices | RepeatingInvoiceID |
tax_rates | TaxType |
tracking_categories | TrackingCategoryID |
How to Generate Credentials
To use this source, you need to create a Xero OAuth app and complete the OAuth flow.1. Create a Xero App
Go to the Xero Developer Portal and create a new app. Note down your Client ID and Client Secret.2. Configure OAuth2 Scopes
When setting up your Xero app, grant the following OAuth2 scopes:| Scope | Required For |
|---|---|
accounting.settings.read | Organisation settings, currencies, etc. |
accounting.transactions.read | Invoices, bank transactions, payments |
accounting.contacts.read | Contacts |
accounting.reports.read | Reports |
accounting.journals.read | Journals |
accounting.attachments.read | Attachments |
offline_access | Long-lived access via refresh tokens |
- The minimum scope required for discovery is
accounting.settings.read. - You only need scopes for the streams you plan to sync.
- Missing scopes for a selected stream will result in
401or403errors.
3. Complete the OAuth2 Authorization Flow
Follow Xero’s OAuth2 Auth Flow Guide to obtain your initialaccess_token and refresh_token.
4. Get Your Tenant ID
Thetenant_id uniquely identifies your Xero organization. After completing OAuth authentication:
- Call the connections endpoint:
- Extract the
tenantIdfrom the response:
If your app is connected to multiple Xero organizations, the response will contain multiple entries. Choose the
tenantId for the organization you want to sync data from.