ValidateFin
Back to blog
Updated Mar 14, 2026SEPA9 min readBy Eliel Nicaise

CSV to SEPA XML Converter: 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.

Validate your file right now

Free, instant and 100% in your browser - no file is ever uploaded.

Open the SEPA Converter

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.

ValidateFin's converter handles both pain.001 (credit transfers) and pain.008 (direct debits), with automatic IBAN validation, amount formatting, and SEPA namespace compliance.

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 IBAN - The account to be debited - must be a valid IBAN (mod-97 verified).
  • Creditor IBAN - The beneficiary account - also IBAN-validated before XML generation.
  • Amount - Must be a positive decimal number (e.g. 1500.00). Currency defaults to EUR.
  • Payment reference - The end-to-end reference passed unchanged to the creditor - max 35 characters (EndToEndId). A longer free-text reference (up to 140 characters) belongs in the remittance information (RmtInf/Ustrd).
  • Execution date - Requested execution date in YYYY-MM-DD format. Must be a banking business day.
  • Creditor/Debtor name - Legal name of the beneficiary or debtor - max 70 characters, no special characters beyond the SEPA character set.
  • BIC (optional) - Bank Identifier Code - optional within SEPA since 2016 for domestic transfers, but required for cross-border non-SEPA payments.
  • Currency - ISO 4217 currency code - defaults to EUR. SEPA only supports EUR for cross-border transactions.

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.

Duplicate EndToEndId references

Each payment in a SEPA file must have a unique EndToEndId. Duplicate references cause the bank to reject the batch or individual transactions.

Special characters in names

SEPA only allows a restricted character set (a-z, A-Z, 0-9, and a few special chars like / - ? : ( ) . , '). Accented characters like é, ü, ñ may be rejected.

Execution date on non-business day

The requested execution date must be a valid TARGET2 banking day. Weekends and bank holidays cause rejection or delayed processing.

Step-by-step: converting your CSV

Follow these steps to generate a valid SEPA XML file from your spreadsheet:

  1. 1Prepare your CSV - Export your payment data from your accounting software or create a CSV with at least: creditor name, IBAN, amount, and reference.
  2. 2Upload to the converter - Open the CSV to SEPA converter and upload your file. The tool auto-detects delimiters (comma, semicolon, tab).
  3. 3Map your columns - Use the visual interface to match your CSV column headers to the required SEPA fields. The tool remembers your mapping.
  4. 4Enter debtor details - Fill in your company name, IBAN, BIC, and the requested execution date. These apply to all transactions in the batch.
  5. 5Generate and download - Click generate - the tool validates all IBANs, formats amounts, and produces a valid pain.001 or pain.008 XML ready for your bank.

The entire process takes seconds and runs 100% in your browser - no data is uploaded to any server.

Pain.001 vs pain.008: which format do you need?

Pain.001 (Customer Credit Transfer Initiation) is used for outgoing payments - you send money to suppliers, employees, or partners. This is the most common use case for CSV conversion.

Pain.008 (Customer Direct Debit Initiation) is used for collecting payments - you pull money from customers who have signed a direct debit mandate. This is used by subscription services, utilities, and membership organizations.

ValidateFin's converter supports both formats. Select the payment type before generating the XML, and the tool will use the correct namespace and structure.

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.

What SEPA XML namespace version does the converter use?

The converter generates pain.001.001.03 (ISO 20022) by default, which is the most widely accepted version across European banks. Support for newer versions (pain.001.001.09) is available in the tool settings.

Can I include multiple payment types in one file?

Each SEPA XML file should contain only one payment type (either credit transfers or direct debits). If you need both, generate two separate files - one pain.001 and one pain.008.

What is the maximum number of transactions per file?

The SEPA standard does not set a hard limit, but most banks accept between 10,000 and 100,000 transactions per file. Check your bank's documentation for specific limits.

How do I handle recurring payments?

For recurring credit transfers, simply generate a new pain.001 file each period with updated execution dates. For recurring direct debits (pain.008), you must manage mandate references and sequence types (FRST, RCUR, FNAL).

Can I convert Excel files directly?

The converter accepts CSV files. Most spreadsheet applications (Excel, Google Sheets, LibreOffice) can export to CSV via File > Save As > CSV. Use semicolon or comma as delimiter.

What happens if one IBAN in my CSV is invalid?

The converter highlights invalid IBANs during the validation step before generating XML. You can fix them in your CSV and re-upload, or remove the invalid rows. No XML is generated until all IBANs pass validation.

Is the generated XML file accepted by all banks?

The generated XML follows the ISO 20022 SEPA standard (pain.001.001.03 or pain.008.001.02). All SEPA-zone banks must accept these formats. Some banks may have additional requirements - consult your bank's documentation.