How GiroCode Works
Complete technical guide to the EPC QR payload, supported banks and best practices.
What is GiroCode?
GiroCode is the informal name for the EPC QR Code, defined in specification EPC069-12 by the European Payments Council. The first version was published in 2012; version 002 โ the current recommended version โ followed in 2016. German banks made GiroCode support mandatory in 2019, and today virtually every banking app in the SEPA zone supports it.
The code is a standard QR code (ISO/IEC 18004) that contains a structured text payload. Unlike proprietary payment QR formats, the EPC standard is fully open and free. No licence fees, no API keys, no third-party dependencies. Any QR library can generate a valid GiroCode, and any SEPA-compliant banking app can scan it.
The payload encodes all data needed for a SEPA Credit Transfer: the beneficiary's name, IBAN, an optional BIC, an optional amount, and an optional payment reference. When scanned, the banking app pre-fills the transfer form โ the payer just reviews and confirms.
How Does GiroCode Work? (Step-by-Step)
- 1
Sender opens their banking app
Any SEPA-compliant banking app works โ Deutsche Bank, Sparkasse, ING, N26, Revolut, or any of the 500+ other apps in the SEPA zone.
- 2
Taps "Scan QR Code" or "Transfer via QR"
The exact menu label varies by bank, but all modern apps have this feature. It is usually found in the transfer or payment section.
- 3
Camera scans the GiroCode
The app activates the device camera. The GiroCode can be printed on paper, displayed on a screen, or embedded in a PDF.
- 4
All payment details are filled in automatically
Name, IBAN, amount, currency and reference are instantly extracted from the QR code. No manual input, no typos.
- 5
Sender reviews and confirms
The payer verifies the pre-filled data and authorises the transfer with their PIN, biometrics or TAN. Done.
The GiroCode Payload โ Technical Structure
The payload is plain UTF-8 text, with each field on its own line. Here is a complete example:
BCD 002 1 SCT COBADEFFXXX Max Mustermann DE89370400440532013000 EUR150.00 Invoice 2026-001
| Line | Content | Description |
|---|---|---|
| 1 | BCD | Service Tag โ always "BCD" |
| 2 | 002 | Version โ 002 recommended (BIC optional) |
| 3 | 1 | Character encoding โ 1 = UTF-8 |
| 4 | SCT | Identification code โ SEPA Credit Transfer |
| 5 | COBADEFFXXX | BIC of the beneficiary bank (optional in v002) |
| 6 | Max Mustermann | Beneficiary name โ max 70 characters |
| 7 | DE89370400440532013000 | IBAN โ no spaces, uppercase |
| 8 | EUR150.00 | Amount โ currency code + decimal with dot |
| 9 | (empty) | Purpose code โ usually empty |
| 10 | (empty) | Structured remittance reference |
| 11 | Invoice 2026-001 | Unstructured remittance info โ max 140 chars |
Which Banks Support GiroCode?
All SEPA-compliant banks are required to support GiroCode. In Germany, the following major banks have confirmed support:
Beyond Germany, every bank in the 36 SEPA countries that supports SEPA Credit Transfers also supports GiroCode scanning. This includes Austria, France, Italy, Spain, the Netherlands, Switzerland and all other SEPA member states.
GiroCode on Invoices โ Best Practices
- ๐Position: Bottom-right corner of the invoice โ where payers naturally look for payment information.
- ๐Minimum size: 2 cm ร 2 cm. Smaller codes are harder to scan, especially with older devices.
- โฌWhite border: At least 2 mm of white space (quiet zone) on all four sides. Avoid placing text or graphics immediately adjacent.
- ๐จ๏ธPrint quality: Use at least 300 DPI for printed invoices. Blurry or pixelated codes may fail to scan.
- ๐๏ธNo compression: Do not use lossy image formats (JPEG) for the QR code. Use PNG or SVG to preserve sharpness.
- โ Always test: Scan your generated code with at least two different banking apps before distributing.
Common Mistakes
| Mistake | Incorrect Example | Correct Approach |
|---|---|---|
| IBAN with spaces | DE89 3704 0044 โฆ | Remove all spaces before encoding โ spaces are only for human readability |
| Amount with comma | EUR150,00 | Always use a decimal point, never a comma: EUR150.00 |
| Recipient name too long | "Max Mustermann GmbH & Co. KG International Trade" | Truncate to 70 characters maximum |
| Using version 001 | Line 2: 001 | Use version 002 โ it makes BIC optional and is supported by all modern apps |
| Reference over 140 characters | "Invoice 2026-001 for consulting services rendered in Januaryโฆ" | Keep the reference concise; truncate at 140 characters |
| Wrong currency code | "โฌ150.00" or "150.00EUR" | Format must be exactly: EUR followed immediately by the amount, e.g. EUR150.00 |