Overview
The Xero integration syncs approved timesheets, overtime hours, and paid leave from TimeLeaf to Xero. This feature is available on the Professional plan and above.
Xero payroll sync works for AU, NZ, and UK organizations only. Xero has no payroll API for the US or Canada — connecting a US or Canadian Xero organization still works for basic accounting, but no timesheet, overtime, or leave data can be pushed to it. There is currently no direct payroll integration for US/CA Xero customers.
Connecting via OAuth
- Go to Settings > Integrations.
- In the Payroll section, click Connect on the Xero card.
- You are redirected to Xero's OAuth consent screen. Sign in with your Xero account and authorize TimeLeaf.
- If your Xero login has access to multiple organizations, choose the one to connect on Xero's own screen.
- You are redirected back to TimeLeaf, where the connection now shows as Connected along with your organization's name.
TimeLeaf requests scopes for payroll timesheets, employee read access, and organization details (used to detect your region). Tokens refresh automatically — Xero access tokens are short-lived (about 30 minutes) and refresh tokens rotate on every use, both handled transparently.
To disconnect, click Disconnect on the Xero card in the same section.
Region support
Xero's payroll API is region-specific. TimeLeaf reads your connected organization's country automatically and routes to the correct API:
| Region | Payroll sync |
|---|---|
| Australia | Supported |
| New Zealand | Supported |
| United Kingdom | Supported |
| United States | Not supported — Xero has no payroll API for US organizations (Xero partners with Gusto for US payroll, which is a separate product TimeLeaf does not currently integrate with) |
| Canada | Not supported — Xero has never offered native Canadian payroll |
| Any other/unrecognized region | Not supported — sync is skipped cleanly, no error |
If your organization's region isn't supported, connecting still succeeds (useful if you want basic accounting visibility), but no timesheet data will sync.
Earnings rate and payroll calendar configuration
Xero categorizes hours using earnings rates (pay items) and, for GB/NZ organizations, requires a payroll calendar. These are currently configured by your TimeLeaf administrator via deployment settings, not a self-service screen:
- Regular hours — an "Ordinary Hours" (or equivalent) earnings rate
- Overtime hours — a distinct overtime earnings rate, pushed as a separate line from regular hours
- Paid leave — a distinct leave earnings rate, pushed as a separate line
If you need these configured or changed, contact support with your Xero organization's earnings rate names.
How syncing works
Syncing is triggered by an administrator for a given pay period — it does not run automatically the moment a timesheet is approved. For each employee in the period:
- Regular and overtime hours are split and pushed as separate lines on the same Timesheet, using the daily/weekly overtime rules configured in your overtime policy.
- Approved paid leave is pushed as its own line, using a single shared leave earnings rate (all paid leave types share one rate; TimeLeaf does not currently distinguish leave types by their own Xero earnings rate). Unpaid leave is never synced.
- AU organizations use Xero's Payroll AU API (one Timesheet call per employee per week). GB/NZ organizations use Xero's Payroll UK/NZ API (a Timesheet is created, then its daily/rate lines are added).
Employee mapping
TimeLeaf matches employees to Xero by the employee ID field on their profile. To map or update an employee's Xero ID, go to Settings > Users, open the employee's profile, and set their Employee ID to match their Xero employee record.
Troubleshooting
If a sync reports failures, common causes are an employee missing their Xero employee ID mapping, or an expired connection that needs reconnecting. Failed entries are reported individually rather than failing the entire sync — everything that can sync, does.
An unsupported region (see above) is not a failure — it's a clean no-op. Nothing will sync and nothing will be reported as failed; if you expect data to sync but nothing appears, check your organization's country first.