Bank feeds and statements

Banking

The Banking page is where your real bank activity meets your books. Lines arrive, you (or your rules) say what each one is, and only then do they become bookkeeping.

Two ways in, one river

  • A connection brings activity in when you pull. kBooks reads your bank through SimpleFIN, a connection service you sign up for (and pay for) yourself: connect your banks there, create an app connection, and paste its setup token into kBooks once, from the Pull button beside the upload. The first pull lets you match each bank account to an account in these books. A connection belongs to the person who set it up: only they see the accounts at the service that these books do not pull (a personal account, another company's), and only they can link more. After that, Pull brings in what is new; turn on Pull automatically once a day in Books settings > Connections and the first opening of the books each day pulls for you. Banks publish new activity roughly daily.
  • A statement upload covers everything else. Download a statement (PDF or CSV) from your bank's website and drop it in. The reader works out the bank's format by itself, shows you what it found, and tells you if a page looks off, before anything is saved.

Both paths land in the same place, and kBooks removes duplicates, so a statement overlapping a feed does not double anything.

Spreadsheet files from anywhere. When you upload a CSV or Excel file you tell kBooks which column is which, once per account. It also works out how the file writes its dates and amounts. A date like 25/04/2026 can only be day first; when every date could be read either way (05/04 could be May 4 or April 5), kBooks picks the reading that keeps the statement within a few weeks, and if that does not settle it, it asks you and shows both readings beside each row. Every preview row says what its date means, so a file cannot come in a month off. Amounts written 1.234,56 and files that use semicolons read too. Your choices are remembered for that account.

A bank download in a different currency from the account is refused, so euros never land in a dollar account as dollars. Upload it to the account that holds that currency.

Skipped as already imported. After an upload, kBooks lists every line it skipped because the same line is already in the account: the same date, amount and description, or the bank's own transaction id on the same date and amount. If one of them really is a second, separate transaction, press Import anyway on its row: it comes into Review with that upload, and no rule adds it on its own. When a bank reuses its id for a different day or amount, the line comes in flagged Possible duplicate for you to decide.

The four tabs

  • Review is the inbox: lines waiting for your answer.
  • In the books holds every line whose money reached the books, of two kinds. Categorized lines are the ones you added, and Add created the entry. Matched lines are the ones kBooks paired with something that already existed (an invoice payment, a bill payment, a transfer between your own accounts); confirming a match creates nothing new, it just marks the existing entry as cleared by the bank. The selector beside the tabs shows one kind or both.
  • Excluded are lines you have set aside on purpose (a duplicate, a personal charge) with a note of why. They never reach the books.

When there is nothing left to do in a tab, Banking shows the account's Register instead of an empty table: after you handle the last line in Review, and when you switch to an account that has nothing in the tab you were on. Pressing a tab yourself always opens it, empty or not.

Someone else can be working the same books at the same time - your bookkeeper on another computer. Pressing any of these tabs, or coming back to the browser tab or window, reads the list and the account cards again, so a line they already handled leaves your Review and the card's "to review" count follows.

Categorizing

For each line, pick the category (and class and payee if you use them) and add it. When kBooks recognizes the line it proposes the answer for you, with a reason you can see. Anything that repeats deserves a rule: "anything containing CITY WATER goes to Utilities, payee City Water Co." Rules run on every future pull, and a rule can post automatically once you trust it. An automatic rule only acts on lines that just arrived, never on a line you already picked for or undid, and deleting a rule clears the suggestions it left behind.

Accept all takes every waiting suggestion except lines flagged Possible duplicate; the confirmation says how many it left for you.

Undo sends a line back to Review and voids what it created. It is refused for a date inside your locked period, and for an entry an invoice or bill payment sits on (unapply the payment first; the message names it). Removing an uploaded file brings back any line a bank pull had hidden as its copy, so no month goes missing.

Voiding an entry, a received payment or a bill payment that a bank line was recorded as sends that line back to Review too, so the money never sits "in the books" against a voided entry. An older line that still does wears an amber Its entry was voided chip; press Undo to bring it back.

Editing an entry so its money lands in a different bank account (say you recorded a deposit in checking that really went to savings) sends the original account's bank line back to Review. The editor tells you before you save, and the line is then yours to match or add again.

Bought stock by card, or sold it over the counter? Add the bank line as usual (for stock bought, pick the item's inventory account as the category), then open the added line's view, choose Edit, pick the Item and Qty on the line, and Save.

Money coming in that pays a customer's invoice (a tenant's Zelle for the rent you invoiced) should not be added as income: the invoice already counted it. Press Match on the line. Under the list, Is a customer paying an invoice? picks the customer (the one named on the bank line is chosen for you), fills their open invoices oldest first up to the amount, and Receive on invoice records the payment, dated the bank date and deposited straight to this account, and matches the line to it. The amounts applied must add up to the bank line exactly. When the bank text names a customer who owes you, the line in For Review says so with a green Customer paying? tag; its Receive on invoice opens that same window.

When Find a match splits one bank deposit between two customers (or one check between two vendors), the bank line stays tied to both halves, so the money cannot be matched a second time.

When a line looks like money moving between two of your own accounts, it wears a violet Transfer tag naming the other account, and Record as transfer fills it in. kBooks reads the line for which account it means: a line that names an account by its last digits ("Online Transfer from CHK ...6331") is only ever offered as that account. When the digits belong to none of this company's accounts, the money came from outside these books (another company of yours, or a personal account), so there is no Transfer tag; pick the category yourself, or use Between companies.

A rule can also fill a memorized transaction - a deposit that splits across two accounts, a paycheck with its taxes. Those lines show a Review button instead of Add, because the amounts can change from month to month. Review opens the rows already filled and names the rule that filled them; check the amounts and press Save and add to record it. Save the split keeps the rows on the line without posting, for later.

Fill in from your history

Rules answer the lines you wrote rules for. For everything else, the violet sparkles button on the For review toolbar reads how you categorized the same merchants before - both from bank lines you have already added and from entries you typed by hand - and fills in the account, the class and the payee where your own past decisions agree. It only ever touches lines that are completely empty: a rule's proposal and anything you picked yourself are left exactly as they are, and nothing is posted until you press Add.

Rows it filled turn violet and carry a chip. Hover the chip and it tells you exactly what it matched - the merchant, how many times you have seen it, the span of dates, and whether the amount is one you always pay. Click the chip and a window lists the actual past entries it learned from, so you can judge the evidence yourself. If your books class their money and your history could not settle the class (the same vendor paid for different properties, say), the chip turns amber and says Needs a class - the row is deliberately not finished until you pick one.

Change your mind in one click: the undo arrow beside the sparkles takes back everything the fill wrote, and only that - your own picks stay.

Merchants kBooks already knows

Your own history cannot help on a merchant you have never categorized, and in your first week that is every merchant. So where the history has nothing to say, kBooks falls back on a shared list of the merchants any small business meets - the fuel brands, the card processors, the phone companies, the office suppliers - and where businesses in general book them.

Those rows turn indigo rather than violet, and the chip says plainly that the answer came from a general list and not from anything you taught. The list never picks a class or a payee, because it cannot know yours. Your own history always wins: the shared list only ever answers where the fill stayed silent, it is refused by Accept all exactly as a learned guess is, and the same undo arrow takes it back.

It says nothing at all when it does not recognise the merchant, or when your chart names the account something it does not recognise. A missing suggestion costs you one pick; a wrong one costs you finding it later.

You choose what it reads. Clicking the sparkles opens a window before anything happens. It says how many lines have nothing assigned yet - the only rows the fill may touch - and offers three choices:

  • My books, then general - the default, and what is described above.
  • My books only - the shared list is never consulted. Use it when you would rather have a gap than a general answer.
  • General list only - your own past decisions are ignored on that run. Useful when the history in your books came from somewhere else and you do not trust it yet.

Pick one and press Fill in - the button names the number of lines it will look at, and it stays off when every line already carries something. The choice is remembered for you, not for the computer you are sitting at, so it follows you from the office to home.

Employee cards on one account

A business credit card often carries extra cards for staff, and the bank reports each card's spending under its own number - so mapping just the main card quietly misses everything the staff spent. In Settings, under Connections, every mapped account offers + Employee cards: tick the staff cards that belong to the same card account and their transactions join that one account's feed. One card in kBooks, exactly like the bank's combined statement - nothing new appears on the Banking page.

On a bank account the same control reads + Sub-accounts and speaks of sub-accounts instead - the mechanics are identical.

Every merged line wears a small chip naming where it arrived, so "who spent this" is answered at a glance in For review. Cards sharing a balance are grouped together, and one matching the main card carries a Same balance hint - banks usually report the account's balance on every one of its cards - but nothing is ever attached for you: you tick, you save. The columns sort, and your sort follows you to any machine.

Prefer to track an employee card as its own account in kBooks? Do not attach it - map it on its own row instead, exactly as before. A card attached to one account is never offered anywhere else, the same one-place rule every mapping follows.

Rules your books are asking for

Beside the Rules button sits a violet lightbulb. It reads the last twelve months of your own decisions and proposes the rules those decisions are asking for - a merchant you have categorized the same way three, seven, fifteen times is a rule you have already written by hand, over and over.

Each proposal says what a rule would look for, where it would put the money, how sure it is, and how many past lines it would have caught. Open the arrow on the right and it lists the actual transactions behind it, because nobody should accept a rule they cannot check. Where the dates form a pattern, it says so: "Every quarter, around the 20th".

It never proposes something you already have. Every pattern is replayed against your live rules first, and the ones already covered are counted in the green chip rather than offered again. A short list with a big green number is the compliment it looks like.

A proposal whose class your history could not settle is held back in amber until you pick one, for the same reason the fill does it: on books that class their money, a rule that fills only the account makes a line look finished when it is not. Pick the class in the row and the proposal is ready.

Tick what you want, press Create, and the rules are yours - they behave exactly like ones you typed, they suggest rather than post, and they take effect the next time you press Apply rules.

If a month looks wrong

Nothing that came from the bank is ever lost. A line can be un-excluded, a category can be changed later (the report drill is often the fastest way to spot and fix one), and the reconcile is the monthly proof that your books and the bank agree.

The Undeposited Funds card

When money is sitting in Undeposited Funds - payments received but not yet taken to the bank - Banking shows a card for the drawer: the balance, how many payments are waiting, and the oldest one's date. Record deposit right on the card groups them into the one deposit line your statement will show. When the drawer is empty the card steps aside; the account itself always remains visible on the Chart of Accounts and the Balance Sheet.

A brokerage and its positions

A brokerage account is one box on Banking: its total value at cost on top, then its Cash register and each position you hold. Click Cash for the register the statements upload and reconcile into. Click a position (shares of a fund, say) for that position's own register: every purchase adds what it cost, every sale takes away the cost of the shares sold, and the balance is what the position stands at on the Balance Sheet. The filter picks Sales or Purchases. Buys and sales are entered from the Cash register, which pays for them and receives the proceeds, so the position's register offers no New transaction; click an entry to see or change its journal. Click any bank or card to go back.

A receipt or invoice attached to an entry is compared with it, and a difference is shown under the attachment. Paper dated before the payment, up to 60 days, is reported quietly: an invoice is dated when it is issued and paid later, so its date stays as it is. A payment dated before its paper, or far from it, is shown as worth a look.

A receipt that matches a bank line

When a receipt in Documents looks like a charge waiting in Review, the charge's row says so: a Receipt? chip names the receipt, states the evidence in plain words (same amount, one day apart, the name matches), and lets you open the receipt to check. Use it links the receipt to that bank line; Not it puts the suggestion away for this visit.

A linked receipt shows as Receipt linked on the row, and the link is kept with the line itself: it is still there after a reload, on another computer, and for anyone else who works these books. A bank line is not yet an entry, so the receipt attaches to the entry the moment the line becomes one, however that happens: Add, a split Add, a rule posting it, Match to an existing entry. From then on the receipt sits on the entry the way any attachment does, and no other bank line is offered it. Unlink puts the receipt back among the suggestions.

Suggestions come from receipts that carry an amount and a date. A photo the reader could not date is not suggested; give it a date in Documents and it joins the next time the list refreshes.