Ledgr/Documentation/Banking

Banking & reconciliation

Watch the 2 lessons: Import a bank statement (1:49), Reconcile lines and create a bank rule (1:57).

Get the statement in — however your bank gives it to you — accept the matches Ledgr suggests, and turn the ones that repeat every month into rules.

Unreconciled · FNB Business Cheque
ACME PTY LTD EFT
12 Jul · suggested: INV-2026-0184
R 62 790
98%
TELKOM DEBIT ORDER
10 Jul · rule: Telecom
−R 1 249
Rule
CARD 4471 ENGEN
09 Jul · receipt attached
−R 842
Review
Accept 12 matches New rule
Plan.

Banking & reconciliation is included from Starter upwards.

Add a bank account

  1. Banking → Add Account
  2. Choose the bank

    FNB, Standard Bank, ABSA, Nedbank, Capitec, Investec, TymeBank, Discovery Bank or African Bank.

  3. Name it the way you think of it

    "FNB Business Cheque" beats "Account 1" when you are matching six months later.

  4. Set the type

    Cheque, Savings, Credit, Loan or Instalment sale. A Credit account is a credit card and is kept as a liability: a purchase on it increases what you owe on the card rather than reducing your cash, and paying the card off lowers both together. A Loan is owed on Long-term Loans; an Instalment sale (vehicle finance, for example) is owed on Instalment Sale Liabilities, where an asset bought on hire purchase is already recorded, so one finance agreement is never split across two accounts.

An account can be kept in another currency.

Choose the currency when you add the account. Its lines reach the books in rand at the rate for each line's own date, and Ledgr asks for a rate it does not have rather than assuming one. The currency cannot change afterwards, because every line on the account was imported in it.

Three ways in

Everything to do with getting transactions into Ledgr lives on one tab — Banking → Import & Export — because to you it is one question: how does my bank get into Ledgr?

RouteHow it worksWhich banks
Upload a file Choose the account, drop the file in, review the preview, import. All nine
Email it in Have your bank email the statement to your company's Ledgr address, or forward it. It reads itself and either imports or waits for one click. All nine — every one of them will email a statement on a schedule
Connect a feed Read-only keys you create yourself. Ledgr then pulls transactions four times a day. Investec only

Whichever route a transaction arrives by, it is de-duplicated against what is already there. The same payment cannot land twice because you imported the PDF and the CSV of the same month. A payment you recorded against a bank account — a bill paid from it, an invoice payment received into it, a lay-by payment or a hire deposit taken into it, or either refunded from it — is already a line on that account, so the bank's statement confirms that line rather than adding a second. So does a line you keyed in by hand: when the statement carries the same amount, in the same direction, within a day before or a week after your date, the bank's line takes its place — in the bank's own words — instead of being added beside it. If two of your lines could be the one, Ledgr adds the bank's line and leaves the choice to you. A line a payment wrote cannot be deleted while that payment stands: remove the payment where it was recorded, and its line goes with it.

Upload a statement

  1. Get the statement from your bank

    Whatever your bank actually gives you. Ledgr reads five kinds of file:

    • The PDF your bank emailed, or a scan or photograph of a printed one
    • OFX or QFX — the accounting export most business portals offer
    • OFC — which matters because Nedbank and FNB business banking offer it, and on some portals it is the first download in the list
    • QIF
    • CSV, including the headerless enterprise exports FNB and Standard Bank produce

    You do not have to know which one you have. Ledgr works it out from what is inside the file rather than from its name.

  2. Banking → Import & Export, then pick the account and the file
  3. Map the columns, only if the preview gets them wrong

    For a CSV whose layout Ledgr does not already know, open Map the columns by hand and say which column is the date, which is the description and which is the amount — one signed column, or debits and credits in their own columns — and whether the first row is a header. The mapping is remembered on that account once an import with it reads at least one line, so next time the card opens with your columns already chosen. For a PDF, an OFX, an OFC or a QIF there is nothing to map.

  4. Review the preview and import

    The preview writes nothing. It tells you how many transactions were read, whether they reconcile to the closing balance the bank printed, and how many are duplicates of lines already in Ledgr — so re-importing an overlapping date range is safe. Once imported, Ledgr keeps the closing balance the statement states, with the day it is as of, and the period it covers; the account’s bank balance is the newest of that and the last line’s printed balance. A QIF file carries no balance at all, so Ledgr says so and its period is its first and last transaction. A statement should open where the last one closed: when it does not, the preview and the import say so, naming both balances and the days no statement covers, and the bank line of the ledger health check repeats it until the statement in between is imported — nothing is refused, so you can import out of order.

Why a PDF statement is not guesswork

Reading a statement off a page sounds like the least reliable route and is, in one specific way, the most checkable one: the bank prints a running balance. Every amount Ledgr takes off the page is derived from the step between one balance and the next — which is the bank's own arithmetic, not Ledgr's reading of a number.

Three things follow from that, and they are worth knowing because they are what you would otherwise have to check by hand:

  • Money in and money out cannot be inverted. The direction comes from whether the balance went up or down, so it does not depend on a Cr/Dr marker, a minus sign, or which column a figure sat in.
  • A misread digit is caught and corrected — and told to you, with what was read, what it became and the two balances that settle it. Nothing is quietly edited.
  • Where the evidence genuinely is not on the page, Ledgr refuses to guess. A statement with no balance column and no direction marker is imported with every row named and a warning saying so, rather than a confident half-right answer.
Statements from nine banks are tested against real exports.

FNB, Standard Bank, ABSA, Nedbank, Capitec, Investec, TymeBank, Discovery Bank and African Bank, in each format that bank publishes — including the awkward ones: a headerless FNB enterprise CSV, African Bank's year-first dates and signed amount column, and Discovery's statement, which prints no balance column at all.

Email the statement in

This is the route that covers every bank, and it is the one to set up if you only set up one. Your company has its own Ledgr email-in address — find it on Expenses → Inbox under Email-in address. Ask your bank to send your monthly statement there, or forward the one it already emails you.

An emailed statement reads itself and then does one of two things:

  • Imports on its own, but only when both tests pass: the bank's own closing balance proves the whole statement was read, and exactly one of your Ledgr accounts matches the account number printed on it.
  • Waits for one click, with the reason in words — the statement names no account number, or two of your accounts end in the same four digits, or it states no closing balance, or the rows do not add up to it, or it is longer than Ledgr reads in one pass.

When in doubt, Ledgr deliberately waits for review rather than importing: a statement waiting for a click is a mild annoyance, while one silently imported into the wrong account means books somebody has to unpick by hand.

Anyone with that address can send to it.

Treat it like a key. Nothing that arrives is a transaction until you accept it, but ask for a new address if it gets out. There is more in the document inbox.

Connect an Investec feed

Investec is the one South African bank whose customers can connect themselves, with read-only keys you create in Investec Online → Manage → Investec Developer → Business Connections. There is nothing to pay, no agreement with the bank and no third-party aggregator in the middle.

  1. Create the keys in Investec Online

    A client id, a secret and an API key, scoped to the accounts you tick. Tick the accounts you want in Ledgr — a key that can see none of them connects and then finds nothing.

  2. Banking → Import & Export → Connect your Investec account
  3. Say which Ledgr account each Investec account feeds

    Ledgr suggests the match from the account number and you confirm it. An unmapped feed imports nothing rather than guessing which of your accounts a transaction belongs to.

After that it pulls four times a day and re-reads a few days of overlap each time, so a transaction the bank posts with a back-dated value date is not missed. The overlap is de-duplicated against what you already have, including anything you keyed in by hand.

Why only Investec.

It is the only SA bank you can enrol yourself. Nedbank, Standard Bank and ABSA publish developer portals but need an onboarding agreement; FNB's accounting feed is a partner programme with no public portal; Capitec, TymeBank, Discovery and African Bank publish nothing. Every aggregator that papers over this charges per connection, and Ledgr will not ask for your online banking password to scrape the site — so for the other eight banks the emailed statement above is the automatic route.

Reconcile

Imported lines land in the unreconciled list, each with a suggested match and a confidence score. Three things you can do with a line:

  • Accept the suggestion — the transaction is matched to that invoice, bill or expense and the document settles
  • Choose a different match — search for the right document and match it manually
  • Categorise it directly — for spend with no document behind it, like bank charges
  • Post it to an account — for money in that is not a customer paying an invoice, such as interest or a deposit: choose the income account it belongs to and the line is booked, at the line’s own rate on a foreign account. A category on its own books nothing, so money in is never matched by a category alone
  • Pay for goods you received without an order — post the payment to Purchases and, when goods are waiting for an invoice, name the product and how many it paid for. The goods leave Goods Received Not Invoiced, so they are neither owed twice nor counted as a cost before they are sold. Name them one line at a time; a bank line cannot be posted straight to Goods Received Not Invoiced
  • Paid for another company — where several companies share one account and this one paid another’s bill: choose the company and the expense account in its books, and the line is booked in both. This company is owed the money back and the other company has the cost; see Inter-company transactions

A line for part of a bill. Match a debit to a supplier bill for what the bank moved: a line for all that the bill still owes settles it, and a line for less is recorded as a part payment on it — the bill stays due, owing the rest, on its page, the supplier’s statement and the aged creditors. A line for more than the bill owes is refused. Unmatching the line takes the part payment back off the bill. A line cannot be coded straight to Trade Payables, Trade Receivables, Petty Cash, Inventory or Work in Progress: each is the total of its own register, so Ledgr asks for the bill, the invoice, the petty cash float or the stock purchase instead. Nor can it be coded to Income Tax Expense: money paid to SARS for income tax is coded to Income Tax Payable, which it settles, and the year's expense is posted from the Income Tax tab on the Income Tax tab of the SARS centre.

A fuel-card line coded as fuel settles the fill a driver already logged for that amount in the week before, rather than recording the fuel a second time.

Tick several rows and accept them in one action when the suggestions are obviously right. The reconciliation ring on the account shows how much is still outstanding.

Signing off a statement. Start a reconciliation with the statement’s opening and closing balances, tick the lines the statement shows, and finalise. Ledgr signs it off only when the statement opens where the last one you signed off closed, its balances are the ones the bank printed (on the imported lines, or the closing balance an OFX or OFC statement states), and the books agree with the statement once the items the bank has not shown yet are allowed for. Otherwise it tells you why — for a line you ticked that records nothing in the books, it names the line: code it or match it, then finalise. The report lists those lines under Cleared but not in the books. A foreign-currency account is reconciled in its own currency: a dollar statement is set against the dollars the books hold, never their rands.

Reconcile weekly, not at year end.

A week of transactions is recognisable. Nine months of them is archaeology, and the suggestions get worse the further you are from the event.

An overdue statement says so. Each account expects a statement every so many days — a month unless you change it when editing the account. When an open account’s newest line is older than that, its card on the dashboard says so and whoever looks after banking is emailed once; importing a newer statement clears it. Turn the email off under Settings → Notifications (A bank statement is overdue). A closed account is never flagged.

Bank rules

A rule is a description pattern plus what to do when it matches. The debit order that arrives every month with the same reference should be a rule after the second time you code it by hand.

  1. Banking → Bank Rules → New Rule
  2. Set the conditions

    Ask about the description, the reference, the amount or whether it is money in or out. An amount is compared by size, so "is more than" and "is less than" work for money in and money out alike, and the two together make a range. Choose whether a line must meet all of the conditions or any one, and whether the rule is for one account or for every account.

  3. Set the action

    The category to post to, and optionally what to create — an expense, a split across several accounts, a payment against the oldest open bill for a supplier, or a transfer between two of your own accounts. A transfer is recorded when the matching line on the other account is already in Ledgr, and is otherwise labelled for you to pair. A transfer into a Credit account is the card being paid off: what you owe on the card and your bank balance go down together.

  4. Preview, then apply

    A rule does not fire on its own unless you switch on Run this rule on lines as they arrive for it, which is off when a rule is made. Preview shows what rules would do to every unreconciled line — including the backlog a new rule would have caught — and Apply does it. Nothing is coded behind your back, and a rule you got wrong costs you a preview rather than an afternoon of unpicking.

A line a rule coded waits for you. Every line a rule has coded or created something for appears under Coded by a rule, waiting for you on the Bank Rules tab, with the rule that did it beside it. Check the category and what the rule made, then press Confirm (or Confirm all once you have checked the lot) and it leaves the list. A line you reconcile also leaves it, and a rule that codes a line again puts it back, so a wrong rule shows itself on the list instead of on the statement a month later.

Ledgr also proposes rules of its own: where the same description turns up three or more times among your uncategorised lines and no existing rule covers it, it appears in the suggestions panel for you to accept or dismiss.

The cash position

The banner at the top of the module holds every account with a sparkline of its recent movement and a consolidated total across all of them: what your books hold for those accounts, including any payment recorded without naming the account it went into, which the banner names separately. Underneath, the monthly inflow and outflow chart shows whether the trend is the right way up. The dashboard's Total Cash is the same books' figure for all your cash, so it also counts petty cash and leaves out a loan or instalment sale account.

Common problems

What you seeWhat to do
"Not a recognised bank statement"Ledgr reads the format from the file's contents, so this usually means the file is not the statement — a summary page, a proof of payment, or a spreadsheet somebody re-saved. Re-download it from the bank rather than exporting it out of a viewer.
Amounts import with the wrong signOnly possible on a CSV, and only from the column mapping — some banks use one signed column and others separate debit and credit columns. A PDF, OFX, OFC or QIF takes its direction from the bank's own figures and cannot be inverted.
No suggestion on an obvious paymentThe amount probably differs from the invoice total because of a gateway fee. Match it manually and record the fee as a bank charge.
Duplicate transactionsOnly if the description and amount differ slightly between exports. Delete the duplicates and re-import the cleaner file.