CQUELLE Boutique Software Development Company

Past the accounting tool.
FinTech software development.

CQUELLE built a transaction-categorization platform for a US financial advisory firm on ASP.NET Core, React, PostgreSQL and a finance-pretrained BERT model, where every classification, remap and split is traceable to a person and a timestamp. Most financial software development should start with a packaged tool; this one stopped where the firm's own taxonomy began.

Hamburg, since 2019Contract under German law

Configure first, and build where the firm's rules begin

A packaged accounting or categorization tool is the right first answer for most finance teams: it ships with its own chart of accounts and vendor rules, and someone else maintains it. Fintech software development starts to pay for itself only where your firm's taxonomy, its audit duty or its separation between clients is the product, and the tool's defaults have become the thing your analysts work around.

That point is usually visible before anyone writes code. If analysts re-key transactions from the tool into their own framework by hand, the framework is the asset and the tool is a data source. The advisory firm behind this page was in exactly that position, and errors from the manual step were flowing into client deliverables.

What a packaged tool handles, and what it could not

Five capabilities a packaged finance tool does well, set against what one advisory firm asked us to build because the packaged version could not carry its rules. Every row points at the same delivered platform.

What a packaged tool handlesCategorizing transactions against the tool's own chart of accounts.What a client asked us to build insteadThe firm's taxonomy is the source of truth, so the classifier proposes a category from inside that framework or abstains and routes the line to a reviewer. A system that suggests a category outside the framework is one the firm cannot use.Where we built itThe advisory-firm platform
What a packaged tool handlesMapping a vendor name to a category once and reusing it.What a client asked us to build insteadChart-of-account labels are free text: two clients in the same industry name the same expense five ways, and one client's labels drift across years. The per-tenant classifier learns that client's wording from the reviewer's own remaps.Where we built itThe advisory-firm platform
What a packaged tool handlesSplitting a transaction across categories.What a client asked us to build insteadSplits carry audit-preserving lineage and must sum to the original to the cent before they can be saved.Where we built itThe advisory-firm platform
What a packaged tool handlesA shared model that improves from every customer's corrections, with no training work for you.What a client asked us to build insteadEach client is a tenant with its own classifier, fine-tuned on a finance-pretrained BERT model from that reviewer's confirmations and remaps, retrained nightly with the previous version kept so a regression is visible the next morning.Where we built itThe advisory-firm platform
What a packaged tool handlesAn activity log of who changed what.What a client asked us to build insteadEvery classification, remap and split is attributable to a person and a timestamp, and the ingest log records the source and the operator who authorized the connection.Where we built itThe advisory-firm platform

The platform behind the table

Transaction categorization with a human in the loop

2 developers, 6 months

The constraint came first: the model may propose a category from inside the firm's taxonomy, or abstain, and never invent one. The firm's analysts had been moving every client's QuickBooks transactions into that framework by hand, in spreadsheets, so the taxonomy was encoded as the rule the classifier has to satisfy.

Two gates sit before anything is accepted without review. One is the model's confidence. The other is a set of explicit rules per tenant: period-end balance checks, split-sum checks, prohibited mappings and vendor allow-lists.

The React review queue was built with the senior analysts in the room, around the way they already worked in spreadsheets: confirm, remap, split or defer, from the keyboard. Underneath is an ASP.NET Core API over a multi-tenant PostgreSQL schema, audit-trailed end to end, with a Python service on PyTorch beside it. Only ambiguous transactions reach a person.

Does money handling from another sector count?

  • Adjacent work

    The money side of a veterinary M&A platform

    This is money handling from an adjacent sector, not a payments licence: the ledger of a marketplace and practice platform for a US veterinary M&A company.

    Money there is an append-only transaction ledger with more than sixty transaction types. A charge stays pending until the Stripe webhook confirms it, and failures revert automatically.

    Roughly twenty distinct payment scenarios reconcile through one webhook path.

    The case study

When fintech software development is the wrong spend

A packaged tool already matches your chart of accounts.
If nobody re-keys anything by hand, configure the tool. Custom categorization earns its cost only where your taxonomy is the asset.
You need a licensed payments or banking core.
Nothing on this page is a payment institution's core or a trading engine. The money handling here is reconciliation and ledgers inside a product, and a licensed core deserves a vendor that can show one running.
You want the model to book without a reviewer.
The platform here was built so a person confirms what the model is unsure of. A system that books with nobody answering for it is a different design, and not one we would put our name to.
You want a fixed price before anyone has seen the data.
How your clients' free-text labels vary decides how much of the work is a model and how much is rules. Real transactions come first; the scope follows.

Questions a finance team asks first

What does fintech software development at CQUELLE cover?
Fintech software development at CQUELLE, a Hamburg company founded in 2019, means systems where a finance team's own rules have to hold: categorization inside the firm's taxonomy, splits that sum to the cent, a model per client, and a person and a timestamp on every decision. The delivered reference is a QuickBooks categorization platform for a US financial advisory firm.
Which stack did the categorization platform run on?
ASP.NET Core for the API, React for the review queue, PostgreSQL for the multi-tenant schema, and a Python service with PyTorch hosting a FinBERT-based classifier per tenant. Long-lived services run on AWS ECS, per-transaction classification on AWS Lambda. The transactions come from QuickBooks.
How do you keep one client's data and model away from another's?
Each client of the advisory firm is a tenant. Transactions are ingested with tenant scoping, and each tenant has its own classifier, fine-tuned from that tenant's reviewer confirmations and remaps and retrained nightly, with the previous model kept so a regression shows the next morning.
Can the model categorize transactions without a person checking?
Only where two gates agree: the model's confidence, and explicit per-tenant rules such as period-end balance checks, split-sum checks, prohibited mappings and vendor allow-lists. Anything that fails either gate goes to an analyst's queue. The model proposes from the firm's own taxonomy or abstains; it never invents a category.
Do you build payment processing?
The payment work we have delivered sits inside a product: a veterinary M&A platform with an append-only ledger of more than sixty transaction types, where a charge stays pending until the Stripe webhook confirms it and failures revert automatically. That is money handling from an adjacent sector, not a payments licence or a card-processing core.

Bring the spreadsheet your analysts work around

Start with the rule the packaged tool cannot hold, or the export your analysts re-key by hand. Thirty minutes with the founder, who still writes code, is enough to place it on one side of the line or the other, and a good share of these calls end with configure the tool and spend the money elsewhere.

Show us the rule it cannot hold

Or describe it in the form, and expect a reply inside 48 hours.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.