Multi-source APK downloader with automatic fallback
Project description
justapk
Download any APK by package name. 6 sources, automatic fallback, zero config.
justapk download org.telegram.messenger
One command. Six sources. Always gets the APK.
Why?
Existing APK downloaders break constantly — sites add Cloudflare, change APIs, go offline. justapk doesn't care. It cycles through 6 sources automatically until one works. Under the hood it uses reverse-engineered mobile APIs and Cloudflare bypass via TLS fingerprint impersonation.
Install
pip install justapk
Python 3.11+
Usage
download — grab an APK
justapk download <package> # auto-select best source
justapk download <package> -s apkpure # from a specific source
justapk download <package> -v 11.6.2 # specific version
justapk download <package> -o ./apks/ # custom output directory
justapk download <package> --no-convert # keep XAPK as-is (no merge)
search — find apps
justapk search telegram
justapk search telegram -s fdroid
info — app metadata
justapk info org.telegram.messenger
justapk info org.telegram.messenger -s apkpure
convert — XAPK/split APK to single APK
justapk convert app.xapk
justapk convert app.xapk -o output/
Merges split APKs (base + native libs + assets) and signs with a debug key.
sources — list available sources
justapk sources
All commands output JSON to stdout. Progress goes to stderr — pipe-friendly by design.
Sources
Tried in this order. If one fails, the next one picks up automatically.
| Source | How it works | Notes | |
|---|---|---|---|
| 1 | APK20 | REST API + HTML parsing | No Cloudflare |
| 2 | F-Droid | JSON API | FOSS apps only (~4K packages) |
| 3 | APKPure | Reverse-engineered mobile API | Largest catalog |
| 4 | APKMirror | HTML scraping + curl_cffi |
Cloudflare bypass |
| 5 | Uptodown | Reverse-engineered mobile API | No Cloudflare |
| 6 | APKCombo | HTML scraping + curl_cffi |
Cloudflare bypass |
Python API
from pathlib import Path
from justapk import APKDownloader
dl = APKDownloader()
# Download with auto-fallback
result = dl.download("org.telegram.messenger", output_dir=Path("./apks/"))
print(result.path, result.size, result.sha256)
# Search across all sources
apps = dl.search("telegram")
for app in apps:
print(app.package, app.name, app.source)
# Get app info
info = dl.info("org.telegram.messenger")
if info:
print(info.name, info.version)
# Pin a specific source
result = dl.download("org.telegram.messenger", source="apkpure")
License
Project details
Release history Release notifications | RSS feed
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 justapk-0.1.1.tar.gz.
File metadata
- Download URL: justapk-0.1.1.tar.gz
- Upload date:
- Size: 17.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a4654e8d72c70a40cb89a494a5500ac087617bdcceae11750f15ec17ce5aab3e
|
|
| MD5 |
60a3f2f7223ea4c56d1cf0b66fc2ed74
|
|
| BLAKE2b-256 |
5db9a7a3ca1ade1e389dc670b33553bca4b63e5970a7ba01e6bcc2acc8c53816
|
Provenance
The following attestation bundles were made for justapk-0.1.1.tar.gz:
Publisher:
publish.yml on TheQmaks/justapk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
justapk-0.1.1.tar.gz -
Subject digest:
a4654e8d72c70a40cb89a494a5500ac087617bdcceae11750f15ec17ce5aab3e - Sigstore transparency entry: 955147285
- Sigstore integration time:
-
Permalink:
TheQmaks/justapk@28d21a2ca912d580a1bf2fdab0694893ea881595 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/TheQmaks
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@28d21a2ca912d580a1bf2fdab0694893ea881595 -
Trigger Event:
push
-
Statement type:
File details
Details for the file justapk-0.1.1-py3-none-any.whl.
File metadata
- Download URL: justapk-0.1.1-py3-none-any.whl
- Upload date:
- Size: 24.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
dce8cbe9b885381b44e98ada364f8995cf2572887076102d1f4d5e06545e5c78
|
|
| MD5 |
4bf8ba6189fcb000535b4fa501f2eede
|
|
| BLAKE2b-256 |
ff9dc772b76ad7e561b38d6c3b33271d64a52c1c1b2172d529d4d7c6da265fc1
|
Provenance
The following attestation bundles were made for justapk-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on TheQmaks/justapk
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
justapk-0.1.1-py3-none-any.whl -
Subject digest:
dce8cbe9b885381b44e98ada364f8995cf2572887076102d1f4d5e06545e5c78 - Sigstore transparency entry: 955147288
- Sigstore integration time:
-
Permalink:
TheQmaks/justapk@28d21a2ca912d580a1bf2fdab0694893ea881595 -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/TheQmaks
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@28d21a2ca912d580a1bf2fdab0694893ea881595 -
Trigger Event:
push
-
Statement type: