How to convert Excel to SEPA XML
- Choose transfers or direct debits and the version your bank expects. pain.001.001.03 and pain.008.001.02 are the ones most banks accept; .09 and .08 are the 2019 versions some banks now ask for.
- Enter your details: your name, IBAN, optional BIC, the date, and for direct debits your creditor identifier.
- Load the spreadsheet. One row per payment, with name, IBAN and amount at least. Columns are matched automatically and you can change the mapping. No file yet? Download the Excel template.
- Check and download. Every row is validated. Fix the errors, or leave those rows out, then download the XML and upload it to your online banking.
Private by design: no upload
A payment file contains names, IBANs and amounts: exactly what should not travel to a stranger’s server. This converter runs entirely in your browser. The spreadsheet is read and the XML is built on your own device, and nothing is sent anywhere.
You can check it in the Network tab of the developer tools, or open the page, go offline and keep working. The form details are not saved either: close the tab and they are gone.
What is checked before the XML is created
- IBANCountry in the SEPA area, length for that country and mod-97 check digits; for Spanish accounts, also the inner control digits.
- AmountsGreater than 0, at most 2 decimals, with a decimal comma or point (1.234,56 and 1,234.56 both work). Totals are added in whole cents, so CtrlSum never drifts.
- SEPA character setOnly Latin letters, digits and / - ? : ( ) . , ' + are allowed. Accents, ñ, ß, & and quotes are converted, and each change is listed as a warning.
- Lengths and IDsNames up to 70 characters, remittance information up to 140, IDs up to 35, and no IDs starting or ending with “/”. Duplicate end-to-end IDs are flagged.
- Direct debitsMandate ID, signature date not in the future or after the collection date, sequence type, and the creditor identifier check digits (and the NIF inside a Spanish one).
- Header totalsNbOfTxs and CtrlSum are computed for the file and for each payment block, with a unique MsgId and PmtInfId for every file.
SEPA terms in plain words
- pain.001 / pain.008The ISO 20022 messages for a batch of credit transfers and for a batch of direct debits.
- MandateThe authorisation your customer signed so you can debit their account. Its reference and signature date go in every collection.
- FRST, RCUR, OOFF, FNALFirst, recurring, one-off and final collection of a mandate. A file with several types gets one payment block per type.
- Creditor identifierThe ID that identifies you as a direct-debit collector, such as DE98ZZZ09999999999 (the German test ID).
- CORE and B2BCORE works for any payer; B2B is only for business payers and gives them no refund right.
- Batch bookingWhether your statement shows one line for the whole file or one per payment.
Validated against the official ISO 20022 schemas
The generator was tested by creating files for all four versions (pain.001.001.03, pain.001.001.09, pain.008.001.02 and pain.008.001.08), including a 5,000-collection file, and validating each one against the official ISO 20022 XSD schemas. The XML follows the EPC guidelines: service level SEPA, charges SLEV, EUR only, and “NOTPROVIDED” when a BIC is not given.
Known limitations
- Euro payments only, with the SEPA service level. Urgent, instant (SCT Inst) and non-SEPA payments are not generated.
- Addresses are not included. The EPC rules require the payer’s or debtor’s address when an account outside the EEA is involved (for example Switzerland or the UK), so files with such accounts may be rejected.
- Ultimate debtor and creditor, purpose codes, structured creditor references (RF) and mandate amendments are not supported.
- The XML is valid against the ISO schemas, but some banks add their own rules (for example requiring the BIC, a specific initiating-party ID or an older version). Ask your bank and test with a small file first.
- The tool does not send anything to your bank: you download the file and upload it yourself.