The Perk integration for Xero synchronizes key master data — users, tracking categories, accounts, and tax rates — from Xero. A synchronization job runs daily to check for changes and update the matching data objects in Perk. Expenses are exported to Xero in real time on a manual or automatic trigger.
Synchronize master data (employee and accounting)
Users
Perk users are synchronized with Xero Contacts. The user must be created in Perk before it can sync with Xero. The email address is the unique identifier for synchronization, so it must be identical in both systems. After the initial sync, if a Xero contact's email address changes, update the email in Perk so the user stays in sync.
| Xero Contact data | Perk User data | Description |
|---|---|---|
| Email address | Email address | Email address of the user. Used as the unique identifier during synchronization. |
| Name | First name | First name of the user. The Xero Name is split at the first space to determine the first name. |
| Name | Last name | Last name of the user. The Xero Name is split at the last space to determine the last name. |
| Contact status | Status | Status of the user. If deleted or archived in Xero, takes inactive status in Perk. |
| Xero Contact data | Perk User data | Description |
Tax rates
Perk tax rates are synchronized with Xero Tax Rates. For selected (auto-synced) rates, the daily sync updates the name, rate, and status on the next run.
| Xero Tax Rate data | Perk tax rate data | Description |
|---|---|---|
| Name | Name | Name of the tax rate. Updated on the next sync if it changes in Xero. |
| Code | ERP code | Used as the unique identifier during synchronization. |
| Total Tax Rate, or Effective Tax Rate | Tax rate | The rate percentage. Updated on the next sync if it changes in Xero. Use the highest rate if both total and effective rates are used in Xero. |
| Status | Status | Status of the tax rate. Created as active on initial sync. If deleted, deactivated, or archived in Xero, takes inactive status in Perk (tax rate deletion is detected for Xero). Deselecting a rate in import settings also deactivates it in Perk. |
Company cards
Perk company cards are synchronized with Xero Accounts of Type Bank and Account Type Credit Card. The company card must be created in Perk before it can sync with Xero. After setup, only status changes on the Xero Credit Card Account are updated in Perk.
| Xero Credit Card data | Perk company card data | Description |
|---|---|---|
| Status | Status | Status of the company card. If deleted in Xero, takes inactive status in Perk. |
| Bank Account Code | Creditor number | Used as the unique identifier during synchronization. |
Cost objects (tracking categories)
A Xero tracking category mapped as a cost object is synchronized to a cost object in Perk. Active tracking categories import as active cost objects; archived ones import as inactive. Each tracking category option imports as a cost object value, and new option values added under a mapped category import on the next daily sync.
Caution: A tracking category or option deleted or archived in Xero isn't detected (a limitation in how Xero data is synced), so the matching cost object stays active in Perk until you deactivate it manually.
Caution: Cost objects created manually in Perk have no corresponding Xero ID. The integration doesn't reverse-match manually created records, so import tracking categories from Xero to use them on exports.
| Xero Tracking Category data | Perk Cost Object data | Description |
|---|---|---|
| Name | Name | Name of the tracking category. |
| Option name | Cost object value | Each tracking category option imports as a cost object value. |
| Status | Status | Status of the tracking category. Deletions and archivals in Xero aren't detected — see the caution above. |
Custom fields (tracking categories)
A Xero tracking category mapped as a custom field is synchronized to a custom field in Perk. A new Perk custom field is created named after the tracking category, and each tracking category option imports as a value in that custom field. New option values added under a mapped category import on the next daily sync.
Caution: A tracking category or option deleted or archived in Xero isn't detected (a limitation in how Xero data is synced), so the matching custom field or value stays active in Perk until you deactivate it manually.
| Xero Tracking Category data | Perk Custom Field data | Description |
|---|---|---|
| Name | Custom field name | The tracking category name. A new custom field is created named after the category. |
| Option name | Custom field value | Each tracking category option imports as a value in the custom field. |
| Status | Status | Status of the option. If the option is not active in Xero, it's inactive in Perk. Deletions and archivals in Xero aren't detected — see the caution above. |
Expense categories (expense accounts)
Xero accounts are mapped to expense categories in Perk. You choose which accounts to import during setup — any account type can be imported, not only Expense or Bank. Only active accounts import on the initial sync. A renamed account updates its name on the next sync, and deselecting an account in import settings deactivates it in Perk. The integration uses an internal ID to export, not the ERP code, so editing the ERP code in Perk has no effect on export.
Caution: An account deleted or archived in Xero isn't detected (a limitation in how Xero data is synced), so the matching expense category stays active in Perk until you deactivate it manually.
| Xero Account data | Perk expense category data | Description |
|---|---|---|
| Name | Name | The account name. |
| Code | ERP code | Customer-defined alphanumeric account code, e.g. 200 or SALES. |
| AccountID | Internally used | Used as the unique identifier during synchronization. |
| Status | Status | Status of the account. Deselecting it in import settings deactivates it in Perk. Deletions and archivals in Xero aren't detected — see the caution above. |
Caution: Expense categories created manually in Perk have no corresponding Xero ID. The integration doesn't reverse-match manually created records, so import accounts from Xero to use them on exports.
Export transactional data
Privately paid expenses
Reimbursable expenses are exported to Xero as approved Bills. Credit notes are exported to Xero as approved Vendor Credits.
Note: Tax rates for privately paid expenses and credit notes. For privately paid expenses, the default tax rate set on the Account is overwritten in the Bill by the tax rate sent by Perk. For credit notes, the tax rate sent by Perk is ignored and the default tax rate set on the Xero Account is used instead.
| Xero field | Perk Expense data | Description |
|---|---|---|
| Type | n/a | Sent to Xero as ACCPAY (expense) or ACCPAYCREDIT (credit note). |
| Total | Expense total claim | Calculated before export based on expense currency and export currency configuration. |
| Status | n/a | Sent to Xero as AUTHORISED. Credit notes are posted as approved Vendor Credits. |
| From (contact) | Submitter | Internal identifier used to map to the Xero user. |
| Amount (per line item) | Amount per line item | Calculated via the journal entry functionality within Perk. |
| Account (per line item) | Category per line item | |
| Category (header) | n/a | Xero pulls this from the internal identifier stored on the cost object or custom field in Perk, depending on how the tracking category was mapped. |
| Value in Category column (per line item) | Cost object name | |
| Tax Rate (per line item) | Tax rate | |
| Total Tax (calculation done in Xero) | n/a | Calculated in Xero based on amount and TaxType sent (the TaxType is based on the tax rate in Perk). |
| Reference | Expense ID | Sent to Xero as the Perk expense ID. |
| Description (per line item) | Merchant name | Merchant name from the expense, populated as the line item description. |
| Date | Posting date | |
| Amount Currency | n/a | Business logic applied via the journal entry functionality within Perk, based on expense currency and export currency configuration. |
| Due Date | Expense date |
Card transactions
Perk company card transactions are exported to Xero as Spend Money bank transactions. Company card credit notes are exported to Xero as Receive Money bank transactions.
| Xero data | Perk expense data | Description |
|---|---|---|
Account (type: BANK, account type: CREDIT CARD) |
Company card | Internal identifier used to map to the Xero Credit Card Account. |
| Date | Expense date | |
| Spend vs Receive Money | n/a | Business logic based on whether the expense is a credit note results in SPEND (regular expense) or RECEIVE (credit note) being sent to Xero. |
| To | Submitter | Internal identifier used to map to the Xero user. |
| Amount (per line item) | Amount per line item | Calculated via the journal entry functionality within Perk. |
| Account (per line item) | Category per line item | |
| Category (header) | n/a | Xero pulls this from the internal identifier stored on the cost object or custom field in Perk, depending on how the tracking category was mapped. |
| Value in Category column (per line item) | Cost object name | |
| Tax rate (per line item) | Tax rate | |
| Unit price (per line item) | Net amount (per line item) | Calculated via the journal entry functionality within Perk. |
| Total Tax (calculation done in Xero) | n/a | Calculated in Xero based on amount and TaxType sent (the TaxType is based on the tax rate in Perk). |
| Reference | Expense ID | Sent to Xero as the Perk expense ID. |
| Description (per line item) | Merchant name | Merchant name from the expense, populated as the line item description. |
| Amount Currency | n/a | Business logic applied via the journal entry functionality within Perk, based on expense currency and export currency configuration. |
Travel expenses
Perk travel expenses are exported to Xero as Spend Money bank transactions. Travel credit notes are exported to Xero as Receive Money bank transactions.
| Xero data | Perk expense data | Description |
|---|---|---|
Account (type: BANK, account type: BANK) |
Transfer account (configured in the travel provider configuration) | The value stored in Transfer account from the travel provider configuration maps to an expense category ERP code in Perk. |
| Date | Expense date | |
| Spend vs Receive Money | n/a | Business logic based on whether the travel expense is a credit note results in SPEND (regular expense) or RECEIVE (credit note) being sent to Xero. |
| To | Submitter | Internal identifier used to map to the Xero user. |
| Amount (per line item) | Amount per line item | Calculated via the journal entry functionality within Perk. |
| Account (per line item) | Category per line item | |
| Category (header) | n/a | Xero pulls this from the internal identifier stored on the cost object or custom field in Perk, depending on how the tracking category was mapped. |
| Value in Category column (per line item) | Cost object name | |
| Tax rate (per line item) | Tax rate | |
| Unit price (per line item) | Net amount (per line item) | Calculated via the journal entry functionality within Perk. |
| Total Tax (calculation done in Xero) | n/a | Calculated in Xero based on amount and TaxType sent (the TaxType is based on the tax rate in Perk). |
| Reference | Expense ID | Sent to Xero as the Perk expense ID. |
| Description (per line item) | Merchant name | Merchant name from the expense, populated as the line item description. |
| Amount Currency | n/a | Business logic applied via the journal entry functionality within Perk, based on expense currency and export currency configuration. |
To learn more, see Xero integration for expenses. For setup-related questions, refer to Set up the Xero integration for Perk expenses.