Dokumentacja APK Surge

REST API z danymi Google Play: 4 mln aplikacji, deweloperzy, nowe i usunięte aplikacje, słowa kluczowe z nazw. Format: JSON, kodowanie UTF-8, CORS włączony.

Szybki start

Adres bazowy: https://apksurge.com/api/v1. Zarejestruj się, utwórz klucz API w koncie i wyślij pierwsze żądanie:

Opis API do odczytu maszynowego: OpenAPI 3.1 · kolekcja Postman — zaimportuj do Postmana, Insomnii lub generatora klientów (openapi-generator) i otrzymasz gotowe SDK dla swojego języka.

curl -H "X-API-Key: TWÓJ_KLUCZ" "https://apksurge.com/api/v1/app?id=com.whatsapp"

Dane obejmują ponad 4 mln aplikacji Google Play z amerykańskiej wersji sklepu po angielsku (jeśli aplikacji tam nie ma — z innego kraju), odświeżane co noc. Aplikacje, które zniknęły ze sklepu, zostają w bazie z ostatnimi danymi.

Autoryzacja

Każde żądanie poza /v1/health musi zawierać klucz API w nagłówku:

X-API-Key: ak_live_…

Akceptowane także: Authorization: Bearer …. Nie wolno przekazywać klucza w parametrach URL: trafiłby do logów i historii przeglądarki.

Trzymaj klucz na swoim serwerze. Jeśli umieścisz go w JavaScripcie na stronie, każdy odwiedzający będzie mógł go skopiować. Żądania z frontendu kieruj przez własny backend.

Tokeny i limity

Każde wywołanie kosztuje 0–3 tokeny w zależności od endpointu, niezależnie od liczby wierszy w odpowiedzi (do 100); zbiorcze żądanie apps — 1 token za aplikację. Najpierw zużywane są tokeny miesięczne, potem kupione. Jeśli żądanie nie powiodło się z naszej strony, tokeny są zwracane. Plany i pakiety

NagłówekZnaczenie
X-Tokens-Costile tokenów kosztowało to żądanie
X-Tokens-Remainingile tokenów zostało (miesięczne + kupione)
X-CacheHIT — odpowiedź z pamięci podręcznej (szybciej), MISS — nowe zapytanie do indeksu
X-RateLimit-Limit / -Remaininglimit żądań na minutę dla klucza i pozostała liczba
X-Planfree | pro | business

Pozostałe tokeny znajdziesz też w polu _tokens każdej odpowiedzi oraz w /v1/account (bezpłatnie). Stare nazwy _credits i X-Credits-* są przestarzałe, ale na razie działają.

Format odpowiedzi i błędy

Każda odpowiedź zawiera pole ok. Listy zawierają results, total, page, per, pages. Błąd: ok = false, error — wyjaśnienie, code — kod maszynowy. Daty w formacie ISO 8601 w 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. …" }
HTTPcodeKiedy występuje
400invalid_param, invalid_requestnieprawidłowy lub brakujący parametr
401missing_api_key, invalid_api_keybrak klucza lub klucz został odwołany
402insufficient_creditsza mało tokenów — kup pakiet
403account_blocked, plan_requiredkonto jest zablokowane albo endpoint odblokowuje się po pierwszym zakupie tokenów
404not_foundaplikacji lub dewelopera nie ma w bazie albo endpoint jest nieznany
429rate_limitedprzekroczono limit żądań na minutę
503service_unavailabletymczasowy problem z bazą — spróbuj później; tokeny nie są pobierane

Endpointy

Wszystkie endpointy to GET /api/v1/{nazwa}. Paginacja: page (od 1) i per (1–100), nie dalej niż do 10 000. wyniku. Sortowanie: sort + order=asc|desc.

GET/api/v1/accountbezpłatnie

Twój plan, saldo tokenów, data odnowienia miesięcznych tokenów i limit na minutę.

Aplikacje
GET/api/v1/app 1 tok.

Pełna karta aplikacji: nazwa, opis, „Co nowego”, instalacje (próg i dokładna liczba), ocena, liczba ocen i opinii, rozkład gwiazdek, cena, zakupy, reklamy, kategoria, klasyfikacja wiekowa, wersja, minimalny Android, daty wydania i aktualizacji, ikona, zrzuty ekranu, wideo, deweloper i jego strona. Dla usuniętych — ostatnie zapisane dane i data usunięcia.

id *nazwa pakietu aplikacji
GET · POST/api/v1/apps 1 token za aplikację

Do 100 kart aplikacji jednym żądaniem: GET ?ids=a,b,c lub POST z listą w treści (po jednej w wierszu albo JSON {"ids": […]}). 1 token za każdą aplikację; nieznalezione trafiają do not_found.

ids *nazwy pakietów po przecinku, do 100
GET/api/v1/suggest bezpłatnie

Podpowiedzi według początku nazwy: 10 najpopularniejszych dopasowań. Bezpłatnie.

q *początek nazwy, od 2 znaków
Deweloperzy
GET/api/v1/developer 2 tok.

Deweloper i wszystkie jego aplikacje: liczba (w sklepie i usuniętych), łączne instalacje, średnia ocena, pierwsze wydanie, kategorie, strona. W planie Business — e-mail, telefon, adres i nazwa prawna.

idID dewelopera (z karty aplikacji: developer.id)
namelub dokładna nazwa dewelopera
statusall (domyślnie), live lub removed
sortrelevance | installs | real_installs | score | ratings | reviews | released | updated | price
pagestrona, od 1
perwierszy na stronie, 1–100 (domyślnie 20)
Zmiany w sklepie
GET/api/v1/new 2 tok.

Nowe aplikacje według daty pierwszego wydania, najnowsze na początku.

sinceod tej daty, YYYY-MM-DD (domyślnie 7 dni temu)
untildo tej daty włącznie
categoryID kategorii, np. GAME_PUZZLE (zob. /v1/categories)
min_installsminimum instalacji (progi Google Play: 1000, 10000…)
langjęzyk nazwy, kod ISO: en, de, pt…
sortrelevance | installs | real_installs | score | ratings | reviews | released | updated | price
pagestrona, od 1
perwierszy na stronie, 1–100 (domyślnie 20)
GET/api/v1/removed 2 tok.

Aplikacje, które zniknęły z Google Play (nie ma ich w żadnym z 19 sprawdzanych przez nas krajów), według daty usunięcia. Karta zachowuje ostatnie dane.

sinceod tej daty, YYYY-MM-DD (domyślnie 7 dni temu)
untildo tej daty włącznie
categoryID kategorii, np. GAME_PUZZLE (zob. /v1/categories)
min_installsminimum instalacji (progi Google Play: 1000, 10000…)
sortremoved_at | installs | score
pagestrona, od 1
perwierszy na stronie, 1–100 (domyślnie 20)
Rynek
GET/api/v1/keywords 2 tok.

Słowa i frazy z nazw aplikacji osobno dla każdego języka: ile aplikacji i deweloperów z nich korzysta, ile z nich jest silnych (100 tys.+ instalacji), łączne instalacje, udział lidera i ocena szansy (opportunity).

langjęzyk, domyślnie en
qsłowo lub fraza
phrasetrue — tylko frazy dwuwyrazowe, false — tylko pojedyncze słowa
min_appsminimum aplikacji
max_appsmaksimum aplikacji
sortopportunity | apps | installs | strong | devs | max_installs
orderdesc | asc
pagestrona, od 1
perwierszy na stronie, 1–100 (domyślnie 20)
GET/api/v1/categories bezpłatnie

Wszystkie kategorie z liczbą aplikacji i łącznymi instalacjami. Bezpłatnie.

statuslive (w sklepie, domyślnie), removed lub all
GET/api/v1/free_domains 3 tok.po pierwszym zakupie

Aplikacje, których domena strony dewelopera jest wolna do rejestracji, wraz z popularnością aplikacji. Dostępne po pierwszym zakupie tokenów.

categoryID kategorii, np. GAME_PUZZLE (zob. /v1/categories)
min_installsminimum instalacji (progi Google Play: 1000, 10000…)
statuslive (w sklepie, domyślnie), removed lub all
tldstrefa domenowa, np. com
sortrelevance | installs | real_installs | score | ratings | reviews | released | updated | price
pagestrona, od 1
perwierszy na stronie, 1–100 (domyślnie 20)
GET/api/v1/charts 2 tok.

Ranking top Google Play dla jednego kraju i jednej kategorii: do 200 pozycji, zmiana miejsca względem poprzedniego stanu (change: o ile pozycji w górę, "new" — nowość w rankingu), ikona i instalacje.

country *kraj, kod ISO: US, DE, BR…
category *kategoria, np. GAME_PUZZLE
collectionfree | paid | grossing
pagestrona, od 1
perwierszy na stronie, 1–100 (domyślnie 20)
GET/api/v1/rankings 1 tok.

Wszystkie rankingi, w których aplikacja jest w ostatnim stanie: kraj, kategoria, kolekcja, pozycja; liczba rankingów, krajów i najlepsze miejsce.

id *nazwa pakietu aplikacji
countrytylko jeden kraj
collectionfree | paid | grossing
GET/api/v1/availability 1 tok.

Kraje, w których aplikacja jest dostępna w Google Play (według hreflang w sitemapie sklepu). Gdy krajów jest 190+, zwracane jest worldwide = true bez listy.

id *nazwa pakietu aplikacji
GET/api/v1/markets 1 tok.

Konkurencyjność rynków na podstawie rankingów darmowych: próg wejścia do top 100 i top 200 (instalacje aplikacji na tym miejscu), udział nowych (z 12 miesięcy) i lokalnych (≤3 kraje) aplikacji w topie, wielkość rynku lokalnego. Bez parametrów — wszystkie kraje; country — kategorie jednego kraju; category — jedna kategoria we wszystkich krajach.

countrykraj, kod ISO
categoryID kategorii, np. GAME_PUZZLE (zob. /v1/categories)
sortentry100 | entry200 | new_share | local_share | local_apps | local_installs | local_new
orderdesc | asc
pagestrona, od 1
perwierszy na stronie, 1–100 (domyślnie 20)
GET/api/v1/stats bezpłatnie

Rozmiar bazy: aplikacje w sklepie i usunięte, deweloperzy, nowe i usunięte w ciągu 7 dni, czas ostatniej aktualizacji. Bezpłatnie.

* — parametr wymagany

Przykłady kodu

# 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+ (na serwerze — nie w przeglądarce)
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;

Wypróbuj

Klucz możesz utworzyć w koncie. Żądanie jest wysyłane prosto z Twojej przeglądarki. Klucz nie jest nigdzie zapisywany i znika po odświeżeniu strony. Żądania z konsoli zużywają tokeny tak samo jak zwykłe.