See what your bank charged
Bank fee finder
Find likely bank fees in a CSV, confirm the rows, then see what you paid after reimbursements. The tool is free, runs in this browser tab and does not need a bank connection or signup. A matching phrase is a starting point, not proof that a charge is a fee.
By AnyStatement
Published , 5 min read
What did the bank charge?
Find likely fee rows, check them against your statement, then keep a total with reimbursements shown separately. One account and currency; up to 5 MB and 10,000 data rows.
UTF-8 .csv or .txt, up to 5 MB. File contents never leave this tool.
Set the period and read the phrases
These editable starter phrases find candidates, not confirmed fees. Matching ignores case, normalizes Unicode and trims outer spaces. Contains means literal text, not a regular expression. A broad FEE rule would also find COFFEE.
Review or edit all 8 phrases
At most 100 rules. Changing a rule clears every row decision so an old confirmation cannot carry over to a new rule set.
- Contains “monthly maintenance”: Maintenance
- Contains “overdraft fee”: Overdraft
- Contains “nsf fee”: NSF / returned item
- Contains “returned item fee”: NSF / returned item
- Contains “atm fee”: ATM
- Contains “atm reimbursement”: ATM
- Contains “foreign transaction fee”: Foreign transaction
- Contains “wire fee”: Wire
One row can match several categories. You choose the category; the first matching rule never wins automatically.
Start with the charges that actually posted
Choose one account's CSV or paste its contents. Map the posted date, description and either a signed amount or separate debit and credit columns. Choose the date order, number format and money direction explicitly. For a card export, check a purchase and a payment against the statement rather than assuming its signs match a bank account.
The visible starter phrases look for maintenance, overdraft, NSF or returned-item, ATM, foreign-transaction and wire fees. You can change those phrases or add your own literal exact or contains rules, up to 100. Matching ignores case and normalizes Unicode, but it does not use AI, regular expressions or a bank-specific fee schedule. We deliberately do not include a standalone FEE contains rule: it would also match COFFEE.
Every match needs your decision. Choose a category to confirm the whole row, mark it Not a fee, or explicitly exclude it as Pending. If more than one category matches, you choose which applies. Unmatched rows remain unclassified, and you can manually confirm a fee the rules missed. Changing the source, period or rules clears row decisions.
Three charges, one reimbursement, one coffee
The fictional Load example contains monthly maintenance of -12.00, an overdraft fee of -35.00, an ATM fee of -3.00, an ATM reimbursement of +3.00 and COFFEE of -4.50 USD. Its June 1-30, 2026 review has four preconfirmed rows so you can see the finished result immediately.
Gross fees are 12.00 + 35.00 + 3.00 = 50.00. Reimbursements are 3.00, so net fees are 47.00. The ATM category has one fee and one reimbursement, with a net of zero; the coffee row stays unclassified. Zero net does not mean there were no charges.
A reimbursement can exceed the selected period's fees, making the net negative. That can happen in the arithmetic when a credit relates to an earlier period. The tool includes it on its posted date and does not claim to match it to a particular charge.
Keep gross charges and credits separate
The result gives fee and reimbursement counts, gross charges, reimbursements and net fees by category and month. It covers every confirmed row, not just the table's current page. The source line beside a group is the first included row, so you have somewhere to start checking.
The short summary leaves out descriptions, source names and account labels. It is suitable for copying into a conversation about account costs, although dates and totals may still be private. The row-review CSV is more detailed: it retains original cells, source lines, matching phrases, your decisions, excluded rows and the calculation settings. Read it before sharing.
These are selected posted fees in the file you supplied, not a claim about all fees for the year. Missing months remain unknown, and a partial year is never multiplied into an annual estimate. For a fuller review, compare the statement with the account terms using the bank fee audit guide.
Some rows need more than a phrase match
An ATM withdrawal is cash leaving your account, not automatically an ATM fee. A purchase that bundles a fee with another cost cannot be split here: confirming it would count the whole debit. A reversal description is not enough to decide what happened. Check those rows against the source and supporting details before classifying them.
The tool accepts one UTF-8 CSV or text file up to 5,000,000 bytes and 10,000 data rows. Comma, semicolon, tab and pipe separators are supported. One account and currency are required; mixed mapped labels block the calculation, including differences in spaces or letter case. Amounts use exact integer minor units at 0-6 decimal places. Excess precision is rejected, not rounded.
Blank records, repeated headers, subtotal-like rows, malformed dates or amounts and replacement characters block the calculation. The original-record preview retains readable records, and the issues download lists the problems, even for rows outside the selected period. Exact duplicate rows are flagged and retained, not removed. Check the source before counting both or excluding one.
You must declare that the mapped date is the posted date and that every row not explicitly marked Pending is posted. This tool cannot establish that the declaration is true. It does not detect fraud, decide whether a fee is illegal, determine refund entitlement or fee-waiver eligibility, authenticate a statement, or reconcile its balance to your books.
Your working copy stays local
Your file and the values you enter are processed in this browser tab. They are not uploaded or sent to analytics. We do not save them between visits. Downloads you choose to save remain on your device.
Clear removes the active input and decisions, and resets the starter rules. It is not a secure memory wipe, and navigating away is not a substitute: Back can restore uncleared input. Downloads create new files; they do not overwrite your source.
The spreadsheet-safe row review adds an apostrophe to formula-like text and displays the changed-cell count. Parsed amounts retain their numeric signs. A separately warned faithful copy preserves original cell values for trusted text-processing workflows, not direct spreadsheet opening. Both use new CSV quoting and line endings, so neither is a byte-for-byte source copy. Spreadsheet save-and-reopen behavior can remove formula protection; no download is a guarantee of acceptance or safety in every destination.
What this method is based on
The CFPB's maintenance-fee explanation, last reviewed September 13, 2024, describes fees and the account conditions that can affect them. It does not establish that a particular description proves a fee, so this tool leaves that decision to you.
We opened that page, RFC 4180 (October 2005) and OWASP's CSV injection guidance on October 17, 2026. OWASP showed no update date. We recomputed the fictional amounts with exact decimals. No live bank account, fee schedule or destination-app import was tested.
If the history only exists in PDFs
First check whether the bank can export the dates you need as CSV, or prepare a working list manually. If only PDF statements remain, AnyStatement converts them into transaction data with source-line links and statement arithmetic checks. That is a separate upload workflow. The fee review here remains free, and no local file is handed to the converter automatically.