One donor gives £100 to a charity on LaunchGood. Follow every penny through the split, into four balance accounts, and across the double-entry ledger — until it reconciles to zero.
Al-Noor Relief is a real, independently-verified merchant — its own KYC, its own Adyen balance account, its own bank — that simply hangs under LaunchGood. The donation splits at capture, in a single Adyen movement, into everyone's account at once.
These are the legs Adyen actually books (mirroring the Customer Area line-for-line, so the platform's records reconcile 1:1 against it). Amounts in £; the charity's net has Adyen's processing fee deducted at settlement.
| Leg | Adyen type | Destination | Amount |
|---|---|---|---|
| Seller split | BalanceAccount | Al-Noor Relief BA | £95.70 |
| Variable fee | Commission | Ummah liable BA | £1.15 |
| Fixed fee | Commission | Ummah liable BA | £0.15 |
| Additional commission | Commission → client BA | LaunchGood BA | £3.00 |
| Processing fee | PaymentFee | Adyen (from charity net) | £0.20 |
| Donor charged | £100.00 | ||
The charity is credited £95.70 at the split, then Adyen deducts its £0.20 processing fee from that same account at settlement — so Al-Noor Relief nets £95.50. Ummah's slice is locked: LaunchGood sets its own 3% on top but can never touch Ummah's 1.15% + £0.15.
Ummah keeps its own insert-only double-entry ledger on top of Adyen. Two things get posted: the intent (what the split plan says should happen) and the booked legs (what each Adyen transfer webhook confirms). Positive = money credited into an account; negative = out.
| Account | Role | Move (minor) |
|---|---|---|
| BA:al-noor-relief | PAYEE_NET | +9,570 |
| BA:ummah-liable | UMMAH_COMMISSION | +130 |
| BA:launchgood | CLIENT_CUT | +300 |
| EXT:ACQUIRING | ACQUIRING | −10,000 |
| Balances to | 0 | |
| # | Account | Move | ↔ counter | Move |
|---|---|---|---|---|
| 2 | BA:al-noor-relief | +9,570 | CLR:PAYIN | −9,570 |
| 3 | BA:ummah-liable | +115 | CLR:PAYIN | −115 |
| 4 | BA:ummah-liable | +15 | CLR:PAYIN | −15 |
| 5 | BA:launchgood | +300 | CLR:PAYIN | −300 |
| 6 | BA:al-noor-relief | −20 | EXT:ADYEN_FEES | +20 |
| 7 | CLR:PAYIN | +10,000 | EXT:ACQUIRING | −10,000 |
Leg 6 is the subtle one: Adyen's fee is not paired with clearing — it debits the charity's balance account directly (it's their money that pays it) and credits Adyen's pocket. That is exactly what keeps the reconciliation invariant true, and it was a real bug caught and fixed: pairing it with clearing once stranded the fee there forever.
| Account | Who | Balance |
|---|---|---|
| BA:al-noor-relief | The charity — pays out to its own bank | £95.50 |
| BA:launchgood | LaunchGood — its cut, across all its charities | £3.00 |
| BA:ummah-liable | Ummah — platform revenue | £1.30 |
| EXT:ADYEN_FEES | Adyen — processing cost | £0.20 |
| CLR:PAYIN | In-transit clearing — fully drained | £0.00 ✓ |
The nightly recon runs the invariant per payment. For this donation:
Every charity on LaunchGood is a first-class, independently-verified merchant — its own KYC, its own balance account, its own payouts — that simply sits under LaunchGood via parentClientId. One donation pays the charity, LaunchGood, and Ummah in a single split, each into their own account, and the whole thing reconciles to zero in Ummah's ledger. LaunchGood earns its cut across all 100 charities without ever holding or redistributing their money.
This three-tier shape — Ummah → Client → sub-merchants, with stacked commissions — is beyond what Stripe Connect does natively, and it fits a Muslim-crowdfunding platform almost exactly.