APK APIドキュメント

Google PlayデータのREST API: 400万アプリ、デベロッパー、新着アプリと削除済みアプリ、タイトルのキーワード。形式はJSON、文字コードはUTF-8、CORS対応。

クイックスタート

ベースURL: https://apkapi.com/api/v1. 登録し、APIキーを アカウントページで 作成してから、最初のリクエストを送信します:

機械可読なAPI記述: OpenAPI 3.1 · Postmanコレクション — Postman、Insomnia、またはクライアントジェネレーター(openapi-generator)にインポートすると、お使いの言語のSDKが手に入ります。

curl -H "X-API-Key: YOUR_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に埋め込むと、訪問者の誰もがコピーできます。フロントエンドのリクエストはバックエンドを経由させてください。

クレジットと上限

各呼び出しの費用は、レスポンスの行数(最大100)にかかわらず、エンドポイントに応じて0〜3クレジットです。appsの一括呼び出しは1アプリにつき1クレジットです。当月のプランのクレジットが先に使われ、その後プリペイド残高が使われます。当社側の問題でリクエストが失敗した場合、クレジットは返却されます。 プランとパック

ヘッダー意味
X-Credits-Costこのリクエストの消費クレジット
X-Credits-Remaining残りクレジット(プラン+残高)
X-CacheHIT — キャッシュから応答(高速)、MISS — インデックスへの新規クエリ
X-RateLimit-Limit / -Remainingキーの毎分上限と残り
X-Planfree | pro | scale | business

残りクレジットは、すべてのレスポンスの _credits フィールドと /v1/account(無料)でも確認できます。

レスポンス形式とエラー

すべてのレスポンスに 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 }, … },
  "_credits": { "cost": 1, "plan_remaining": 1999, "balance": 0, "available": 1999, "cached": false } }

{ "ok": false, "code": "insufficient_credits", "error": "Not enough credits: 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/{name} です。ページ送り: 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アプリにつき1クレジット

1回の呼び出しで最大100アプリ: GET ?ids=a,b,c、またはbodyにリストを入れたPOST(1行に1件、またはJSON {"ids": […]})。1アプリにつき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から
per1ページの行数、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から
per1ページの行数、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から
per1ページの行数、1〜100(デフォルト20)
市場
GET/api/v1/keywords 2クレジット

言語ごとのアプリタイトルの単語とフレーズ: 使用しているアプリ数とデベロッパー数、そのうち強いアプリ(10万インストール以上)の数、合計インストール数、首位のシェア、機会スコア。

lang言語、デフォルトは en
q単語またはフレーズ
phrasetrue — 2語のフレーズのみ、false — 1語のみ
min_apps最小アプリ数
max_apps最大アプリ数
sortopportunity | apps | installs | strong | devs | max_installs
orderdesc | asc
pageページ、1から
per1ページの行数、1〜100(デフォルト20)
GET/api/v1/categories 無料

アプリ数と合計インストール数付きの全カテゴリ。無料。

statuslive(ストアに掲載中、デフォルト)、removed、all
GET/api/v1/free_domains 3クレジットPro+

デベロッパーのウェブサイトのドメインが取得可能なアプリと、その人気度。Proプラン以上。

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から
per1ページの行数、1〜100(デフォルト20)
GET/api/v1/charts 2クレジット

1か国・1カテゴリのGoogle Playランキング: 最大200位まで、前回のスナップショットからの順位変動(change: 上昇した順位数、新規の場合は "new")、アイコン、インストール数。

country *国、ISOコード: US、DE、BR…
category *カテゴリ。例: GAME_PUZZLE
collectionfree | paid | grossing
pageページ、1から
per1ページの行数、1〜100(デフォルト20)
GET/api/v1/rankings 1クレジット

最新のスナップショットでアプリが掲載されているすべてのランキング: 国、カテゴリ、コレクション、順位、ランキング数と国数、最高順位。

id *アプリのパッケージ名
country1か国のみ
collectionfree | paid | grossing
GET/api/v1/availability 1クレジット

Google Playでアプリが提供されている国(ストアのサイトマップのhreflangより)。190か国以上の場合は、リストなしで worldwide = true を返します。

id *アプリのパッケージ名
GET/api/v1/markets 1クレジット

無料ランキングに基づく市場の競争度: トップ100とトップ200の参入基準(その順位のアプリのインストール数)、上位に占める新規アプリ(過去12か月)とローカルアプリ(3か国以下)の割合、ローカル市場の規模。パラメータなし: 全ての国。country: 1か国のカテゴリ。category: 全ての国の1カテゴリ。

country国、ISOコード
categoryカテゴリID。例: GAME_PUZZLE(/v1/categories を参照)
sortentry100 | entry200 | new_share | local_share | local_apps | local_installs | local_new
orderdesc | asc
pageページ、1から
per1ページの行数、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("credits left:", data["_credits"]["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;

試す

キーは アカウントページで作成できます。リクエストはブラウザから直接送信されます。キーはどこにも保存されず、ページを再読み込みすると消えます。 コンソールからのリクエストも通常どおりクレジットを消費します。