Skip to content

GiroCode generator

A GiroCode is the square on a German invoice that a banking app scans to fill in the transfer: beneficiary, IBAN, amount and reference, so nobody retypes an IBAN by hand.

Everything happens in this browser tab. The account details are never sent anywhere, there is no upload and no sign-up, and once the first code is on screen the page keeps working offline.

The transfer

This generator needs JavaScript: the code is built in your browser, not on a server.

The account holder, as the bank has it. At most 70 characters.

Needed only for a bank outside the EEA. Eight or eleven characters.

Leave empty to let the payer decide. Between 0.01 and 999,999,999.99.

What the payment is for, at most 140 characters.

The code

Fill in the beneficiary and the IBAN, and the code appears here.

BCD / 002 / SCT

What a GiroCode is

GiroCode is the German name for the EPC QR code, defined by the European Payments Council in EPC069-12. It holds one SEPA credit transfer as at most twelve lines of plain text — a service tag, the version, the character set and the transfer type, then the BIC, the beneficiary, the IBAN, the amount, a purpose code, the reference and a note for the payer, of which only the beneficiary and the IBAN are required — and nothing else. There is no link in it, no tracking and no account of yours to read: the app that scans it simply fills its transfer form.

It is a credit transfer only. A GiroCode cannot start a direct debit, cannot carry a second currency and cannot be used to collect money without the payer confirming the transfer in their own banking app.

This generator writes version 002 in UTF-8 with error correction level M, the level EPC069-12 sets for every code.

What goes in it

The standard sets a limit for each field and 331 bytes for the whole code. The generator checks all of it while you type.

FieldLimitWhat it is for
Beneficiary70 characters, requiredThe account holder as the bank has them, not a trading name the bank does not know.
IBANRequiredChecked for length by country and against its check digits, so a swapped pair of digits is caught here rather than by the payer.
BIC8 or 11 characters, optionalOptional since version 002, but still needed when the beneficiary’s bank is in a SEPA country outside the EEA, such as Switzerland or the United Kingdom.
Amount0.01 to 999,999,999.99 euro, optionalLeave it empty for a donation or an open balance; the payer then types the amount.
Reference140 characters, optionalWhat the payment is for. Keep it short: an umlaut costs two of the 331 bytes.

One invoice at a time, or all of them

This page is for the occasional code. When the invoices come out of your own system, the code belongs in the template, where it is drawn from the data of each document. That is the epcQr helper, which takes the same fields. It cuts a text that is too long to the standard’s limit but does not check an IBAN’s check digits, so check account details where they are entered, as this page does. In each template language:

Jinja2
<img alt="GiroCode" src="{{ epcQr({
  name: company.name,
  iban: company.iban,
  amount: invoice.total,
  text: 'Rechnung ' ~ invoice.number
}, { size: 140 }) }}">
Liquid
<img alt="GiroCode" src="{{ company.iban | epcQr: name: company.name, amount: invoice.total, text: invoice.reference, size: 140 }}">
Handlebars
<img alt="GiroCode" src="{{epcQr name=company.name iban=company.iban amount=invoice.total text=invoice.reference size=140}}">

Formfeed renders that template to a PDF through one API call, from your backend, a spreadsheet, an automation or an AI agent. The Free plan covers 100 documents a month without a card.

From the blog

Questions

Does anything leave my browser?
No. The QR code is drawn by JavaScript on this page: the beneficiary, the IBAN and the amount stay in the tab, are never sent anywhere and are never stored. Once the first code is on screen, you can switch the network off and go on making codes.
Is it free, and may I use the codes commercially?
Yes to both. The codes are plain EPC QR codes; there is no licence on them and nothing here watermarks them.
Which apps read it?
The banking apps of the German savings banks, the cooperative banks, the big private banks and most of the direct banks, plus the Austrian and Swiss ones that support the format. If an app refuses a code, it is nearly always the IBAN or an amount outside the allowed range — both of which this page refuses first.
Can I put a logo in the middle?
Not here. The format allows no image, and covering the middle of the code relies on the error correction having enough room left, which at level M it may not. Print it plain.
Is this the same as ZUGFeRD or an e-invoice?
No. A GiroCode helps a person pay; ZUGFeRD and XRechnung put the invoice itself into a machine-readable file for the recipient’s bookkeeping. They solve different halves of the same page and can sit on one invoice together.

Start rendering today

The free plan includes 100 units a month and free test renders. Change plans when you need more.