기본 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 매개변수로 키를 전달할 수 없습니다. 로그와 브라우저 기록에 남기 때문입니다.
각 호출은 응답 행 수(최대 100)와 관계없이 엔드포인트에 따라 0~3크레딧이 듭니다. apps 일괄 호출은 앱당 1크레딧입니다. 이번 달 요금제 크레딧이 먼저 사용되고 그다음 선불 잔액이 사용됩니다. 저희 측 문제로 요청이 실패하면 크레딧은 반환됩니다. 요금제 및 팩
| 헤더 | 의미 |
|---|---|
X-Credits-Cost | 이 요청에 사용된 크레딧 |
X-Credits-Remaining | 남은 크레딧(요금제 + 잔액) |
X-Cache | HIT — 캐시에서 제공(더 빠름), MISS — 인덱스에 새로 조회 |
X-RateLimit-Limit / -Remaining | 키의 분당 한도와 남은 양 |
X-Plan | free | 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. …" }
| HTTP | code | 시점 |
|---|---|---|
| 400 | invalid_param, invalid_request | 매개변수가 잘못되었거나 없습니다 |
| 401 | missing_api_key, invalid_api_key | 키가 없거나 취소되었습니다 |
| 402 | insufficient_credits | 크레딧 부족 — 충전하거나 요금제를 업그레이드하세요 |
| 403 | account_blocked, plan_required | 계정이 차단되었거나 엔드포인트에 상위 요금제가 필요합니다 |
| 404 | not_found | 앱이나 개발자가 데이터베이스에 없거나 엔드포인트를 알 수 없습니다 |
| 429 | rate_limited | 분당 요청 한도 초과 |
| 503 | service_unavailable | 일시적인 데이터베이스 문제입니다. 나중에 다시 시도하세요. 크레딧은 차감되지 않습니다 |
모든 엔드포인트는 GET /api/v1/{name}입니다. 페이지 나누기: page(1부터)와 per(1–100), 10,000번째 결과까지. 정렬: sort + order=asc|desc.
요금제, 요금제 크레딧과 잔액, 크레딧 초기화 날짜, 분당 한도.
전체 앱 기록: 제목, 설명, 새로운 기능, 설치 수(구간과 정확한 수), 평점, 평가 및 리뷰 수, 별점 분포, 가격, 인앱 구매, 광고, 카테고리, 콘텐츠 등급, 버전, 최소 Android, 출시일과 업데이트일, 아이콘, 스크린샷, 동영상, 개발자와 웹사이트. 삭제된 앱의 경우: 마지막으로 저장된 데이터와 삭제일.
id * | 앱 패키지 이름 |
한 번의 호출로 최대 100개 앱: GET ?ids=a,b,c 또는 본문에 목록을 넣은 POST(한 줄에 하나 또는 JSON {"ids": […]}). 앱당 1크레딧이며, 없는 ID는 not_found로 반환됩니다.
ids * | 패키지 이름, 쉼표로 구분, 최대 100개 |
전체 데이터베이스 검색과 필터. 필터가 하나 이상 필요합니다. q가 없으면 결과는 설치 수순으로 정렬됩니다.
q | 제목, 설명, 개발자 이름에서 찾을 단어 |
category | 카테고리 ID, 예: GAME_PUZZLE(/v1/categories 참고) |
developer_id | Google Play 개발자 ID |
min_installs | 최소 설치 수(Google Play 구간: 1000, 10000…) |
max_installs | 최대 설치 수 |
min_score | 최소 평점, 0–5 |
min_ratings | 최소 평가 수 |
free | true — 무료만, false — 유료만 |
ads | true — 광고 있음, false — 광고 없음 |
iap | true — 인앱 구매 있음 |
lang | 제목 언어, ISO 코드: en, de, pt… |
released_from | 이 날짜부터 출시, YYYY-MM-DD |
released_to | 이 날짜까지 출시(해당일 포함) |
updated_from | 이 날짜부터 업데이트 |
updated_to | 이 날짜까지 업데이트(해당일 포함) |
status | live(스토어 등록 중, 기본값), removed 또는 all |
sort | relevance | installs | real_installs | score | ratings | reviews | released | updated | price |
order | desc | asc |
page | 페이지, 1부터 |
per | 페이지당 행 수, 1–100(기본값 20) |
제목 시작 부분 기준 추천: 인기 상위 10개. 무료.
q * | 제목 시작 부분, 2자 이상 |
개발자와 모든 앱: 앱 수(등록 중과 삭제됨), 총 설치 수, 평균 평점, 첫 출시, 카테고리, 웹사이트. Business 요금제: 이메일, 전화번호, 주소, 법인명.
id | 개발자 ID(앱의 developer.id) |
name | 또는 정확한 개발자 이름 |
status | all(기본값), live 또는 removed |
sort | relevance | installs | real_installs | score | ratings | reviews | released | updated | price |
page | 페이지, 1부터 |
per | 페이지당 행 수, 1–100(기본값 20) |
최초 출시일순 신규 앱. 최신순으로 표시됩니다.
since | 이 날짜부터, YYYY-MM-DD(기본값: 7일 전) |
until | 이 날짜까지(해당일 포함) |
category | 카테고리 ID, 예: GAME_PUZZLE(/v1/categories 참고) |
min_installs | 최소 설치 수(Google Play 구간: 1000, 10000…) |
lang | 제목 언어, ISO 코드: en, de, pt… |
sort | relevance | installs | real_installs | score | ratings | reviews | released | updated | price |
page | 페이지, 1부터 |
per | 페이지당 행 수, 1–100(기본값 20) |
Google Play에서 사라진 앱(확인하는 19개 국가 모두에서 없는 앱)을 삭제일순으로 보여 줍니다. 앱 기록에는 마지막 데이터가 남습니다.
since | 이 날짜부터, YYYY-MM-DD(기본값: 7일 전) |
until | 이 날짜까지(해당일 포함) |
category | 카테고리 ID, 예: GAME_PUZZLE(/v1/categories 참고) |
min_installs | 최소 설치 수(Google Play 구간: 1000, 10000…) |
sort | removed_at | installs | score |
page | 페이지, 1부터 |
per | 페이지당 행 수, 1–100(기본값 20) |
언어별 앱 제목의 단어와 구문: 사용하는 앱과 개발자 수, 그중 강한 앱(설치 10만 회 이상) 수, 총 설치 수, 선두 점유율, 기회 점수.
lang | 언어, 기본값 en |
q | 단어 또는 구문 |
phrase | true — 두 단어 구문만, false — 단일 단어만 |
min_apps | 최소 앱 수 |
max_apps | 최대 앱 수 |
sort | opportunity | apps | installs | strong | devs | max_installs |
order | desc | asc |
page | 페이지, 1부터 |
per | 페이지당 행 수, 1–100(기본값 20) |
앱 수와 총 설치 수가 포함된 모든 카테고리. 무료.
status | live(스토어 등록 중, 기본값), removed 또는 all |
개발자 웹사이트 도메인을 등록할 수 있는 앱과 그 앱의 인기도. Pro 요금제 이상.
category | 카테고리 ID, 예: GAME_PUZZLE(/v1/categories 참고) |
min_installs | 최소 설치 수(Google Play 구간: 1000, 10000…) |
status | live(스토어 등록 중, 기본값), removed 또는 all |
tld | 도메인 영역, 예: com |
sort | relevance | installs | real_installs | score | ratings | reviews | released | updated | price |
page | 페이지, 1부터 |
per | 페이지당 행 수, 1–100(기본값 20) |
한 국가와 카테고리의 Google Play 차트: 최대 200위, 이전 스냅샷 대비 순위 변동(change: 상승한 순위 수, 새로 진입하면 "new"), 아이콘, 설치 수.
country * | 국가, ISO 코드: US, DE, BR… |
category * | 카테고리, 예: GAME_PUZZLE |
collection | free | paid | grossing |
page | 페이지, 1부터 |
per | 페이지당 행 수, 1–100(기본값 20) |
최신 스냅샷에서 앱이 올라 있는 모든 차트: 국가, 카테고리, 컬렉션, 순위, 차트 수와 국가 수, 최고 순위.
id * | 앱 패키지 이름 |
country | 한 국가만 |
collection | free | paid | grossing |
Google Play에서 앱이 제공되는 국가(스토어 사이트맵의 hreflang 기준). 190개국 이상이면 목록 없이 worldwide = true가 반환됩니다.
id * | 앱 패키지 이름 |
무료 차트 기반 시장 경쟁도: 상위 100위와 200위 진입 기준(해당 순위 앱의 설치 수), 상위권의 신규 앱(최근 12개월)과 로컬 앱(3개국 이하) 비중, 로컬 시장 규모. 매개변수 없음: 모든 국가, country: 한 국가의 카테고리, category: 모든 국가의 한 카테고리.
country | 국가, ISO 코드 |
category | 카테고리 ID, 예: GAME_PUZZLE(/v1/categories 참고) |
sort | entry100 | entry200 | new_share | local_share | local_apps | local_installs | local_new |
order | desc | asc |
page | 페이지, 1부터 |
per | 페이지당 행 수, 1–100(기본값 20) |
데이터베이스 규모: 스토어의 앱과 삭제된 앱, 개발자, 최근 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;
키는 계정 페이지에서 만들 수 있습니다. 요청은 브라우저에서 바로 전송됩니다. 키는 어디에도 저장되지 않으며 페이지를 새로고침하면 사라집니다. 콘솔에서 보낸 요청도 일반 요청과 동일하게 크레딧을 사용합니다.