Документация APK Surge

REST API с данными Google Play: 4 млн приложений, разработчики, новые и удалённые приложения, ключевые слова названий. Формат — JSON, кодировка UTF-8, CORS включён.

Быстрый старт

Базовый адрес: https://apksurge.com/api/v1. Зарегистрируйтесь, создайте API-ключ в кабинете и отправьте первый запрос:

Машинное описание API: OpenAPI 3.1 · коллекция Postman — импортируйте в Postman, Insomnia или генератор клиентов (openapi-generator) и получите готовый SDK для своего языка.

curl -H "X-API-Key: ВАШ_КЛЮЧ" "https://apksurge.com/api/v1/app?id=com.whatsapp"

Данные — более 4 млн приложений 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 — машинный код. Даты — ISO 8601 в UTC.

{ "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 токен за каждое приложение; ненайденные возвращаются в not_found.

ids *названия пакетов через запятую, до 100
GET/api/v1/suggest бесплатно

Подсказки по началу названия: 10 самых популярных совпадений. Бесплатно.

q *начало названия, от 2 символов
Разработчики
GET/api/v1/developer 2 ток.

Разработчик и все его приложения: количество (в магазине и удалённых), суммарные установки, средняя оценка, первый релиз, категории, сайт. На тарифе Business — email, телефон, адрес и юридическое название.

idID разработчика (из карточки приложения: 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до даты включительно
categoryID категории, напр. 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до даты включительно
categoryID категории, напр. 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 ток.

Слова и фразы из названий приложений отдельно для каждого языка: сколько приложений и разработчиков их используют, сколько из них сильных (100 тыс.+ установок), суммарные установки, доля лидера и оценка возможности (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 ток.после первой покупки

Приложения, у которых домен сайта разработчика свободен для регистрации, с популярностью приложения. Открывается после первой покупки токенов.

categoryID категории, напр. 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 (по hreflang в sitemap магазина). Если стран 190+, возвращается worldwide = true без списка.

id *название пакета приложения
GET/api/v1/markets 1 ток.

Конкуренция рынков по бесплатным чартам: порог входа в топ-100 и топ-200 (установки приложения на этом месте), доля новых (за 12 месяцев) и локальных (≤3 страны) приложений в топе, размер локального рынка. Без параметров — все страны; country — категории одной страны; category — одна категория во всех странах.

countryстрана, ISO-код
categoryID категории, напр. 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://apksurge.com/api/v1/app?id=org.telegram.messenger"

# curl — puzzle games with 10M+ installs, best rated first
curl -H "X-API-Key: $KEY" "https://apksurge.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://apksurge.com/api/v1/apps"
# Python — apps removed from Google Play this week
import os, requests
r = requests.get("https://apksurge.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://apksurge.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://apksurge.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;

Попробовать

Ключ можно создать в кабинете. Запрос отправляется прямо из вашего браузера. Ключ нигде не сохраняется и исчезает после перезагрузки страницы. Запросы из консоли тратят токены так же, как обычные.