Decode otpauth-migration exports

Paste a Google Authenticator migration payload and recover one standard otpauth:// URI per account.

Try:
Decoded otpauth URIs

About this tool

Google Authenticator's export QR uses an otpauth-migration://offline?data=... link that bundles multiple accounts in a compact protobuf payload. This tool decodes that payload locally and rebuilds standard single-account otpauth:// provisioning URIs that other password managers and authenticator apps can import.

Paste either the full migration link or only its data value. The default output is one otpauth:// URI per line; switch to JSON when you need issuer, account name, base32 secret, algorithm, digits, counter, and rebuilt URI as structured fields.

Worked example:

otpauth://totp/Example:alice%40example.com?secret=JBSWY3DP&issuer=Example&algorithm=SHA1&digits=6&period=30
otpauth://hotp/ACME:bob?secret=K5XXE3DE&issuer=ACME&algorithm=SHA256&digits=8&counter=5

Limits and edge cases: this is a text decoder, not a QR-image scanner. Use your camera or a QR decoder first if you only have a screenshot. The migration payload does not carry custom TOTP periods, so TOTP entries are emitted with the standard period=30. Unsupported protobuf enum values and truncated payloads return an explicit error instead of guessing.

FAQ

Can I paste the whole otpauth-migration link?

Yes. Paste the full otpauth-migration://offline?data=... value, or paste only the data payload. The decoder accepts standard base64, base64url, missing padding, and percent-escaped payloads.

Does this reveal my 2FA secrets to a server?

The block is pure Rust and the page runs it in browser WebAssembly. The decoded secrets appear in the output because that is the purpose of the export, so treat the result like credentials and do not paste it into logs or tickets.

Why do TOTP entries always include period=30?

The Google Authenticator migration protobuf stores the secret, issuer, account, algorithm, digits, type, and HOTP counter, but it does not store a custom TOTP period. Authenticator apps use 30 seconds by default, so the rebuilt TOTP URIs state period=30 explicitly.

Can it scan a QR image directly?

No. This tool decodes the text payload after a QR has already been read. If you only have a PNG or screenshot, run it through a QR decoder first and paste the resulting otpauth-migration:// text here.

Developer & Automation Access

Run it from the terminal

Same engine as this page, headless — via the gizza CLI:

gizza tool otpauth-migration-decoder "otpauth-migration://offline?data=CikKBUhlbGxv... or just CikKBUhlbGxv..."

New to the CLI? Get gizza →

Open it by URL

Pre-fill and auto-run this tool with query parameters — the names match the API/CLI:

https://gizza.ai/tools/otpauth-migration-decoder/?payload=otpauth-migration%3A%2F%2Foffline%3Fdata%3DCikKBUhlbGxv...%20or%20just%20CikKBUhlbGxv...&format=uri

Machine-readable descriptor: tool.json — title + parameters JSON Schema for agents.