Skip to content
Xero import error

Xero manual journal import: debit and credit must balance

Xero’s own help center states the rule for every manual journal in one sentence: “The total debits must equal the total credits before you can post the journal.” The same article documents something most guides miss: leave a journal’s Date and Narration cells blank on a row and Xero reads that row as continuing the journal above it, not as a new one — Accounting Import Check reads it exactly the same way.

Built for bookkeepers, accountants and small-business owners preparing a bank, invoice or journal file for Xero or QuickBooks Online.

Read from Xero Central, Xero’s own support siteAdd, import and post manual journalscentral.xero.com — read 15 September 2026

What this error means

A Xero manual journal is a set of lines that all belong to one entry, and Xero checks that they net to zero before it will post them: every debit added up must equal every credit added up. Xero’s import template lets you write that two ways — a single signed Amount column, or a separate Debit and Credit column — and checks the arithmetic the same way either time. The one convention that catches people out is how a journal’s lines are grouped at all: enter Narration and Date once, on the journal’s first row, then leave both cells blank on every row you want counted as part of the same journal. A row with a Narration or a Date on it starts a new journal instead.

What causes it, and what our engine actually checks

Accounting Import Check runs five separate rules over a journal template: journalUnbalanced totals every line’s debits and credits per journal and reports the exact amount they’re out by; debitAndCredit catches a single line carrying both a debit and a credit, which is two transactions written as one; debitCreditBothBlank catches a line carrying neither, which is a row with no value at all; accountCodeInconsistent notices the same line description posted to two different account codes, in case one of them is a typo; and dateMissing catches a blank Date cell that isn't Xero’s documented continuation shape — a blank Narration is required alongside it, or the row is just missing its date. Grouping a journal’s lines the way Xero itself groups them — by a blank Date and Narration, not by treating every blank cell as an error — is what keeps a correctly-formed journal from being reported as broken.

What the engine found in a sample file

Rows 1 and 2 carried a two-line journal, JNL-1 — 850.00 debited and 840.00 credited — flagged as journalUnbalanced and rated a blocker: it is out by 10.00. Row 3 carried both a debit and a credit on the same line, “45.00 / 45.00”, flagged as debitAndCredit. Row 4 carried no debit, no credit and no date at all, flagged as debitCreditBothBlank and dateMissing together — one broken row, two separate blockers. Rows 5 and 6 posted the same line description to two different account codes, flagged as accountCodeInconsistent, a notice rather than a blocker. The file’s overall verdict came back “not ready.”

journalUnbalancedBlocker1 and 2
debitAndCreditBlocker3

45.00 / 45.00

debitCreditBothBlankBlocker4
accountCodeInconsistentNotice5 and 6
dateMissingBlocker4

Blocker stops the import outright. Warning usually gets through but is worth checking before you trust the numbers. Notice is informational — safe to leave, safe to clear.

Reproduced from a sample file — read September 15, 2026.

Check your own file for this

Drop the file you were about to import below. It is read in this browser tab, the same engine runs the same check, and you will see immediately whether this exact problem is in it.

CSV, TSV or Excel, up to 20 MB

How to fix it by hand

Open the file in a spreadsheet program and re-total each journal’s Debit column against its Credit column — or, if you’re using a single signed Amount column instead, check that the journal’s own amounts sum to zero. Xero accepts either shape; it does not accept a mix that doesn't balance. On the first row of each journal, fill in Narration and Date; on every row after it that belongs to the same journal, clear both cells completely rather than leaving a Date and blanking only the Narration, which Xero reads as a new, dateless journal rather than a continuation. Keep the file to 300 lines or fewer — Xero’s own limit for a spreadsheet-editor template — and split a longer journal batch across more than one file.

Frequently asked questions

Why does Xero say my manual journal’s debits and credits don't match?
Xero’s own help center states it directly: “The total debits must equal the total credits before you can post the journal.” Xero totals every line in the journal and refuses to post it until the two sides net to zero, whether you wrote the amounts as a signed Amount column or as a separate Debit and Credit pair.
Why does leaving Date and Narration blank matter?
Because that is how Xero decides which lines belong to the same journal. Its own instructions say to enter Narration and Date once, on a journal’s first row, then leave both cells blank on every row you want imported as part of that same journal — a Date with no Narration, or a Narration with no Date, is not that shape, and Xero (and Accounting Import Check) reads it as a new journal starting instead.
Can Accounting Import Check fix an unbalanced journal automatically?
No, deliberately. It reports the amount a journal is out by, but which line is wrong is a judgement about the transaction, not something a file alone can settle — the tool would have to guess which side you meant, and guessing at your own bookkeeping is worse than asking.
Is there a limit on how big a journal import can be?
Yes — Xero’s own instructions: “When using a spreadsheet editor, such as Microsoft Excel, you can import up to 300 lines in one template file.” Accounting Import Check checks your file against that same limit and tells you before Xero does.

What Accounting Import Check does with this file

Accounting Import Check totals every journal in your file the same way Xero will, and tells you which ones don't balance and by how much before you import anything — using Xero’s own blank-Date-and-Narration convention to group the lines correctly, not a naive reading that would mistake a valid continuation row for a new, broken one. Every debit-and-credit, blank-line, inconsistent-account-code and missing-date finding is listed by row number.

The file you'd check is read in your browser tab — it is never uploaded anywhere.

What it cannot do here

The tool tells you a journal is out of balance and by how much; it never decides which side is wrong — moving 10.00 from the debit column to the credit column and moving it the other way both balance the journal, and only you know which account actually moved the money. Account codes flagged as inconsistent are a prompt to check, not proof of a mistake — reclassifying a line to a different account on purpose is legitimate.