Skip to main content

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.

Banking module scope

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:

ChannelReal status in FrihetWhen to use it
Statement file importAvailable in Finance → BankingUpload 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 ServerAvailable 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 syncNot 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:

  1. At least one bank account created under Finance → Banking with the exact currency of the statement (for example, EUR).
  2. An issued invoice in Sent or Overdue status (for example, F-2026-0001) if you want to test automatic collection matching.
  3. A statement file exported from your bank in UTF-8 encoding 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:

FieldDescription
Bank / EntityFinancial institution name
Account nameCustom name or alias (e.g., Main Operating EUR)
IBANInternational Bank Account Number (validated for 89 countries)
CurrencyAccount currency (EUR, USD, GBP, etc.)
Recorded balanceBalance calculated from imported statements and movements
Last importTimestamp of the most recent statement upload

Verifiable synthetic CSV statement example​

Illustrative documentation fixture

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:

  1. Row 1 (+1815.00 EUR, F-2026-0001): enters the recognized stage and suggests a match with invoice F-2026-0001 for Estudio Norte S.L. (B12345674). (If your F-2026-0001 invoice was issued with 15% IRPF withholding for €1,590.00, replace 1815.00 with 1590.00 on row 1).
  2. Row 2 (identical to row 1): the idempotency detector flags it as Duplicate during preview so the payment is never double-counted.
  3. Row 3 (-12.50 EUR, bank maintenance fee): has no prior invoice; it is classified via a bank rule into the categorized stage.
  4. 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​

FormatExtensionDuplicate identifier and real parser limits
OFX / QFX.ofx, .qfxOpen Financial Exchange. Uses the per-transaction unique FITID identifier to prevent duplicates across overlaps.
MT940 (SWIFT).sta, .mt940European corporate bank statement standard with :60F: / :61: / :86: blocks and SEPA references.
CAMT.053.xmlISO 20022 SEPA XML bank-to-customer statement standard (BkToCstmrStmt).
CSV.csvExport 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​

  1. Go to Finance → Banking → Import Statement
  2. Select the target bank account (or create a new account)
  3. Drag and drop the file exported from your online banking portal (OFX, QFX, MT940, CAMT.053, or CSV)
  4. Frihet detects the format automatically and shows a transaction preview
  5. For CSV files, leave the template on Detect automatically or pick your bank's template
  6. 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​

FilterOptions
AccountOne or multiple bank accounts
Date rangeCustom range or quick presets
StatusReconciled / Pending / Excluded
TypeInflow / Outflow
CategoryAny 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​

  1. Open the transaction with a suggestion and click Review (Reconciliation review)
  2. Verify the invoice or expense proposed by Frihet
  3. 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 descriptionSuggested category
AMAZON MKTPLACE AMZN.DEOffice supplies
NOMINAS EMPLEADOS FEBREROPayroll
REPSOL SERVICIO TENERIFEFuel
GOOGLE CLOUD BILLINGSoftware & SaaS
TGSS COTIZACION AUTONOMOSSocial Security

Common statement import blockers and recovery​

Blocker or edge case during importWhat happens in FrihetStep-by-step recovery
1. Malformed file, broken encoding, or Norma 43 (.n43 / .csb) uploadThe 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 rangesFrihet 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 deductionThe 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, and frihet_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​