APK API 文档

包含 Google Play 数据的 REST API:400 万个应用、开发者、新上架与已下架应用、标题关键词。格式为 JSON,编码为 UTF-8,已启用 CORS。

快速入门

基础地址: https://apkapi.com/api/v1. 请注册,请在您的以下位置创建 API 密钥: 账户中心 ,然后发送您的第一个请求:

API 的机器可读描述: OpenAPI 3.1 · Postman 集合 — 导入 Postman、Insomnia 或客户端生成器 (openapi-generator),即可获得适用于您所用语言的现成 SDK。

curl -H "X-API-Key: 您的密钥" "https://apkapi.com/api/v1/app?id=com.whatsapp"

数据涵盖超过 400 万个 Google Play 应用,来自美国商店的英文版本(若应用在美国不可用,则取自其他国家),每晚更新。已从商店下架的应用会连同其最后数据保留在数据库中。

身份验证

除 /v1/health 外,每个请求都必须在请求头中包含 API 密钥:

X-API-Key: ak_live_…

同时支持: Authorization: Bearer …。不允许在 URL 参数中传递密钥:否则它会进入日志和浏览器历史记录。

请将密钥保存在您的服务器上。如果把它嵌入页面的 JavaScript,任何访问者都可以复制。前端请求请通过您自己的后端转发。

令牌与限额

每次调用消耗 0–3 个令牌,具体取决于端点,与响应中的行数无关(最多 100 行);批量 apps 请求每个应用消耗 1 个令牌。优先使用每月令牌,然后使用已购令牌。如果请求因我方原因失败,令牌将退还。 套餐与令牌包

请求头含义
X-Tokens-Cost本次请求消耗的令牌数
X-Tokens-Remaining剩余令牌数(每月令牌 + 已购令牌)
X-CacheHIT — 来自缓存的响应(更快),MISS — 对索引的全新查询
X-RateLimit-Limit / -Remaining密钥的每分钟请求限额及剩余次数
X-Planfree | pro | business

剩余令牌数也包含在每个响应的 _tokens 字段和 /v1/account 中(免费)。旧名称 _credits 和 X-Credits-* 已弃用,但目前仍可使用。

响应格式与错误

每个响应都包含 ok 字段。列表包含 results、total、page、per、pages。出错时:ok = false,error 为说明,code 为机器可读的错误代码。日期采用 UTC 的 ISO 8601 格式。

{ "ok": true, "app": { "id": "com.whatsapp", "title": "WhatsApp", "installs": { "label": "10,000,000,000+", "min": 10000000000, "real": 12445120489 }, … },
  "_tokens": { "cost": 1, "monthly_remaining": 999, "balance": 0, "available": 999, "cached": false } }

{ "ok": false, "code": "insufficient_credits", "error": "Not enough tokens: this call costs 2, you have 1. …" }
HTTPcode出现时机
400invalid_param, invalid_request参数无效或缺失
401missing_api_key, invalid_api_key缺少密钥,或密钥已被撤销
402insufficient_credits令牌不足——请购买令牌包
403account_blocked, plan_required账号已被封禁,或该端点在首次购买令牌后开放
404not_found数据库中没有该应用或开发者,或端点未知
429rate_limited已超出每分钟请求限额
503service_unavailable数据库暂时出现问题——请稍后重试;不会扣除令牌

端点

所有端点均为 GET /api/v1/{名称}。分页:page(从 1 开始)和 per(1–100),最多到第 10 000 条结果。排序:sort + order=asc|desc。

GET/api/v1/account免费

您的套餐、令牌余额、每月令牌的重置日期以及每分钟限额。

应用
GET/api/v1/app 1 令牌

完整的应用详情:标题、描述、“新功能”、安装量(档位与确切数值)、评分、评分与评论数量、星级分布、价格、应用内购买、广告、类别、内容分级、版本、最低 Android 版本、发布与更新日期、图标、截图、视频、开发者及其网站。对于已下架应用:最后保存的数据和下架日期。

id *应用包名
GET · POST/api/v1/apps 每个应用 1 个令牌

一次请求最多 100 个应用:GET ?ids=a,b,c,或在请求体中以列表 POST(每行一个,或 JSON {"ids": […]})。每个应用 1 个令牌;未找到的 ID 会在 not_found 中返回。

ids *包名,以逗号分隔,最多 100 个
GET/api/v1/suggest 免费

按标题开头联想:10 个最热门的匹配项。免费。

q *标题开头,至少 2 个字符
开发者
GET/api/v1/developer 2 令牌

开发者及其全部应用:数量(在架与已下架)、总安装量、平均评分、首次发布、类别、网站。Business 套餐还包含邮箱、电话、地址和法定名称。

id开发者 ID(来自应用详情:developer.id)
name或开发者的确切名称
statusall(默认)、live 或 removed
sortrelevance | installs | real_installs | score | ratings | reviews | released | updated | price
page页码,从 1 开始
per每页行数,1–100(默认 20)
商店变动
GET/api/v1/new 2 令牌

按首次发布日期排列的新应用,最新的在前。

since起始日期,YYYY-MM-DD(默认 7 天前)
until截至该日期(含)
category类别 ID,例如 GAME_PUZZLE(见 /v1/categories)
min_installs最低安装量(Google Play 档位:1000、10000…)
lang标题语言,ISO 代码:en、de、pt…
sortrelevance | installs | real_installs | score | ratings | reviews | released | updated | price
page页码,从 1 开始
per每页行数,1–100(默认 20)
GET/api/v1/removed 2 令牌

已从 Google Play 下架的应用(在我们检查的 19 个国家中均不存在),按下架日期排序。应用详情保留最后的数据。

since起始日期,YYYY-MM-DD(默认 7 天前)
until截至该日期(含)
category类别 ID,例如 GAME_PUZZLE(见 /v1/categories)
min_installs最低安装量(Google Play 档位:1000、10000…)
sortremoved_at | installs | score
page页码,从 1 开始
per每页行数,1–100(默认 20)
市场
GET/api/v1/keywords 2 令牌

按语言分别统计的应用标题词语和短语:使用它们的应用数和开发者数、其中强势应用(10 万+ 安装量)的数量、总安装量、头部应用占比以及机会评分(opportunity)。

lang语言,默认 en
q词语或短语
phrasetrue — 仅两个词的短语,false — 仅单个词
min_apps最少应用数
max_apps最大应用数
sortopportunity | apps | installs | strong | devs | max_installs
orderdesc | asc
page页码,从 1 开始
per每页行数,1–100(默认 20)
GET/api/v1/categories 免费

全部类别,含应用数量和总安装量。免费。

statuslive(在商店中,默认)、removed 或 all
GET/api/v1/free_domains 3 令牌首次购买后

开发者网站域名可注册的应用,附带应用热度。首次购买令牌后开放。

category类别 ID,例如 GAME_PUZZLE(见 /v1/categories)
min_installs最低安装量(Google Play 档位:1000、10000…)
statuslive(在商店中,默认)、removed 或 all
tld域名后缀,例如 com
sortrelevance | installs | real_installs | score | ratings | reviews | released | updated | price
page页码,从 1 开始
per每页行数,1–100(默认 20)
GET/api/v1/charts 2 令牌

Google Play 某一国家和类别的热门榜单:最多 200 个名次,相对上一次快照的名次变化(change:上升的名次数,"new" 表示新上榜)、图标和安装量。

country *国家,ISO 代码:US、DE、BR…
category *类别,例如 GAME_PUZZLE
collectionfree | paid | grossing
page页码,从 1 开始
per每页行数,1–100(默认 20)
GET/api/v1/rankings 1 令牌

应用在最新快照中所在的全部榜单:国家、类别、榜单类型、名次;以及榜单数量、国家数量和最佳名次。

id *应用包名
country仅限一个国家
collectionfree | paid | grossing
GET/api/v1/availability 1 令牌

应用在 Google Play 中可用的国家(依据商店 sitemap 中的 hreflang)。如果超过 190 个国家,则返回 worldwide = true 而不附列表。

id *应用包名
GET/api/v1/markets 1 令牌

基于免费榜单的市场竞争度:进入前 100 名和前 200 名的门槛(该名次应用的安装量)、榜单中新应用(近 12 个月)和本地应用(≤3 个国家)的占比,以及本地市场规模。不带参数:所有国家;country:单个国家的各类别;category:所有国家中的单个类别。

country国家,ISO 代码
category类别 ID,例如 GAME_PUZZLE(见 /v1/categories)
sortentry100 | entry200 | new_share | local_share | local_apps | local_installs | local_new
orderdesc | asc
page页码,从 1 开始
per每页行数,1–100(默认 20)
GET/api/v1/stats 免费

数据库规模:商店中的应用和已下架应用、开发者、7 天内新上架和已下架的数量、最近更新时间。免费。

* — 必填参数

代码示例

# curl — one app
curl -H "X-API-Key: $KEY" "https://apkapi.com/api/v1/app?id=org.telegram.messenger"

# curl — puzzle games with 10M+ installs, best rated first
curl -H "X-API-Key: $KEY" "https://apkapi.com/api/v1/search?category=GAME_PUZZLE&min_installs=10000000&sort=score"

# curl — up to 100 apps in one call (POST, one package per line)
curl -H "X-API-Key: $KEY" --data-binary $'com.whatsapp\norg.telegram.messenger' "https://apkapi.com/api/v1/apps"
# Python — apps removed from Google Play this week
import os, requests
r = requests.get("https://apkapi.com/api/v1/removed",
                 params={"since": "2026-10-20", "min_installs": 100000, "per": 100},
                 headers={"X-API-Key": os.environ["KEY"]}, timeout=30)
r.raise_for_status()
data = r.json()
for app in data["results"]:
    print(app["removed_seen_at"], app["id"], app["installs"]["label"])
print("tokens left:", data["_tokens"]["available"])
// Node.js 18+ (在服务器上,而不是在浏览器中)
const res = await fetch("https://apkapi.com/api/v1/developer?id=5191370068110375942", { headers: { "X-API-Key": process.env.KEY } });
const d = await res.json();
if (!d.ok) throw new Error(d.error);
console.log(d.developer.name, d.developer.apps, d.developer.total_installs);
// PHP
$ch = curl_init('https://apkapi.com/api/v1/keywords?lang=en&q=vpn&per=50');
curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => ['X-API-Key: ' . getenv('KEY')]]);
$d = json_decode(curl_exec($ch), true);
foreach ($d['results'] as $k) echo $k['keyword'], ' — ', $k['apps'], PHP_EOL;

试用

您可以在以下位置创建密钥: 账户中心。请求直接从您的浏览器发出。密钥不会被保存,刷新页面后即消失。 控制台发出的请求与普通请求一样消耗令牌。