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.
gplaydl downloads through a Google account you add yourself in the Authenticator app. Your account stays private to you, and setup takes about two minutes.
- Base APK, splits, OBB files and asset packs downloaded together by default
- Signs in with your own account, kept private to you and never shared
- 23 device profiles, rotated automatically so authentication keeps working
- Pure-Python protobuf decoding, no
gpapidependency - Live progress bars, plus
search,infoandlist-splitsfor 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 spare Google account to add.
- Install the gplaydl Authenticator app (source) on the phone. It is not on Google Play, so Android will ask you to allow the install.
- Sign in with a spare Google account. Prefer a throwaway over your main one: Google sometimes restricts accounts it sees on unofficial clients. The account stays private to you and is never shared with anyone.
- Open Link gplaydl in the app, then run this on your computer and type in the code it shows:
gplaydl link
Done. Every download now goes through your own account:
gplaydl download com.whatsapp
Your Google password and 2FA codes never leave the phone; the app uploads only the resulting Play token. You can remove an account 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.
If you added more than one account in the app, pass --email you@gmail.com on auth or download to use a specific one. Without it, gplaydl rotates through the accounts you added.
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
Multiple accounts and purchased apps
You can add several accounts in the app. By default gplaydl rotates through them; pass --email to pick one, which is also how you download apps tied to a specific account:
gplaydl download com.example.paid --email you@gmail.com
A word of caution 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, which is why a throwaway account is the safer choice.
Self-hosting
The dispenser is open source and runs anywhere Go and Postgres do. Host your own for a team or just for yourself:
- Follow the dispenser deployment guide.
- In the Authenticator app, point Settings → Server at your instance and add accounts.
- 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
- Authenticate. The dispenser mints a Play token from one of your own accounts and hands it back, trying device profiles in turn until one is accepted.
- Look up. App metadata (version, size, split list) comes from Google Play's protobuf API.
- Purchase. Free apps are "purchased" to authorise the download.
- Download. Base APK, splits, OBB files and asset packs stream in parallel from Google's CDN.
Upgrading from 3.x
gplaydl 4 drops the shared community pool: downloads now go through a Google account you add yourself, kept private to you. Add an account in the Authenticator app and run gplaydl link once after upgrading. (Older 2.x releases borrowed anonymous tokens from Aurora Store; that path is gone.)
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gplaydl-4.0.2.tar.gz.
File metadata
- Download URL: gplaydl-4.0.2.tar.gz
- Upload date:
- Size: 59.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
23109cbb9676372a65b0ed881ec5f39a42fc9e9c6b57ec6915da1a13becbfd6c
|
|
| MD5 |
c9ff78e36b79c979d3d4b5bd5f2e0010
|
|
| BLAKE2b-256 |
f6e5d1014f9feaf1267559f19834b2bc81ab96c7fe91de85cacefa7f5c3044d7
|
Provenance
The following attestation bundles were made for gplaydl-4.0.2.tar.gz:
Publisher:
publish.yml on rehmatworks/gplaydl
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gplaydl-4.0.2.tar.gz -
Subject digest:
23109cbb9676372a65b0ed881ec5f39a42fc9e9c6b57ec6915da1a13becbfd6c - Sigstore transparency entry: 2279422451
- Sigstore integration time:
-
Permalink:
rehmatworks/gplaydl@9e5bcac204c09bb725aaaa8a55e1d83f7bf029dc -
Branch / Tag:
refs/tags/v4.0.2 - Owner: https://github.com/rehmatworks
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9e5bcac204c09bb725aaaa8a55e1d83f7bf029dc -
Trigger Event:
push
-
Statement type:
File details
Details for the file gplaydl-4.0.2-py3-none-any.whl.
File metadata
- Download URL: gplaydl-4.0.2-py3-none-any.whl
- Upload date:
- Size: 114.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via:
twine/6.1.0 CPython/3.13.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9d36dc419708d3d6d70284364f69b674d24f9a1347b54d84a170641a6e461dbf
|
|
| MD5 |
5aec6fdd979c1d63df0860d81b5b83e2
|
|
| BLAKE2b-256 |
33a89e57b4f5f818877a1dc6b5595673dc70783941babe0731267f347ecba4f0
|
Provenance
The following attestation bundles were made for gplaydl-4.0.2-py3-none-any.whl:
Publisher:
publish.yml on rehmatworks/gplaydl
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
gplaydl-4.0.2-py3-none-any.whl -
Subject digest:
9d36dc419708d3d6d70284364f69b674d24f9a1347b54d84a170641a6e461dbf - Sigstore transparency entry: 2279422457
- Sigstore integration time:
-
Permalink:
rehmatworks/gplaydl@9e5bcac204c09bb725aaaa8a55e1d83f7bf029dc -
Branch / Tag:
refs/tags/v4.0.2 - Owner: https://github.com/rehmatworks
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@9e5bcac204c09bb725aaaa8a55e1d83f7bf029dc -
Trigger Event:
push
-
Statement type: