Bank Reconciliation
Bank Reconciliation closes the last gap in the revenue lifecycle: a deposit has landed in your bank, and something in Fours says it should have. This page matches the two, automatically where it is confident enough and through a human review queue where it is not.
Overview
Open Revenue → Bank Reconciliation, under Operations in the sidebar. The page has four summary cards above a transaction list with three tabs — All Transactions, Review Queue, and Unmatched. The workspace Channel filter does not narrow this page.
It reads the bank accounts you connected on the Bank Accounts tab of Revenue Settings. Until at least one account is linked there, there is nothing here to reconcile.
Approving, rejecting, and matching need revenue write access. In the Insulin Revenue app, Review Match and Match appear only if your role has it; the console shows them to every role and rejects the action for a role without it.
How a bank transaction gets matched
Matching runs in three tiers. Only the rule-based tier settles a transaction on its own; whatever the AI-assisted tier proposes waits for a person:
These are the values Fours applies; none of them can be changed in the console:
| Control | Value | What it governs |
|---|---|---|
| AI confidence threshold | 0.94 by default | The minimum score at which the AI-assisted tier links a transaction to its best candidate. The link still waits in the Review Queue; below the threshold, the candidates are kept as suggestions only. |
| Amount tolerance | the larger of 0.5% or $1.00 | How far a deposit may differ from the expected amount and still be treated as the same money by the automatic tiers. The fixed $1.00 floor stops tiny transactions from being rejected over rounding. When you approve or match by hand, a difference of more than 0.01 marks the match as a variance. |
| Date window (scoring) | 7 days | How far apart a transaction and a candidate revenue record may be dated. |
| Date window (payment rules) | 3 days | The tighter settlement-date window the rule-based tier uses. |
| First import | 24 months | History pulled when an account has never completed a sync. |
| Overlap window | 7 days | Re-read before the last cursor on every later sync, so late-posted and corrected transactions are picked up. |
Summary cards
| Card | Meaning |
|---|---|
| Match Rate | The share of transactions in scope that are neither awaiting review nor carrying a variance. |
| Needs Review | Transactions that still need a decision. The line beneath breaks it down into unmatched (with their total), AI-matched, and in review. |
| Variances | Transactions matched to something, but for an amount that does not agree. |
| Total Transactions | Every bank transaction in scope. |
The cards cover every bank transaction you have imported, all time; the page’s filters and tabs do not change them.
All Transactions
The All Transactions tab lists every imported bank transaction with its date, amount, currency, bank account, description, match status, confidence, variance, and matched to.
Confidence is how sure the matcher is about the match it proposed, so a low-confidence match can be reviewed before it is accepted. Matched To names what it was matched against. When the matched record belongs to a payout, it shows that payout’s reference — or its disbursement ID — as a link that opens the same Disbursement detail as Cash & Disbursements, with the payout summary and linked invoices; a record paid out across several payouts links to the latest. Otherwise it shows the matched record’s ID.
Narrow the list with the bank account, currency, status, and time range filters, or search by amount or description.
Unmatched
The Unmatched tab is scoped to transactions with no match at all, and its label carries the count. It is deliberately separate from the Review Queue: a transaction with nothing proposed for it is a different problem from one with a proposal awaiting your decision. It has its own search, time range, and currency filters.
To match one yourself:
- Select Match on the transaction’s row.
- Choose the target type — Disbursement (the default) or Revenue record — and search for the record.
- Select the record, then Confirm Match.
Fours compares the two amounts the same way it does for an approved match (see below): within 0.01 the transaction is matched; otherwise it is marked as a variance and a review opens in the Review Queue.
Review Queue
The Review Queue tab is scoped to the transactions still awaiting a decision, and its tab label carries that count. It is a table of each transaction’s Date, Description, Amount, Match Status, Confidence, Variance, and Why flagged, and each row offers Review Match, which opens the review dialog.
Why flagged says what sent the transaction to a person:
| Why flagged | What it means |
|---|---|
| LOW CONFIDENCE | The AI-assisted tier proposed a match. Below the confidence threshold it is only a suggestion; at or above it, the transaction is linked as AI-matched. Either way, it waits for you. |
| MANUAL REQUIRED | Fours could not settle on a candidate automatically — none was found, or a check could not complete. |
| AMBIGUOUS INVOICE | The deposit refers to an AWS invoice ID that more than one revenue record shares, so Fours will not pick one on its own. |
| VARIANCE | The transaction matched, but the amounts differ by more than the tolerance. |
| REVIEW REQUIRED | No specific reason was recorded. |
To work one transaction:
- Open the Review Queue tab.
- Select Review Match on the transaction you want to settle.
- Review the suggested matches. Each suggestion was saved when the transaction was scored, and shows its confidence percentage and the reason it was suggested; the top one is preselected.
- If none of them is right, choose a target type and search for the correct record yourself.
- Add a comment explaining the decision.
- Select Approve Match to bind the transaction to the selected candidate, or Reject Suggestion to decline the suggestions without binding anything.
Approve Match requires a selected candidate. Fours converts the candidate’s amount into the deposit’s currency — with the rate stored on the record where it has one, otherwise the exchange rate for the candidate’s own date (its payout, invoice, or settlement date) — and marks the match as a variance if the two differ by more than 0.01. For a Stripe payment, the amount compared is the net Stripe settled after its fee.
Reject Suggestion does not need a candidate. It closes the review: a transaction Fours had provisionally matched goes back to Unmatched, and the suggestions you rejected are not proposed again. A transaction flagged for a variance keeps its match.
What a transaction can be matched to
| Target type | What it is |
|---|---|
| Payment | A settled payment transaction not yet matched to a deposit; refunds and credits are excluded. The default when a transaction has no saved suggestions. |
| Invoice | A paid invoice from Invoices. |
| Disbursement | A revenue record that carries payout data — a disbursement date, or a disbursed or collectable amount. See Cash & Disbursements. |
| Revenue record | A normalized row from Revenue Records. |
KPI calculation formulas
Counts are over every bank transaction your organization has imported — all time, leaving out pending, voided, and inactive ones — and no filter, tab, or channel on the page changes them. They are the same for every bank provider and channel. Amounts are converted to USD with Fours’ latest daily exchange-rate snapshot; if any currency present has no rate, the summary is not returned and the cards read 0.
| KPI | Formula | Calculation details |
|---|---|---|
| Total Transactions | count(bank transactions) | The denominator for Match Rate. |
| Needs Review | unmatched + in review + AI-matched | The card’s subtitle shows the three parts. |
| Variances | count(transactions in variance status) | Matched, but for a disagreeing amount. |
| Matched | max(0, total transactions − needs review − variances) | Not shown on its own; it feeds Match Rate. |
| Match Rate | matched ÷ total transactions × 100 | Zero when there are no transactions. |
| Review Queue (tab count) | count(reviews awaiting a decision) | The number on the Review Queue tab label. |
| Unmatched (tab count) | count(transactions with no match) | The number on the Unmatched tab label; it follows that tab’s search, time range, and currency filters. |
| Unmatched amount | Σ unmatched transaction amounts, converted to USD | Shown beside the unmatched count under Needs Review. Summed per currency, then converted. |
| Variance amount | Σ variance amounts, converted to USD | Same conversion. |
Freshness
Bank reconciliation runs on its own schedule — every 15 minutes, for every organization with an active bank account — and does not wait for a channel sync. Provider upserts and the overlap window make repeated runs idempotent, so a transaction is never double-imported. See Revenue Settings for the accounts that feed it.
Spotted something wrong or out of date on this page? Tell us and we'll correct it.