Integrate Xero with Perk for expenses

The Xero integration for Perk automates spend-management data flow between Perk and Xero. It imports master data (accounts, tracking categories, tax rates, contacts) from Xero into Perk, and exports approved expenses and credit notes from Perk into Xero. The expense approval flow stays entirely inside Perk.

Role: Account admins can perform setup tasks.

To configure the integration, see Set up the Xero integration for Perk expenses. For failed exports and import errors, see Troubleshoot the Xero integration for Perk expenses.

What the integration does

The Xero integration for Perk keeps your expense data in sync between the two systems so your finance team works from one source of truth. Perk pulls reference data out of Xero and pushes finished expenses back in, while the expense approval flow stays entirely inside Perk.

  • Import (Xero to Perk): chart of accounts, tracking categories, tax rates, and contacts.
  • Export (Perk to Xero): approved expenses and credit notes. The Xero record depends on how the expense was paid:
    • Privately paid (reimbursable) expenses: approved Bills.
    • Privately paid credit notes: approved Vendor Credits.
    • Company card and travel expenses: Spend Money Bank Transactions.
    • Company card and travel credit notes: Receive Money Bank Transactions.

You can link only one Xero tenant per Perk company (legal entity). Connections are made per company, so an account (top-level entity) with several companies runs a separate setup for each.

Note: "Perk account" means your top-level customer entity in Perk. "Xero account" or "GL account" means an account in your Xero chart of accounts.

How Perk and Xero data map

Xero data Maps to in Perk Notes
Xero account (chart of accounts) Expense category Any Xero account type can be imported (Expense, Bank, Revenue, Asset, Liability, others).
Xero tracking category Cost object or custom field Chosen per category during setup. Xero supports up to two tracking categories.
Xero tax rate Perk tax rate Imported with name, percentage, and VAT code.
Xero contact Perk user Matched by email. The user must already exist in Perk.
Xero Credit Card Account Perk company card The company card must be created in Perk first.

An expense category is where an expense is coded in Perk. A cost object is a value employees pick when coding an expense; it drives cost allocation and approval routing. A custom field stores a secondary classification on the expense.

The integration needs these permissions in Xero:

  • Read: Accounts, Company information, Contacts, Items, Attachments, Tracking categories, Tax rates.
  • Write: Invoices, Accounts, Attachments, Expenses, Vendor credits.

If you want full technical details of how each field is mapped in Perk, see "Data exchange (technical field mapping)" at the end of this article.

How sync works

After the first import, Xero and Perk stay in sync in near real time. Changes in Xero reach Perk through webhooks, usually within seconds. A nightly reconciliation at 00:00 UTC catches anything the webhooks missed. Each sync is a delta sync: it only looks at records that changed in Xero. Expenses are exported to Xero in real time, on a manual or automatic trigger.

Because syncs are delta-based, a change that doesn't register on the Xero side isn't picked up. Example: adding a Perk user whose Xero contact already exists won't match them, because nothing changed on the contact. See "Adding new employees after setup" in the set-up article.

Data type Picked up Not picked up Updated attributes Not updated
Accounts New account (auto-imports if you selected its whole type); rename; account deselected in import settings (becomes inactive in Perk). Account deleted or archived in Xero (stays active in Perk until you deactivate it). A new account in a type where you picked individual accounts (add it manually). Name; active/inactive status. ERP code edited in Perk (export uses an internal ID).
Tracking categories New option value under a mapped category; category or option renamed. Category or option deleted or archived in Xero. A brand-new tracking category added after setup (go to Import settings > Edit to map it). Name; option values. Mapping type (cost object vs custom field), fixed at setup. Cost object approvers are set manually in Perk.
Tax rates New active rate (always auto-imports); rate deselected, deleted, deactivated, or archived; name or percentage change. None. Tax rate deletion is detected. Name; rate; status. None.
Users (contacts) New Xero contact matching a Perk user email; any change on an existing contact (re-evaluates the match); contact deactivated (user becomes inactive). New Perk user whose Xero contact already exists and hasn't changed (edit any field on the contact to trigger the match). Users aren't created from Xero. First name; last name; status; contact ID. Email (the match key; update both sides manually). Approval limits, line managers, default cost objects (set in Perk).

Good to know

  • Deleted or archived Xero data isn't detected. Deleting or archiving an account or tracking category in Xero doesn't deactivate the matching expense category, cost object, or custom field in Perk. Deactivate it manually. An expense posted to an account deleted in Xero fails to export. Tax rate deletions are detected.
  • Manually created records have no Xero link. Expense categories, cost objects, and custom fields created manually in Perk aren't reverse-matched. Exports using a manual category or cost object fail; a manual custom field's value is left off the export.
  • Card and travel expenses post as unreconciled. Xero always creates Spend Money Bank Transactions as unreconciled, and only apps in its "conversion" (one-time migration) API category can set IsReconciled. Xero also doesn't expose unreconciled bank statement data through its public API. Reconcile these transactions manually in Xero. This is expected Xero behavior, not an integration gap.
  • Supplier invoices. Exporting Perk supplier invoices to Xero isn't supported.

Data exchange (technical field mapping)

Master data (Xero to Perk)

Users

Perk users sync with Xero Contacts. The user must exist in Perk first. Email is the unique identifier and must be identical in both systems. If a Xero contact's email changes, update it in Perk too.

Xero Contact data Perk User data Description
Email address Email address Unique identifier during sync.
Name First name Xero Name split at the first space.
Name Last name Xero Name split at the last space.
Contact status Status Deleted or archived in Xero becomes inactive in Perk.

Tax rates

Perk tax rates sync with Xero Tax Rates. For selected (auto-synced) rates, the sync updates name, rate, and status on the next run.

Xero Tax Rate data Perk tax rate data Description
Name Name Updated on the next sync if it changes.
Code ERP code Unique identifier during sync.
Total Tax Rate, or Effective Tax Rate Tax rate Rate percentage. Use the highest rate if both are used in Xero.
Status Status Active on initial sync. Deleted, deactivated, or archived in Xero becomes inactive in Perk. Deselecting a rate in import settings also deactivates it.

Company cards

Perk company cards sync with Xero Accounts of Type Bank and Account Type Credit Card. The card must exist in Perk first. After setup, only status changes on the Xero Credit Card Account update in Perk.

Xero Credit Card data Perk company card data Description
Status Status Deleted in Xero becomes inactive in Perk.
Bank Account Code Creditor number Unique identifier during sync.

Cost objects (tracking categories)

A tracking category mapped as a cost object syncs to a Perk cost object. Active categories import as active, archived ones as inactive. Each option imports as a cost object value; new options under a mapped category import on the next sync.

Xero Tracking Category data Perk Cost Object data Description
Name Name Name of the tracking category.
Option name Cost object value One value per option.
Status Status Deletions and archivals in Xero aren't detected.

Custom fields (tracking categories)

A tracking category mapped as a custom field creates a new Perk custom field named after it. Each option imports as a value.

Xero Tracking Category data Perk Custom Field data Description
Name Custom field name A new custom field is created named after the category.
Option name Custom field value One value per option.
Status Status Inactive in Xero means inactive in Perk. Deletions and archivals aren't detected.

Expense categories (accounts)

Xero accounts map to Perk expense categories. You choose which accounts to import during setup. Only active accounts import on the initial sync. A renamed account updates on the next sync. Export uses an internal ID, not the ERP code.

Xero Account data Perk expense category data Description
Name Name The account name.
Code ERP code Customer-defined code, for example 200 or SALES.
AccountID Internally used Unique identifier during sync.
Status Status Deselecting an account in import settings deactivates it. Deletions and archivals in Xero aren't detected.

Export (Perk to Xero)

Privately paid expenses

Reimbursable expenses export as approved Bills. Credit notes export as approved Vendor Credits.

Note: For expenses, the tax rate sent by Perk overwrites the default tax rate on the Xero account in the Bill. For credit notes, the tax rate sent by Perk is ignored and the Xero account's default tax rate is used.
Xero field Perk Expense data Description
Type n/a ACCPAY (expense) or ACCPAYCREDIT (credit note).
Total Expense total claim Calculated before export from expense currency and export currency configuration.
Status n/a AUTHORISED.
From (contact) Submitter Internal identifier mapped to the Xero user.
Amount (per line item) Amount per line item Calculated via the journal entry functionality in Perk.
Account (per line item) Category per line item
Category (header) n/a Xero pulls this from the internal identifier on the cost object or custom field, depending on mapping.
Value in Category column (per line item) Cost object name
Tax Rate (per line item) Tax rate
Total Tax n/a Calculated in Xero from amount and TaxType.
Reference Expense ID Perk expense ID.
Description (per line item) Merchant name
Date Posting date
Amount Currency n/a Based on expense currency and export currency configuration.
Due Date Expense date

Card transactions

Company card transactions export as Spend Money bank transactions. Card credit notes export as Receive Money.

Xero data Perk expense data Description
Account (type BANK, account type CREDIT CARD) Company card Internal identifier mapped to the Xero Credit Card Account.
Date Expense date
Spend vs Receive Money n/a SPEND for regular expenses, RECEIVE for credit notes.
To Submitter Internal identifier mapped to the Xero user.
Amount (per line item) Amount per line item Calculated via the journal entry functionality.
Account (per line item) Category per line item
Category (header) n/a From the cost object or custom field identifier.
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.
Total Tax n/a Calculated in Xero.
Reference Expense ID
Description (per line item) Merchant name
Amount Currency n/a Based on expense currency and export currency configuration.

Travel expenses

Travel expenses export as Spend Money bank transactions. Travel credit notes export as Receive Money. Same fields as card transactions, except the account:

Xero data Perk expense data Description
Account (type BANK, account type BANK) Transfer account (travel provider configuration) The Transfer account value maps to an expense category ERP code in Perk.

Currency and tax

Depending on the posting strategy in company settings, Perk exports each expense in company currency, original receipt currency, or user currency. Perk sends the selected tax rate and Xero calculates the tax.

Was this article helpful?