From nothing to books.
Every step, in order, with the things worth knowing before you do them. Nothing here needs an accountant to set up.
1 · Create your account
Go to the sign-up page and give your name, a work email and a password of at least eight characters. A mobile number is optional and used only for alerts.
You must tick the box accepting the Terms of Use and Privacy Policy. We record which version you accepted and when. That record is append-only, and not even an administrator can edit it.
Verifying your email
We send a message the moment you sign up. Depending on how the deployment sends mail, it contains either a six-digit code or a link:
- A code. Type it into the verification screen. Codes expire after ten minutes and retries are limited.
- A link. Open it and you land straight in onboarding, already signed in.
Nothing works until your email is verified. An unverified account is never treated as ready, because an address nobody has proved they own is not somewhere financial alerts should go.
2 · Add a business
First you choose what kind of book this is. The choice is asked before anything else because it changes what the rest of the form means.
- A business. It gets its own legal books, a trading chart of accounts, and access to deposit reconciliation and property systems.
- Personal accounting. Your own bank accounts, cards and spending, with household categories. Billed at the same rate as a business account, and never added into a business total.
Personal books are never added into a business total. A portfolio figure that quietly included your groceries would not be a roll-up, it would be a wrong number.
If you name a business almost identically to one you already have, you will get a warning rather than a refusal, because plenty of owners genuinely run “Northside Ltd” and “Northside Holdings”.
3 · Connect your bank accounts
Open Settings → Bank connections, choose your institution and press Connect. You are handed to the provider’s own authorisation screen; your bank sign-in never passes through BKApp.
BKApp.ai never asks for a bank username or password, and never stores one. If any screen here ever asks you for bank credentials, it is not us. Close it.
No feed available?
Statement upload is a first-class path, not a fallback. Add the account by statement — the bank, a name, the last digits and the balance on a date you state — then import each month’s CSV from your online banking on the Connections page. The rows go through the same pipeline as a bank feed: kept as evidence, classified, held for review, never duplicated if you import the same file twice. A bank statement PDF is filed in the vault against the business; its lines are not read into the ledger, and the page says so rather than guessing at them.
Want to look around first?
On the first onboarding step you can load a sample business — a made-up inn with two accounts and six weeks of activity. It is marked as a sample on every page, it never counts toward your plan, and one press removes it and everything in it.
What you can do afterwards
- Sync pulls the latest transactions. It is idempotent, so syncing twice never duplicates anything.
- Re-authenticate when a bank expires the connection, shown as “Needs re-auth” rather than failing silently.
- Disconnect stops the feed and discards the token. Every transaction it already brought in stays in your books.
4 · Add credit cards
Cards live under Settings → Cards and PMS. A card is treated separately from a bank account because it behaves differently: it carries a liability rather than cash, and it usually arrives as statements rather than a live feed.
Give the issuer, a name you will recognise, the last four digits only, and optionally the credit limit. The form refuses anything longer than four digits. A full card number has no business being typed here.
Then upload each statement as it arrives. Amounts are read, the closing balance is checked against the lines, and anything that does not add up is raised rather than rounded away.
5 · AI, on your allowance
Under Settings → AI you see what AI reading has cost this period and what is left, as a bar; the same bar sits in the top of every page. Your plan includes a monthly allowance, and you can add credit whenever you like. Per business, you choose how documents are read:
- Claude. The default, and what we recommend for reading financial documents. A stronger model reads dense scans better and spends the allowance faster.
- Rules only. No model at all. Slower to learn and blunter, but it works, spends nothing, and the interface says plainly when this is what is running.
You are never asked for an API key. AI reading runs on BKApp’s own account, every call is counted against your allowance, and nothing is billed to you by a provider.
What the model is and is not allowed to do
It reads documents and suggests categories. It never posts to your books on its own. Every extraction arrives as a suggestion with a confidence score, and anything below the threshold goes to the review queue rather than into the ledger. An amount read from a document is evidence about that document, never a correction to your bank record.
6 · Connect your email with Himalaya
Most receipts and invoices arrive by email. Rather than asking for your mailbox password, your mailbox stays where it is and a client you run posts the attachments to us. Himalaya is a small command-line email client that does this well, but anything that can send a file over HTTP will work.
Step 1: get an ingest token
In Settings → Cards and PMS → Email ingest, create a token for the business the documents belong to. It is shown once and never again, because we store only a hash of it, so we could not show it to you a second time even if you asked.
Each token writes to exactly one business and can read nothing at all. If a script leaks, the worst it can do is add documents to that one vault, and you can revoke it instantly.
Step 2: install and configure Himalaya
# macOS / Linux
cargo install himalaya
# or: brew install himalaya
# ~/.config/himalaya/config.toml
[accounts.work]
default = true
email = "you@yourbusiness.com"
display-name = "You"
backend.type = "imap"
backend.host = "imap.yourprovider.com"
backend.port = 993
backend.login = "you@yourbusiness.com"
backend.auth.type = "password"
# Read from your OS keychain rather than written here in the clear:
backend.auth.command = "security find-generic-password -s himalaya -w"Use auth.command rather than auth.raw. A mail password sitting in a config file is a password in a backup, a password in a git repository, and eventually a password in someone else’s hands.
Step 3: forward attachments to BKApp.ai
Label or move the messages you want captured into a folder (Receipts is the obvious choice), then run this to push their attachments in:
#!/usr/bin/env bash
set -euo pipefail
TOKEN="bkapp_ingest_..." # from Settings → Email ingest
FOLDER="Receipts"
OUT="$(mktemp -d)"
# Every unread message in the folder, newest first.
himalaya envelope list --folder "$FOLDER" --output json \
| jq -r '.[] | select(.flags | index("Seen") | not) | .id' \
| while read -r id; do
himalaya attachment download "$id" --folder "$FOLDER" --output-dir "$OUT"
subject=$(himalaya message read "$id" --folder "$FOLDER" --output json | jq -r '.subject')
sender=$(himalaya message read "$id" --folder "$FOLDER" --output json | jq -r '.from.addr')
sent=$(himalaya message read "$id" --folder "$FOLDER" --output json | jq -r '.date')
args=()
for f in "$OUT"/*; do [ -f "$f" ] && args+=(-F "file=@$f"); done
[ ${#args[@]} -eq 0 ] && continue
curl -sS -X POST https://bkapp.ai/api/ingest/email \
-H "Authorization: Bearer $TOKEN" \
-F "subject=$subject" -F "from=$sender" -F "date=$sent" \
"${args[@]}"
himalaya flag add "$id" --folder "$FOLDER" Seen
rm -f "$OUT"/*
doneRun it by hand, or on a schedule with cron or a systemd timer. Marking the message Seen at the end is what stops the same receipt being sent twice.
What happens next
Everything that arrives lands in your document vault marked held for review, tagged with the sender and subject it came from. Nothing posts to your books unseen. A document that arrived by email has not yet been looked at by a human, and that is exactly how a duplicate or a stranger’s invoice ends up in the accounts.
From there the normal flow applies: the model reads it, suggests a category and a matching transaction, and you confirm or correct. Your correction teaches the rules, so the same supplier is not asked about twice.
Accepted files
PDF, PNG, JPEG, WebP, HEIC, CSV and Excel, up to 25 MB each. Anything else is rejected by name in the response, so a script can log exactly what was skipped rather than failing silently.
7 · What it costs
$499 per business, each month, with every account in it included, however many. There are no tiers and nothing is held back: every business gets the whole product, crosschecks included.
Your personal books come with any business at no charge, and what a personal account never does is get added into a business total. A portfolio figure that quietly included your groceries would not be a roll-up, it would be a wrong number. Only personal books and no business? $99 a month for up to 10 accounts.
60 days free with no card, then a card. A sample business is never billed, and a business you close is not billed for.
How far back you can see
A monthly membership covers the month you are paying for and the one before it, and that is what we import when you link an account. It is not a teaser: reconciling a month needs the month before it, because a card batch taken on the 29th settles in the following month and a statement covering late March arrives in April. Crosscheck runs across both.
To reconcile anything older, pay for a year. Your whole history unlocks immediately. Because it is handed over the moment the payment arrives, an annual payment is not refundable. Better said here than discovered later.
100% satisfaction guaranteed
If you are not happy with the value we provide, tell us. We refund your most recent month and close your account. You do not have to justify it and we will not put you through an exit interview.
If you want to stop
Two doors, and they are genuinely different decisions.
- Freeze. The account sleeps. You keep access for the period you have already paid for, but only to read and download your reports. Come back whenever you like and billing restarts from the day you return, not the day you left.
- Cancel permanently. Download everything first. When you confirm you have it, we delete your data and close the account for good. There is no version of this we can undo afterwards, which is why the download comes first.
Only the person who opened the account can freeze or cancel it. They can hand that right to someone they name, deliberately. It is not something a role carries: an administrator who manages users and rules should not thereby be able to close the company’s account.
That’s the whole thing.
You have just read the entire setup before signing up for anything, which almost nobody does. So you already know what you are getting, including the parts we are upfront about not doing, like filing your taxes or replacing your accountant.
Most people are up and running in an afternoon. If you get stuck on any of it, write to support@bkapp.ai. A person reads it, and it is usually the person who built whatever you are stuck on.
And if you try it and it is not for you, take your data and go with our blessing. We would rather you left easily than stayed because it was hard to leave.
Create your accountAbout a minute. No card. Nothing is charged unless you decide to continue after the trial.