Skip to main content

Multi-source APK downloader with automatic fallback

Project description

justapk

Download any APK by package name. 6 sources, automatic fallback, zero config.

PyPI Python License CI


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

MIT

Project details


Download files

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

Source Distribution

justapk-0.1.1.tar.gz (17.3 kB view details)

Uploaded Source

Built Distribution

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

justapk-0.1.1-py3-none-any.whl (24.8 kB view details)

Uploaded Python 3

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

Hashes for justapk-0.1.1.tar.gz
Algorithm Hash digest
SHA256 a4654e8d72c70a40cb89a494a5500ac087617bdcceae11750f15ec17ce5aab3e
MD5 60a3f2f7223ea4c56d1cf0b66fc2ed74
BLAKE2b-256 5db9a7a3ca1ade1e389dc670b33553bca4b63e5970a7ba01e6bcc2acc8c53816

See more details on using hashes here.

Provenance

The following attestation bundles were made for justapk-0.1.1.tar.gz:

Publisher: publish.yml on TheQmaks/justapk

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

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

Hashes for justapk-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 dce8cbe9b885381b44e98ada364f8995cf2572887076102d1f4d5e06545e5c78
MD5 4bf8ba6189fcb000535b4fa501f2eede
BLAKE2b-256 ff9dc772b76ad7e561b38d6c3b33271d64a52c1c1b2172d529d4d7c6da265fc1

See more details on using hashes here.

Provenance

The following attestation bundles were made for justapk-0.1.1-py3-none-any.whl:

Publisher: publish.yml on TheQmaks/justapk

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

Supported by

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