ValidateFin
Back to blog
·Updated Mar 11, 2026·SEPA·By Eliel Nicaise

CSV to SEPA XML Converter: generate pain.001 from a spreadsheet

Turn any CSV or Excel file into a valid SEPA pain.001 or pain.008 XML file in seconds. Here is how the converter works and what your spreadsheet must contain.

Why generate SEPA XML from a spreadsheet?

Most accounting software and ERP systems let you export payment orders as CSV or Excel files. But banks require SEPA XML — specifically the pain.001 format for credit transfers and pain.008 for direct debits. Converting manually is error-prone and time-consuming.

A CSV to SEPA converter bridges this gap: you map your spreadsheet columns to the required SEPA fields, and the tool generates a valid, bank-ready XML file instantly — with IBAN validation, amount formatting, and namespace compliance included.

Blog.post7.s1.p3

What your CSV must contain

The converter requires at minimum these columns (column names can be mapped visually):

# CSV input (semicolon-separated)
creditor_name;creditor_iban;creditor_bic;amount;currency;reference
Supplier A;DE89370400440532013000;COBADEFFXXX;1200.00;EUR;INV-2026-001
Supplier B;FR7630006000011234567890189;BNPAFRPPXXX;350.00;EUR;INV-2026-002

# Generated pain.001 XML output
<Document>
  <CstmrCdtTrfInitn>
    <GrpHdr>
      <MsgId>MSG-20260303-001</MsgId>
      <CreDtTm>2026-03-03T09:00:00</CreDtTm>
      <NbOfTxs>2</NbOfTxs>
      <CtrlSum>1550.00</CtrlSum>
      <InitgPty><Nm>My Company</Nm></InitgPty>
    </GrpHdr>
    <PmtInf>
      <PmtInfId>PMT-001</PmtInfId>
      <PmtMtd>TRF</PmtMtd>
      <ReqdExctnDt><Dt>2026-03-05</Dt></ReqdExctnDt>
      <Dbtr><Nm>My Company</Nm></Dbtr>
      <DbtrAcct>
        <Id><IBAN>BE68539007547034</IBAN></Id>
      </DbtrAcct>
      ...
    </PmtInf>
  </CstmrCdtTrfInitn>
</Document>

Required fields explained

These 5 fields are mandatory in every SEPA pain.001 transaction:

  • Debtor IBANThe account to be debited — must be a valid IBAN (mod-97 verified).
  • Creditor IBANThe beneficiary account — also IBAN-validated before XML generation.
  • AmountMust be a positive decimal number (e.g. 1500.00). Currency defaults to EUR.
  • Payment referenceThe reference communicated to the creditor — max 140 characters (EndToEndId).
  • Execution dateRequested execution date in YYYY-MM-DD format. Must be a banking business day.
  • Blog.post7.s3.f6.nameBlog.post7.s3.f6.desc
  • Blog.post7.s3.f7.nameBlog.post7.s3.f7.desc
  • Blog.post7.s3.f8.nameBlog.post7.s3.f8.desc

Common errors when generating SEPA XML

These are the most frequent issues when converting CSV to SEPA:

Invalid IBAN checksum

A typo in the IBAN will fail the mod-97 check. The converter validates all IBANs before generating XML.

Amount with wrong decimal separator

Use a dot (.) as decimal separator. Commas (,) cause parsing errors in most banking systems.

Missing BIC for non-EEA banks

Within SEPA, BIC is optional for domestic transfers but required for cross-border or non-EEA creditors.

Blog.post7.s4.e4.label

Blog.post7.s4.e4.desc

Blog.post7.s4.e5.label

Blog.post7.s4.e5.desc

Blog.post7.s4.e6.label

Blog.post7.s4.e6.desc

Blog.post7.s6.title

Blog.post7.s6.p1

  1. 1Blog.post7.s6.step1.titleBlog.post7.s6.step1.desc
  2. 2Blog.post7.s6.step2.titleBlog.post7.s6.step2.desc
  3. 3Blog.post7.s6.step3.titleBlog.post7.s6.step3.desc
  4. 4Blog.post7.s6.step4.titleBlog.post7.s6.step4.desc
  5. 5Blog.post7.s6.step5.titleBlog.post7.s6.step5.desc

Blog.post7.s6.p2

Blog.post7.s7.title

Blog.post7.s7.p1

Blog.post7.s7.p2

Blog.post7.s7.p3

Generate your SEPA XML file now

Upload your CSV, map your columns visually, and download a valid pain.001 or pain.008 file in seconds. 100% free, no registration, no data uploaded.

Open the CSV to SEPA Converter

Frequently Asked Questions

How do I convert a CSV file to SEPA XML format?

Upload your CSV to ValidateFin's CSV to SEPA Converter, then use the visual column mapping interface to match your CSV headers to SEPA fields (debtor IBAN, creditor IBAN, amount, reference, etc.). The tool generates a valid pain.001 or pain.008 XML file.

What is the difference between pain.001 and pain.008?

Pain.001 (Customer Credit Transfer Initiation) is for outgoing bank transfers — you push money to creditors. Pain.008 (Customer Direct Debit Initiation) is for collecting payments — you pull money from debtors. The converter supports both.

Do I need to format my CSV in a specific way?

No. The converter accepts any CSV format. The visual mapping interface lets you assign each column to the corresponding SEPA field. Required fields include creditor/debtor name, IBAN, amount, currency, and payment reference.