APKMirror APIapkmirror.com ↗
Get the latest stable APK or APKM download URL for any app on APKMirror, filtered by Android API level and CPU architecture. One endpoint, nine response fields.
What is the APKMirror API?
The APKMirror API exposes one endpoint — get_latest_download_url — that returns nine fields describing the newest stable (or optionally beta) release of any app on APKMirror that matches a given Android API level and CPU architecture. Supply an app slug like x-corp/twitter, specify your target device constraints, and get back a direct download URL, version string, versionCode, file format, and architecture list without manually browsing the site.
curl -X GET 'https://api.parse.bot/scraper/e42793fb-c47d-4b49-87a5-6794a6de3495/get_latest_download_url?app_slug=x-corp%2Ftwitter&include_beta=false' \ -H 'X-API-Key: $PARSE_API_KEY'
Finds the highest-versioned stable release of an app on APKMirror that has at least one variant compatible with the caller's device: the variant's minimum Android requirement must be at or below android_api (default 30 = Android 11) and its architecture list must contain architecture (default arm64-v8a) or be universal. Up to 6 of the most recently uploaded releases are all inspected (so a call costs 2 to 10 page fetches); among those with a compatible variant, the release whose version number is highest under numeric segment-by-segment comparison (e.g. 17.8.6638 beats 17.7.6636 even when 17.7 was uploaded later) is selected, with the earlier-listed release winning ties. Within the selected release, architecture-specific matches are preferred over universal ones, and within a tier the first variant listed by APKMirror wins. Beta/alpha releases are skipped unless include_beta is true. On a match, match_status is "matched" and the payload carries version, version_code, min_sdk (API level read from the variant page), architectures (array), file_format ("APK" for a single APK, "APKM" for a split bundle), variant_page_url, release_page_url, download_page_url (APKMirror's browser download page) and download_url: the direct, pre-signed file URL on APKMirror's storage that the download page redirects to. download_url serves the APK/APKM bytes to any plain HTTP client with no cookies or browser needed (one observed shape: a 90 MB APKM served as application/vnd.apkm with HTTP range support), but it is only valid until download_url_expires_at (one hour after issue in every observed case), so fetch it promptly or call the endpoint again for a fresh URL. file_name is the file name of that URL. When no inspected release has a compatible variant, match_status is "no compatible variant", releases_checked says how many releases were examined, and every variant-specific field is null (architectures is an empty array); the endpoint never falls back to an incompatible variant. An unknown app slug yields a stale_input error (input_not_found).
| Param | Type | Description |
|---|---|---|
| app_slug | string | The app slug in the format 'developer/app-name' as it appears in the APKMirror URL path (e.g. 'x-corp/twitter', 'google-inc/youtube'). Any app hosted on APKMirror may be given; an unknown slug returns input_not_found. |
| android_api | integer | Android API level of the target device (30 = Android 11). A variant qualifies only when its minimum required API level is less than or equal to this value. Must be a positive integer. |
| architecture | string | CPU ABI the variant must support, as APKMirror labels it (e.g. 'arm64-v8a', 'armeabi-v7a', 'x86_64'). Variants listing this ABI qualify first; variants labelled universal/noarch qualify as a fallback tier. |
| include_beta | string | Whether beta/alpha releases are eligible when searching for the highest-versioned compatible release. Accepts 'true' or 'false'. |
{
"type": "object",
"fields": {
"min_sdk": "number|null - minimum Android API level required by the matched variant",
"version": "string|null - release title as displayed on APKMirror; null when no compatible variant",
"app_name": "string|null - release title as displayed on APKMirror (app name plus version)",
"file_name": "string|null - file name of the APK/APKM as served by download_url",
"file_format": "string|null - \"APK\" for a single APK file or \"APKM\" for an APKMirror split bundle",
"app_page_url": "string - URL of the app's main page on APKMirror",
"download_url": "string|null - direct pre-signed URL of the APK/APKM file on APKMirror's storage; downloadable by any HTTP client without a browser or cookies until download_url_expires_at",
"match_status": "string - \"matched\" when a compatible variant was found, otherwise \"no compatible variant\"",
"version_code": "number|null - integer Android versionCode of the matched variant",
"architectures": "array of strings - ABIs the matched variant supports (e.g. [\"arm64-v8a\",\"armeabi-v7a\"] or [\"universal\"]); empty when no compatible variant",
"release_page_url": "string|null - URL of the release page the variant belongs to",
"releases_checked": "number - how many releases (newest uploads first) were inspected when choosing the highest-versioned compatible release",
"variant_page_url": "string|null - URL of the matched variant's detail page",
"download_page_url": "string|null - APKMirror's HTML download page for the variant (browser use; includes its key parameter)",
"download_url_expires_at": "string|null - UTC ISO-8601 instant (YYYY-MM-DDTHH:MM:SSZ) after which download_url stops working; null if the URL carried no expiry"
},
"sample": {
"data": {
"min_sdk": 28,
"version": "X 12.30.0-prod.01",
"app_name": "X 12.30.0-prod.01",
"file_name": "com.twitter.android_12.30.0-prod.01-312300001_2arch_2dpi_24lang_914573cd901cfe0dd9e8992656f4221f_apkmirror.com.apkm",
"file_format": "APKM",
"app_page_url": "https://www.apkmirror.com/apk/x-corp/twitter/",
"download_url": "https://<storage-host>/downloadprod/wp-content/uploads/2026/09/36/6abc02fec426c/com.twitter.android_12.30.0-prod.01-312300001_2arch_2dpi_24lang_914573cd901cfe0dd9e8992656f4221f_apkmirror.com.apkm?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=<credential>&X-Amz-Date=20261001T112751Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature=<signature>",
"match_status": "matched",
"version_code": 312300001,
"architectures": [
"arm64-v8a",
"armeabi-v7a"
],
"release_page_url": "https://www.apkmirror.com/apk/x-corp/twitter/x-12-30-0-prod-01-release/",
"releases_checked": 6,
"variant_page_url": "https://www.apkmirror.com/apk/x-corp/twitter/x-12-30-0-prod-01-release/x-12-30-0-prod-01-2-android-apk-download/",
"download_page_url": "https://www.apkmirror.com/apk/x-corp/twitter/x-12-30-0-prod-01-release/x-12-30-0-prod-01-2-android-apk-download/download/?key=<key>",
"download_url_expires_at": "2026-10-01T12:27:51Z"
},
"status": "success"
}
}About the APKMirror API
What the endpoint returns
get_latest_download_url scans APKMirror releases for the app identified by app_slug (formatted as developer/app-name, matching the URL path on APKMirror) and returns the newest release whose variants satisfy both device constraints you supply. The response includes download_url — a direct link to the matched variant file including its key parameter — alongside release_page_url and app_page_url for reference. When no compatible variant exists, match_status is set to "no compatible variant" and nullable fields such as download_url, version, and version_code return null.
Filtering by device compatibility
Two parameters control which variant qualifies. android_api (default 30, i.e. Android 11) sets the ceiling: a variant is eligible only when its minimum SDK requirement is at or below that value. architecture (default arm64-v8a) restricts matches to variants whose ABI list contains the specified string — common values include armeabi-v7a, x86_64, and universal. The response echoes back min_sdk and architectures so you can verify the match without a second call.
File format and beta releases
file_format distinguishes between "APK" (a single installable file) and "APKM" (an APKMirror split bundle), which matters when you need to handle installation differently for bundled apps. By default only stable releases are considered; setting include_beta to "true" makes alpha and beta releases eligible, useful for tracking pre-release builds of apps under active development.
Identifying apps
The app_slug follows the path structure visible in APKMirror URLs — for example, the Twitter app at apkmirror.com/apk/x-corp/twitter/ uses the slug x-corp/twitter. The app_name field in the response returns the full release title as APKMirror displays it, which typically combines the app name and version string.
The APKMirror API is a managed, monitored endpoint for apkmirror.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when apkmirror.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official apkmirror.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Automate APK downloads in a CI pipeline by fetching the latest
download_urlfor a targetarm64-v8adevice before each test run. - Monitor
version_codechanges to detect new releases of a specific app without polling the APKMirror website manually. - Build a device-aware update checker that filters releases by
android_apito ensure compatibility with older Android versions. - Distinguish between
APKandAPKMfile formats so your installer script handles split bundles separately from standard APKs. - Track pre-release cadence of apps by enabling
include_betaand logging the returnedversionandversion_codeover time. - Retrieve
release_page_urlto deep-link users directly to the correct variant page for manual verification or changelog review.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does APKMirror have an official developer API?+
What does `match_status` indicate and when is `download_url` null?+
match_status is "matched" when the endpoint finds a release whose variant meets both the android_api ceiling and the architecture requirement. If no such variant exists across the app's recent stable (or beta, if enabled) releases, match_status becomes "no compatible variant" and download_url, version, version_code, min_sdk, file_format, and release_page_url all return null. app_page_url and architectures (as an empty array) are always present.Can the API return a list of all available versions or variants for an app?+
Does the endpoint cover apps that require an APKMirror account to download?+
download_url returned is for publicly accessible variants on APKMirror. Apps or variants that require a logged-in session to initiate a download are not covered by this endpoint. The API surfaces only what is reachable without authentication.Can I retrieve changelog or release notes alongside the download URL?+
version, version_code), device compatibility (min_sdk, architectures), file format, and URLs — but no changelog or description text. You can fork this API on Parse and revise it to include release notes if APKMirror surfaces them on the release page.