Skip to main content

gplaydl

Download APKs from Google Play right from your terminal. One command gets you the base APK, split APKs (App Bundles), OBB expansion files and Play Asset Delivery packs.

Downloads run on a community pool of Google accounts that gplaydl users share, so your own accounts stay out of it. Everyone who uses the pool puts one spare account in. That is the whole deal, and setting it up takes about two minutes.

  • Base APK, splits, OBB files and asset packs downloaded together by default
  • Community-pooled authentication: downloads never touch your personal account
  • 23 device profiles, rotated automatically so authentication keeps working
  • Pure-Python protobuf decoding, no gpapi dependency
  • Live progress bars, plus search, info and list-splits for browsing

Installation

Requires Python 3.9 or newer.

pip install gplaydl

Or from source:

git clone https://github.com/rehmatworks/gplaydl.git && cd gplaydl
pip install .

First-time setup

You will need any Android phone for a couple of minutes, and a Google account to add.

  1. Install the gplaydl Authenticator app (source) on the phone. It is not on Google Play, so Android will ask you to allow the install.
  2. Sign in with a Google account. Before each sign-in the app asks how the account may be used:
    • Community puts it in the shared pool and unlocks pool downloads for you. Use a spare account you would not mind losing, never your main one: Google sometimes restricts accounts it sees on unofficial clients.
    • Private keeps the account yours alone. Nobody else can ever use it, and you reach it with --email (see purchased apps below).
  3. Open Link gplaydl in the app, then run this on your computer and type in the code it shows:
gplaydl link

Done. If you shared a Community account, every download now works, and your account serves other people's downloads the same way theirs serve yours:

gplaydl download com.whatsapp

If you kept everything private, downloads work too, just always through your own accounts: pass --email with the address you added. The shared pool stays locked until there is a Community account behind your key.

Your Google password and 2FA codes never leave the phone; the app uploads only the resulting Play token. You can flip an account between Community and Private or delete it in the app whenever you like, and if you skip gplaydl link, the first command that needs it will walk you through the same steps.

Quick start

gplaydl link                    # once, with the code from the app
gplaydl download com.whatsapp   # base APK + splits + OBB/asset packs

Commands

Every command takes -d/--dispenser to pick a dispenser and --arch for the device architecture.

link

Pairs this machine with the dispenser. Run it once, or again to re-link.

gplaydl link                              # asks for the code interactively
gplaydl link --code ABCD-EFGH             # or pass it directly
gplaydl link -d https://your.dispenser    # link to a self-hosted dispenser

The key lands in ~/.config/gplaydl/config.json. For containers and CI, set GPLAYDL_API_KEY instead of linking interactively.

auth

Gets a Play token and caches it. You rarely need to run this yourself; the other commands fetch and refresh tokens on their own.

gplaydl auth                              # default (arm64)
gplaydl auth --arch armv7                 # older 32-bit devices
gplaydl auth --clear                      # forget all cached tokens

Tokens live in ~/.config/gplaydl/auth-{arch}.json and refresh automatically before they expire.

download

Fetches the base APK, every split APK, and any extra files unless you opt out.

gplaydl download com.whatsapp                # everything
gplaydl download com.whatsapp -o ./apks      # custom output directory
gplaydl download com.whatsapp -a armv7       # ARMv7 build
gplaydl download com.whatsapp -v 231205015   # specific version code
gplaydl download com.whatsapp --no-splits    # skip split APKs
gplaydl download com.whatsapp --no-extras    # skip OBB / asset packs
Type Naming Example
Base APK {package}-{vc}.apk com.whatsapp-231205015.apk
Split APK {package}-{vc}-{split}.apk com.whatsapp-231205015-config.arm64_v8a.apk
OBB (main/patch) {type}.{vc}.{package}.obb main.20925.com.tencent.ig.obb
Asset pack {package}-{vc}-asset.apk com.tencent.ig-20925-asset.apk

Install a split build on a device with adb install-multiple *.apk.

info, search and list-splits

gplaydl info com.whatsapp                 # version, developer, rating, downloads
gplaydl search "file manager" --limit 5   # find apps by name
gplaydl list-splits com.whatsapp          # see splits without downloading

Downloading your own purchased apps

The community pool only knows free apps. To download something tied to one of your own accounts, add that account in the Authenticator app and choose Private, then pin it by address:

gplaydl download com.example.paid --email you@gmail.com

A private account is never handed to anyone else; only you can pin it, and only with your key. Be aware of the risk before adding an account you care about: Google can rate-limit, lock, or restrict accounts it sees on unofficial clients. It is uncommon, but it happens, and it is why the shared pool runs on throwaway accounts.

Self-hosting

The dispenser is open source and runs anywhere Go and Postgres do. Host your own pool for a team or just for yourself:

  1. Follow the dispenser deployment guide.
  2. In the Authenticator app, point Settings → Server at your instance and add accounts.
  3. Link gplaydl against it: gplaydl link -d https://your.dispenser

Architecture support

Flag ABI Devices
arm64 (default) arm64-v8a Modern phones (2017+)
armv7 armeabi-v7a Older 32-bit phones

How it works

  1. Authenticate. The dispenser mints a Play token from a pooled account and hands it back, trying device profiles in turn until one is accepted.
  2. Look up. App metadata (version, size, split list) comes from Google Play's protobuf API.
  3. Purchase. Free apps are "purchased" to authorise the download.
  4. Download. Base APK, splits, OBB files and asset packs stream in parallel from Google's CDN.

Upgrading from 2.x

gplaydl 3 switched from Aurora Store's public token dispenser to its own (source), stocked entirely by its users. Run gplaydl link once after upgrading and you are set.

License

MIT. See LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gplaydl-3.0.1.tar.gz (60.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

gplaydl-3.0.1-py3-none-any.whl (114.8 kB view details)

Uploaded Python 3

File details

Details for the file gplaydl-3.0.1.tar.gz.

File metadata

  • Download URL: gplaydl-3.0.1.tar.gz
  • Upload date:
  • Size: 60.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for gplaydl-3.0.1.tar.gz
Algorithm Hash digest
SHA256 c311a7ecae9616731fb2b524677ed63d22b6cf2828ebfd531674e42d2b263de6
MD5 9429e6680075e00dca63ca3928f6709f
BLAKE2b-256 df1a824ae5a0cda16d27f2b6bb6c3a98597ea49a153ccbef6608e554d9f7cf7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for gplaydl-3.0.1.tar.gz:

Publisher: publish.yml on rehmatworks/gplaydl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file gplaydl-3.0.1-py3-none-any.whl.

File metadata

  • Download URL: gplaydl-3.0.1-py3-none-any.whl
  • Upload date:
  • Size: 114.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for gplaydl-3.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 2126e5539d7138e5abf108e376dbf95c5d8d0cbfca19167628655c7cebe9ed1d
MD5 46b6c034ef3e26ab44adf18ac730b36f
BLAKE2b-256 246d4f20b46bbb3e0d45204626074759a17cdb49dc3c3f15caeba1c1c6d2c1f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for gplaydl-3.0.1-py3-none-any.whl:

Publisher: publish.yml on rehmatworks/gplaydl

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

4.2.1

2 files

4.2.0

2 files

4.1.0

2 files

4.0.2

2 files

4.0.1

2 files

4.0.0

2 files

This release

3.0.1 This release

2 files

3.0.0

2 files

2.1.7

2 files

2.1.6

2 files

2.1.5

2 files

2.1.4

2 files

2.1.3

2 files

2.1.2

2 files

2.1.0

2 files

1.3.5

1 file

1.3.4

2 files

1.3.3

2 files

1.3.2

2 files

1.3.1

2 files

1.3.0

2 files

1.2.0

1 file

1.0.3

2 files

1.0.2

1 file

1.0.1

1 file

1.0

1 file

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page