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. 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. 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. 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. 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. 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
LineContentDescription
1BCDService Tag – always "BCD"
2002Version – 002 recommended (BIC optional)
31Character encoding – 1 = UTF-8
4SCTIdentification code – SEPA Credit Transfer
5COBADEFFXXXBIC of the beneficiary bank (optional in v002)
6Max MustermannBeneficiary name – max 70 characters
7DE89370400440532013000IBAN – no spaces, uppercase
8EUR150.00Amount – currency code + decimal with dot
9(empty)Purpose code – usually empty
10(empty)Structured remittance reference
11Invoice 2026-001Unstructured 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:

Deutsche BankCommerzbankSparkasseVolksbank / RaiffeisenING DeutschlandDKBN26ComdirectPostbankHypoVereinsbankSantanderTargobankRevolutWisebunq

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

MistakeIncorrect ExampleCorrect Approach
IBAN with spacesDE89 3704 0044 …Remove all spaces before encoding – spaces are only for human readability
Amount with commaEUR150,00Always 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 001Line 2: 001Use 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

Ready to generate your first GiroCode?

Free, instant, no registration required.

Open Generator β†’