Can AI agents automate Xero?
Xero · saas · accountinginvoicing
Xero has a mature accounting developer platform spanning accounting, invoices, payments, contacts, bank transactions, reports, assets, files, projects, payroll, finance, bank feeds, and application administration. OAuth 2.0 supports user-authorized web and PKCE applications and client-credential custom connections, with offline refresh access and organization permissions. Official SDKs cover six common languages, and app-level webhooks push signed resource changes. Xero's open-source first-party MCP server is a broad local agent path: it reads accounting, reporting, contacts, payroll, and organization resources and creates or updates invoices, payments, contacts, bank transactions, credit notes, quotes, items, journals, tracking data, and payroll timesheets. Its official CLI exposes similar accounting work with PKCE profiles, encrypted token storage, JSON file input, and table, JSON, CSV, or compact agent output. The CLI is alpha, the MCP server is local rather than hosted, and payroll support is region-specific. Xero introduced connection- and egress-based developer pricing in March 2026 and is replacing broad Accounting API scopes with granular scopes through September 2027, so cost and permission migrations need active attention. Computer-use viability is unassessed.
Best path today: api · Overall automatability: 9/10
Modalities
| Modality | Status | Detail |
|---|---|---|
| API | yes | restoauth2 coverage: full · docs |
| SDK | yes | csharpjavajavascriptphppythonruby official: yes |
| MCP | yes | verdict: official |
| Integrations | unknown | |
| CLI | yes | |
| Extensibility | yes | app-store-appscustom-connections webhooks: True |
| Data access | export: api-json, cli-json, cli-csv · import: api-json, cli-json | |
| RPA / UI automation | unknown | web-dom No repeatable UI probe was run. Xero's REST APIs, SDKs, webhooks, official MCP server, and official CLI provide supported accounting automation without browser control. |
| Computer use | unknown | measured verdicts only — "unknown" means not yet probed by us |
Scores
| api | mcp | integrations | cli | rpa | computer use | overall |
|---|---|---|---|---|---|---|
| 9 | 8 | — | 7 | — | — | 9 |
Evidence
| Fact | Tier | Source | Date |
|---|---|---|---|
homepage | declared | source | 2026-08-16 |
platforms | declared | source | 2026-08-16 |
license | declared | source | 2026-08-16 |
modalities.api.exists | declared | source | 2026-08-16 |
modalities.api.kinds[0] | declared | source | 2026-08-16 |
modalities.api.auth[0] | declared | source | 2026-08-16 |
modalities.api.coverage | declared | source | 2026-08-16 |
modalities.sdk | declared | source | 2026-08-16 |
modalities.sdk.languages | declared | source | 2026-08-16 |
modalities.mcp.first_party | declared | source | 2026-08-16 |
modalities.cli.exists | declared | source | 2026-08-16 |
modalities.extensibility.scripting | declared | source | 2026-08-16 |
modalities.extensibility.webhooks | declared | source | 2026-08-16 |
modalities.data_access.export | declared | source | 2026-08-16 |
modalities.data_access.import | declared | source | 2026-08-16 |
verdict.scores.api | declared | source | 2026-08-16 |
verdict.scores.mcp | declared | source | 2026-08-16 |
verdict.scores.cli | declared | source | 2026-08-16 |
freshness.watch[0].url | declared | source | 2026-08-16 |
freshness.watch[1].url | declared | source | 2026-08-16 |
freshness.watch[2].url | declared | source | 2026-08-16 |
Last verified 2026-08-16 · volatility high · JSON record