Chapter 1. The chart of accounts and the split engine.
A marketplace collects money that is not entirely its own. The first technical deliverable is neither the provider’s API nor the checkout flow. It is a ledger that knows, to the second, who owns every cent held. Everything else hangs off it. The reconciliation in chapter 2, the reserve in chapter 5, and the tax report in chapter 7 all read this same ledger. A badly designed ledger costs you for years.
Five accounts, and not one fewer
- Safeguarding account: the actual bank account that holds third-party funds. A single line, the one on the bank statement.
- Seller balances: one subledger per seller, moved by sales, refunds, and clawbacks. The total can always be computed.
- Earned commissions: the platform’s share, set aside at collection and withdrawn by an identifiable, dated outgoing transfer.
- Risk reserve: amounts held back for a seller or a category, owed to the seller but not yet available.
- Operating account: the platform’s own account, outside the safeguarding scope. No third-party funds ever enter it.
The split itself runs on versioned rules, never on code. Six parameters decide the result, and their order of application matters as much as their values. First the line price, then shipping fees, allocated to the seller or the platform, then the discount and who funds it. Next comes the commission base, with or without shipping, tax-inclusive or not, then the tax on the commission itself, and finally rounding.
CMD-2026-40118 3 lines 2 sellers shipping 4.90 EUR paid by the buyer
L1 seller V-8842 33.33 EUR commission 12.5%
L2 seller V-8842 33.33 EUR commission 12.5%
L3 seller V-1907 33.34 EUR commission 18.0% + shipping 4.90 EUR
shipping goes to the seller and stays outside the commission base
1) commission line by line, rounded to the nearest cent
L1 33.33 x 0.125 = 4.16625 -> 4.17
L2 33.33 x 0.125 = 4.16625 -> 4.17
L3 33.34 x 0.180 = 6.00120 -> 6.00
2) seller share = line price MINUS line commission
never a second percentage: the classic source of the lost cent
L1 33.33 - 4.17 = 29.16
L2 33.33 - 4.17 = 29.16
L3 33.34 - 6.00 = 27.34 + 4.90 shipping = 32.24
3) balance check, run before the entry is committed
collected 33.33 + 33.33 + 33.34 + 4.90 = 104.90
seller balances 29.16 + 29.16 + 32.24 = 90.56
commissions 4.17 + 4.17 + 6.00 = 14.34
90.56 + 14.34 = 104.90 -> balance OK| Event | Safeguarding account | Seller balance | Earned commissions |
|---|---|---|---|
| Buyer payment collected | + total amount | + seller share | + commission |
| Full refund | − amount refunded | − seller share | − commission clawed back, per the contract |
| Payout to the seller | − amount paid out | − amount paid out | unchanged |
| Platform withdrawal | − amount withdrawn | unchanged | − amount withdrawn |
| Chargeback after payout | − amount reversed | − seller share, balance may go negative | − commission clawed back |
| Bank fees on the account | no movement | none | none, they are paid from the operating account |
Chapter 2. Safeguarding: the account, the deadline, the reconciliation.
Safeguarding is judged on three daily routines, not on a contract clause: where the funds arrive, when they reach the protected account, and how you prove every evening that the account holds exactly the sum of what sellers are owed. The regimes differ on the legal mechanism but converge on the burden of proof. A team either produces that proof or it doesn’t.
| Jurisdiction | What the law requires | The document that proves it |
|---|---|---|
| European Union | Deposit in a separate account at a credit institution, or investment in secure, liquid, low-risk assets, no later than the end of the business day following receipt; or coverage by an insurance policy or comparable guarantee (Directive (EU) 2015/2366, Article 10) | The credit timestamp on the safeguarding account statement, compared with the collection timestamp |
| UK | Separate trust account, or comparable insurance or guarantee (regulation 23 of the Payment Services Regulations 2017, regulation 20 of the Electronic Money Regulations 2011, chapter CASS 15 of the FCA Handbook) | The acknowledgment letter from the account-holding bank, recognizing the account’s fiduciary nature |
| United States | Holding permissible investments whose market value covers outstanding transmission obligations at all times (CSBS, Money Transmission Modernization Act, sections 10.01 to 10.03) | The periodic coverage report, asset by asset, filed with each state’s regulator |
| Brazil | Balances held in a conta de pagamento form segregated assets that cannot be seized and fall outside the bankruptcy estate (Lei nº 12.865, de 9 de outubro de 2013, Article 12) | The split of balances between cash at the central bank and federal government securities |
| India | Escrow account at a Scheduled Commercial Bank, with no other flows allowed, and settlement to the merchant at Ts+1 or Td+1 depending on who is liable for delivery (Reserve Bank of India, guidelines on payment aggregators) | The auditor’s certificate on how the escrow operates, enforceable before the regulator |
| Singapore | Trust account at an approved safeguarding institution, never commingled with the licensee’s own funds (Payment Services Act 2019; MAS, PS-G01) | The trust account statement, on which the account holder is named in its fiduciary capacity |
SAFEGUARDING ACCOUNT RECONCILIATION — 2026-03-17 — EUR
A closing bank balance, safeguarding account statement 412,908.44
B sum of seller balances, platform ledger 387,214.10
C earned commissions not yet withdrawn 19,402.88
D risk reserve held 8,000.00
E payouts issued, not yet debited (in flight) -1,708.54
check A - (B + C + D + E) = 0
412,908.44 - (387,214.10 + 19,402.88 + 8,000.00 - 1,708.54)
412,908.44 - 412,908.44 = 0 -> RECONCILED
alert threshold |gap| > 0.00 EUR on 2 consecutive days
-> compliance incident, not an accounting anomalyThe five recurring breaks, and what causes them
- Payout returned by the seller’s bank: the amount comes back to the safeguarding account, and it must go back to the seller’s balance, not to the operating account.
- Posting date mismatch: the acquirer books a chargeback the day before the platform receives it. The break clears on its own, but it still gets documented.
- Bank fees debited from the safeguarding account: prohibited, yet common when a new account is set up wrong. Fix it with the bank; don’t offset it with an entry.
- Collection assigned to an unknown seller: the order was canceled between payment and allocation. The money sits in the bank with no identified owner.
- Currency conversion applied on credit: the account is held in one currency, the collection arrives in another, and an FX difference creeps in unnoticed.
Chapter 3. Licensed partner or your own license: running the numbers.
The decision comes down to two numbers and a date, not a conviction. The first number is the partner’s annual cost, which grows with volume. The second, the annual cost of an in-house function, barely moves. The date is when the license can actually take effect, and that third term is where teams most often go wrong.
| Jurisdiction | License type | What must be tied up or guaranteed | Reference |
|---|---|---|---|
| European Union | Payment institution (PI) | €125,000 of initial capital for acquiring payment transactions or executing credit transfers; €50,000 for payment initiation only; €20,000 for money remittance only | Directive (EU) 2015/2366, Article 7 |
| European Union | E-money institution (EMI) | €350,000 of initial capital, as soon as the platform issues stored balances | Directive 2009/110/EC, Article 4 |
| India | Online payment aggregator (PA-O) | Net worth of ₹25 crore from the end of the third financial year, escrow at a Scheduled Commercial Bank | Reserve Bank of India, payment aggregator guidelines |
| Singapore | Major Payment Institution | S$250,000 of base capital, versus S$100,000 for a Standard Payment Institution; the switch is triggered above S$3 million in monthly transactions for one service, S$6 million for two or more, or S$5 million of e-money float | Payment Services Act 2019; MAS, PS-G01 |
| United States | Money transmitter, state by state | Surety bond of at least $100,000, capped at $500,000 per state, plus permanent coverage of obligations with permissible investments | CSBS, Money Transmission Modernization Act, sections 10.01 and 10.02 |
| Brazil | Instituição de pagamento | No safeguarding account to open: balances in a conta de pagamento are segregated assets by operation of law | Lei nº 12.865/2013, Article 12 |
The calculation, with parameters to replace with your own
VOLUME ASSUMPTIONS (replace with your actual figures)
annual GMV collected 40,000,000 EUR
active sellers 12,000
payouts per seller per year 24
new sellers verified during the year 3,000
PARTNER PRICING (replace with the offer you received)
variable fee on GMV 0.25%
fee per payout 0.25 EUR
fee per seller verification 2.50 EUR
ANNUAL PARTNER COST
variable 40,000,000 x 0.0025 = 100,000.00
payouts 12,000 x 24 x 0.25 = 72,000.00
verifications 3,000 x 2.50 = 7,500.00
total = 179,500.00 EUR
ANNUAL COST OF THE IN-HOUSE FUNCTION (to estimate, line by line)
permanent compliance and risk team
external audit, internal control, periodic reporting
connection to and maintenance of the payout rails
initial capital: TIED UP, not spent -> excluded from this total
BREAK-EVEN POINT
variable fee x GMV = annual cost of the in-house function
capital never enters this equation: it weighs on cash,
not on the income statement- The timeline sets the go-live date, not the budget. The authority informs the applicant within three months of receiving a complete application (Directive (EU) 2015/2366, Article 12). The clock only starts once the application is complete, and no law limits the preparation phase before it.
- A marketplace remains responsible for its seller base even when the partner holds the license: the marketplace designs the onboarding flow and explains any rejection.
- Hybrid setups exist: a licensed partner in launch markets, your own license in the home market. It doubles the reconciliation workload, and it should be a deliberate choice.
Scoring a tender for platform payment providers
| Question to ask | Disqualifying answer |
|---|---|
| What license, in which country, and on which public register can we check it? | A license name with no number and no searchable register |
| Who bears a negative seller balance, contractually and technically? | “We handle that case by case” |
| In which markets are payouts made under your own license? | Claimed coverage that doesn’t distinguish your own license from subcontracting |
| What is the export format for the seller database and the verifications already completed? | An export limited to identifiers, without the documents or verification dates |
| What is the contractual time between collection and credit to the safeguarding account? | A best-efforts commitment with no retrievable timestamp |
| How is a change to a seller’s bank details reported? | An immediate change, with no cooling-off period and no notification |
| What tax-base data does the API return, and at what granularity? | A single annual net amount, not broken down by quarter |
Chapter 4. KYB by country: one form, N registries.
A seller fills in one form, once. Behind it, three regimes consume that data and two separate gates open. Anti-money laundering rules govern the right to be paid; trader traceability governs the right to sell. Tax collection governs both, by blocking sellers who don’t respond. The engineering job is to model a single record, then plug the right national registry in behind each field.
type DossierVendeur = {
// legal identity — collected once, read by all three regimes
paysEtablissement: string // ISO 3166-1 alpha-2
identifiantEntreprise: string // CNPJ, ABN, UEN, company number...
registreSource: string // where the number was verified
verifieLe: string | null // timestamp of the VERIFICATION, not of data entry
// AML/CFT due diligence
beneficiairesEffectifs: { nom: string; part: number }[]
filtrageSanctionsLe: string | null
// trader traceability — Regulation (EU) 2022/2065, Article 30
contact: { adresse: string; telephone: string; courriel: string }
autocertification: boolean
// tax — DAC7, UK rules, 1099-K
identifiantFiscal: string | null
etatResidenceFiscale: string | null
// payout account
coordonnee: { type: "iban" | "chave-pix" | "vpa" | "aba" | "payid" | "uen"; valeur: string }
appartenanceVerifiee: boolean
}
// TWO gates, never one: selling and getting paid don't open together
const peutVendre = (d: DossierVendeur) =>
d.verifieLe !== null && d.autocertification && d.contact.adresse !== ""
const peutEtrePaye = (d: DossierVendeur) =>
peutVendre(d) &&
d.appartenanceVerifiee &&
d.filtrageSanctionsLe !== null &&
d.identifiantFiscal !== null| Market | Business identifier | Seller tax ID | Verification registry |
|---|---|---|---|
| European Union | Registration number in the national business register | EU VAT identification number | National registers; VIES for VAT number validity (European Commission) |
| UK | Companies House company number | Unique Taxpayer Reference, plus VAT number where applicable | Companies House, a free public register |
| United States | Registration with the state of incorporation, no federal register | Employer Identification Number, collected on Form W-9 | Secretary of State of the state of incorporation |
| Brazil | CNPJ (Cadastro Nacional da Pessoa Jurídica) | The CNPJ itself; CPF for an individual seller | Receita Federal do Brasil |
| India | Corporate Identity Number from the Ministry of Corporate Affairs register | PAN and GSTIN | MCA and GST portals |
| Australia | Australian Business Number (ABN) | The ABN itself; Tax File Number depending on the legal form | Australian Business Register |
| Singapore | Unique Entity Number (UEN) | The UEN itself | ACRA, BizFile portal |
| Japan | 13-digit corporate number | The same number | National Tax Agency register |
Re-verification triggers
- Change in beneficial owner: in the EU, the ownership stake that makes someone a beneficial owner is set at 25% (Regulation (EU) 2024/1624, Article 52). Crossing it triggers a new review of the record.
- Change in payout details: the highest-value signal in the whole chain, and the most common one when an account is compromised.
- Change in sales category: a clothing seller who switches to high-value electronics changes both its risk profile and its dispute profile.
- Reactivation after dormancy: a record verified three years ago says nothing about the business today.
- Crossing a volume threshold: the thresholds that trigger a change of status are local, and they apply to the seller as well as to the platform.
Chapter 5. Payouts: trigger, reserve, rail.
The payout schedule is a marketplace’s most sensitive parameter. Paying out fast attracts sellers and drains your collateral; paying out late protects cash and drives good sellers away. The setting isn’t decided for the whole platform but by sales category. Risk doesn’t expire on the same date for a book as for a vacation stay.
| Market | Seller account details | Format | Ownership check |
|---|---|---|---|
| Euro area | IBAN and account holder name | Mod-97 check digits, length fixed by country | Verification of payee, mandatory since October 9, 2025 (Regulation (EU) 2024/886) |
| UK | Sort code and account number | 6 digits and 8 digits | Confirmation of Payee on the Faster Payments Service (Pay.UK) |
| United States | ABA routing number and account number | 9 digits, with a checksum | No universal name check on ACH: micro-deposits or verification through an aggregator |
| Brazil | Pix chave (key) | CPF, CNPJ, phone, email, or random key | The chave is linked to the holder’s CPF or CNPJ: compare it with the number in the seller record |
| India | UPI virtual payment address, or IFSC code and account number | 11-character IFSC | The payee name is displayed before confirmation |
| Australia | PayID, or BSB and account number | 6-digit BSB; PayID = ABN, email, or mobile number | PayID displays the account holder name before confirmation (Australian Payments Plus) |
| Singapore | UEN via PayNow Corporate, or bank code and account number | UEN as issued by ACRA | The registered business name linked to the UEN is returned |
| Japan | Bank code, branch code, account number, name in katakana | 4 digits, 3 digits, name in half-width katakana | The receiving bank compares the name on the order with the account holder |
Sizing the reserve on the actual window
A reserve is sized on the dispute window, not on gut feeling. For merchandise not received, Visa rules allow 120 days from the expected delivery date, up to a limit of 540 days after the transaction. A rolling reserve of 5% of sales collected over 120 days therefore covers a net dispute rate of 5% over that same window. Redo the calculation by category, using the observed rate, never a marketplace-wide average.
Chapter 6. The three-party dispute.
A marketplace dispute pits a buyer against a seller, but it is settled between the issuer and the platform. That asymmetry explains almost every failure you see. The buyer files a dispute with their bank, the issuer claws the funds back from the acquirer, and the acquirer claws them back from the platform. The seller never sees the reason code, the network deadline, or the case file. The platform therefore plays two roles at once: party to the card dispute and arbiter of the commercial dispute.
| Reason code family | What wins the case | Who holds the evidence | Internal deadline |
|---|---|---|---|
| Merchandise or service not received (Visa 13.1, Mastercard 4853) | Trackable proof of delivery to the billing address, or proof that the service was performed on the scheduled date | The seller, through its carrier; the platform only has the tracking number | Short: the time the acquirer allows for representment is tighter than the network deadline |
| Card-not-present fraud (Visa 10.4) | Strong authentication with liability shift to the issuer, or a body of evidence linking the order to the cardholder | The platform, which holds the authentication, device, and buyer account history | The case file is built at collection, not when the dispute arrives |
| Not as described | Accurate description at the time of purchase, accepted return policy, messages with the buyer | Shared: the product listing belongs to the seller, the acceptance record belongs to the platform | Medium: gathering evidence from the seller is the slow link |
Deflect before you defend
- A visible internal claims channel: a buyer who finds a button doesn’t call their bank. It is the cheapest lever, measured by the share of disputes opened outside the network.
- A recognizable statement descriptor: one dispute in two starts with a buyer who doesn’t recognize the line on their statement.
- Pre-dispute alerts: Verifi on the Visa side and Ethoca on the Mastercard side flag the dispute before it is formally filed and give you time to refund.
- A voluntary, documented refund: issued before the dispute is filed, it can be argued in your favor and doesn’t count toward the dispute ratio. It costs the amount, not the amount plus dispute fees.
- Automated evidence collection: asking a seller for a tracking number three months after the sale gets you nothing. Capture tracking at shipment, in the same call as the payout trigger.
Then comes allocation, where you find out what the marketplace agreement really says. The clawback debits the seller’s balance. If that balance doesn’t cover it, it goes negative and is netted against later sales; if the seller stops selling, the receivable is collected or provisioned. The contract must name who ultimately bears the loss before the incident, and the provider’s configuration must say the same thing. Any gap between the two surfaces on the day of the first large chargeback.
Chapter 7. DAC7 and 1099-K: building the extracts.
Two reporting regimes read the same ledger and don’t pull the same number from it. DAC7 asks for the consideration paid or credited to the seller, broken down by quarter, with the number of activities and the platform’s deductions. Form 1099-K reports the gross amount of the year’s payment transactions, with no deduction for commissions or refunds. Writing a single aggregation for both produces two wrong reports.
-- DAC7: consideration paid or credited, broken down by QUARTER,
-- with the number of activities and the platform's deductions.
SELECT vendeur_id,
DATE_TRUNC('quarter', date_evenement) AS trimestre,
SUM(part_vendeur) AS contrepartie,
COUNT(*) AS nb_activites,
SUM(commission + frais + taxes) AS retenues
FROM grand_livre
WHERE type_evenement IN ('vente', 'remboursement')
AND annee_civile = 2026
GROUP BY vendeur_id, trimestre;
-- 1099-K: GROSS amount of the year's payment transactions,
-- with no deduction for commissions, fees, or refunds.
SELECT vendeur_id,
SUM(montant_brut) AS brut_annuel,
COUNT(*) AS nb_transactions
FROM grand_livre
WHERE type_evenement = 'vente'
AND annee_civile = 2026
GROUP BY vendeur_id;
-- Corrections are assigned by the date of the ORIGINAL event:
-- a January 2027 refund on an October 2026 sale belongs
-- to Q4 2026 for DAC7.| Regime | What is reported | Exclusion threshold | Deadline |
|---|---|---|---|
| DAC7, Directive (EU) 2021/514 | Consideration paid or credited, by quarter, with the platform’s deductions | Sellers of goods: fewer than 30 sales and €2,000 or less in the year | January 31 following the calendar year |
| Platform Operators Regulations 2023, UK | Same OECD model rules, transposed into UK law | Fewer than 30 sales and roughly £1,700, for goods only | January 31 following the calendar year, to HMRC |
| Sharing Economy Reporting Regime, Australia | Services: transport, short-term accommodation, asset rental, delivery. Sales of goods are excluded | No de minimis threshold | Two filings a year with the ATO: January 31 and July 31, since July 1, 2023 |
| Form 1099-K, US | Gross receipts, not net income | More than $20,000 and more than 200 transactions for a single payee | Internal Revenue Service annual calendar |