简体中文

2FA guide

Decode a Google Authenticator Export QR Code

Google Authenticator’s “Transfer accounts” feature packs your accounts into one or more QR codes. Those codes are not normal otpauth:// links — they use a compact otpauth-migration:// format that most tools cannot read. This page explains the format and how to decode it locally.

Step by step

  1. In Google Authenticator, open the menu → “Transfer accounts” → “Export accounts”, select the accounts and tap “Next”.
  2. Open the 2FA generator on your computer. Choose “Scan QR code” and point the webcam at the phone, or take a screenshot of the export screen and choose “Upload QR code”.
  3. Every TOTP account in the code is imported as a card with its name, account and live code. Duplicates you already saved are skipped.
  4. If the app shows “1 of 3” style codes, repeat for each QR code; the accounts merge into one list.

What is inside an otpauth-migration link?

The link looks like otpauth-migration://offline?data=CjQKCkhl… The data parameter is Base64-encoded Protocol Buffers containing, for each account, the raw secret bytes, the name, the issuer, the algorithm, the number of digits and the type (TOTP or HOTP), plus batch information when the export is split over several codes.

The generator decodes this payload in JavaScript, converts each secret to Base32 and rebuilds a standard otpauth://totp/ link for it. From there you can copy the code, save the key, or show a standard QR code to add the account to a different authenticator app.

Why people decode exports

  • Moving accounts from Google Authenticator to another app such as Bitwarden, 1Password, Aegis or Microsoft Authenticator that cannot read the export format.
  • Keeping an offline backup of the raw secret keys in a password manager.
  • Using 2FA codes on a computer when the phone is not at hand.

Limitations and safety

Counter-based (HOTP) accounts are skipped because the generator produces time-based codes; you will see how many were skipped. Export codes contain all selected secrets in readable form, so treat the QR code like a password list: decode it on your own device, do not send screenshots to anyone, and delete the screenshot afterwards.

Frequently asked questions

Is the export QR code uploaded to a server?

No. The image is decoded in your browser and the data is processed with local JavaScript; the site has no server that receives secrets.

Some accounts are missing after import. Why?

Either they are HOTP (counter-based) accounts, which are skipped, or the export was split over several QR codes and you have not added all of them yet.

Related guides