Bitkey watch-only balance on Android and iOS

Bitkey lets you export a watch-only wallet descriptor — two lines of public keys, no private material. Paste that export into Bag and your phone derives the 2-of-3 multisig addresses itself, checks their balance on a block explorer (optionally over Tor), and shows the result as net worth in up to three currencies plus a home screen widget. The Bitkey app, the hardware device and your seed are never involved.

Updated 2026-09-10 · Applies to Bag 1.3 and later on Android and iOS

Bag Wallet & Privacy screen with a watch-only Cold Storage wallet, its balance, Scan Now and an add-wallet button
Wallet & Privacy in Bag: a watch-only wallet with its balance, address count and last scan time.

Export your wallet descriptor from Bitkey

Bitkey is a 2-of-3 multisig: one key on the hardware device, one in the phone app, one held by Bitkey's server for recovery. Watching it therefore needs all three public keys and the script that binds them. Bitkey packages exactly that in its export.

  1. Open the Bitkey app.
  2. Go to Settings → Exports.
  3. Choose Export wallet descriptor.
  4. Copy the whole text. It is two labelled lines:
External: wsh(sortedmulti(2,[…]xpub…/0/*,[…]xpub…/0/*,[…]xpub…/0/*))
Internal: wsh(sortedmulti(2,[…]xpub…/1/*,[…]xpub…/1/*,[…]xpub…/1/*))

"External" is the receive chain, "Internal" the change chain. Bitkey's export carries no BIP380 checksum, which is fine — Bag verifies a checksum when one is present and accepts the descriptor when it is not.

Add the Bitkey export to Bag

  1. Open Wallet & Privacy

    Bag → SettingsWallet & Privacy. Watch-only wallets are a Pro feature; the tile is at the top of Settings.

    Bag Settings screen with the Wallet & Privacy entry at the top and three display currencies
    Settings: Wallet & Privacy is the first entry.
  2. Tap Add holding and pick Multisig

    Under WALLETS & HOLDINGS tap Add holding (older versions label it Add wallet). Choose the Multisig kind. The helper text tells you to paste Bitkey's External and Internal lines together.

  3. Paste both lines and connect

    Give it a label such as Bitkey, paste the entire export into the descriptor field — labels, both lines, line breaks and all — and tap Connect Wallet. Bag parses the export, merges the two lines into one two-chain wallet, and scans.

    Bag Wallet & Privacy screen with a watch-only Cold Storage wallet, its balance, Scan Now and an add-wallet button
    After the scan: balance in BTC and sats, addresses used, last scan time, and Scan Now.
  4. Read the balance anywhere

    The wallet's balance now feeds the home screen net worth, the widget and (on Android) Sentinel alerts. The card shows the descriptor summary — 2-of-3 multisig · native segwit — so you can confirm it parsed as expected. Scan Now refreshes on demand; scans also run when you open the app.

Why you must paste both lines (External and Internal)

This is the mistake that costs people the most confusion. A Bitkey wallet has two address chains. Receives land on chain 0 (External). When you spend, the leftover of the consumed input — the change — goes to a fresh address on chain 1 (Internal). A tracker that only knows the External line never sees that change address, so after your first outgoing payment the balance appears to drop by the entire input, not by the amount you sent.

Bag refuses to add a receive-only descriptor for this reason: if you paste the External line alone, the add sheet reports the missing change chain and asks for the full export. A wallet added that way in an older version keeps scanning but shows a persistent receive-only warning until you re-add it. Paste both lines and the problem never exists.

Check your Bitkey balance without the Bitkey app

Once the descriptor is in Bag, you can uninstall the Bitkey app from that phone, keep it on another phone, or leave Bitkey entirely offline in a drawer. Bag only needs the block explorer. Practical cases:

Bitkey and Sparrow: the desktop alternative

Bitkey's own documentation points to Sparrow Wallet for watch-only use: import the descriptor into a new Sparrow wallet and connect Sparrow to your node. That is an excellent setup if you sit at a desktop and run Bitcoin Core. It is not a phone solution, and Sparrow is a full wallet — it can build transactions, which you cannot sign without the keys anyway.

Bag is the mobile counterpart: the same descriptor, the same addresses (Bag's derivation is tested against the BIP67 sorting vectors that Sparrow and Bitkey follow), a balance and net worth rather than a coin-control interface. If you already use Sparrow, its own export — a <0;1> multipath descriptor plus both halves under comments — pastes into Bag verbatim as well.

Does Bag need my seed phrase?

No, and it never asks. The descriptor contains only extended public keys (xpub…). From an xpub you can derive every address the wallet will ever use, but you cannot derive a single private key, so the export cannot spend. Bag additionally rejects anything that looks like a private key before parsing: paste an xprv by accident and you get a warning instead of a stored secret.

What an xpub does reveal is your full transaction history and balance to anyone who has it. Treat the export like a bank statement: fine on your own device, not something to paste into a random website. That is the reason Bag derives addresses locally instead of uploading the descriptor anywhere — see the privacy section below.

Privacy

Bag is built around one rule: nothing that identifies your wallet leaves the phone. Extended public keys and descriptors are parsed on-device, and child addresses are derived on-device with plain BIP32 arithmetic. The only thing that reaches the network is a list of individual addresses, sent to the block explorer you chose (mempool.space, blockstream.info or your own Esplora-compatible node under NETWORK in Wallet & Privacy).

Turn on Route through Tor and every query goes through Orbot's SOCKS proxy (a system VPN on iOS). This is fail-closed: if Orbot is not running, Bag does not quietly fall back to the clear net — scans stop and the app tells you so. A .onion explorer address is supported.

Everything financial is encrypted at rest: the zpub or descriptor, wallet labels and cached balances, the manual BTC amount, the DCA log (AES-256 Hive box) and the health-check result all live in the platform keystore-backed secure storage, never in plain preferences. There is no account, no analytics SDK, no crash reporter and no server of ours that ever sees a key. The app is GPL-3.0 and the source is public, so you can verify each of these claims yourself.

Bitkey's server holds one of the three keys, but it has no way to see what you are watching in Bag: no request ever goes to Bitkey.

Pricing

Free forever: manual BTC amount, net worth in up to 3 of 30 currencies, price charts from 1 day to all-time, the DCA tracker and the home screen widget.

Pro is a one-time unlock, no subscription. It unlocks watch-only wallets (zpub, descriptors and multisig such as Bitkey), manual balances, Tor routing, a custom explorer, the Bitcoin Health Check, Sentinel monitoring on Android and mempool fee alerts. Buy it through Google Play or the App Store, or — if you installed from F-Droid or the APK — pay with bitcoin on bitbag.app/pro and receive a signed licence key that the app verifies offline. Nothing phones home after that.

Frequently asked questions

Can I check my Bitkey balance without the Bitkey app?

Yes. Export the wallet descriptor once from the Bitkey app (Settings → Exports → Export wallet descriptor), paste it into Bag under Settings → Wallet & Privacy → Add holding → Multisig, and Bag reads the balance from a block explorer from then on. The Bitkey app does not need to be installed on the same phone.

Does the Bitkey export contain private keys?

No. It contains three extended public keys (xpubs) and the 2-of-3 sortedmulti script. Public keys can derive addresses and reveal history and balance, but cannot sign a transaction. Bag also refuses any input that looks like a private key.

Why does Bag ask for both the External and the Internal line?

External is the receive chain and Internal is the change chain. Without the change chain, the balance would drop by the whole consumed input after every spend, because the change output would land on an address Bag does not watch. Bag merges both lines into one wallet and refuses a receive-only descriptor.

Does Bag support Bitkey’s 2-of-3 multisig?

Yes. Bag parses wsh(sortedmulti(2, …)) descriptors, sorts the public keys per BIP67 after derivation exactly as Bitkey does, and produces the same native segwit addresses. Nested segwit sh(wsh(…)) and unsorted multi() are supported too.

Where does my Bitkey balance data go?

Nowhere except the block explorer you choose. The descriptor is parsed and the addresses are derived on the phone; only individual addresses are queried, optionally through Tor via Orbot. The descriptor and the cached balance are stored encrypted on the device.

Can I use Bag over Tor with Bitkey?

Yes. Turn on Route through Tor in Wallet & Privacy → NETWORK with Orbot installed. Bag fails closed: if Orbot is not running, scans stop and the app says so rather than leaking your addresses over the clear net.

Is watching a Bitkey wallet free in Bag?

Watch-only wallets are part of Bag Pro, a one-time purchase with no subscription. The free tier covers a manually entered BTC amount, net worth in up to three currencies, charts, the DCA tracker and the widget.

Will Bag notify me when my Bitkey receives or sends bitcoin?

On Android, yes: Sentinel is an always-on background service that checks the mempool every two minutes and sends a notification with the wallet-wide net amount of any transaction. Sentinel is not available on iOS because the platform does not allow that kind of persistent background service.

Get Bag

Free on Google Play, the App Store and F-Droid. No account, no ads, no analytics. Source on GitHub.

More guides