SEPA-bestand maken: opbouw, gegevens en de vier manieren
2026-07-10
De bank vraagt om “een SEPA-bestand” voor je verzamelbetaling of incassorun, en je hebt alleen een lijst met namen, IBAN’s en bedragen in Excel. Het klinkt technisch, maar het is minder ingewikkeld dan het lijkt: je hebt betaalgegevens, en de bank wil die in één vast formaat ontvangen.
Een SEPA-bestand maken betekent dat je die gegevens omzet naar een XML-bestand volgens de ISO 20022-standaard: pain.001 voor overboekingen of pain.008 voor incasso’s. XML met de hand schrijven hoeft niet en moet je ook niet willen. Je bereidt de gegevens goed voor, kiest een manier om het bestand te laten maken en controleert het vóór je het uploadt.
In dit artikel lees je wat een SEPA-bestand is, welke gegevens erin moeten, welke vier manieren er zijn om er een te maken en hoe je afkeur door de bank voorkomt.
Wat is een SEPA-bestand?
Een SEPA-bestand is een XML-bestand waarmee je in één keer meerdere betalingen of incasso’s bij je bank aanlevert. ING, Rabobank, ABN AMRO, bunq, Triodos en de andere banken in het eurogebied accepteren hetzelfde formaat. Sinds de overstap naar SEPA in 2014 vervangt het in Nederland het oude ClieOp03-formaat; daarover lees je meer in ClieOp03 naar SEPA XML.
Overboeking of incasso
| Bestand | Gebruik | Voorbeeld |
|---|---|---|
pain.001 |
SEPA-overboeking | Leveranciers betalen, salarissen, verzamelbetaling |
pain.008 |
SEPA-incasso | Contributie, abonnementen, facturen innen |
Voor een incasso heb je extra gegevens nodig: je incassant-ID en per klant een machtigingskenmerk en de datum van ondertekening.
De opbouw in vier niveaus
Een SEPA-bestand is geen platte lijst zoals een CSV, maar hiërarchisch:
- Document: de buitenste laag om het hele bestand.
-
Group Header (
GrpHdr): gegevens over het hele bestand, zoals het aantal transacties en het totaalbedrag. -
Payment Information (
PmtInf): een blok met gedeelde gegevens, zoals jouw rekening, de uitvoerings- of incassodatum en bij incasso’s je incassant-ID. - Transacties: per betaling of incasso de tegenpartij, IBAN, bedrag, omschrijving en eventueel het machtigingskenmerk.
Waarom zo? Je bedrijfsnaam en rekening staan één keer in het blok in plaats van duizend keer per regel. En de bank controleert eerst de structuur en dan pas de afzonderlijke velden.
Kernpunt: Het meeste werk zit niet in de XML, maar in de gegevens die erin gaan. Een schone lijst levert bijna altijd een geldig bestand op.
Welke gegevens je nodig hebt
Voor een incassobestand (pain.008) zijn dit de belangrijkste velden:
| Veld | Verplicht | Formaat | Voorbeeld |
|---|---|---|---|
| Machtigingskenmerk | Ja | Tekst, max. 35 tekens | MACHT-2026-001 |
| Naam debiteur | Ja | Tekst, max. 70 tekens | Jansen Installatietechniek |
| IBAN debiteur | Ja | Max. 34 tekens; een Nederlandse IBAN heeft er 18 | NL91ABNA0417164300 |
| Bedrag | Ja | Getal met punt als decimaalteken | 99.50 |
| Incassodatum | Ja | JJJJ-MM-DD | 2026-07-15 |
| Datum ondertekening machtiging | Ja | JJJJ-MM-DD | 2025-11-03 |
| Incassant-ID | Ja (één keer per blok) | Tekst, begint in Nederland met NL | Via je bank |
| Omschrijving | Nee | Tekst, max. 140 tekens | Factuur 2026-07 |
Voor een overboekingsbestand (pain.001) heb je naam, IBAN, bedrag, uitvoeringsdatum en omschrijving of betalingskenmerk nodig; machtigingsgegevens vervallen.
Controleer je lijst vooraf
- Geen lege verplichte velden. Elke regel heeft een naam, IBAN, bedrag en datum.
- Geldige IBAN’s. Juiste lengte, landcode en controlecijfers. Controleer ze met de IBAN-validator.
- Bedragen zonder tekens. Geen €-teken, geen duizendtalscheiding.
- Datums consequent. Allemaal in de toekomst en in hetzelfde formaat.
- Veilige tekens. Vreemde tekens in namen en omschrijvingen kunnen afkeur geven.
- Geen dubbele regels. Elk machtigingskenmerk hoort bij één machtiging, elke referentie is uniek.
Vier manieren om een SEPA-bestand te maken
Er is niet één juiste manier. Welke past, hangt af van hoe vaak je betaalt of incasseert en waar je gegevens staan.
| Manier | Hoe het werkt | Past bij |
|---|---|---|
| Invoerscherm van je bank | Betalingen één voor één invullen in internetbankieren | Een handvol betalingen per maand |
| Export uit je boekhoudpakket | Je software maakt zelf het XML-bestand | Als je pakket het ondersteunt en je data daar compleet is |
| Converter | Excel of CSV uploaden, kolommen koppelen, XML downloaden | Terugkerende batches vanuit spreadsheets |
| API | Je eigen systeem stuurt de gegevens en krijgt XML terug | Grote volumes en volledig geautomatiseerde processen |
Handmatig XML schrijven: niet doen
Een XML-bestand met de hand opbouwen is traag en foutgevoelig. Het is leerzaam om de structuur te begrijpen, maar niet voor echte betalingen. Wil je zien hoe een compleet bestand eruitziet, bekijk dan het voorbeeld van een pain.008.001.02-bestand.
Met een converter
Met GenerateSEPA upload je je Excel- of CSV-bestand, koppel je één keer welke kolom bij welk SEPA-veld hoort, worden IBAN’s en verplichte velden gecontroleerd en download je het XML-bestand. Een uitgebreide stap-voor-stap-uitleg voor de spreadsheetroute vind je in het artikel over een SEPA-bestand maken vanuit een spreadsheet.
Met een API
Staan je betaalgegevens al in een ERP of eigen applicatie, dan wil je niet exporteren en uploaden. Met de API stuurt je systeem de gegevens en krijgt het het XML-bestand terug. Het uploaden en goedkeuren bij de bank blijft een aparte stap.
Het bestand controleren vóór je uploadt
Een gegenereerd bestand is niet automatisch goed. Vier controles voorkomen de meeste afkeur:
- Schemavalidatie. Controleer het bestand tegen het XML-schema. Voor incassobestanden kan dat met de gratis SEPA-incasso XML-validator.
- Totalen. Kloppen het aantal transacties en het totaalbedrag met je bronlijst?
- Steekproef. Pak een paar regels en vergelijk bedrag, naam en IBAN met de bron.
- Vier ogen. De een maakt het bestand, de ander controleert vóór het uploaden.
Welke versie accepteert je bank?
Veel Nederlandse banken werken met pain.001.001.03 voor overboekingen en pain.008.001.02 voor incasso’s, en steeds vaker met nieuwere versies. Laat je niet gek maken door berichten dat je over moet op pain.008.003.02: dat is geen opvolger, maar een oude Duitse variant. Vraag gewoon je bank welke versie ze accepteren, en kies die bij het maken van je bestand.
Praktijkregel: Lever het eerste bestand klein aan, met een paar transacties. Pas als dat goed verwerkt is, stuur je de volledige run.
Lever op tijd aan: je bank hanteert een eigen aanlevertermijn en tijdstip, die in je contract staan. Voor incasso’s geldt daarnaast dat je klant vooraf een aankondiging moet krijgen.
Veelgemaakte fouten en oplossingen
| Foutmelding | Oorzaak | Oplossing |
|---|---|---|
| Ongeldige IBAN | Typfout of verkeerd formaat | IBAN’s controleren vóór de conversie |
| Ongeldig machtigingskenmerk | Dubbel, leeg of te lang | Uniek kenmerk, max. 35 tekens |
| Bestand geweigerd | Verkeerde schemaversie | Versie afstemmen op wat je bank accepteert |
| Bedrag klopt niet | Tekst, €-teken of komma als decimaal | Alleen getallen met een punt |
| Datum geweigerd | Verkeerd formaat of in het verleden | JJJJ-MM-DD en een datum in de toekomst |
| Totaal in header klopt niet | Regels handmatig aangepast na het genereren | Bron corrigeren en opnieuw genereren |
De meeste fouten zijn gegevensfouten die pas bij de validatie zichtbaar worden. Corrigeer daarom de bron en genereer het bestand opnieuw, in plaats van de XML met de hand aan te passen.
Checklist: je eerste SEPA-bestand
| Stap | Wat je doet | Wanneer |
|---|---|---|
| 1 | Bepalen: overboeking (pain.001) of incasso (pain.008) |
Vóór alles |
| 2 | Gegevens exporteren naar Excel of CSV en opschonen | Vóór elke run |
| 3 | IBAN’s, bedragen, datums en kenmerken controleren | Vóór de conversie |
| 4 | Bestand laten maken via converter, boekhoudpakket of API | Per run |
| 5 | Valideren, totalen controleren en steekproef nemen | Vóór het uploaden |
| 6 | Uploaden, laten goedkeuren en verwerking controleren | Binnen de termijn van je bank |
Een SEPA-bestand maken wordt routine zodra je de opbouw en de verplichte gegevens kent. Heb je je betaallijst al in Excel? Probeer GenerateSEPA 7 dagen gratis en maak er in een paar minuten een gecontroleerd bestand van.
Veelgestelde vragen
- Hoe is een SEPA-bestand opgebouwd?
- Een SEPA-bestand is een XML-bestand met vier niveaus: het document, de Group Header met het aantal transacties en het totaalbedrag, een of meer Payment Information-blokken met gedeelde gegevens zoals je rekening en datum, en de afzonderlijke transacties met naam, IBAN en bedrag.
- Kan ik een SEPA-bestand maken in Excel?
- Excel kan de gegevens bevatten, maar maakt zelf geen geldig SEPA XML-bestand. Daarvoor heb je een converter, je boekhoudpakket of een API nodig die de kolommen aan de juiste XML-velden koppelt en de gegevens controleert.
- Welke pain-versie moet ik gebruiken?
- De versie die je bank accepteert. Veel Nederlandse banken werken met pain.001.001.03 voor overboekingen en pain.008.001.02 voor incasso's, en steeds vaker met nieuwere versies. pain.008.003.02 is geen opvolger maar een oude Duitse variant; vraag bij twijfel je bank.
- Wat moet ik controleren voordat ik het bestand upload?
- Valideer het bestand tegen het XML-schema, controleer of het aantal transacties en het totaalbedrag kloppen met je bronlijst, neem een steekproef van een paar regels en laat een collega meekijken. Lever de eerste keer een klein testbestand aan.