EPC QR Code (SEPA Payment QR) Explained
An EPC QR code — also called a GiroCode in Germany — encodes SEPA bank transfer details (IBAN, recipient name, amount, payment reference) in a standardized text format so a banking app can pre-fill a transfer just by scanning it. It's common on European invoices, and it's a specific structured format inside an ordinary QR code, not a visually different type of code.
The European Payments Council defined this standard specifically so that any banking app operating in the SEPA region could reliably parse payment details from a scan, regardless of which bank issued the app. It's used mostly on invoices, so a customer can pay by scanning instead of manually copying a lengthy IBAN and reference number into their banking app by hand.
Visually, an EPC QR code looks exactly like any other QR code — same grid of modules, same finder patterns in the corners, nothing distinguishes it from a code carrying a website link. The difference is entirely in what's encoded: a specific plain-text layout with defined fields in a defined order, typically including a service tag identifying the format, the IBAN, sometimes a BIC, the beneficiary's name, the amount and currency, and a payment reference. The receiving bank's app is programmed to recognize that structure and parse it into a pre-filled transfer form automatically.
This is a genuinely niche, regional format — mostly relevant to invoicing within Eurozone and other SEPA-participating countries. Freelancers, small businesses, and utility providers use it to speed up manual bank transfers, since the customer just scans, checks the pre-filled details, and confirms rather than typing a 20-plus character IBAN. Outside the SEPA region, or with a banking app that doesn't support the standard, scanning the code still works as a plain text read — the content is just visible as text rather than triggering the auto-fill behavior.
A general-purpose QR generator like QRSen can encode arbitrary plain text, so it's technically possible to format an EPC-style payload and turn it into a code that way. Getting the field order and formatting exactly right matters a great deal, though — a malformed field breaks the auto-fill parsing on the receiving end even though the code itself still scans fine as plain text. Businesses that need this repeatedly typically rely on invoicing software that builds the EPC payload correctly, rather than assembling it by hand before pasting it into a generator.
It's worth double-checking a bank's app-level support before relying on this for a real invoice, since not every SEPA bank's app implements the EPC standard identically, and a small number skip auto-fill parsing altogether even while being fully SEPA-compliant for manual transfers. Testing a real invoice with the actual bank apps a business's customers are likely to use catches this before it becomes a support question for every invoice sent out.
Even when auto-fill parsing fails on a specific bank's app, the fallback is graceful rather than broken: the code still scans as plain text, so the customer can read off the IBAN and reference details manually and complete the transfer the traditional way. That fallback behavior is one reason EPC codes are a reasonably safe addition to an invoice even for customers whose banking app doesn't support the standard.