I recently decided to move my Balatro progress from the Apple Arcade version to Steam. I had already put a fair amount of time into Balatro on my iPad, so starting over on Steam was not especially appealing.

The good news is that the migration turned out to be possible. The slightly less good news is that it is not exactly a one-click process.

In my case, the Apple Arcade version had most of my current progress on the iPad, while the Mac version of Balatro+ had fallen behind. That ended up being an important detail, because the Mac became the bridge between Apple Arcade and Steam.

First: Make Sure the Mac Has the Latest Apple Arcade Save

Before extracting anything, I opened Balatro+ on my iPad and confirmed that it had my most recent progression.

I then updated the macOS version of Balatro+ and launched it so Apple’s cloud syncing could bring the Mac up to date.

This mattered because my first look at the Mac save showed older data and a couple of CloudKit conflict flags. After letting the updated Mac version sync with the iPad, the save files grew noticeably and the synchronization tags changed, which was a pretty good indication that I now had the newer data.

The Apple Arcade save information on my Mac was stored in:

~/Library/Containers/com.playstack.balatroarcade/

More specifically, the progression data was embedded inside:

~/Library/Containers/com.playstack.balatroarcade/Data/Library/Preferences/com.playstack.balatroarcade.plist

At first I expected to find normal profile.jkr and meta.jkr files sitting in a folder somewhere. Instead, the plist contained entries such as:

1__profile.jkr.data
1__meta.jkr.data
1__profile.jkr.remoteData
1__meta.jkr.remoteData

The local profile and meta data were what I ultimately used for the Steam migration.

Checking the Apple Arcade Save

This command was useful for confirming that the data was there:

plutil -p ~/Library/Containers/com.playstack.balatroarcade/Data/Library/Preferences/com.playstack.balatroarcade.plist | grep -i -E "profile|meta|save|jkr"

After syncing the Mac with the iPad, my output showed current profile.jkr and meta.jkr data along with updated sync tags.

I also had entries named:

.conflict1__meta.jkr
.conflict1__profile.jkr

Those appear to have been related to the fact that I was playing mostly on the iPad while the Mac copy had not been kept current. Once the Mac was updated and synced, the actual progression displayed correctly in the game, so I treated the current Mac data as the source of truth.

Extracting the Save Files

The Apple Arcade save data needed to be pulled out of the plist and written as normal .jkr files.

I used this Python script directly from Terminal:

python3 <<'PY'
import plistlib
from pathlib import Path

src = Path.home() / "Library/Containers/com.playstack.balatroarcade/Data/Library/Preferences/com.playstack.balatroarcade.plist"
out = Path.home() / "Desktop/Balatro-Arcade-Extracted"
out.mkdir(exist_ok=True)

with src.open("rb") as f:
    p = plistlib.load(f)

files = {
    "profile.jkr": "1__profile.jkr.data",
    "meta.jkr": "1__meta.jkr.data",
    "profile-remote.jkr": "1__profile.jkr.remoteData",
    "meta-remote.jkr": "1__meta.jkr.remoteData",
}

for filename, key in files.items():
    data = p.get(key)
    if data is None:
        print(f"Missing: {key}")
        continue
    (out / filename).write_bytes(data)
    print(f"Wrote {filename}: {len(data)} bytes")

print(f"\nSaved to: {out}")
PY

This created a folder on my Desktop containing:

profile.jkr
meta.jkr
profile-remote.jkr
meta-remote.jkr

I kept both the local and remote versions just in case, although I used the local profile.jkr and meta.jkr for the actual migration.

Preparing the Steam Version

Before launching Balatro on Steam, I disabled Steam Cloud for the game.

That was intentional. I did not want Steam deciding that a brand-new empty cloud save should overwrite the Apple Arcade files I was about to import.

I launched Balatro on Steam once and then quit. That created the normal Steam save structure:

~/Library/Application Support/Balatro/

My profile folder was:

~/Library/Application Support/Balatro/1/

Inside were:

meta.jkr
profile.jkr

I backed those fresh Steam files up before replacing anything.

mkdir -p ~/Desktop/Balatro-Steam-Backup

cp ~/Library/Application\ Support/Balatro/1/profile.jkr \
~/Desktop/Balatro-Steam-Backup/profile.jkr

cp ~/Library/Application\ Support/Balatro/1/meta.jkr \
~/Desktop/Balatro-Steam-Backup/meta.jkr

Then I copied the extracted Apple Arcade files into the Steam profile folder:

cp ~/Desktop/Balatro-Arcade-Extracted/profile.jkr \
~/Library/Application\ Support/Balatro/1/profile.jkr

cp ~/Desktop/Balatro-Arcade-Extracted/meta.jkr \
~/Library/Application\ Support/Balatro/1/meta.jkr

And… It Worked

When I launched the Steam version again, my Balatro progress was there.

Decks, unlocks, collection progress, and other profile information all appeared to have transferred correctly.

Even better, Steam immediately started unlocking achievements based on the progression already contained in the imported save.

That was a nice confirmation that Steam was not merely accepting the files—it was actually understanding the existing game state.

After verifying everything looked correct, I quit Balatro normally and re-enabled Steam Cloud.

Steam synced the imported save without a problem.

At that point, the migration was complete.

A Few Things I Would Recommend

If you try this yourself, I would strongly recommend keeping backups at every stage.

In particular, I kept:

~/Desktop/Balatro-Arcade-Extracted

and:

~/Desktop/Balatro-Steam-Backup

until I had confirmed that Steam Cloud had synced successfully and that the game continued to load my progress correctly.

I would also make sure your Apple Arcade version on the Mac actually reflects your newest iPhone or iPad progress before extracting anything. In my case, the iPad was ahead of the Mac, and using the first Mac save I found would have meant migrating an older version of my progress.

Final Result

The end result was exactly what I wanted:

Apple Arcade progress on my iPad → synced to the Mac → extracted from the Apple Arcade plist → imported into Steam → synced into Steam Cloud.

Not exactly elegant, but completely workable.

And now I can continue my questionable Joker-related decision-making on Steam without starting from scratch.