wakit / Guides

Move WhatsApp from iPhone to Android

wakit reads an ordinary unencrypted iPhone backup and adds its WhatsApp chats to your Android phone. Chats are matched person by person, including WhatsApp's newer @lid ids, so each conversation ends up as one chat, with no duplicates.

What you need

Steps

Prefer clicking? Run wakit gui (or double-click the app): the same steps are under Guides, with file pickers and Dry run / Apply buttons. Every command is a dry run until you add --apply.

  1. Back up the iPhone (unencrypted)

    Turn backup encryption off first. wakit can't read encrypted backups.

    $ wakit ios-backup backup --out ~/Backups
  2. Copy WhatsApp off the Android phone

    WhatsApp is disabled while copying.

    $ wakit device pull --out phone/
  3. Dry run, then import

    Point --backup at the full backup folder. wakit extracts WhatsApp's files from it by itself. --push sends the photos and voice notes to the phone.

    $ wakit from-ios --db phone/msgstore.db --backup ~/Backups/<device-id>
    $ wakit from-ios --db phone/msgstore.db --backup ~/Backups/<device-id> --apply --push --phone-root /sdcard/WhatsApp
  4. Your stickers too (optional)

    $ wakit stickers-from-ios --db phone/stickers.db --backup ~/Backups/<device-id> --files-out Stickers --apply
  5. Put it back and start WhatsApp

    wakit copies the file's owner and SELinux label, which prevents "something went wrong with chat history".

    $ wakit device install --db phone/msgstore.db

What carries over

Text, links, photos with captions, videos, GIFs, voice notes, stickers, documents, contact cards, locations, deleted-message markers and group senders. Polls, reactions and calls don't carry over.

Questions

Does the Android phone need root?

For writing straight into WhatsApp's database, yes: it lives in a folder only root can reach. The experimental no-root route edits WhatsApp's end-to-end encrypted backup instead.

What if the Android phone already has some of the same chats?

They're merged. Messages already there, matched by id or by sender, text and time, are skipped, so running it twice never duplicates anything.

Other guides