Bank connections
Frihet's banking module centralizes your business bank accounts, imports bank statements with automatic duplicate detection, and reconciles every transaction with your issued invoices and recorded expenses using fuzzy matching and bank rules.
Frihet operates via bank statement import (OFX, QFX, MT940, CAMT.053 and CSV, with automatic format detection and a bank selector for CSV) and through the /v1/banking REST API and MCP server. Direct PSD2 / Open Banking connection is not available: you reconcile your bank by importing statements, without handing banking credentials to third parties.
If you also use neobanks or corporate cards for operating spend, you can import expenses on demand via the dedicated integrations for Qonto, Wise, Mercury, or Pleo.
Prerequisites and channel boundaries
Before uploading your first bank statement, review the boundary between the three channels and verify these prerequisites:
| Channel | Real status in Frihet | When to use it |
|---|---|---|
| Statement file import | Available in Finance → Banking | Upload OFX, QFX, MT940, CAMT.053, or CSV files exported from your online banking portal, with preview and duplicate detection. |
REST API (/v1/banking) and MCP Server | Available with an API key (fri_...) | Programmatic transaction ingestion (POST /v1/banking/transactions), categorization, and matching from scripts or AI agents. |
| Continuous direct PSD2 / Open Banking sync | Not available (Direct PSD2 / Open Banking connection is not available) | Frihet never asks for banking credentials or runs background PSD2 aggregator feeds; all movements come from statements you import or send to /v1/banking. |
Account prerequisites:
- At least one bank account created under Finance → Banking with the exact currency of the statement (for example,
EUR). - An issued invoice in Sent or Overdue status (for example,
F-2026-0001) if you want to test automatic collection matching. - A statement file exported from your bank in
UTF-8encoding without manual subtotal rows mixed into the data rows.
Bank accounts
You can register as many bank accounts as your business uses (checking accounts, multi-currency accounts, credit cards, or payment gateway settlement accounts).
Go to Finance → Banking to view your registered accounts:
| Field | Description |
|---|---|
| Bank / Entity | Financial institution name |
| Account name | Custom name or alias (e.g., Main Operating EUR) |
| IBAN | International Bank Account Number (validated for 89 countries) |
| Currency | Account currency (EUR, USD, GBP, etc.) |
| Recorded balance | Balance calculated from imported statements and movements |
| Last import | Timestamp of the most recent statement upload |
Verifiable synthetic CSV statement example
The Estudio Norte S.L. dataset (Tax ID B12345674, email facturacion@example.com, invoice F-2026-0001) and the CSV statement below are a synthetic documentation fixture: B12345674 only satisfies algorithmic check-digit validation (it does not prove non-existence or ownership in the AEAT census), and example.com is an IANA-reserved documentation domain (RFC 6761), not a controlled QA mailbox. This fixture does not execute real bank transfers or prove production bank reconciliation—for operational testing, use legitimate business data or an authorized QA environment.
If you completed the first-invoice walkthrough with Estudio Norte S.L. (F-2026-0001 for €1,815.00 with 21% VAT, €1,590.00 when 15% IRPF withholding applies, or €907.50 for a 50% partial collection), you can save the block below as extracto-octubre-2026.csv to verify how Frihet handles four real scenarios in a single upload:
Date,Description,Amount,Currency,Reference
2026-10-16,"TRANSF ESTUDIO NORTE SL B12345674 FAC F-2026-0001",1815.00,EUR,SEPA-20261016-001
2026-10-16,"TRANSF ESTUDIO NORTE SL B12345674 FAC F-2026-0001",1815.00,EUR,SEPA-20261016-001
2026-10-18,"COMISION MANTENIMIENTO CUENTA OCT",-12.50,EUR,COM-202610-01
2026-10-20,"TRANSF ESTUDIO NORTE SL ENTREGA 50 PCT F-2026-0002",907.50,EUR,SEPA-20261020-004
How the importer processes each row:
- Row 1 (
+1815.00 EUR,F-2026-0001): enters therecognizedstage and suggests a match with invoiceF-2026-0001forEstudio Norte S.L.(B12345674). (If yourF-2026-0001invoice was issued with 15% IRPF withholding for€1,590.00, replace1815.00with1590.00on row 1). - Row 2 (identical to row 1): the idempotency detector flags it as Duplicate during preview so the payment is never double-counted.
- Row 3 (
-12.50 EUR, bank maintenance fee): has no prior invoice; it is classified via a bank rule into thecategorizedstage. - Row 4 (
+907.50 EUR, 50% partial payment): lets you verify partial collection matching where the remaining 50% stays open in accounts receivable aging.
Bank statement import
Frihet imports statements with automatic detection of the format and of duplicate movements. You can drag the file in or pick it from your computer.
Supported formats
| Format | Extension | Duplicate identifier and real parser limits |
|---|---|---|
| OFX / QFX | .ofx, .qfx | Open Financial Exchange. Uses the per-transaction unique FITID identifier to prevent duplicates across overlaps. |
| MT940 (SWIFT) | .sta, .mt940 | European corporate bank statement standard with :60F: / :61: / :86: blocks and SEPA references. |
| CAMT.053 | .xml | ISO 20022 SEPA XML bank-to-customer statement standard (BkToCstmrStmt). |
| CSV | .csv | Export from any bank or neobank, with automatic delimiter detection (, or ;) or a bank template. |
The Norma 43 (AEB-43) format cannot be imported from the Frihet interface.
Importing a statement step by step
- Go to Finance → Banking → Import Statement
- Select the target bank account (or create a new account)
- Drag and drop the file exported from your online banking portal (
OFX,QFX,MT940,CAMT.053, orCSV) - Frihet detects the format automatically and shows a transaction preview
- For CSV files, leave the template on Detect automatically or pick your bank's template
- Click Import transactions
Frihet detects movements already imported from earlier files and flags them as Duplicate so they are not booked twice.
Transactions
Viewing transactions
Go to Finance → Banking → Transactions to inspect all imported movements.
Each row displays:
- Operation date and value date
- Original bank statement description
- Amount (positive = inflow / collection, negative = outflow / payment)
- Status in the 5-stage pipeline:
raw→recognized→matched→categorized→excluded - Assigned accounting category (by bank rule, historical model, or manually)
- Linked document (invoice, expense, or deposit)
Available filters
| Filter | Options |
|---|---|
| Account | One or multiple bank accounts |
| Date range | Custom range or quick presets |
| Status | Reconciled / Pending / Excluded |
| Type | Inflow / Outflow |
| Category | Any expense or income category |
Reconciliation
Reconciliation pairs your bank movements against documents in Frihet (paid invoices, recorded expenses, deposits).
Automatic fuzzy reconciliation
When you import a statement, Frihet proposes automatic matches when:
- The amount matches an unpaid invoice's balance (including tolerance for gateway fees)
- The transaction date is close to the invoice's issue or due date
- The payment concept or payer name matches the client's name, tax ID, or invoice number
When Frihet finds a match, the transaction shows Suggested matches.
Confirming a suggested match
- Open the transaction with a suggestion and click Review (Reconciliation review)
- Verify the invoice or expense proposed by Frihet
- Click Apply
The invoice status updates to Paid (paid) and the transaction is linked.
Manual reconciliation and transactions without a document
If a transaction does not correspond to a prior document, you can:
- Link invoice manually
- Create expense & reconcile directly from the transaction
- Exclude if it is an internal transfer between your own accounts
Auto-categorization and bank rules
For movements that do not correspond to a specific invoice (bank fees, utilities, tax payments, SaaS subscriptions), use bank rules: rules with conditions on text or amount, which you create yourself in Settings → Bank rules (see the rules builder). Frihet also suggests rules based on your own expense history.
Classification examples with a rule:
| Statement description | Suggested category |
|---|---|
AMAZON MKTPLACE AMZN.DE | Office supplies |
NOMINAS EMPLEADOS FEBRERO | Payroll |
REPSOL SERVICIO TENERIFE | Fuel |
GOOGLE CLOUD BILLING | Software & SaaS |
TGSS COTIZACION AUTONOMOS | Social Security |
Common statement import blockers and recovery
| Blocker or edge case during import | What happens in Frihet | Step-by-step recovery |
|---|---|---|
1. Malformed file, broken encoding, or Norma 43 (.n43 / .csb) upload | The preview rejects rows without valid dates/amounts or reports that Norma 43 cannot be imported from the UI. | Export the statement from your bank in CAMT.053 (.xml), OFX, MT940, or UTF-8 CSV with clear date (YYYY-MM-DD or DD/MM/YYYY), description, and signed numeric amount columns. |
| 2. Repeated upload of the same statement or overlapping date ranges | Frihet checks FITID (in OFX/QFX) or the date + amount + description + reference fingerprint and marks repeated rows as Duplicate. | Leave already-imported rows flagged as Duplicate so they are not booked twice under Finance → Banking → Transactions. |
3. A single bank transfer pays multiple invoices from Estudio Norte S.L. | The bank movement amount (e.g. €3,630.00) exceeds any single open invoice (€1,815.00), so a 1:1 automatic match is not applied blindly. | Open the transaction and split the collection across the target invoices following Multi-invoice collection from a single transfer. |
4. Partial payment (€907.50 of €1,815.00) or bank/Stripe settlement fee deduction | The bank inflow is lower than the invoice total because the client paid 50% or the payment gateway deducted its fee before payout. | For a partial payment, match €907.50 to the invoice (leaving a €907.50 open balance); if the difference is a bank or gateway fee, book the corresponding fee expense. |
5. Transaction or invoice in a different currency (USD vs EUR) | The statement amount is expressed in the bank account's settlement currency, or the file belongs to a foreign-currency account. | Import each statement into the bank account whose Currency matches the file and review exchange-rate differences in Multi-currency. |
/v1/banking REST API and MCP Server
You can automate statement ingestion and reconciliation from your own scripts or AI agents:
- REST API (
/v1/banking): list accounts, query transactions, create manual transactions, categorize, and link movements to invoices. - MCP Server (
@frihet/mcp-server):list_bank_accounts,get_bank_account,list_transactions,categorize_transaction,match_transaction_to_invoice,frihet_bank_rules_list, andfrihet_bank_rule_create.
Security and privacy
- Zero shared banking credentials: Frihet never asks for or stores your online banking username or password.
- Encrypted in transit: data travels over HTTPS.
- Full control over your data: Frihet only processes the statements and transactions you explicitly upload or send via the API.
Next action
- Follow the end-to-end matching and verification walkthrough in Bank reconciliation.
- Automate bank fees and recurring non-invoice charges in Bank rules and Automatic bank reconciliation.
- Verify the reconciled payment in Reports center or visit Quick troubleshooting and support if a statement fails to parse.