Excel · ChatGPT

How to Do Bank Reconciliation in Excel with ChatGPT

Reconcile bank transactions step by step

Provide the bank statement and cash-ledger rows to ChatGPT and use it to generate candidate matches, exceptions, and an Excel-ready reconciliation schedule. The workflow below requires one-to-one matching evidence and keeps ambiguous items unmatched for human review.

Choose your situation — copy the prompt:
I need to reconcile a bank statement against a general-ledger cash account in Excel.

Add a unique row ID to every pasted row before matching:
- Bank rows: B001, B002, B003...
- Ledger rows: L001, L002, L003...

BANK STATEMENT
Columns: Bank Row ID | Date | Reference | Description | Amount
[Paste rows here]

GENERAL LEDGER — CASH ACCOUNT
Columns: Ledger Row ID | Date | GL Ref | Description | Amount
[Paste rows here]

Matching policy:
- Dates are DD/MM/YYYY and must be real dates or unambiguous date text.
- Amounts use negative for outflows and positive for inflows.
- Exact match: same signed amount AND sufficient identifying evidence
  (prefer matching reference; otherwise use date + amount + description evidence).
- Do NOT treat "same date but different amount" as a match by itself.
- Do NOT reuse a Bank Row ID or Ledger Row ID in more than one one-to-one match.
- If duplicate date+amount candidates exist, mark them "Ambiguous" unless reference/
  description evidence identifies one unique counterpart.
- If I want a timing window or amount tolerance, use ONLY the values I explicitly give:
  Date tolerance: [0 days unless I specify otherwise]
  Amount tolerance: [0.00 unless I specify otherwise]
- Do not create one-to-many or many-to-one matches unless I explicitly ask for split/
  combined transaction matching and provide the business rule.
- Never invent a reference, date, description, amount, FX rate, fee, or missing row.
- Keep uncertain items unmatched/ambiguous and explain why.

For every proposed match, show the evidence used.

Output 1 — one-to-one reconciliation table:
Bank Row ID | Ledger Row ID | Bank Date | Ledger Date | Bank Ref | GL Ref |
Bank Amount | Ledger Amount | Difference | Status | Match evidence

Allowed Status values:
Matched | Ambiguous | Unmatched (Bank only) | Unmatched (Ledger only)

Output 2 — exception lists:
- all Ambiguous candidates
- all Bank-only rows
- all Ledger-only rows

Output 3 — control totals calculated from the ORIGINAL datasets, not from the matched table:
- Bank source total
- Ledger source total
- Bank source total minus Ledger source total
- number of Bank source rows
- number of Ledger source rows
- number of one-to-one Matched pairs

Before giving the final result, check that no Bank Row ID or Ledger Row ID has been used twice.

Format the tables as tab-separated text I can paste into Excel.
Do not recommend posting journal entries from this output; reconciliation exceptions require review first.

Replace the bracketed sections with your real data, then paste the prompt into ChatGPT.

I ran a bank reconciliation and I'm getting unexpected results. Here's what I see:

Issue: [e.g. "All items show Unmatched even though amounts are the same"]

Here are 3 sample rows from my bank statement:
[paste rows]

Here are the corresponding rows from my general ledger:
[paste rows]

Please:
1. Compare the raw values and data types before assuming the cause.
2. List the plausible causes supported by these samples.
3. Give the exact Excel test/formula I can use to confirm the cause.
4. Only then give the cleaning fix.
5. Tell me how to verify that the cleaned values truly match.

Do not assume a formatting issue merely because two displayed values look similar.

Include the raw cell values, signs and date types. A displayed date/amount can look identical while the underlying Excel value differs.

I need to reconcile a multi-currency bank statement against my general ledger.

Reporting currency: [e.g. GBP]
Approved FX basis for this reconciliation:
[e.g. transaction-specific rate in column E / booked GBP amount / policy rate supplied below]
Rounding tolerance permitted by policy: [e.g. £0.01, or 0 if none]

BANK STATEMENT
Columns: Bank Row ID | Date | Reference | Currency | Original Amount | FX Rate (if supplied)
[Paste rows]

GENERAL LEDGER — CASH ACCOUNT
Columns: Ledger Row ID | Date | GL Ref | Currency | Original Amount | Booked Reporting-Currency Amount (if available)
[Paste rows]

Rules:
- Prefer reconciling to the actual booked reporting-currency amount when it is supplied.
- Use only the FX rate/basis I provide; do not look up, estimate, average, or invent a rate.
- State the conversion direction explicitly before calculating.
- Round only at the precision I specify.
- Keep original-currency amount, FX rate, converted amount and ledger booked amount in separate columns.
- Use one-to-one row IDs; never reuse a bank or ledger row in multiple matches.
- A conversion difference is an exception to investigate, not automatically an FX gain/loss journal.
- Do not post or recommend a journal entry unless I separately provide the accounting policy and ask for one.

Output:
Bank Row ID | Ledger Row ID | Currency | Original Bank Amount | FX Rate |
Converted Bank Amount | Ledger Booked Amount | Difference | Status | Evidence

Then list all ambiguous and unmatched rows separately and reconcile the source control totals.

Add a Currency column to both datasets if you have multiple currencies in one statement.

Before — bank and ledger rows are separate, status is unknown
ExcelHomeDataSort & Filter
D3
fx
ABCD
1DateBank RefBank AmountStatus
201/06/2025TXN-4401−£12,500?
305/06/2025TXN-4410+£8,750?
407/06/2025TXN-4415−£1,980?
BankLedgerReconciliation
Assign unique row IDs before matching. Ledger contains −£12,500 for TXN-4401 and +£8,700 for TXN-4410. TXN-4415 has no ledger row. Without a reconciliation table, the £50 partial difference and bank-only item are hidden.
After — one reconciliation sheet separates matched, amount-exception and unmatched items
ExcelHomeFormulasData
E3
fx
=C3-D3
ABCDEF
1DateBank RefBank AmtLedger AmtDifferenceStatus
201/06/2025TXN-4401−£12,500−£12,500£0Matched
305/06/2025TXN-4410+£8,750+£8,700+£50Amount exception
407/06/2025TXN-4415−£1,980Bank only
BankLedgerReconciliation
Reconciliation result
TXN-4401 → exact match, difference £0
TXN-4410 → same reference identifies the related entries, but amounts differ: bank £8,750 vs ledger £8,700, exception +£50
TXN-4415 → unmatched bank item, −£1,980

Do not combine the £50 amount exception and £1,980 bank-only item into one generic "net difference".
They are different exception types and should be investigated separately. ✓
Before — one date is a real Excel date, the other is text
ExcelHomeNumberData
B3
fx
'2025-06-01
ABCD
1SourceDate valueAmountType / result
2Bank01/06/2025£500Excel date serial
3Ledger'2025-06-01£500Text
Changing the Ledger cell's display format to DD/MM/YYYY does not convert text into a real Excel date. Matching can still fail even when the cells look identical.
After — convert the text value, then format the real date
ExcelHomeFormulasNumber
C3
fx
=DATE(VALUE(LEFT(B3,4)),VALUE(MID(B3,6,2)),VALUE(RIGHT(B3,2)))
ABCDE
1SourceOriginalClean DateAmountStatus
2Bank01/06/202501/06/2025£500Matched
3Ledger'2025-06-0101/06/2025£500Matched
Correct date fix
If B3 contains ISO text "2025-06-01":

=DATE(VALUE(LEFT(B3,4)),VALUE(MID(B3,6,2)),VALUE(RIGHT(B3,2)))

This parses fixed-position ISO text (YYYY-MM-DD) into numeric year/month/day arguments and returns a real Excel date serial.
Then apply DD/MM/YYYY as the display format.

Formatting alone changes appearance, not the underlying data type. ✓
Before — original-currency amount is compared directly with GBP ledger
ExcelHomeDataNumber
C2
fx
1000
ABCD
1SourceCurrencyAmountStatus
2BankUSD$1,000.00Unmatched
3LedgerGBP£790.00Unmatched
The amounts are not comparable until the bank transaction is translated into the ledger's reporting currency using the specified rate.
After — helper column converts bank amount before matching
ExcelHomeFormulasNumber
D2
fx
=C2*$G$1
ABCDE
1SourceCurrencyOriginalGBP AmountStatus
2BankUSD$1,000.00£790.00Matched
3LedgerGBP£790.00£790.00Matched
FX conversion
Assumed rate in G1:
1 USD = 0.79 GBP

Bank conversion:
$1,000 × 0.79 = £790.00 ✓

Only after applying the explicitly supplied conversion basis should £790 be compared with the GBP ledger booked amount.
For real reconciliations, retain the original amount, rate and converted amount for auditability; use the transaction-specific or policy-approved basis supplied in your data and apply only an explicitly defined rounding tolerance.

Four reasons a reconciliation can produce false matches or exceptions

Date format mismatch
One side is a real Excel date, the other is text → values may look alike but fail exact matching
High risk
Sign convention differs
Bank: -12,500 · Ledger: 12,500 → amounts never match
High risk
Duplicate date+amount pairs
Two rows share date & amount → a matcher can choose the wrong counterpart unless row IDs/reference evidence enforce one-to-one matching
Easy fix
Summary rows in export
Running balance or subtotal rows in bank export → false Unmatched
Invisible

Run a Bank Reconciliation with ChatGPT — 5 Steps

1

Export both datasets to Excel or CSV

Export your bank statement and general-ledger cash account. Preserve the original exports, then create a working copy containing individual transaction rows only. Exclude running balances, subtotals and report headers from the matching dataset rather than deleting the only source copy.

2

Align date formats and sign conventions

Confirm both datasets use compatible underlying date values—not merely the same display format—and align sign conventions before matching. Document whether outflows are negative and inflows positive, then verify a few known transactions in Excel.

3

Paste both datasets into the prompt

Use the Full Reconciliation prompt above. Include headers and unique Bank/Ledger Row IDs so every proposed one-to-one match can be traced back to exactly one source row.

4

Review every Partial and Unmatched item

ChatGPT's output is a starting point, not a final answer. Every amount exception or unmatched item needs a root-cause review. It may reflect timing, fees, an entry error, a split/combined transaction, or another valid cause. Do not assume an unmatched bank item automatically requires a journal entry.

5

Paste the reconciliation table into Excel

ChatGPT formats the output as a tab-separated table ready to paste into Excel. Apply Ctrl+Shift+L to add filters, then sort by Status to group all Partial and Unmatched items at the top.

Tip: If many items unexpectedly show Unmatched, inspect the underlying date types, sign conventions, amount data types and row identifiers first. Do not normalise dates by guesswork when formats such as 03/04/2026 are ambiguous.

Debug mismatching rows — 4 steps

1

Identify the failing pattern

Notice if the mismatch affects all rows, only specific dates, or specific transaction types. This narrows down formatting or export issues.

2

Extract 3-5 example rows

Don't paste the entire ledger again. Grab 3 rows from the bank export and their exact corresponding rows from the ledger that should be matching.

3

Query ChatGPT for hidden formatting

Paste the samples into ChatGPT using the prompt above. ChatGPT can help identify likely issues such as invisible characters, trailing spaces, differing sign conventions, or text-stored dates from the samples you provide.

4

Apply the fix in Excel before re-running

Apply any cleaning formula in a helper column first and verify known rows before replacing source values. For fixed ISO text such as YYYY-MM-DD, a DATE/LEFT/MID/RIGHT construction avoids locale ambiguity; DATEVALUE can depend on system date settings.

Reconcile multi-currency statements — 4 steps

1

Ensure currency identification

Check that your bank statement specifies the original currency for each transaction, especially if multiple foreign currencies are mixed in one export.

2

Define your exchange rates

Use the transaction-specific or policy-approved FX basis required by your accounting process. Provide that rate/booked reporting-currency amount explicitly; do not ask ChatGPT to estimate or source a rate implicitly.

3

Run the multi-currency prompt

Paste your data using the prompt above. Require ChatGPT to state whether the quoted rate means reporting currency per 1 unit of foreign currency or the inverse before multiplying/dividing, and retain the rate used beside every converted amount.

4

Account for FX variance (Partial Matches)

Compare the converted bank amount with the ledger's booked reporting-currency amount using only the tolerance permitted by your policy. A difference may have several causes; investigate it before deciding whether any FX gain/loss or other journal entry is appropriate.

Frequently asked questions

Can ChatGPT read my Excel bank statement directly?
Upload a workbook only if the ChatGPT interface and plan you are using supports file uploads. Otherwise, copy the relevant Excel columns and paste them as plain text into the prompt.
How does ChatGPT match bank transactions to ledger entries?
Use ChatGPT to propose one-to-one candidate matches from the criteria you provide. The revised prompt requires unique row IDs, signed amounts, reference/description evidence, and prevents reuse of the same source row. Duplicate or uncertain candidates remain ambiguous rather than being forced into a match.
Will ChatGPT invent matches that don't exist?
No prompt can guarantee that an AI will never make a matching mistake. This workflow reduces the risk by requiring source row IDs, explicit evidence, one-to-one usage checks and ambiguous/unmatched statuses. Always reconcile ChatGPT's output back to the original bank and ledger rows before posting adjustments.
Can I use this for multi-currency bank reconciliation?
Yes, if you provide the approved FX basis. Keep original currency, rate, converted amount and ledger booked reporting-currency amount visible. ChatGPT should use only the rate/basis you supply and should not automatically treat a conversion difference as an FX journal entry.
How often should I run this reconciliation?
Set the frequency according to transaction volume, risk and your accounting-control policy. Bank accounts are commonly included in month-end controls, while higher-volume or higher-risk accounts may need more frequent reconciliation. If you're building a broader close process, see the month-end close checklist workflow.