The bank line is the end of the payout chain, not the start. Stripe sends one net payout to your bank after fees, refunds, disputes, and payout timing have already changed the numbers, so a row-by-row comparison between the payout CSV and the bank statement fails for reasons that are structural, not accidental.

That is why both files can be correct and still refuse to align on date, reference, or amount. To match Stripe payout CSV bank statement data accurately, treat it as a layered job: confirm the bank deposit, identify the payout batch behind it, then explain the transactions inside that batch.

Read the mismatch before you start

Most failed matches fall into the same few patterns. Identify which one you are looking at before you start filtering rows or rewriting formulas.

What it looks like on screenHow the Stripe payout CSV stores itHow the bank statement stores itResult when you try a raw match
Same amount, different daypayout_date: 2026-05-09, net: 7220.00receipt_date: 2026-05-10, amount: 7220.00Same payout, one-day bank processing lag
Gross sales are higher than the depositgross: 7840.00, fees: -240.00, refunds: -300.00, dispute: -80.00, net: 7220.00amount: 7220.00False mismatch if you compare the bank to gross instead of net
Reference looks differentpayout_reference_token: ST-1839R12DLdescription: STRIPE ST-1839R12Same payout, truncated bank descriptor
Amount repeats twiceTwo payouts of 3500.00 on adjacent datesOne or two 3500.00 bank linesAmount alone is not enough to identify the right payout
Month-end looks wrongavailable_on: 2026-05-31receipt_date: 2026-06-02Timing difference, not a missing payout

The important point is that these are different failure modes. A date shift is not solved the same way as a net-versus-gross mismatch. A truncated reference is not solved the same way as two identical payout amounts.

Start from the bank deposit that actually landed

The amount that must reconcile first is the bank deposit. That is the cash event. Everything else explains that cash event.

Do not start with Stripe charges. Do not start with sales totals. Do not start with the order list. Start with the bank line that hit the account:

Bank dateDescriptionAmount
2026-05-10STRIPE ST-1839R127,220.00

Now ask one question only: which Stripe payout produced this exact net amount?

That wording matters. The bank does not receive gross charges. It receives the payout after Stripe has already netted out other activity. If your Stripe export shows this:

Stripe activity inside the payoutAmount
Charges7,840.00
Fees-240.00
Refunds-300.00
Dispute-80.00
Net payout7,220.00

Then 7,220.00 is the number that should meet the bank statement first. The rest of the rows explain why the deposit is not 7,840.00.

This is where many manual reconciliations go off course. The operator sees the sales total, sees a lower bank deposit, and assumes Stripe or the bank is wrong. In most cases, neither side is wrong. The comparison started at the wrong level.

The Stripe fields that actually help

Not every column in the Stripe export is useful for the first match. Some columns identify the payout. Others explain the difference inside it.

Stripe fieldUse it forBank-side equivalentWhy it fails if used alone
net or payout amountFirst-pass amount matchDeposit amountDuplicate payout amounts happen
payout_date or effective payout dateNarrowing the search windowReceipt date or posting dateBanks can post a day later or after a weekend
payout_reference_tokenBest shared reference when visibleDescription or reference textSome banks truncate or hide it
payout_statement_descriptorSupporting reference checkDescription textBanks display it inconsistently
Payout IDInternal Stripe lookupUsually noneThe bank statement rarely shows it
Reporting category or transaction typeExplaining the net amountNo direct bank equivalentIt is an explanation field, not a match key

If your Stripe account gives you the payout reconciliation report, export the payout-level view first and the itemized transaction detail second. If that report is not available, export the payouts list and then the transactions included in the payout you are testing. A charges export on its own is not enough. It tells you what happened on Stripe. It does not tell you which batch actually reached the bank.

A file-first workflow that gets to one answer

The clean workflow is short, but the sequence matters.

1. Isolate the bank deposit.

Filter the bank statement to the Stripe line you are reconciling. Record four things: bank date, amount, description text, and account. If you skip the account, you can waste time matching against the wrong receiving account when a business uses more than one bank account.

2. Find the payout by net amount first.

In the Stripe payouts export, search for the same amount as the bank deposit. Use the net payout figure, not gross charges. If you find one clear match within a small date window, you already have the likely payout.

3. Use the date window properly.

Treat the Stripe payout date as an expected arrival date, not a guaranteed bank receipt date. A payout dated Friday can appear on the bank on Friday, Monday, or the next business day depending on payout timing and bank processing. If the amount matches but the date is off by one business day, that is a clue, not a contradiction.

4. Break ties with the bank reference.

If two payouts have the same amount, compare the bank description against the Stripe reference token or statement descriptor. Even a partial token can be enough when the amount and timing already point to one candidate.

5. Open the payout contents only after the batch is identified.

Once the payout is matched to the bank, pull the transactions inside that payout. This is where you explain the net amount. Separate charges, fees, refunds, disputes, reserves, and adjustments. Do not mix this step into the initial search for the payout itself.

6. Write the outcome as a reconciliation result, not as a hunch.

The answer should read like this: the bank deposit of 7,220.00 on 2026-05-10 matches Stripe payout ST-1839R12DL; the one-day date shift is a banking lag; the difference between gross charges and cash is explained by 240.00 in fees, 300.00 in refunds, and 80.00 in disputes.

That is a finished answer. "I think this is the right payout because the amount looks close" is not.

What to do when the files still do not line up

The remaining problems are usually one of five cases.

The dates differ but the amount is right.

This is the most common false mismatch. Stripe has at least three dates that matter: the transaction date, the payout effective date, and the day the bank actually posts the deposit. Those are not the same thing. If the mismatch is a one-day or month-end shift, the real issue is usually why Stripe UTC timestamps mismatch bank statement CSV dates, not a missing payout. For a bank-first workflow when the timing keeps crossing periods, use how to match a bank statement to Stripe payouts when dates differ.

The bank description is too generic.

Some banks show little more than STRIPE PAYOUT. In that case, match by amount and date window first, then look at the neighbouring payouts. If Stripe shows one payout of 7,220.00 on Friday and another of 7,220.00 on Monday, the bank receipt date becomes the deciding field. If both dates are still plausible, open the payout detail and compare which one contains the activity you expect for that period.

The gross number is the one you have been checking.

This happens when the operator exports charges instead of payouts and tries to tie the charge total to the bank. The bank only sees the net effect of the batch. If the gap equals fees, refunds, disputes, or reserves, the payout is probably correct and the comparison level is wrong.

One bank line appears to represent more than one payout.

This is less common than the other problems, but it does happen. If a bank line equals the sum of two payouts, stop searching for a single exact amount match. Compare the grouped amount, then inspect the two Stripe payouts beside each other. The same logic applies when one payout appears split across different bank receipt dates.

You are looking at a paid payout that has not actually reached the bank account you are reconciling.

Check the receiving account, payout status, and whether the payout was automatic, manual, or instant. A paid status inside Stripe is not enough if the bank account under review is not the destination account for that payout.

The matching output you actually need

A good reconciliation answer does not stop at "matched." It proves the match and isolates anything still unresolved.

Output sectionWhat it should show
Bank-to-payout matchBank amount, bank date, matched Stripe payout amount, payout date, and reference used
Gross-to-net explanationCharges, fees, refunds, disputes, adjustments, and resulting net payout
ExceptionsMissing items, duplicate items, or timing differences still open
Final statusReconciled, timing difference, partial match, or unresolved

If you need to hand the result to a client, finance lead, or auditor, that structure matters. It shows which part was matched by amount, which part was confirmed by reference, and which part remains a real exception instead of a formatting problem.

The test is simple: can someone else read your note tomorrow and understand why the bank received 7,220.00 without reopening Stripe? If the answer is no, the reconciliation is not finished.

When the monthly manual process stops paying off

This workflow is workable when the payout count is low and the file volume is small. It becomes expensive when every close repeats the same routine: export the payout list, search for the amount, check the dates, inspect the descriptor, open the payout detail, explain the fee rows, and rebuild the same reconciliation note again.