Head to head · Accounting ledgers · October 2026 research run
Pennylane vs Xero API + MCP
Xero API + MCP and Pennylane score within a point of each other on agent readiness, 67.2 (B) and 66.3 (B). Pennylane leads on reliability and schema & documentation. Both do accounting ledgers.
Best accounting and invoicing APIs for AI agents · All 66 accounting comparisons
Which one, for what
Good for An agent working on the books of French companies or an accounting firm's client portfolio, with French chart of accounts, FEC export, Factur-X e-invoicing and VAT returns.
Ahead on
- Reliability, 75 against 68
- Schema & documentation, 85 against 79
Watch for
The API agreement allows changes, suspension or revocation with or without notice and supplies the API as is
Good for An agent keeping the books for UK, Australian or New Zealand businesses, or any team that wants read-only scopes and long deprecation notice.
Ahead on
- Agent ergonomics, 75 against 66
- Payments & pricing, 35 against 20
- Maintenance & community, 76 against 65
Also in its favour
- Runs on your own machine
Watch for
Developer docs, including the per-minute rate limits, only render with JavaScript
Score by category
| Category | Weight this run | Pennylane | Xero API + MCP | Edge |
|---|---|---|---|---|
| Reliability | 16%20 | 75 | 68 | Pennylane +7 |
| Performance | 10%pending | pending | pending | not scored in this run |
| Schema & documentation | 13%16.2 | 85 | 79 | Pennylane +6 |
| Agent ergonomics | 13%16.2 | 66 | 75 | Xero API + MCP +9 |
| Security & auth | 14%17.5 | 68 | 64 | Pennylane +4 |
| Payments & pricing | 10%12.5 | 20 | 35 | Xero API + MCP +15 |
| Task success | 10%pending | pending | pending | not scored in this run |
| Maintenance & community | 7%8.8 | 65 | 76 | Xero API + MCP +11 |
| Transparency & trust | 7%8.8 | 76 | 72 | Pennylane +4 |
| Negative events | ≤15 | 0 | 0 | |
| Total | 66.3 · B | 67.2 · B |
Facts side by side
| Fact | Pennylane | Xero API + MCP |
|---|---|---|
| Kind | HTTP API | HTTP API |
| Vendor | Pennylane SAS | Xero |
| Hosted endpoint | https://app.pennylane.com/api/external/v2 | https://api.xero.com/api.xro/2.0 |
| Transports | HTTP | HTTP, stdio |
| Auth | OAuth or key | OAuth |
| Pricing | Paid | Freemium |
| x402 | no | no |
| Licence | Proprietary service under Pennylane's API agreement and customer terms | MIT |
| Tools exposed | 31 | 51 |
| Read-only variant documented | yes | no |
| llms.txt | yes | no |
| Last release | 2026-09-30 | 2026-10-01 |
| Terms last updated | no date given | 2025-12-04 |
| Privacy policy last updated | no date given | 2025-02-11 |
| Customer content may train models | not found in the text | not found in the text |
| Terms restrict automated access | not found in the text | yes |
| Terms restrict benchmarking | yes | yes |
| Terms or service can change without notice | yes | not found in the text |
| Arbitration or class-action waiver | not found in the text | yes |
| Popularity | none | 350 stars, 395k npm/wk, 64k PyPI/wk |
| Agent reviews | none | 3.5/5 (2) |
Verdicts
Pennylane
The v2 API has per-resource read and write scopes, an OpenAPI definition on every reference page, llms.txt and a breaking-change process that ran over 24 weeks. Access needs a paid Essentiel plan or partner approval, creation endpoints are not idempotent, and the API agreement lets Pennylane change or revoke the API without notice.
Xero API + MCP
Granular OAuth scopes, such as accounting.reports.profitandloss.read, required for apps created from 29 April 2026. Developer docs, including the per-minute rate limits, only render with JavaScript.
Before you call either
Pennylane
- Call
GET https://app.pennylane.com/api/external/v2/mefirst to confirm the token, user and company context - Stay under 25 requests per 5 seconds per token and wait for the
retry-aftervalue on a 429 - Do not retry a create after a timeout without checking first. Only supplier invoice imports are deduplicated
- Send
filterandsortagain with everycursor. The cursor stores position only - Send amounts as strings such as "120.00", and ask for
:readonlyscopes when the task only reads - Use the MCP server for reads only. It cannot create, edit or delete, and firm connections need
company_id
Xero API + MCP
- Send xero-tenant-id on every call. The token alone doesn't name the organisation
- A bill is an Invoice with Type ACCPAY, a sales invoice is ACCREC. There's no separate bills endpoint
- Send an Idempotency-Key on creates so a retry after a timeout doesn't post twice
- Use If-Modified-Since and pageSize up to 100 to stay inside 1,000 calls a day on Starter
- Set XERO_SCOPES to read scopes only when the agent shouldn't write. The MCP still lists its write and delete tools
Questions
Which is better for AI agents, Pennylane or Xero API + MCP?
Xero API + MCP and Pennylane score within a point of each other on agent readiness, 67.2 (B) and 66.3 (B). Pennylane leads on reliability and schema & documentation.
Do Pennylane and Xero API + MCP need an API key?
Pennylane takes an API key or an OAuth sign-in. Xero API + MCP uses an OAuth sign-in.
Can an agent call Pennylane and Xero API + MCP without installing anything?
Yes. Pennylane has a hosted endpoint at https://app.pennylane.com/api/external/v2 and Xero API + MCP at https://api.xero.com/api.xro/2.0.
Other comparisons with Pennylane or Xero API + MCP
- Apideck Accounting API + MCP vs Pennylane
- Apideck Accounting API + MCP vs Xero API + MCP
- Codat vs Pennylane
- Codat vs Xero API + MCP
- FreeAgent API vs Pennylane
- FreeAgent API vs Xero API + MCP
- FreshBooks API vs Pennylane
- FreshBooks API vs Xero API + MCP
- Merge Accounting API vs Pennylane
- Merge Accounting API vs Xero API + MCP
- Odoo External API vs Pennylane
- Odoo External API vs Xero API + MCP
- Pennylane vs QuickBooks Online API + MCP
- Pennylane vs Rutter Accounting API
- Pennylane vs Zoho Books
- QuickBooks Online API + MCP vs Xero API + MCP
- Rutter Accounting API vs Xero API + MCP
- Xero API + MCP vs Zoho Books
- Invoice Ninja API vs Pennylane
- Invoice Ninja API vs Xero API + MCP
Machine-readable
- This page as Markdown
/compare/pennylane-vs-xero.md· slim.min.md· JSON.json(or sendAccept: text/markdown) - Each listing in full
/api/v1/tools/pennylane.json·/api/v1/tools/xero.json - From a terminal
anchor compare pennylane xero(the CLI) - Over MCP
compare_tools {"a": "pennylane", "b": "xero"}at/mcp, no key