Xero to Excel: How to Export Reports, Pull Data With the Xero API and Post Back From Excel

Getting Xero to Excel is easy for one report and fiddly for almost everything else. Invoice exports stop at 500 transactions, the Xero API has daily call limits and new paid tiers, and since 2026 the full journal stream is a premium endpoint. Here are the main routes, free ones first, with the limits that decide between them.

Last checked: 16 September 2026. We make one of the routes, HISAB 360, so it comes near the end with its limits spelt out.

How do I connect Xero to Excel? The short answer

Excel has no built-in Xero connector, so you export from Xero, use an app or connector, call the Xero API, or use a two-way add-in. The free routes are Xero's own exports and CSV imports, plus the API on Xero's no-fee Starter tier.

RouteDirectionCostRefreshMain limit
Report export (PDF, Excel, Google Sheets)Xero to ExcelIncluded in XeroExport againOne formatted report at a time
List exports (invoices, bills, contacts, accounts)Xero to ExcelIncludedExport againInvoices and bills: CSV, 500 per export
General ledger exportXero to ExcelIncludedExport againAdministrator role; format set by the target product
Xero App Store Excel appsMostly Xero to ExcelApp subscriptionVaries by appA third party holds a connection to your organisation
Third-party two-way connectors (for example CData)BothSubscription or limited free planRefresh from ExcelA third party holds the connection; check which platforms it covers
Xero API with Power QueryXero to ExcelFree on Xero's Starter developer tierManual; tokens last 30 minutesDeveloper setup; 1,000 calls a day; Journals is premium
CSV import templatesExcel to XeroIncludedNot applicableInvoices, bills and journals arrive as drafts; about 500 items per file; 300 lines per journal file
HISAB 360 (two-way add-in)BothPaid add-in; 15-day full trial, no card requiredRe-run on requestWindows desktop Excel only; your own Xero app; no Journals on new connections

How do I export from Xero to Excel?

In the Reporting menu select All reports, open the report, click Export and choose Microsoft Excel, per Xero Central's export and print article.

Which Xero reports should you export for a backup or at year end?

Xero's guide to exporting data says you are responsible for your own backups and recommends these reports:

How do I extract transactional data from Xero?

Export each list from its own screen, and use the Account Transactions report or the general ledger export for everything posted.

Xero Excel integrations on the Xero App Store

The Xero App Store's Excel integrations collection includes reporting add-ins such as Scott's Add-ins and XPNA, and data feeds such as OdataLink and SyncHub. We have not tested them, so ask each one: does it write back or only read, does it refresh on a schedule, does it run on Mac and the web, and how is it priced per organisation?

Outside that collection, CData sells a Xero add-in for Excel that it describes as two-way and available for Excel on Windows, Mac and the web.

Xero's Microsoft 365 route. On 1 July 2026 Xero announced a Microsoft 365 integration that puts its JAX agent inside Microsoft 365 Copilot at launch. Live Xero data in Excel tables for forecasting is something Xero says the integration builds towards, not a launch feature, and no plan or licence requirements are given. For AI chat routes, see our MCP options comparison, which covers Xero.

Can you connect Xero to Excel with the Xero API and Power Query?

Yes, but you build it yourself. Microsoft's Power Query connector list has no Xero connector, so you call the Xero Accounting API with Web.Contents. New to Power Query? Start with our beginner's guide.

  1. Create a developer app. There is no simple Xero API key: you register an app at developer.xero.com and follow the Xero API documentation for OAuth 2.0, using a client secret or PKCE for desktop apps. Test against Xero's demo company, as its getting started guide suggests.
  2. Choose scopes. Request accounting.invoices.read (new apps use granular scopes) plus offline_access for a refresh token.
  3. Get your first token outside Excel. Power Query cannot run Xero's sign-in, so use Xero's Postman collection, which walks you through getting an access token and your tenant ID from GET https://api.xero.com/connections. Access tokens expire after 30 minutes; refresh tokens last 60 days, and each refresh returns a new one to save.
  4. Send three headers on each call: Authorization: Bearer plus the token, xero-tenant-id, and Accept: application/json.

This query pulls every invoice and bill into a table. Paste it into Data > Get Data > From Other Sources > Blank Query > Advanced Editor and replace the two placeholders. If Excel asks how to connect, choose Anonymous: the token travels in the header.

let
    AccessToken = "PASTE-ACCESS-TOKEN",
    TenantId = "PASTE-TENANT-ID",
    GetPage = (pageNumber as number) as list =>
        let
            Response = Json.Document(
                Web.Contents(
                    "https://api.xero.com/api.xro/2.0/",
                    [
                        RelativePath = "Invoices",
                        Query = [page = Number.ToText(pageNumber)],
                        Headers = [
                            Authorization = "Bearer " & AccessToken,
                            #"xero-tenant-id" = TenantId,
                            Accept = "application/json"
                        ]
                    ]
                )
            )
        in
            Response[Invoices],
    Pages = List.Generate(
        () => [PageNumber = 1, Rows = GetPage(1)],
        each List.Count([Rows]) > 0,
        each [PageNumber = [PageNumber] + 1, Rows = GetPage([PageNumber] + 1)],
        each [Rows]
    ),
    AllInvoices = List.Combine(Pages),
    ColumnNames = List.Distinct(List.Combine(List.Transform(AllInvoices, Record.FieldNames))),
    Invoices = Table.FromRecords(AllInvoices, ColumnNames, MissingField.UseNull)
in
    Invoices

It requests page after page until one comes back empty, and collects column names from every invoice because Xero leaves empty fields out. The Invoices endpoint returns 100 per page with line items included (pageSize changes that). Sales invoices and bills share the endpoint and are told apart by the Type column (ACCREC or ACCPAY); expand LineItems and Contact in the editor. For dates, set DateString and DueDateString to type Date: Date and DueDate arrive as /Date(...)/ text.

Treat it as a one-off pull. Power Query cannot store Xero's rotating refresh token, so next month you fetch and paste a fresh token. Never save a live token in a shared workbook.

VBA instead of Power Query. A macro can call the same API, but you write the sign-in, token refresh, JSON parsing and paging yourself, and VBA does not run in Excel for the web; see VBA vs Office Scripts vs Python.

Reports through the API. The Reports endpoints cover Profit and Loss, Balance Sheet, Trial Balance, aged reports by contact and a few summaries, but no General Ledger or Account Transactions report.

Xero API limits and pricing tiers in 2026

Xero limits calls per organisation and per app. Figures from its API limits page and developer pricing page:

LimitValue
Calls in progress at once, per organisation5
Calls per minute, per organisation60
Calls per day, per organisation1,000 on Starter; 5,000 on Core and above
Calls per minute, per app across all organisations10,000
Maximum request size10 MB (Xero suggests batches of about 50 elements)
Connected organisations per appStarter 5, Core 50, Plus 1,000, Advanced 10,000, Enterprise unlimited
Uncertified apps per organisation2
Journals endpointAdvanced tier and above, after security assessment and use-case approval

Hitting a limit returns HTTP 429 with an X-Rate-Limit-Problem header, plus Retry-After (in seconds) for the minute and daily limits.

Tiers. The tier model took effect on 2 March 2026. New apps start on Starter, with no fee. Monthly fees are listed in Australian dollars, tax exclusive: Core A$35, Plus A$245, Advanced A$1,445, Enterprise on application. Paid tiers need a payment method and include a monthly allowance of data downloaded through the API (10 GB on Core), with extra usage charged per GB; some tiers also need app certification.

For Excel users: pulling one organisation's data fits within Starter, but a practice connecting more than five client organisations to one app needs Core. Filter large pulls by date to stay under 60 calls a minute.

The Xero Journals change: what happened in 2026

The Journals endpoint returns every journal Xero posts, including those created from invoices, bills and payments. It is the API's closest thing to a general ledger feed, and it is now hard to reach. Manual journals have their own scopes and are not affected.

How do I import invoices, bills and bank statements into Xero from Excel?

Fill in Xero's CSV template, save it as CSV and import it on the matching screen.

ImportWhere in XeroRequired fieldsFile guidanceLands as
Sales invoicesSales > Invoices > ImportContactName, InvoiceNumberNo more than 500 itemsDraft
Bills and credit notesPurchases > Bills > New bill > Import from CSVContact NameSplit above 500 itemsDraft
Manual journalsJournal Report > Go to manual journals > ImportNarration, Date, AmountUp to 300 linesDraft
Bank statement (CSV)Bank accounts > Import a StatementDate, AmountUp to 100,000 rowsStatement lines

Import invoices into Xero

Download the template from the Import screen and keep its column headings. Each row is one line; repeat the invoice number for multi-line invoices, and numbers already in Xero are skipped. Dates follow your region's template: DD/MM/YYYY in Xero's Australian invoice import article and MM/DD/YYYY in the US one. Account codes and tax rate names must match Xero exactly, and amounts must be all tax-inclusive or all tax-exclusive.

Import bills and credit notes into Xero

Xero's bills import article says to enter credit notes as negative unit amounts and give each bill its own Invoice Number reference: rows sharing a reference are combined into one bill, even across contacts. You can drag and drop the file onto the import screen.

Import manual journals into Xero

Debits are positive and credits negative, and a row with blank date and narration joins the journal above. Tax rates can be left blank on import but are needed to post. With multicurrency, manual journals are base currency only, per Xero's manual journals article.

Import a bank statement into Xero

Go to Bank accounts, open the account's menu and choose Import a Statement (administrator or standard + bank accounts role). Xero's CSV statement article prefers OFX, QFX or QuickBooks files where your bank offers them. In a CSV, put income as positive and spending as negative in one Amount column, and delete balance columns, the account number and empty rows. Transactions matching ones already in Xero are skipped as duplicates.

One Excel trap: open the saved CSV in a text editor before importing, because Excel can rewrite dates in your PC's regional format when it saves.

How HISAB 360 handles Xero and Excel

HISAB 360 is an AI assistant add-in for Windows desktop Excel. For Xero it pulls data into worksheet cells and posts records from a staging sheet in your workbook, writing Xero's result back to each row.

Connecting. You create your own Xero developer app, add HISAB's localhost callback address as its redirect URI, enter the app's client ID (with a client secret, or PKCE without one) and authorise in your browser. Connections are read-only until you switch them to Read + Write. See the ERP connectors docs.

Reading. The AI fetches invoices, bills, credit notes, payments, bank transactions, contacts, items, accounts, manual journals, budgets and more, paging through Xero's 100-row responses. Reports include Profit and Loss, Balance Sheet, Trial Balance, Bank Summary and Executive Summary; aged reports come per contact, as the API provides them. Data lands as values, with no scheduled refresh: you re-run a saved automation, or make a total drillable so a double-click re-queries Xero.

Writing. Staging rows are validated, then submitted; the Xero ID, status and message come back to each row, and re-runs skip rows already posted. Duplicate submits are suppressed, a record type stops accepting writes after three failures in a row (a rate-limit error counts), and each write attempt is logged locally as a hash of the request and response, not the data itself. It creates invoices, bills, credit notes, manual journals, bank transactions, payments, contacts and more, and can update, void, delete, authorise or approve existing records and attach files.

What needs a click on a confirmation card:

You can limit each connection to the record types it may write.

The limits, plainly:

Good for: accountants who prepare invoice, bill or journal batches in Excel and want row-by-row results, or who pull Xero data into reconciliations. Not for: Mac or browser users, hands-off scheduled reporting, or anyone needing Xero's full journal stream. For wider context, see ERP and Excel integration and connecting QuickBooks to Excel and writing data back.

Which Xero to Excel route should you pick?

Xero is a trademark of Xero Limited. HISAB 360 is not affiliated with or endorsed by Xero.

Frequently asked questions

How do I export from Xero to Excel?

In Xero, go to Reporting, select All reports, open the report, click Export and choose Microsoft Excel. You need the administrator, standard + reports or viewer role. If some amounts show 0.00, click Enable Editing in Excel. Invoices, bills and contacts export separately, as CSV, from their own screens.

Can I export all data from Xero?

Not in one step. Xero says you export area by area: chart of accounts, contacts, invoices, bills and fixed assets, plus reports such as each year's Balance Sheet and Profit and Loss, the Trial Balance and Account Transactions. Invoice and bill exports stop at 500 transactions each, so larger histories need several batches.

How do I connect Xero to Excel?

Excel has no built-in Xero connector. You can export reports manually, use an Excel app from the Xero App Store or a third-party connector, call the Xero API from Power Query with an OAuth 2.0 access token, or use a two-way add-in. Choose by whether you need automatic refresh, write-back to Xero, and support for Mac or Excel for the web.

What are the API limits for Xero?

Per organisation, Xero allows 5 calls in progress at once, 60 calls a minute, and 1,000 calls a day on the Starter tier or 5,000 on Core and above. Each app is also capped at 10,000 calls a minute across all organisations. Going over returns HTTP 429, with a Retry-After header for the minute and daily limits.

Can I import bills into Xero?

Yes. Go to Purchases, Bills, New bill, Import from CSV, and download the template. Only Contact Name is required. Give each bill a unique Invoice Number reference, because rows sharing a reference are combined, and enter credit notes as negative amounts. Xero recommends splitting files above 500 items, and bills import as drafts to approve.

Try HISAB 360 on your own workbook

HISAB 360 is an AI assistant inside Windows desktop Excel for accountants and finance teams. It connects two-way to QuickBooks, Xero, Zoho Books, Odoo and FreshBooks. The 15-day trial is the full product, no card required.

Start free → See pricing