Skip to content

OTP QR Builder

Builds an otpauth:// URI from issuer, account and secret and renders the QR an authenticator app can scan.

A service gives you a QR code once. If you need to enrol a second device later, or you have a secret in text form and an app that will only scan, you need to draw the code yourself. This builds the `otpauth://` URI from its parts and renders it.

🔒 Runs entirely in your browserotpqr2fagenerator

Enter an account and a Base32 secret to render the QR.

The secret is turned into a QR entirely in your browser. Treat the QR as you would the secret — anyone who scans it gets your 2FA code.

How to use it

  1. Fill in issuer and account

    These are labels only — they decide what the app shows in its list, not what the code is. The issuer is the service name, the account is usually your e-mail or username there.

  2. Paste the Base32 secret

    The secret is the only part that matters. Get it wrong and the app will enrol happily and produce codes the service rejects.

  3. Adjust digits, period and algorithm only if you must

    The defaults (SHA-1, six digits, 30 seconds) are what nearly every service uses. Some authenticator apps ignore these parameters entirely, which is worth knowing before you rely on a non-default value.

  4. Scan it, then verify

    Enrol the new device, then use the TOTP generator on the same secret and confirm the two agree before you delete anything.

Common questions

Does the QR image get uploaded to make it?

No. The URI is assembled and the QR is drawn on a canvas in your browser. Nothing is sent, which matters here because the image itself contains the secret in plain form.

Can I print the QR as a backup?

You can, and people do — but treat the printout exactly as you would the password itself. Anyone who photographs it has your second factor permanently, and unlike a password it cannot be changed without re-enrolling.

The app scans it but the codes are refused.

Check the secret first — a single wrong Base32 character produces valid-looking codes that are simply wrong. Then check digits and period against what the service documents.

Feed it from

Next

These accept what this tool produces, so the result can go straight in.