BankStatementMate converts supported PDF, PNG and JPG statements into Date, Description, Debit, Credit and Balance columns, with Excel or CSV export and browser-side OCR for supported scans. It does not automatically categorize transactions, generate a Category column, or include Microsoft-Decision-1 or Clef-omni. Use your own rules, spreadsheet tools or independent model workflow after export.
What is bank transaction categorization?
Bank transaction categorization assigns a label to an individual transaction so a person or business can organize its records. A personal budget might use groceries and transport; a bookkeeper needs categories aligned with the business's accounting policy and supporting documents. A merchant description alone does not establish business purpose or tax treatment.
Automatic bank transaction categorization applies predefined rules or model suggestions to those rows. The useful output is a traceable suggestion with a review state, including an explicit Uncategorized outcome when evidence is insufficient.
Extraction vs categorization: why they are different
Extraction asks what the statement says: date, description, debit, credit and balance. Categorization asks what a transaction represents. Correctly reading a payment to a marketplace cannot reveal whether it bought household goods, business stock or a mixed basket.
Use the bank statement extractor overview for field support and limits. This guide starts with reviewed rows; it does not add a classification feature to the converter.
Prepare transaction rows from a PDF bank statement
- Extract the five columns. Start with a supported digital PDF or clear scan. Follow the PDF transaction extraction walkthrough; OCR recognition errors need correction before labels are useful.
- Verify against the source. Check row counts, dates, descriptions, amounts, direction and available running balances. Preserve statement order. Do not turn unreadable amounts into zero.
- Keep an untouched export. In a separate working copy, add a stable row ID and source/page reference for your audit trail. These are your additions, not converter output.
- Clean a copy of the description. Normalize case and repeated spaces. Use an explicit alias map for known merchant variations. Preserve the raw description, refund markers and reference numbers needed for matching.
- Define labels before matching. Give every category an inclusion rule, exclusions and required evidence. Keep transaction kind, such as transfer or refund, separate from spending category.
The sequence is PDF or scan → five reviewed columns → cleaned description → defined labels → rule or model suggestion → human review. Fixing a label cannot repair a missing or misread transaction.
Rule-based categorization: merchant names, keywords and exceptions
Start with a small rule table containing priority, description match, direction, evidence requirements and proposed label. An exact known supplier alias plus a debit and a checked invoice is stronger evidence than the word “shop.” Avoid a blanket rule that classifies every credit as income.
Evaluate transfer and refund exceptions before broad merchant rules. If multiple rules disagree, keep the row in review rather than silently taking whichever rule happens to run first. Record a rule ID and version so a later correction can be traced. A confirmed manual decision should not be overwritten by rerunning suggestions.
# Illustrative pseudocode.
# Not executed; not an API.
if confirmed_manual_label:
preserve_label()
elif possible_transfer_or_refund:
request_evidence()
elif one_supported_rule_matches:
suggest_for_review()
else:
mark_for_review()
AI decision models: predefined categories and confidence signals
For an independent model workflow, supply a reviewed description, direction, relevant context and a fixed category list with definitions. Include Uncategorized as a legitimate option. Keep instructions separate from transaction text: a description is data, not permission to change rules or execute actions.
Validate returned labels against your allowed list and join results by row ID, never by response order alone. Reject missing, duplicated or unexpected IDs. Store the suggested category separately from the approved category.
A confidence score is a model signal, not proof that a label is correct. Before choosing any automation threshold, evaluate a representative, human-labeled sample with ambiguous merchants, refunds and unseen descriptions. Check errors by category, the share sent to review and the error rate among accepted suggestions. Hold out later periods or unfamiliar merchants where possible; repeating known examples can hide weak generalization. No universal confidence cutoff is established here.
Microsoft-Decision-1 and Clef-omni: what their official examples actually demonstrate
Microsoft-Decision-1. Microsoft's Foundry announcement describes predefined decisions and confidence signals. Its sample routes customer support messages to billing, technical or account categories. A billing complaint about a charge is a support intent, not a bank transaction labeled as rent or supplies. That example does not establish bank-row classification accuracy. Microsoft also advises evaluating representative inputs and validating confidence calibration for the application. Official Microsoft announcement.
Clef-omni. The official model card describes a state plus typed questions, returning probabilities for allowed options. Its invoice example starts with structured invoice data, including status, and asks about status and an amount threshold. This is not a demonstration of extracting and categorizing bank transactions. Official model card.
Cloudflare's announcement describes multimodal inputs and reports invoice-processing workflow results under Exact actions and Primary action. Those metrics concern processing decisions, not per-transaction spending labels. They cannot be carried over as bank categorization accuracy. Official Cloudflare announcement.
Keep three questions separate: “Is this document an invoice?” classifies a document; “Is it overdue, and what action should follow?” judges invoice state or workflow; “What does this bank transaction represent?” assigns a row-level category. Evidence for one does not validate the others. These sources were checked on October 10, 2026; no model calls or comparative performance tests were performed for this guide.
Worked example using fictional transactions
Every merchant, transaction and supporting fact below is fictional and hand-written. This is a teaching example, not customer data, BankStatementMate output or a model test. The table is an external categorization worksheet with added suggestions; the converter itself exports only the five original fields. Amounts are illustrative USD.
| Row / description | Money out / in | Suggestion | Evidence and review |
|---|---|---|---|
| F01 · PAPER HARBOR | Out 48.00 | Office supplies | Fictional receipt lists printer paper for the office. Confirm business use and policy. |
| F02 · ORBIT MARKET | Out 89.00 | Uncategorized | Marketplace descriptor gives no item details. Obtain receipt; do not guess. |
| F03 · TRANSFER TO SAVINGS | Out 300.00 | Possible own-account transfer | Confirm ownership and matching entry. Exclude from spending totals only after confirmation. |
| F04 · PAPER HARBOR REFUND | In 12.00 | Possible supplies refund | Fictional credit note matches F01. Review a category reversal; do not assume new income. |
| F05 · ORBIT MARKET CREDIT | In 20.00 | Uncategorized credit | No matching purchase or explanation. Could be a refund or another payment; keep open. |
If F01 and its partial refund F04 are confirmed under this simplified spending view, net supplies spending is 48.00 minus 12.00, or 36.00. Keep both original rows; do not replace their amounts with a single net figure. This arithmetic is not a tax or ledger posting recommendation.
Handle ambiguous merchants, transfers, refunds and uncategorized rows
Ambiguous merchants: request the receipt or business purpose. A payment processor's name may identify neither the seller nor the purchase. A mixed purchase can need allocation outside the original row, with allocated amounts reconciled to its total.
Transfers: a transfer reference alone does not prove both accounts belong to the same person or entity. Check ownership, counterpart, amount and timing. Fees or currency conversion can prevent an exact match. Do not delete the row or count both sides as spending.
Refunds: match the original purchase and supporting credit record before proposing a reversal. Partial refunds need amount checks. An unexplained credit stays unresolved; direction alone cannot distinguish sales, refunds, loans or transfers.
Uncategorized rows: retain the amount, reason and evidence needed to resolve it. Keep them visible in reconciliation, even if category summaries list them separately. An empty review queue achieved by forced guesses is not a quality check.
Review and export the categorized results
Review every proposed label before using this workflow's results. Resolve unknowns, conflicting rules, transfers and refunds with source evidence; also inspect ordinary matches for overbroad rules. Tax and accounting classifications require confirmation against actual business facts, accounting policy and documentation, with a qualified adviser where appropriate.
In your working file, retain raw fields, row ID, suggestion, final category, rule or model version, reviewer and review date. Reconcile row counts and debit/credit totals to the untouched export after sorting, splitting or joining. Confirm that every row is either reviewed or explicitly unresolved.
The Excel example shows the converter's original five-column structure. Use the CSV workflow when you need a portable starting table. If working in Google Sheets, follow the manual import guide and add your own category fields there. BankStatementMate does not automatically connect to Sheets, QuickBooks or Xero, or generate financial reports or tax categories.
Privacy considerations and practical limitations
BankStatementMate processes supported statement conversion in your browser. Choosing to send exported rows to a cloud model is a separate data transfer to a different processor; the conversion privacy boundary does not extend to that service.
Never place real bank details in public model examples or demos. Before using an external API, check its data-use, retention and privacy terms, access controls and your authority to share the data. Do not assume zero retention or local processing. Minimize the shared fields and remove unnecessary identifiers; transaction descriptions can still reveal sensitive information.
Neither rules nor models guarantee correct classification for every statement. Missing context, extraction mistakes and changed merchant patterns remain reasons to stop and review. Start with reliable rows from BankStatementMate, then keep categorization as a separate, accountable step.