11 min read |

Stripe and PayPal Are Bank Accounts. Treat Them Like It.

The clearing account nobody keeps, why a card payment is two lines and not one, and how to make the payout land where it belongs.

Watercolour illustration of two small card terminals feeding coins into a holding jar, with a single arrow carrying the jar contents across to a ledger book

Quick answer

Coding a Stripe or PayPal deposit to sales understates turnover by exactly the fees, hides a real cost of sale, and loses refunds and chargebacks entirely, because those come out of the balance rather than the bank. The fix is to treat the processor as what it is: a bank account. Record the gross receipt and the fee as two separate lines, book refunds against sales, and treat the payout as a transfer from the processor account to the bank rather than as income. Do that and the processor balance in your books should equal the balance the processor shows, which is a monthly control that catches almost everything. Stripe connects with a restricted read-only key you generate yourself; PayPal is covered by UK open banking and connects through the ordinary bank feed wizard.

The mistake almost everybody makes

Stripe pays you on a rolling schedule. A few thousand pounds lands in the bank on Tuesday, another few on Friday. The obvious thing to do is code those deposits to sales, and it is wrong in three ways at once.

And if you are VAT registered it is worse than a presentation problem: the gross sale is what carries the output tax, and the processor fee may carry input tax of its own. Netting them off in one line collapses both.

The mental model that fixes it

Stripe is a bank account. So is PayPal. Money arrives in it from customers, money leaves it in fees and refunds, and periodically you transfer the balance to your real bank. Once you hold that shape in your head, every question about how to book it answers itself.

Stripe: gross in, fee out, payout is a transfer

A single card payment is not one event in the ledger. It is two, and any tool that gives you one line for it has already thrown away the information you needed.

What happenedIn the Stripe accountCoded as
Customer pays £120£120 inSales, with output VAT on the gross
Stripe takes its cut£2.04 outMerchant fees, a cost of sale
Customer is refundedMoney out of the balanceAgainst sales, not as a cost
Currency convertedOne row out, one row inNamed as a conversion, not two mystery movements
Payout to the bankBalance outA transfer, matched to the bank deposit

Connecting Stripe is the one case where no open banking consent is involved, because Stripe is not a bank. You generate a restricted key in your own Stripe dashboard, give it read access to balance transactions, and paste it in. It is your key, it is read-only, and you can revoke it from Stripe without involving anyone. Nothing can move money with it.

PayPal: the same shape, a different vocabulary

PayPal has the same structure and a lot more words for it. The useful thing is that PayPal is covered by UK open banking, so it connects through the ordinary bank feed wizard rather than needing an integration of its own. Pick it from the bank list, consent at PayPal, and the balance arrives as an account in the ledger like any current account.

The ledger treatment is identical: gross receipts in, fees out, refunds against sales, withdrawals to the bank as transfers. What catches people out is that PayPal balances often hold more than one currency, and each is its own account with its own balance. Treat them separately and the conversions between them become visible rather than mysterious.

The clearing account, and the gap that is not a fault

Why your new processor account says the balance differs

Connect Stripe or PayPal mid-life and the first thing you will see is that the ledger balance and the real balance do not agree. That is correct. The feed starts from the date you chose, but the balance has been accumulating since long before. The difference is your opening balance, and once you post it the account ties out and stays tied out.

That clearing account is the control that makes the whole approach worth the effort. If gross sales, fees, refunds and payouts are all recorded against it, the balance in your books should equal the balance Stripe shows. When it does not, something is missing, and you find out on the day rather than at the year end. A netted deposit gives you no such check at all, which is precisely why the errors survive so long.

Matching the payout to the bank line

The payout is the join between the processor account and the real bank, and it is where automated bookkeeping most often goes wrong. Two sides of the same movement, arriving on different days, in two different accounts. Post either one alone and you have invented income or a cost.

So the two legs are paired before either is posted. The processor side says a payout left the balance, the bank side says a deposit arrived, and once both are present they are confirmed together as a transfer. Until then the first one to arrive waits, with the reason on it.

The narrative that defeats a keyword rule

A payout on the bank side reads something like STRIPE PAYMENTS UK STRIPE XPODZ1PZ3359926052. That reference is different on every single payout and the word "transfer" does not appear. A rules engine keyed on words sees a brand new merchant every time. Stripping the long tokens that contain digits leaves STRIPE PAYMENTS UK STRIPE, which is the same narrative you have already booked as a transfer several times this month, and that history is what earns the hold.

Cross-currency payouts get one extra rule: a pair must agree on currency, and where a conversion is genuinely involved, the pair books at the rate the movement itself states rather than a rate looked up afterwards. That keeps the exchange difference where it actually arose.

Getting the data in

As a live feed

  • PayPal through the ordinary open banking wizard
  • Stripe with a restricted read-only key you generate
  • Lines arrive coded, payouts pair with the bank deposit
  • The balance check runs against the processor’s own figure

As an export

  • PayPal has a built-in parser in CodeIQ
  • Stripe, Etsy, Square and the rest are mapped by RiQ for you to confirm
  • Posts to Xero, QuickBooks, Sage or Pandle
  • Useful for history behind the point a feed can reach

The live feeds are part of the IQ Books ledger, so the processor balance becomes a real account in it. The export route works wherever your books already are, which matters if you have no intention of moving them. Both produce the same shape of bookkeeping, and the overlap guard means running one after the other does not duplicate anything.

A short checklist

1

Create the account

One ledger account per processor, per currency. Not a nominal called "Stripe income".

2

Post the opening balance

Whatever was sitting in the processor on the day your feed starts. Until you do, the balance check will keep telling you about it.

3

Record gross, then the fee

Two lines, always. The fee is a cost of sale, not a deduction from turnover.

4

Book payouts as transfers

Never as income. The income was recognised when the customer paid.

5

Check the balance ties

Every month. It is a two second control that catches almost everything.

Give your processor balance a real account

Connect Stripe with a read-only key, or PayPal through open banking, and watch a month of gross, fees and payouts land where they belong.

Open IQ Books

Frequently asked questions

Should I code my Stripe payout to sales?

No. The sale happened when the customer paid, not when Stripe moved the money. The payout is a transfer from your Stripe balance to your bank account. Coding it to sales understates turnover by the fees and makes refunds and chargebacks disappear.

Why is one card payment two lines?

Because two things happened: the customer paid you the gross amount, and the processor charged you a fee. They are a sale and a cost of sale, and if you are VAT registered the gross is what carries the output tax. One netted line collapses both.

Do I need to give anyone my Stripe login?

No. You create a restricted key inside your own Stripe dashboard with read access to balance transactions, and that is all that is used. It cannot move money and you can revoke it from Stripe whenever you like.

How does PayPal connect?

Through the same open banking wizard as a bank, because PayPal is covered by UK open banking. Pick it from the bank list and consent at PayPal. There is no separate PayPal integration to set up.

My processor account balance does not match. Is something broken?

Probably not, if the feed started part way through the account’s life. The difference will be the opening balance you have not posted yet. Post it and the account ties out. A difference that appears later on a settled account is the one worth investigating.

How does a payout get matched to the bank deposit?

The two legs are held until both have arrived and then confirmed together as a transfer. The bank side of a payout carries a reference that changes every time, so the match is made on the stable part of the narrative and on how that narrative has been treated in your own books before.

What about currency conversions inside the balance?

They are named as conversions rather than left as two unexplained movements, and a cross-currency pair books at the rate the movement itself states rather than one looked up afterwards, so the exchange difference stays where it arose.