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. Included in every plan, and never counted against your business allowance.
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, and you come back with an encrypted token.
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. Choose Statement upload and add each month’s PDF or CSV as it arrives. You get the same books; they are simply a month at a time.
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 · Connect AI
Under Settings → AI connections you choose which model reads your documents, per business. Three options:
- Claude. The default, and what we recommend for reading financial documents.
- OpenRouter. Opens up most other models. Paste a model id if it is not in the list.
- Rules only. No model at all. Slower to learn and blunter, but it works, and the interface says plainly when this is what is running.
Using your own key
Paste an API key and that business is billed by your provider directly. The key is validated against the provider before it is stored, so a typo is caught immediately rather than at the moment you need it.
Your key goes into an encrypted vault. No signed-in account can read it back, not yours, not an administrator’s. The interface will only ever show you its last four characters.
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
$149 per business, per month. Minimum two businesses, billed monthly, cancel whenever you like. There are no tiers: every business gets the whole product.
Your personal book is free and is never counted. Charging for it would push people to keep their own money in the business books, which is the exact habit this exists to break.
The 90-day guarantee. If the settlement audit does not find you more than you have paid us within ninety days, you pay nothing, and you keep whatever it did find. Write to support and we refund the difference.
Every new account starts on a 14-day trial with no card. Bring one month of Booking.com and Expedia statements and a bank export, and see what the audit turns up before you decide anything.
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.

