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.
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.
pip install justapkPython 3.11+
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)justapk search telegram
justapk search telegram -s fdroidjustapk info org.telegram.messenger
justapk info org.telegram.messenger -s apkpurejustapk convert app.xapk
justapk convert app.xapk -o output/Merges split APKs (base + native libs + assets) and signs with a debug key.
justapk sourcesAll commands output JSON to stdout. Progress goes to stderr — pipe-friendly by design.
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 |
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")