Google Play APKs,
straight from your terminal.

Download any app from Google Play from the command line. No Google account needed. Split APKs, OBB files and asset packs included.

~/apks

>

com.whatsappWhatsApp Messenger2.26.41.77  (vc 264107700)

Downloading 3 files

com.whatsapp-264107700.apk0%
…-config.arm64_v8a.apk0%
…-config.xxhdpi.apk0%

Download complete!

adb install-multiple com.whatsapp-264107700.apk …

Authentication

No Google
account.

goopdl fetches an anonymous token from Aurora Store's public dispenser on first use. No goopdl auth, no sign-in. You can still use your own Google account if you prefer.

Architectures

Any device.

-a arm64armv7x86x86_64tv

ARM64, ARMv7, x86, x86_64 and Android TV. Bundled device profiles rotate automatically, so Google serves the right build. Comma-separate several to get one download each.

arm64-v8a

Features

The whole app,
any version.

01

No account required

Anonymous tokens from Aurora Store's dispenser, pooled and reused so you stay under its rate limit.

02

The whole app

Base APK, split APKs, OBB expansion files and Play Asset Delivery packs, streamed in parallel.

03

Any version

Download by version code or version string, or find the newest one Google is rolling out with goopdl latest.

04

Any device

ARM64, ARMv7, x86, x86_64 and Android TV, with bundled device profiles that rotate automatically.

05

Regional builds

Combine --country and --proxy to get a specific region's variant of an app.

06

Verified downloads

Check every file against Google's SHA-256 digests and write an integrity manifest with --integrity-manifest.

How it works

Five steps,
one command.

  1. 1

    Authenticate

    Anonymous token from the dispenser, rotating device profiles until one works. Or your Google account.

  2. 2

    Fetch details

    Version, size and splits from Google Play's protobuf API.

  3. 3

    Purchase

    "Buy" the free app to get download authorization.

  4. 4

    Get delivery

    Download URLs for base APK, splits, OBB files and asset packs.

  5. 5

    Download

    Stream from Google's CDN in parallel. Asset packs are decompressed on the fly.

0tokens pooled per arch & country
0token lifetime, refreshed only when missing
0architectures, including Android TV
0Google accounts needed to get started

Quick start

Ten commands.
Start with one.

goopdl download com.whatsappLatest base APK
goopdl download com.whatsapp --splits --extras -o ./apksBase, splits, OBB files and asset packs
goopdl search "file manager"Find a package name
goopdl info com.whatsappApp details
goopdl latest com.instagram.androidNewest version in staged rollout
goopdl download com.whatsapp -v 231205015A specific version
goopdl download com.whatsapp -a armv7A 32-bit ARM build
goopdl download com.whatsapp -c IN -p socks5://host:1080A regional variant

Full command reference →

FAQ

Questions,
answered.

Is goopdl free?
Yes. goopdl is free and open source under the MIT license. Install a prebuilt binary with the one-line installer (no Python needed), or use uv tool install goopdl / pipx install goopdl (Python 3.10 or newer). It runs on Linux, macOS and Windows.
Do I need a Google account to download APKs?
No. On first use goopdl gets an anonymous token from Aurora Store's public token dispenser. If you prefer, you can sign in with a throwaway Google account and its AAS token.
How do I download split APKs, OBB files and asset packs?
Run goopdl download com.example.app --splits --extras. --splits adds the split APKs and --extras adds OBB expansion files and Play Asset Delivery packs.
How do I install split APKs on my phone?
After a split download, goopdl prints the exact adb install-multiple command for the files it downloaded. Connect your device and run it.
Can I download an older or a specific version?
Yes. Pass a version code (-v 231205015) or a version string (-v 434.0.0.44.74). For a version string, goopdl tries fresh GSF IDs until one of them sees that version.
How do I get the newest version during a staged rollout?
Run goopdl latest com.example.app. Google rolls updates out by device cohort, so goopdl asks through several GSF IDs and keeps the highest version code it sees.
Which devices and architectures are supported?
arm64 (the default), armv7, x86, x86_64 and Android TV (tv), chosen with --arch. Comma-separate several to get one download per architecture.
How do I get the version of an app for another country?
Combine --country with a --proxy located in that country. --country on its own only changes the region headers.
Can I verify the downloaded files?
Yes. --integrity-manifest checks every base and split APK against Google's digests (SHA-256, or SHA-1 when that's all Google sends) and writes a JSON manifest. Google sends no digests for OBB files and asset packs, so those aren't verified.
What happens if I get rate-limited?
goopdl keeps a pool of 5 anonymous tokens per architecture and country and only asks for missing ones, which keeps it under the dispenser's limit of about 20 requests per hour. If Google Play answers HTTP 429, goopdl retries the delivery request twice, then exits with code 5. For high-volume use there is goopdl fast-download.

Get goopdl.

No Python needed · or try it once with uvx goopdl --help