Skip to main content

Statement processing

Bank statements are the most complete way to record your financial history in Clatri — richer than chat (which is good for stray day-to-day expenses) and available for every bank (unlike open banking, which only covers some countries). And if you have neither a statement nor a computer at hand, just record a video of your banking app scrolling through the movements. The Finance Expert reads the document and leaves you an editable draft you approve before anything is recorded.

This page describes the full process: statement types, the import flow, the split of responsibilities between what the extractor reads and what the accounting decides, the smart features the system applies (duplicates, internal transfers, counterparts and projects) and the per-entity instructions you can write to guide the extractor.

Statement types​

TypeWhen the bank issues itWhat it covers
Account statementMonthly or quarterly, depending on the bankMovements of a checking or savings account in a period. Debit cards do NOT issue their own statements — their movements live in the statement of the account they're linked to.
Credit card statementAfter each statement-close dateCharges, payments, and fees from the cycle between the previous close and the current one. If your card closes on the 15th, the "April" statement covers from March 16 to April 15.

That's why it's important to correctly configure the close date and payment due date when you create the card in Clatri — the system uses them to align the statements you upload and to generate notifications.

The extractor doesn't classify​

This is the most important idea on the whole page, and the one most people assume the other way around.

The extractor doesn't make accounting decisions. It reads the document and reports what the document says. From each line it takes two things about the money:

  • The direction — whether that line adds money to you (income) or takes it away (expense). That isn't an opinion: it's a fact printed on the paper, in the debit and credit columns or in the running balance.
  • The provider category — if your bank prints its own label on the row ("Restaurants", "Grocery", "ATM"), the extractor copies it verbatim, in the document's language, without translating it or mapping it to anything. If the bank doesn't print one, the field simply doesn't exist.

That's it. The extractor doesn't pick which account of the Chart of accounts the movement goes to, because that decision isn't in the document — it's in your rules.

It helps to be very clear that in Clatri there are three different things people call "category", and only one of them affects your reports:

What it isDoes it count in the books?
Accounting accountYour Chart of accounts. The accounting truth.Yes — it's the line in the Income statement
Provider categoryThe label your bank put on the rowNo — it's a signal the classifier can use
Product categoryThe commercial shelf of your sales catalogNo — it's a label for your store

Your bank writing "Restaurants" next to a charge doesn't mean that charge is a food expense in your books. It can be a meal with a client, a team lunch, or a charge the bank itself mislabeled. The bank's label comes in as a hint, not a verdict.

Who picks the accounting account​

When a transaction comes in —from a statement, from open banking or from chat—, a canonical classifier that lives in the database applies your rules, in this order:

PriorityThe rule looks at…Example
1Prepaid balance or source accountEverything leaving the operations account is an operating expense
2Recurring paymentThe monthly hosting charge always goes to the same account
3CounterpartEverything you pay this supplier goes to the same account
4Bank categoryWhat your bank labels "Grocery" goes to the account you chose
5Description patternRows containing a certain text go to the same account

If no rule matches, the transaction stays Unclassified. And that's fine: it's the correct default, not a failure. Clatri never guesses an accounting account. It would rather tell you "I don't know where this goes" than put it in a made-up line that later muddies your Income statement without you noticing.

Unclassified transactions wait for you in the queue so you can resolve them whenever you want — one by one or in bulk.

How a rule is created​

You don't write rules in a separate form. You create them from the transaction itself, where you have the context in front of you:

  1. Open the transaction and go to Accounting.
  2. Pick the right Accounting account.
  3. Turn on Use this correction in the future and choose which criterion the rule should match: the counterpart, the recurring payment, the bank category, the source account, the description pattern.

You correct it once and from then on the classifier does it on its own. If the transaction has nothing a future rule could match, Clatri tells you instead of offering a rule that would never fire.

The import flow​

You upload the file (PDF, Excel, CSV, screenshot or video) to chat and the agent processes it in 5 steps:

  1. Extraction — the LLM extractor reads the document and produces a structured list of transactions: date, amount, currency, description, direction and, if present, the bank's label. Your per-entity instructions are applied here (see below).
  2. Association resolution — for each transaction it tries to infer the counterpart (which contact) and the project it belongs to, consulting your contact directory and your existing Projects.
  3. Duplicate detection — compares each transaction against the ones you already have recorded (manual, bank integration, previous statement) using amount + date + description. Matches are flagged as duplicates.
  4. Verification — checks what was extracted against the totals and the balance declared by the document itself. If the sum of the movements doesn't rebuild the closing balance, the system catches it before showing you anything.
  5. Staging and review — the agent returns an interactive widget with the list of transactions: new, duplicates, technical movements, and ones that need manual review. You edit, discard, or confirm. Nothing is recorded until you approve.

Reconciliation vs new registration​

When executing the import you can choose between:

  • New registration (default) — transactions are recorded and update the account's current balance. Useful for a recent statement that brings your account up to date.
  • Reconciliation — records historical transactions without modifying the current balance. Useful when you upload past months and don't want them to recalculate a balance you already knew.

Technical movements and the "To assign" tray​

Not every line on a statement is an expense or an income. Many are money moving from one of your pockets to another — and treating them as an expense would count the same thing twice.

The extractor recognizes them and tags them with a movement type:

TypeWhat it is
Debt paymentYou pay the credit card from your account
Internal transferLeg that arrives from another account of yours
Transfer to savingsLeg that leaves toward another account or pocket of yours
Loan disbursementThe bank disburses a loan to you
Own depositYou deposit your own cash
RefundA return, a reversal, a chargeback

These movements don't go to the Income statement. They land in temporary control accounts — an accounting limbo that exists precisely so money doesn't disappear or get invented while you confirm where it was really going.

That's where To assign comes in: the tray where you connect each technical movement with its real destination (which debt you paid, which account the transfer reached, which savings grew). Until you do, the movement keeps affecting your account balance —because the money did move— but stays out of your results, which is exactly where it belongs.

Duplicate detection​

When you import a statement, the system compares each new transaction against existing ones with a heuristic that combines:

  • Exact amount (same sign, same currency)
  • Date within a tolerance window (±2 days for statements, up to 5 days if the transaction came from a recurring payment because banks sometimes take time to process)
  • Description with normalization (uppercase, spaces, accents stripped; fuzzy matching)
  • Account / card — only compares against transactions from the same account

Transactions identified as duplicates appear with a special indicator in the review widget. By default they're NOT recorded, but you can force registration case by case if you decide the duplicate is actually legitimate (same amount on the same day by coincidence).

The same duplicate engine also applies to open banking — when a new transaction arrives from the bank, it first checks whether you'd already recorded it manually or by a previous statement.

Internal transfers: pair, don't create​

If you transfer money from one of your accounts to another of your accounts, that movement shows up twice: as an outflow on the first account's statement and as an inflow on the second's. They're two rows the bank already recorded. The money didn't change owner and nothing was created or destroyed.

Pairing them is exactly that: connecting the two rows that already exist. The system doesn't fabricate a third transaction, doesn't invent a new movement and doesn't touch your consolidated cash. What it does is settle the two control accounts each leg landed in, leaving them at zero. The result is that both your balances are right and your Income statement sees neither a phantom expense nor a phantom income.

Clatri suggests candidate pairs —same amount, opposite signs, close dates— with a score and the reasons behind each one. But it's a suggestion: nothing gets paired until you confirm it. If there are two similar candidates, Clatri doesn't choose for you; it shows you both. All of this lives in To assign.

The same applies to a credit card payment: the outflow from the account and the credit to the card balance are the two legs of a single movement.

Automatic association to contacts and projects​

During extraction, the LLM reads each transaction's description and tries to resolve:

  • Counterpart — searches your contact directory by name or alias. If it finds a match (or your per-entity instruction gives it the hint), it pre-assigns the contact.
  • Project — if the description matches the name of an existing Project, it pre-assigns it.

These are assistive suggestions, and the extractor is explicitly instructed to prefer leaving them out over making them up: it never proposes a contact or a project that doesn't exist in your directory, and when in doubt it proposes nothing. You confirm, change, or discard them in the review widget before executing the import.

Don't confuse this with accounting classification. The counterpart is who — the accounting account is what. They're two different questions, even though the counterpart can later serve as the criterion of a rule that does decide the account.

Multi-currency and opening balance​

If your statement is in a different currency from the account's main currency, the system asks for the exchange rate for the conversion. Transactions are stored in both currencies (original + converted) so you can see the real detail and a consistent aggregate.

Also, if the statement includes a starting / ending balance, the system uses it as an opening balance to align the historical balance calculation with your current balance — avoiding the drift that would happen if you only sum/subtract transactions.

Import movements with a video​

Most banking apps don't let you download your movements, and the official statement arrives a month (or a quarter) later. That's what video is for: you record your screen while scrolling through the movements in your bank, wallet or investment app, and Clatri extracts them for you. It's the simplest way to catch up without waiting for the statement.

How to do it:

  1. Open your banking app on the movements list of the product you want to import (an account, a card, a wallet).
  2. Start your phone's screen recording and scroll through the list at a steady pace, with dates and amounts visible.
  3. In the Clatri chat, tap + → Bank transaction video and pick the video.
  4. In the same message, say which product it is, for example: "record these movements on my BBVA credit card". If you don't and Clatri can't work it out, it asks you; you don't need to upload the video again.

Limits: one video per message, under one minute and up to 60 MB, in MP4, MOV or WebM. For a long history, record several clips and send them in separate messages. One product per video works best: if you mix accounts in the same recording, Clatri asks you to clarify before preparing the draft.

Credits: before you send it, the app shows an estimate of the credits for extracting the video. It's a guide; the analysis and import that follow use credits separately. See Pricing.

What you get: the same review draft as with a statement, with duplicate detection. Nothing is recorded until you approve. The difference is that a video is a list of movements, not a formal statement: it has no declared opening or closing balance, so it can't verify the closing balance. If you later upload the official statement for the same period, the movements you already imported by video show up as duplicates.

The original video is stored encrypted alongside your import.

Receiving statements by email (automatic)​

You don't have to download and upload every statement by hand. Your bank emails it to you each month — you can have it land in Clatri on its own and get processed without lifting a finger.

Each profile has an inbound address (something like a1b2c3d4@inbox.clatri.com) you can forward your bank's emails to. And if you set up automatic forwarding in Gmail or Outlook with a filter on the bank's sender, every statement that arrives goes straight into the import flow above: Clatri reads it, leaves it as a draft, and you approve.

If the PDF is password-protected, Clatri tries to open it with your national ID and available passwords. You can ask in chat to save a password for future statements; background reuse depends on the encrypted data being accessible.

The step by step — including how to set up forwarding in Gmail and Outlook — is in Receiving documents by email.

Per-entity instructions — teaching the extractor to READ​

Each entity in Clatri has a free-text field called Statement import instructions. You'll find it on the Accounts screen, in the "+" menu → Statement import instructions.

It's unstructured text, in your language, where you write the conventions and quirks of the document the LLM extractor can't guess on its own. It's prepended to the prompt with maximum priority every time you import a statement, so the agent "knows you" without you having to repeat it in every chat.

This guides EXTRACTION, not classification. It's the distinction that confuses people most, so it's worth saying plainly:

You want…Tool
The extractor to read the document correctly (which column is which, which rows to ignore, who is who)Statement import instructions
A movement to be filed under a certain accounting accountA rule, created from the transaction with Use this correction in the future

Writing "maintenance fees are an administrative expense" here does nothing: the extractor doesn't classify. That knowledge goes in a rule (see Chart of accounts).

Real use cases for this field:

Any transaction to "Julia M.", "MARIA CASTRO" or "J CASTRO" is to my mom.
Associate it with the "Mom" contact.

In my bank's statements the balance appears in the second column,
not the first.

Ignore all lines containing "INTERESES CORRIENTES" — they're
bank aggregates that duplicate the actual movement.

Rows in the "Collateral" section are not part of the account balance;
the bank lists them for reference only.

Transfers to my savings account come with the description "APORTE" —
they're transfers between my own accounts, not expenses.

As you can see, it ranges from contact aliases to document conventions ("balances in column 2"), filter rules ("ignore X lines") and routing hints ("this is a transfer between my own accounts"). Everything that helps read the paper. It's the only way to encode knowledge the LLM can't have otherwise, because it depends on your life, your contacts, and your specific bank.

Per entity, not per account: if you have a personal entity and another for your company, you can have different conventions in each. The personal ones can talk about your family; the company ones, about specific suppliers and clients.

What to do when something goes wrong​

  • The extractor didn't read a transaction correctly (amount, date, description) → fix it in the staging widget before approving. If the error repeats on every import from the same bank, add the convention to the Statement import instructions so it doesn't happen again.
  • The transaction ended up Unclassified → it's not an error, it's the default. Open it, go to Accounting, pick the Accounting account and turn on Use this correction in the future if you want it to repeat on its own.
  • It landed in the wrong accounting account → same path: you fix the account and create the rule. The correction leaves a trail; nothing is silently overwritten.
  • The extractor duplicated a transaction that is NOT a duplicate → uncheck the duplicate flag in the widget; it'll be registered normally.
  • Two movements were paired as an internal transfer and weren't one → you can revert the pairing; both sides go back to their control account and become available again in To assign.
  • The extractor made up data (hallucinated) → report it in Settings → Feedback. The extractor is tuned but no LLM is perfect; knowing where it fails helps us improve the prompt.

Retry an existing document​

If a statement could not be processed, you can ask to retry with the document you already sent. A temporary download failure, an incorrect password, and an extraction failure need different solutions; you do not need to upload the file again while it remains available. See access and password-storage limits in Receiving documents by email.

A Schedule can ask Clatri to review available information, but it does not bypass locked encrypted documents or replace review of the import draft.