Wondy.
·AI Tools·19 min read·Wondy

How to Audit Your Bank Fees With ChatGPT (And the 3 Fees It Will Never Find)

A copy-paste prompt that pulls every overdraft, NSF, ATM and maintenance fee out of 12 months of statements, plus the 3 fees it will never find.

Banks and credit unions in the United States collected more than $12 billion in overdraft and NSF fees during 2025, according to the National Consumer Law Center, and overdraft revenue at the twenty largest banks ran 6.2% above its 2023 level. The rule written to cap those fees at $5 never took effect. Congress nullified it in May 2025 under the Congressional Review Act, a procedure that also bars the CFPB from issuing a substantially similar rule later.

So the audit is yours. The arithmetic in it is simple enough that a language model with a code interpreter handles it cleanly, which is why every page on this topic hands you a prompt. What those pages skip is the boundary of the exercise, and the boundary is where the expensive charges live.

Why nobody is coming to refund you

The CFPB finalized its overdraft rule in December 2024. Large institutions would have had to cap the fee at $5 or price it at cost, and the agency's own estimate was that the industry would lose about $5 billion a year of overdraft revenue. The Senate voted it down 54-48 on March 27, 2025, the House followed 217-211 on April 9, and the President signed the resolution on May 9. The rule never applied to a single account.

The companion rule capping credit card late fees near $8, down from about $32, was withdrawn in the same period. In June 2026 the CFPB adopted new enforcement principles that narrow the cases it takes on. Meanwhile JPMorgan Chase and Wells Fargo each pulled in roughly $1 billion of overdraft fees in 2025, with JPMorgan reporting $815 million through the first nine months alone.

That is the whole argument for spending twenty minutes on your own statements. The refund mechanism that still works is a phone call, and it only works on charges you can name.

Three things to do before you paste anything

Prep, in the order that matters
  1. 01
    Export CSV, not the PDF

    OCR on a scan can invent digits

  2. 02
    Strip the account number

    Fee lines survive redaction fine

  3. 03
    Load all 12 months

    One month reads as no fees at all

The third step is the one people skip, and it is the one that decides whether a waiver pattern is visible.

Most banks will hand you a CSV of transactions from the same screen that generates statement PDFs. Take the CSV. Feeding a model a scanned PDF adds an optical character recognition step that can misread a digit, and unlike a wrong answer, a wrong input leaves no trace in the output.

Redaction costs about five minutes. Your account number, full name, and address contribute nothing to a fee audit, and every fee line survives their removal intact. Uploading a redacted file is also a different decision from connecting a live account: OpenAI previewed a personal finance experience in May 2026 that links balances, transactions, investments and debts directly, and states that it cannot see full account numbers or move money. A connection still removes the step where you choose what leaves your computer.

The prompt

I'm attaching 12 months of my checking account transactions as CSV.
Audit it for bank fees: list every fee line item (overdraft, NSF,
maintenance, ATM), total each category, total overall, and flag which
fees look avoidable and how. Be specific with dates and amounts.

Naming the four categories does more work than it looks like. Left to its own judgment a model will classify your streaming subscription as a recurring charge worth flagging, and you get a spending lecture instead of a fee audit. The request for dates and amounts is what converts the reply into something checkable, since you can open the CSV and confirm any line in it. And the closing clause about what looks avoidable is where the model earns its place in this, because sorting a fee into avoidable or structural requires knowing how waiver conditions and ATM networks work, which is exactly the knowledge most people are missing when they look at a $12 line and shrug.

What it found in 571 transactions

The file is synthetic and the fees in it were planted. I generated twelve months of checking activity, August 2025 through July 2026, at 40 to 60 transactions a month, then seeded it with nine monthly maintenance charges of $12 (waived in three months), three overdraft fees of $34, one NSF fee of $17, and six out-of-network ATM fees of $2.50. Total planted: $242. I also buried an exchange rate markup inside two foreign card purchases, with no separate fee line anywhere in the file.

Using a real statement of mine would have made the run unverifiable, since nobody but my bank would know the right answer. A planted file is a graded exam. It is also an easier exam than yours: my fee descriptions read "OVERDRAFT FEE" and "MONTHLY MAINTENANCE FEE" in clean capitals, while a real export is full of abbreviations, branch codes, and reversals that a model has to interpret rather than match.

The model wrote Python, executed it against the CSV, and returned this.

AI 답변 (실제 실행)GPT (gpt-5.6-sol)2026-08-06 실행

I found 19 explicit bank-fee line items in the CSV:

Monthly maintenance, 9 item(s), $108.00 total (2025-08-31, 2025-09-30, 2025-10-31, 2025-11-30, 2026-01-31, 2026-02-28, 2026-04-30, 2026-05-31, 2026-07-31, each $12.00)

Overdraft, 3 item(s), $102.00 total

  • 2025-09-18: $34.00
  • 2026-01-22: $34.00
  • 2026-05-14: $34.00

NSF, 1 item(s), $17.00 total (2026-04-09)

Out-of-network ATM, 6 item(s), $15.00 total (2025-08-11, 2025-10-07, 2025-12-19, 2026-02-16, 2026-04-25, 2026-07-08, each $2.50)

Overall explicit fees: $242.00.

All four categories look potentially avoidable:

  • Maintenance: the three waived months show that meeting the assumed direct-deposit threshold can eliminate the $12 charge. Ask the bank for the exact waiver rule or switch to a no-monthly-fee account.
  • Overdraft: enable low-balance alerts, decline overdraft coverage where appropriate, keep a buffer, or link savings for a lower-cost transfer.
  • NSF: schedule payments after deposits clear and use balance alerts; ask whether the bank offers a grace period.
  • Out-of-network ATM: use the bank's in-network locator, request cash back at checkout, or choose an account that reimburses ATM fees.

This audit is limited to explicit fee lines visible in the CSV; charges embedded in transaction amounts cannot be identified reliably from these fields alone.

(excerpt: the model listed every maintenance and ATM date on its own line and set the category headers in bold; both are condensed here. Figures and wording are unchanged.)

I then rebuilt the totals in Python with Decimal arithmetic to check the model's own code against the planting script.

CategoryPlanted in the fileModel returnedResult
Monthly maintenance, 9 charges$108.00$108.00Match
Overdraft, 3 charges$102.00$102.00Match
NSF, 1 charge$17.00$17.00Match
Out-of-network ATM, 6 charges$15.00$15.00Match
Total with a line item$242.00$242.00Match
FX markup on two foreign purchasespresent, no fee linenot detectedExpected

Nineteen for nineteen on the lines, zero for one on the thing without a line. That last row is not a failure of the model. It is the shape of the problem, and it has a name worth carrying around: the line-item ceiling. A statement audit can only reach charges that were written down as charges.

How the file compares to what everyone else pays

Bankrate's annual Checking Account and ATM Fee Survey, fielded June 2 to July 3, 2025, is the reference point I use because it publishes the components separately.

FeeBankrate 2025 averageTest file
Overdraft$26.77$34.00, three times
NSF$16.82$17.00, once
Out-of-network ATM, all in$4.86$2.50 visible
ㄴ ATM operator's surcharge$3.22not in the file
ㄴ your own bank's fee$1.64$2.50
Monthly maintenance, interest-bearing$15.65$12.00, nine times

Read across the overdraft row and the fake customer is paying $7.23 above the national average every time, three times a year, which is a reason to ask about the fee schedule rather than just the individual charges. The NSF row is unremarkable. The ATM rows are where the table stops being a comparison and becomes the next section.

The three fees it will never find

Ranked by how much money they hide.

The exchange rate markup, which is the largest by far

US consumers and small businesses paid $17.9 billion in fees on international transactions in 2023, and 32% of that, $5.8 billion, was not charged as a fee at all. It was buried in the exchange rate the provider applied, per Capital Economics research commissioned by Wise. Bank markups over the mid-market rate typically run 2% to 5%.

In my file the two foreign purchases posted as $86.42 in Tokyo and $143.77 in Paris, $230.19 combined, described exactly like a grocery run. If the rate carried a 3% markup, about $6.70 of that total was the bank's cut, and there is no arrangement of columns in which it becomes visible. The model said as much without being asked, in its final line about charges embedded in transaction amounts.

Scale that to a two-week trip or to anyone who buys from overseas sellers regularly, and the number the audit missed is larger than the entire $242 it found.

The ATM surcharge that never becomes a line

Bankrate splits the $4.86 average out-of-network withdrawal into $3.22 taken by the ATM operator and $1.64 taken by your bank. Only the second half reliably becomes a statement line. Depending on the institution, the operator's cut is deducted from the cash dispensed or folded into the withdrawal amount, which is why the practice varies bank by bank and why your statement is not a reliable place to count it.

Six withdrawals produced six $2.50 lines in my file and nothing else. If the operator charged the 2025 average of $3.22 each time, those six withdrawals cost about $34.32 rather than the $15.00 the audit reports. That is an assumption applied to the file, not a reading of it, which is precisely the complaint: to know the real number you would have to remember the machines.

The monthly fee you were never required to pay

A statement records what you paid. It has nothing to say about what you could have avoided. Bankrate found that 47% of non-interest checking accounts charge no monthly fee whatsoever, that 48% of them waive it for a direct deposit, and that escaping the fee on an interest-bearing account takes an average minimum balance of $10,705. At the $15.65 interest-bearing average, a year of not asking costs $187.80.

The model did catch this one in my run, and the reason is worth being precise about. Three of the twelve months had the fee waived, so there was a contrast inside the file to notice. Charge all twelve months and that signal disappears completely: twelve identical $12 debits look like the cost of having an account. The waiver rule lives in your account agreement, which is a separate document. Paste it in alongside the CSV and the question changes from what did I pay to what was I supposed to qualify for.

Of the three, the maintenance fee is the one I would chase first, and not because it is the biggest. It is the one that repeats. An exchange rate markup on two trips is roughly $7 and gone; $15.65 a month is $187.80 a year and renews itself until somebody makes a phone call. Wondy's rule for this kind of exercise is to sort findings by whether they recur before sorting them by size.

What to do with the list

Start with the overdraft fees, because the first one is nearly always refunded on request. Your position is strongest if you have been a customer for more than a year and have not overdrafted in the previous six months. Call with the date and the amount in hand and ask for a one-time courtesy reversal rather than debating whether the charge was correct. If you suspect an overdraft you never noticed, look for a declined transaction paired with a debit from the bank itself of roughly $35 on the same day.

Then ask for the waiver rule in writing. Not whether you can get the fee waived, but the exact threshold: how much direct deposit per month, what daily balance, which linked accounts count. If the answer is a number you clear anyway, you have been paying for a filing error. If it is $10,705, you already know that account is not for you, and 47% of non-interest accounts elsewhere charge nothing at all.

What I would not do is treat the total the model returns as the total you paid. It is the total you were shown. Run the prompt, get your $242 equivalent, then add the two questions the file cannot answer: how many foreign transactions went through this account, and how many times did I use a machine that was not my bank's.

FAQ

How do I audit my bank fees with AI?

Export 12 months of checking transactions as CSV rather than PDF, delete the account number and address, then paste this prompt with the file attached: "I am attaching 12 months of my checking account transactions as CSV. Audit it for bank fees: list every fee line item (overdraft, NSF, maintenance, ATM), total each category, total overall, and flag which fees look avoidable and how. Be specific with dates and amounts." Naming the four fee categories keeps the model from calling your gym membership a fee. Asking for dates and amounts turns the reply into a list you can check against the file yourself, which matters because the totals are the part you should verify before acting on any of it. Twelve months is the minimum span worth running. Pull one statement and a maintenance fee that gets waived in the months you hit your direct deposit threshold looks like no pattern at all.

Can ChatGPT find hidden bank fees?

It finds every fee that has its own line, and it does that well. In my test run on a synthetic 12-month file carrying $242 of planted fees, a GPT model returned 19 fee line items totaling $242.00, correct to the cent across maintenance, overdraft, NSF and ATM categories. What it cannot find is a charge with no line of its own, and that is the category that holds the most money. An exchange rate markup on a foreign purchase is baked into the posted amount, so it looks identical to the price of the meal. An ATM operator surcharge is frequently taken out of the cash or merged into the withdrawal rather than itemized. And a monthly fee you could have had waived is not visible anywhere in a statement, because a statement records what you paid and not what you could have avoided. The model in my run said so itself in its closing line, which is more than most tools on this topic will tell you.

What is the average overdraft fee right now?

$26.77, per Bankrate's Checking Account and ATM Fee Survey, fielded June 2 to July 3, 2025 and still the most recent edition as of August 6, 2026. That is down about 1% from the prior year. The same survey puts the average NSF fee at $16.82 and the average cost of an out-of-network ATM withdrawal at $4.86, an all-time high for the third year running, split between $3.22 charged by the ATM operator and $1.64 charged by your own bank. Monthly maintenance averages $15.65 on interest-bearing accounts and $5.47 on non-interest accounts that charge one at all, though 47% of non-interest accounts charge nothing. Other surveys land elsewhere because they sample different institutions: MoneyRates' 2026 survey reports $32.75 for overdraft and $4.55 for ATM. Compare your statement against one survey at a time rather than mixing the figures.

Will my bank refund an overdraft fee if I ask?

The first one, usually yes. A single overdraft fee is almost always reversed on request, and your odds are best if you have been a customer for more than a year and have not overdrafted in the past six months. Call with the date and the amount in front of you and ask for a one-time courtesy refund rather than arguing about whether the charge was correct. If you are not sure you were ever charged one, look for a transaction that was declined and a debit from the bank itself of roughly $35 on the same day. That pairing is almost always an overdraft. The reason this is worth five minutes of phone time is that no regulator is doing it for you: the CFPB rule that would have capped these fees at $5 was nullified by Congress in May 2025 and, because it died under the Congressional Review Act, the agency is barred from writing a substantially similar one.

Disclaimer

This article is an educational explainer, not financial or legal advice, and it recommends no specific bank, account, or product. The 12-month transaction file used in the test run is synthetic. I generated it in code and planted the fees inside it, so no figure in it describes a real account, mine or anyone else's. The AI output is a real run on August 6, 2026 through the Codex CLI, in which the model wrote and executed its own code against the file; a different model, prompt, or day will produce different output. Fee averages come from Bankrate's survey fielded June 2 to July 3, 2025 and describe national averages, not your bank. The exchange rate markup figures are illustrative calculations at an assumed 3% markup within a 2% to 5% range. Verify every fee against your own statements and your account agreement before disputing anything.

For the version of this exercise on a card rather than a checking account, I Uploaded My Credit Card Statement to ChatGPT covers the spending side. The ChatGPT Prompt That Finds Errors in Your Hospital Bill runs the same planted-error method on a document where the model caught five of six, and ChatGPT Debt Payoff Prompt picks up where the refunded money goes.

Sources