B2B Financial infrastructure

The payment says “success.” The numbers disagree.

Your app marks a payment successful. The processor reports a different amount. A smaller amount lands in the bank. Then the operations team chases that money across three screens and a spreadsheet. FintechBear is building the engine that reconciles those records instead.

Not a bank, money transmitter, or custodian of funds. We compare records and explain the difference — we don't move the money.

Why this is hard

A payment's journey between systems is rarely one-to-one.

An internal system books the gross amount. The processor takes its fee, batches hundreds of payments, and sends the bank a single transfer. A refund lands in the next day's report. A chargeback arrives weeks later. Match on amount alone and you'll pair unrelated transactions — and miss the ones that belong together.

what each source says
Internal system
· payment A   $1,000.00
· payment B   $500.00
Processor report
· gross   $1,500.00
· fee     −$30.00
· net payout $1,470.00
Bank account
· credited  $1,460.00

Where does $10 go?

If the references and rules line up, the engine can relate both internal payments to the processor's batch, and the net payout to the bank credit.

But the bank credited $1,460, not $1,470. That's a $10 difference to investigate — and the engine has to show which records and which calculation it came from.

Without an approved tolerance or another explaining rule, a case is opened. Quietly editing the fee later to make the table balance would just hide a difference whose source was never explained.

Illustrative example — not a specific customer or integration

What we've validated

A controlled accuracy run, start to finish.

Two sources were imported and normalized, matched on an exact reference rule, and produced 10 matched pairs with four open records. One open record became a case: one person proposed a decision, their own approval was refused, a separate reviewer approved it, and the result was exported — with an audit trail.

24
Records compared, two sources
10
Matched pairs
4
Open exceptions → resolved via case
2
People required to approve a decision

A controlled accuracy demonstration — figures shown are not a capacity or performance benchmark

What we care about

The difference has to be explainable, and the result repeatable.

Two things we refuse to compromise: money is represented exactly, and a run can be reproduced. The same canonical data, rule version, and currency metadata must produce the same financial result — regardless of row order or which worker processed it.

  • Exact money, not floats. Amounts carry an integer coefficient, scale, and currency (e.g. 12345 / scale 2 / USD = $123.45). No float, no double.
  • A decision never overwrites the engine. What the engine produced, what a user proposed, and who approved it are tracked separately.
  • Failure is not “no match.” A cancelled or errored run is kept distinct from a completed reconciliation, so a half-finished job never reports records as unmatched.
  • Three months later, you can still answer “why was this closed?” The source records, the rule applied, and prior actions stay in one review trail.
Read the full technical overview
result · reproducible by design
status COMPLETED
matched 10 pairs
open 4 exceptions
totals A $7,800.00 · B $8,200.00
money exact · scale-aligned
inputs dataset + ruleset version
repeatable same inputs → same result
How it works

From raw files to an answer you can defend.

Ingest & map

The file and the records it contains are handled separately — content hash, length, source, and uploader are tied together. Source fields are mapped to one canonical model with versioned rules. payment_ref and transaction_reference only match if you say they mean the same thing.

Match on bounded rules

Composite keys, amount and time tolerances, gross–fee–net relationships, explicit FX policy. “Bounded” is technical: candidate count, group size, and run limits are explicit, so matching stays controlled as volume grows.

Review & resolve

Matched, unmatched, inconsistent, duplicate, invalid, ambiguous, conflicted. A difference can be assigned, explained with evidence, and — for critical items — prepared by one person and approved by another.

Products

The engine, and the connectors around it.

The Reconciliation Engine is the core. Connector areas describe the data model's reach — a product that can work with these sources, not a claim that every connection is built.

01

Reconciliation Engine

Compare transaction records across two sources, explain the difference, and track how it was handled — with maker-checker and an audit trail.

02

Visa Account & Payout Connector

A connector area for account and payout integration workflows.

Soon
03

Ria Connector

A connector area for partner money-movement networks, on the same canonical model.

Soon
Who it's for

Teams spending human hours chasing differences.

Electronic money institutions, payment institutions, wallet operators, and businesses working with more than one bank or PSP — anyone who takes financial data from several sources, compares it on a schedule, and burns time investigating the gaps.

Our bar is concrete: when a difference is opened, the source records, the rule applied, and prior actions should be visible in the same review flow. The team shouldn't start the investigation from zero every time.

architecture
Control Plane.NET
Web consoleReact · TS · Vite
Engines.NET · C++
Internal protocolgRPC · Protobuf
Integration APIREST · OpenAPI
StoragePostgreSQL · S3
Start a conversation

Which two sources do you need to reconcile?

Tell us where your money's story breaks — the systems, the reports, the gap you keep chasing. We assess scope and fit against your real data.