← Stripe
Guide

How to recover Stripe interchange fees from connected accounts automatically

By Alastair Murdoch Last reviewed Tested on Stripe reporting · Hangfire · .NET 8
In short

Stripe reports the card network costs behind every payment on your merchants' accounts. Import that report daily, count each fee once, and total what each merchant owes. Then collect it from their Stripe balance on a schedule, labelling each bill by merchant and period so that a retry can never bill anyone twice.

15 min
Billing check cycle
1 day
Fee data per report
1
Bill per merchant per period

Before you start

  • ✓Interchange-plus pricing on your Stripe platform (otherwise there's nothing separate to recover)
  • ✓A merchant agreement that lets you pass network costs on
  • ✓Stripe's reporting notifications switched on, with their own endpoint
  • ✓A way to run scheduled background jobs (we use Hangfire)

Where the numbers come from

Stripe's transaction-level fee report breaks down each merchant payment's cost, including network costs: the interchange and card-scheme fees you pay on interchange-plus pricing. On the payments platform we built, that report decides what each merchant is billed.

Letting Stripe say when data is ready

  1. Stripe announces new report data.
  2. We request a report for the previous day.
  3. When it's ready, we download and store it (we used Azure Blob Storage).
  4. A background job imports it.

Counting each fee once

Reports overlap and notifications repeat, so every row is matched on Stripe's fee reference before it counts. Network costs are then totalled per merchant.

Billing on a schedule

A recurring job creates one bill per merchant per period. Ours runs every 15 minutes with Hangfire.

Collecting without double billing

The money moves from the merchant's Stripe balance to your platform account (an account debit). Each bill's reference is built from what the bill is (organisation, account and billing period), not a random value, so Stripe treats a retry as the same bill. We also check for an existing bill first: the reference protects Stripe's side, the check protects yours.

What usually goes wrong

From our own projects, not the manual.

A retry could bill a merchant twice

Bills were labelled with a random reference, so a retried job looked like a new bill to Stripe. Build the reference from the organisation, account and billing period, and check for an existing bill first.

Imports have to be safe to repeat

Reports can overlap and Stripe resends notifications, so the same fee row can turn up twice. We de-duplicate every row on Stripe's fee reference before it counts towards a bill.

Fee data lags the payment

The transaction-level report covers completed days, so network costs arrive after the payment. Bill in arrears on a schedule rather than at the moment of payment.

Do it yourself, or get help?

If you're already on interchange-plus pricing and your developers know Stripe's reporting, the process above is a well-contained piece of work. If you're not sure what your pricing passes through, or your merchant terms don't cover recharging network costs, sort those out first. That's a commercial question before it's a technical one.

Get a developer on it
FAQ

Common questions

What is interchange on Stripe?

It's the fee the card issuer charges on each payment, shown in Stripe's transaction-level fee report as network costs alongside card-scheme fees. On interchange-plus pricing it varies from card to card.

Can a platform charge connected accounts for Stripe fees?

Yes, if your terms allow it. We total each merchant's network costs from Stripe's fee report and collect them from their Stripe balance on a schedule.

How often should I bill interchange?

Our job runs every 15 minutes and bills whatever complete periods are outstanding, but the data itself arrives daily, so a daily cycle works too. What matters is that each bill is labelled so it can never be taken twice.

Losing margin to card fees?

Tell us how your platform is priced. We'll work out what can be recovered and automate it.