Import ledger transactions from Xero

Batch journal import brings a ledger's transaction history into Prosaic in one go. Each journal posts to the ledger on its original date, and the journals list shows the whole import as one entry, so you don't end up with thousands of manual journals.

It's most useful when you're moving a client to Prosaic and want their past transactions available in reports and the general ledger, not just their opening balances. At the moment it imports Xero's General Ledger Detail report. Support for other systems is on our roadmap.

This article covers how the import fits with your opening balance and conversion date, how to export the report from Xero, the import steps, and how GST and tracking categories are handled.

Moving from another system?

Batch journal import only accepts Xero's General Ledger Detail report for now, so other files are turned away at upload. A CSV template for other systems is on our roadmap. In the meantime, let us know which system you're moving from using the 💬 button.

Need to import tracking categories from Xero?

Tracking categories aren't imported yet, so imported lines carry no dimensions. Support is coming soon. If you see Tracking Transfers when you map accounts, the client uses tracking categories in Xero, and for now you can map it to a suspense account. More on tracking categories

In this article


How it fits with your opening balance and conversion date

A full conversion has three parts, and each one covers a different stretch of time:

  • The opening balance journal is a single point in time. It comes from a Xero trial balance and sets every account's balance on one date.
  • The batch import is the movement after that point: every transaction from the day after the opening balance, up to the day before you convert.
  • The conversion date is where Prosaic takes over. You reconcile bank transactions from this date forward.

For example, for a client with a 31 March year end who is starting in Prosaic on 1 April 2026, with one full comparative year:

Date What goes in Where it comes from
31 March 2025 Opening balance journal Xero Trial Balance as at 31 March 2025
1 April 2025 to 31 March 2026 Batch import Xero General Ledger Detail for those dates
1 April 2026 onwards Conversion date. Code bank transactions in Prosaic from here Bank feeds

Get these dates to meet exactly. A gap leaves transactions out, and an overlap counts them twice.

The General Ledger Detail only contains movements, not the balances accounts started with. Without an opening balance journal, your balance sheet won't agree to Xero. See Importing conversion balances into Prosaic or Migrating a client from Xero to Prosaic. In this flow, date the opening journal on the last day before your history starts (31 March 2025 in the example), not on the conversion date, and make sure its lines carry no GST.

The conversion date also stops the history being counted twice. Bank feeds can bring in up to two years of transactions, but anything dated before the conversion date stays off the unreconciled screen. Those transactions are already in the ledger through the batch.

Why the General Ledger Detail report

Xero has several reports that look similar, but this is the one that carries everything the import needs in one file:

  • Journal ID, which ties each transaction's lines together so Prosaic can rebuild the journal and check it balances. The Account Transactions report doesn't have this.
  • Contacts, descriptions and sources, so the history is still readable when you look something up later.
  • GST and GST Rate Name on each line, so Prosaic can keep the GST coding Xero recorded.

It's the only file batch import accepts from Xero at the moment, and any other file is refused at upload.

Step 1: Export the report from Xero

Xero's default version of this report leaves out two columns the import needs and groups lines by account, so the settings below matter.

  1. In Xero, go to Reporting → All reports and open General Ledger Detail.
  2. Set the date range to the history you're bringing across, ending the day before the conversion date. In the example above, that's 1 April 2025 to 31 March 2026.
  3. Under Columns, tick every column. Xero leaves Account Code and Journal ID out by default, and the import can't run without them.
  4. Set Grouping/Summarising to None, then select Update.
  5. Select Export, then Excel.

✅ Upload the file exactly as Xero writes it. Prosaic checks the lines against Xero's own Net movement figure, so there's no need to tidy the file or remove the title rows. Some Xero totals show as 0.00 in the file. That's expected, and Prosaic doesn't use them.

Each file can have up to 20,000 lines and be up to 10MB. For a larger ledger, export shorter date ranges and import each one as its own batch.

Step 2: Run the import

Before you start, make sure the entity has its chart of accounts in place and these two dates set in its settings: Conversion Date and Start GST Returns From (if it's registered for GST).

Go to Journals → Import, choose History from another system, then select the entity.

Choose how GST comes across

Choose Import GST on line items (recommended) or Import every line as No GST. How GST works explains the difference.

Upload and check

Upload the Excel file and look over the preview. If columns are missing, Prosaic tells you which ones so you can export the report again.

Map accounts

Every account in the file needs a home in the entity's chart. Prosaic matches what it can automatically, and you can switch Match by between Account name, Account code and Mapped code. If you built the chart template from the client's Xero chart, Mapped code is usually the quickest.

For anything left over:

  • Choose the account yourself from the Entity account column.
  • Select Suggest unmapped with AI. Suggestions are labelled so you can check them before you continue.
  • If the account doesn't exist yet, select Add an account, create it, then select Refresh accounts.

Matches labelled Similar name are a best guess, so give those a closer look.

Review, then post or save as a draft

The review shows the number of journals and lines, the date range, whether the batch balances, and a trial balance of what will post. Then either:

  • Select Post batch to post every journal to the ledger on its own date. This runs in the background, and the journals list shows its progress.
  • Select Save as draft to post it later. Nothing reaches the ledger until you do, and Prosaic checks the draft again when you post it.

Prosaic checks the whole file before anything posts. Every journal has to balance to the cent, be dated before the conversion date, and not already be in another posted or draft batch. If anything fails, nothing is posted and every problem is listed, so you can fix it and upload again.

Unpaid invoices and bills come across as balances only. If the batch leaves a balance on Accounts Receivable or Accounts Payable, the review warns you. Anything still unpaid at the conversion date won't exist in Prosaic as an invoice or bill, so when the payment comes through, code it to that Accounts Receivable or Accounts Payable account rather than to income or expenses.

Clients on the payments basis can bring unpaid sales invoices across as open invoices instead, using the Accounts Receivable feature, which is still in beta. See Migrating a client from Xero to Prosaic.

Tracking categories and "Tracking Transfers"

Tracking Transfers is a system account Xero uses to keep journals balanced across tracking options. Mapping it to a suspense account keeps the batch balanced and your totals in agreement with Xero, with the amount sitting in suspense instead of Tracking Transfers. Any tracking columns in the file are ignored.

If the client's chart doesn't have a suspense account, use Add an account at the mapping step to add one.

The reason for the limit: when one Xero journal is split across tracking options, say Property A and Property B, the report writes "Multiple Categories" on the other side of the entry. That means the tags can't be rebuilt in a way that balances for each option. If you need history by tracking option in the meantime, keep those reports from Xero. Dimensions work as usual on new transactions from the conversion date.

How GST works

The two options

Import GST on line items (recommended) keeps the GST coding from Xero, so you can look back at how something was treated and reports show net and gross amounts. Xero writes its GST as separate lines on the GST account. Prosaic replaces those with a GST line linked to the item it belongs to, using Xero's exact amount, so GST isn't counted twice and nothing changes through rounding. For example, a $12.00 travel expense:

In Xero's report Posted in Prosaic
Business Bank: Cr 12.00 Business Bank: Cr 12.00
Travel: Dr 10.43 Travel: Dr 10.43, coded 15% GST on Expenses
GST: Dr 1.57 GST: Dr 1.57, linked to the Travel line

Anything else posted to the GST account, such as a payment to or refund from IRD, comes through as it is. If a journal's GST lines don't match the GST on its items, Prosaic stops the batch and lists it.

Import every line as No GST brings every line in exactly as it appears in the file, GST account lines included. Balances still match Xero, but historical transactions all show as No GST, even if GST applied at the time.

What this means for GST returns

Your GST history stays with the returns already filed from Xero, and Prosaic's returns pick up from the Start GST Returns From date on the entity. Imported journals count towards GST returns like any other journal, so the dates have to be right:

  • With Import GST on line items, every line coded with a GST rate has to be dated before Start GST Returns From. Zero-rated lines count too.
  • If any fall on or after that date, the import stops and lists them, because that GST would otherwise turn up in Prosaic's returns as late claims. To fix it, import only the history before that date, change the date if it's wrong, or import every line as No GST.
  • With Import every line as No GST, the lines carry no GST rate, so they add nothing to a return.

In the example above, setting Start GST Returns From to 1 April 2026 means nothing from the batch appears in a Prosaic return, and your first Prosaic return starts clean. See GST Returns for how those work from there.

Converting part way through a GST period? Prosaic's first return won't include the imported part of that period. Where you can, convert on the first day of a GST period. Otherwise, add the earlier part to that return as an adjustment.

The GST account's balance at the conversion date is whatever Xero left owing or refundable. When that amount is paid to or received from IRD, code the bank transaction to the GST account so the balance clears.

Comparing GST with Xero

You can generate GST returns over the imported period to compare Prosaic's GST with Xero's. Because you can't import GST-coded lines on or after Start GST Returns From, you import first and move the date afterwards. Do this while you're testing Prosaic with the entity, or set up a second entity just for the comparison.

  1. Set Start GST Returns From to a date after the history, for example 1 April 2026.
  2. Keep every GST return as a draft. Prosaic won't let you move the date back over a finalised return.
  3. Import the General Ledger Detail, for example 1 April 2025 to 31 March 2026, using Import GST on line items.
  4. Change Start GST Returns From to the start of the history, for example 1 April 2025. Prosaic removes the draft returns and regenerates them from the new date, so you get draft returns for the historical periods to compare with Xero.

Imported periods show GST on an invoice basis. The report brings in journal movements only, so Prosaic has no past invoices or bills to match payments against. GST on sales and expenses shows on the date of the invoice or bill, and recalculating it on a payments basis would need those historical invoices matched to every Accounts Receivable and Accounts Payable journal.

To compare, you need to see the GST in Xero on an invoice basis too. If the business uses invoices or bills and its returns were filed from Xero on a payments basis, those returns won't match what you see in Prosaic.

If the business doesn't use invoices or bills in Xero and only works on a cash basis, the imported transactions may match the GST returns generated in Xero.

After you post

Check it ties to Xero

Run the Trial Balance in Prosaic as at the day before the conversion date, and compare it line by line with Xero's at the same date. In the example, that's 31 March 2026. They should agree, apart from any accounts you combined at mapping and any Tracking Transfers balance, which now sits in suspense.

Find the batch

The batch appears as one entry in the journals list. Opening it shows Summary (the key facts and a trial balance), Detail (every line) and Activity. You can also rename the batch and download the original file, which is saved to the entity's Files.

Each journal also appears individually in the general ledger and reports on its own date. Its narration starts with the Xero journal number, for example Journal 455 , so you can trace it back to Xero.

Fix a mistake

Journals from a batch can't be edited one at a time, because that would put the ledger out of step with the imported file. If something's wrong, select Void batch on the batch's page. This reverses every journal on its own date and takes them out of the ledger and reports. You can then import a corrected file.

Corrections that belong in the new system, like reclassifying an account, can go in a manual journal instead.

Need help?

We're happy to walk through a first import with you. Use the 💬 button in the app or email help@prosaic.works, and let us know how you find it. Your feedback shapes what we build next.

Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.

Still need help? Contact Us Contact Us