Bitcoin QR code generator with an amount built in

The generator needs JavaScript to verify the address and draw the code locally. Nothing you type is transmitted either way.

This tool runs entirely in your browser. Nothing you type here is transmitted.

Turn a Bitcoin address into a scannable payment request: BIP-21 URI, optional amount, label and message, and a QR code drawn locally.

Why a QR generator must be offline

Security researchers documented Bitcoin QR generator sites that returned the same code no matter which address you typed - the code pointed at the attacker, and one such address collected several bitcoin from hundreds of victims. Some popular generators today still render the code through a third-party image service, which means the payment address travels to someone else’s server. Local generation is the only version of this tool that is safe by construction.

Checksum first, QR second

Before encoding anything, the address is decoded and verified: base58check for legacy addresses, bech32 or bech32m for segwit and taproot. A mistyped address is caught here rather than printed onto a poster. The address is checksum-verified before anything is encoded, and it is never transmitted.

  • Legacy (1... and 3...), segwit (bc1q...) and taproot (bc1p...) are all supported.
  • The amount is encoded in BTC exactly as BIP-21 specifies.
  • Label and message are URL-encoded so wallets display them correctly.

Before you publish it

Scan your own code with the wallet you actually use and confirm the decoded address matches, character for character at both ends. A QR on an invoice, a poster or a donation page is a standing instruction to send money - it deserves ten seconds of verification.

Questions

Does the address leave my browser?
No. Both the checksum verification and the QR drawing happen locally; the address never leaves your browser.
Can I include an amount?
Yes. The amount goes into the BIP-21 URI, and compatible wallets pre-fill it when the code is scanned. Leave it empty for an open-ended donation code.
Which address types work?
Legacy, P2SH, native segwit and taproot. The page identifies which one you pasted and refuses to encode anything whose checksum does not verify.