Bank Statement Reconciliation
Reconciliation is the process of comparing your bank statement against the transactions you have recorded in Coincert, verifying that every entry matches and that your balances agree. Coincert provides a five-step reconciliation wizard that automates most of the work while giving you full control over every match.
The Reconciliation Wizard guides you through importing and matching your bank statement.
Why Reconcile?
Even with automatic bank syncing (via OAuth or FinanceKit), discrepancies can occur — timing differences with checks, pending transactions, bank fees you did not record, or data entry errors. Reconciliation catches these problems before they compound.
For manually-managed accounts, reconciliation is the primary way to verify that your records match reality.
Accessing the Reconciliation Wizard
- Open an account from the Dashboard or Accounts list.
- In the Account Register, tap the Reconcile button in the toolbar.
- The Reconciliation Wizard opens as a sheet. You cannot dismiss it accidentally — interactive dismiss is disabled until reconciliation is complete.
Step 1: Import Statement
The first step is to import a bank statement file. Tap Select Statement File to open the file picker.
Supported Formats
| Format | Extension | Description |
|---|---|---|
| CSV | .csv | Comma-separated values. Most banks and apps can export this format. |
| OFX | .ofx | Open Financial Exchange. A standardized format used by financial institutions. |
| QFX | .qfx | Quicken Financial Exchange. Essentially the same as OFX with minor Quicken-specific additions. |
| Bank statement PDFs. Coincert extracts transactions using text extraction or OCR. |
CSV Import
When you select a CSV file, Coincert auto-detects the date, payee, amount, and memo columns from the header row. The parser recognizes common header names like “Date”, “Posted”, “Description”, “Payee”, “Merchant”, “Amount”, “Debit”, “Credit”, “Memo”, and “Note”.
Because CSV files do not include balance information, you are prompted to enter the opening balance, closing balance, and statement period dates manually from your paper or PDF statement.
A preview of the first five parsed transactions is shown so you can verify the data looks correct before continuing.
OFX / QFX Import
OFX and QFX files have a standardized structure (STMTTRN blocks), so column mapping is automatic. If the file includes a ledger balance, it is extracted and used for the closing balance. You go directly to the transaction preview without any manual mapping.
PDF Import
PDF statements are the most complex format to parse. Coincert uses a multi-pass pipeline:
-
Text Extraction — For digitally-generated PDFs (the majority of bank statements), embedded text is extracted directly. This is nearly instant.
-
OCR Fallback — For scanned or image-only PDFs, Coincert renders each page and runs Apple’s Vision framework (
VNRecognizeTextRequest) with.accuraterecognition level. Before OCR, a CoreImage document enhancer filter preprocesses the image to improve recognition quality. -
Metadata Extraction — The first two pages are scanned for statement period dates and closing dates. Multiple date range patterns are recognized (e.g., “01/15/2026 - 02/15/2026”, “Jan 15, 2026 through Feb 15, 2026”, “Statement Closing Date: 02/15/2026”).
-
Section Filtering — The parser identifies transaction-section headers (“Transaction Detail”, “Account Activity”, “Purchases”, “Payments and Credits”, etc.) and filters out non-transaction sections (“Account Summary”, “Interest Charge Calculation”, “Reward Activity”, etc.) to reduce false positives.
-
Multi-Account Detection — If the PDF contains multiple accounts (common with combined household statements), each account section is parsed separately. You are shown an account picker to choose which account to reconcile.
-
Transaction Parsing — Lines within transaction sections are parsed for dates, payees, and amounts. The parser handles various date formats including year-less dates (common on credit card statements from Citi and Amex), two-digit years, and month-name formats.
-
Multi-Line Consolidation — Transaction descriptions that span multiple lines are merged into a single entry.
-
Deduplication — Summary tables that repeat transaction data are detected and removed.
After parsing, a PDF Preview sheet appears where you can review and edit every extracted transaction — correcting dates, payee names, or amounts — before confirming. You can also delete incorrectly parsed entries by swiping left.
Multi-Account Statements
When a statement file contains multiple accounts, a picker appears after parsing:
- Each account is listed with the number of transactions found.
- Select the account you want to reconcile.
- If the account name from the statement matches an existing Coincert account, it is used automatically.
- If no matching account exists, you are offered the option to create a new account directly from the wizard.
Statement Balances
After parsing, the import step shows a summary of the parsed data:
- Account name (if detected)
- Transaction count
- Statement period (start and end dates)
- Format (CSV, OFX, QFX, or PDF)
- Opening and closing balances (if available from the file)
For CSV files, you must enter the opening and closing balances manually because CSV exports do not include balance information.
Step 2: Auto-Matching
After import, Coincert automatically matches statement transactions against your existing unreconciled ledger entries. The matching engine uses several signals:
How Matching Works
-
Amount Matching — The primary signal. Statement and ledger amounts must be equal (or equal after sign normalization — see below).
-
Date Proximity — Transactions are compared within a window of the statement period plus a five-day buffer on each end, accounting for posting delays.
-
Payee Similarity — Coincert uses Jaro-Winkler fuzzy string matching (via the
BankDuplicateDetector) to compare statement payee names against ledger payee names. Bank payees often differ from what you entered (e.g., “AMZN*MKTP US” vs “Amazon”). -
Learned Rules — The reconciliation learning engine remembers your previous match decisions. If you previously confirmed that “AMZN*MKTP US” matches “Amazon”, future reconciliations automatically boost the confidence score for that pairing.
-
Sign Normalization — Some banks export debits as positive numbers in CSV files (opposite of Coincert’s convention). The engine detects this by comparing the average sign of statement amounts against ledger amounts and automatically inverts statement signs when a mismatch is detected.
Confidence Scoring
Each potential match receives a confidence score from 0% to 100%:
- 85% or higher with a single candidate — Auto-matched. The match is accepted automatically.
- 85% or higher with multiple candidates — Ambiguous. Presented for you to choose the correct match.
- Below 85% — Unmatched. No automatic match is made.
Learned rules add a 10% confidence boost (capped at 100%) when the payee pairing has been previously confirmed.
Match Types
- Automatic — Matched by the engine without any learned rule boost.
- Learned — Matched by the engine with a confidence boost from a learned rule.
- Manual — Matched by you during the review step.
Step 3: Review Matches
The Review Matches screen shows the results of auto-matching organized into three sections:
Review auto-matched transactions and resolve ambiguous matches.
Summary Banner
At the top, three color-coded badges show counts:
- Matched (green) — Transactions automatically matched with high confidence.
- Review (orange) — Ambiguous matches with multiple candidates. You must pick the correct one.
- Unmatched (red) — Statement transactions with no match found.
Auto-Matched Section
Each match shows the statement payee on the left and the ledger payee on the right, connected by an arrow. Below each pair:
- The statement amount (red for debits, black for credits).
- A confidence badge (green for 90%+, yellow for 85-90%, orange for below 85%).
- A split transaction indicator if the ledger entry is a split.
To reject an auto-match, swipe left on the row and tap “Reject”. The rejected transaction moves to the unmatched list for manual resolution in the next step.
Needs Review Section
Ambiguous matches (multiple high-confidence candidates for a single statement transaction) are shown here. For each:
- The statement transaction is shown as a header with payee, amount, and date.
- Below it, each candidate ledger transaction is listed as a selectable radio button with its confidence score.
- Tap a candidate to select it as the correct match.
Continuing
Tap Continue to proceed. Unmatched transactions are handled in the next step.
Step 4: Unmatched and Outstanding Items
This step is split into two screens that handle items appearing on only one side of the reconciliation.
Unmatched Statement Transactions
These are statement transactions that had no automatic match. For each, choose a resolution:
| Resolution | Description |
|---|---|
| Add to Ledger | Creates a new transaction in your Coincert account. The account balance is updated. |
| Bank Fee | Creates a new transaction labeled “Bank Fee” with a memo noting the original payee. |
| Interest | Creates a new transaction labeled “Interest” with a memo noting the original payee. |
| Adjustment | Marks the statement entry as an adjustment. No ledger transaction is created. |
| Manual Match | Opens a searchable list of unreconciled ledger transactions so you can manually pair the statement entry with the correct one. |
Choose how to resolve each unmatched statement transaction.
Outstanding Ledger Items
These are transactions in your Coincert ledger that did not appear on the bank statement. They are usually timing differences. For each, choose a classification:
| Classification | Description |
|---|---|
| Outstanding Check | A check you wrote that has not cleared the bank yet. Subtracts from the adjusted bank balance. |
| Deposit in Transit | A deposit you made that has not posted yet. Adds to the adjusted bank balance. |
| Ignore | No adjustment. The item is left unresolved. |
A summary at the bottom shows the total outstanding checks and deposits in transit.
Step 5: Balance Reconciliation Summary
The final step compares your adjusted balances to determine whether the reconciliation balances to zero.
When adjusted balances match, reconciliation can be completed.
Bank Statement Section
- Closing Balance — The closing balance from your bank statement.
- - Outstanding Checks — Total of checks not yet cleared (shown in red).
- + Deposits in Transit — Total of deposits not yet posted (shown in green).
- = Adjusted Bank Balance — The corrected bank balance.
Ledger Section
- Current Balance — Your current account balance in Coincert.
- + Added to Ledger — Total of unmatched statement transactions you chose to add.
- + Fees/Interest — Total of items classified as bank fees or interest.
- = Adjusted Ledger Balance — The corrected ledger balance.
Difference
The difference between the adjusted bank balance and the adjusted ledger balance is displayed prominently:
- Green checkmark with “Balanced!” — The difference is zero (within one cent). The “Complete Reconciliation” button is enabled.
- Orange warning with the difference amount — There is an unresolved discrepancy. You can go back to review matches and resolutions, or tap “Complete with Difference” to finish anyway (a confirmation alert warns you about the outstanding discrepancy).
Session Summary
A detailed breakdown of the reconciliation session:
- Total matched transactions
- Auto-matched count
- Manually matched count
- Unmatched items resolved
- Outstanding items classified
- Statement period
- Source format
Completing Reconciliation
When you tap Complete Reconciliation:
- All accepted matches are saved as
TransactionMatchrecords. - Matched ledger transactions are marked as reconciled (
isReconciled = true). - Unmatched resolutions are applied — new transactions are created for “Add to Ledger”, “Bank Fee”, and “Interest” items, with the account balance updated accordingly.
- Match learning data is recorded so future reconciliations benefit from your corrections.
- The reconciliation session is marked as complete with a timestamp.
A completion screen confirms the number of transactions reconciled and the completion timestamp.
Smart Learning
Coincert learns from your reconciliation decisions to improve future auto-matching:
- Accepted auto-matches are passively recorded. If no rule exists for that statement-to-ledger payee pairing, one is created.
- Manual matches create or update a match rule with higher weight.
- Rejected auto-matches record a negative signal so the same incorrect match is less likely next time.
- Rules are stored as
LearnedMatchRulerecords and sync via iCloud.
Over time, the auto-matching accuracy improves as the system learns your bank’s payee naming patterns.
Duplicate Detection
Statement transactions are deduplicated during PDF parsing using a combination of date, payee, and amount. Summary tables in bank statements (which often repeat the same data in a different format) are detected and filtered out.
For CSV and OFX/QFX imports, duplicate detection against existing ledger transactions uses the same BankDuplicateDetector engine used for regular transaction imports. Potential duplicates are flagged during the auto-matching phase rather than silently imported.
Reconciliation History
Each reconciliation creates a ReconciliationSession record that stores:
- The account, statement period, and balances
- Source format and file name
- All statement transactions and match records
- Completion timestamp
Sessions sync via iCloud across your devices. You can view past reconciliation sessions in the account detail.
Platform Differences
Reconciliation is available on iOS, iPadOS, and macOS. It is not available on watchOS.
| Feature | iOS / iPadOS | macOS |
|---|---|---|
| File picker | System document picker | Finder open panel |
| PDF Preview editing | Decimal pad keyboard for amounts | Standard text field |
| Swipe actions | Swipe left to reject matches | Right-click context menu |
| Statement file access | Files app, iCloud Drive, email attachments | Finder, iCloud Drive |