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.
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.
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łówek | Znaczenie |
|---|---|
X-Tokens-Cost | ile tokenów kosztowało to żądanie |
X-Tokens-Remaining | ile tokenów zostało (miesięczne + kupione) |
X-Cache | HIT — odpowiedź z pamięci podręcznej (szybciej), MISS — nowe zapytanie do indeksu |
X-RateLimit-Limit / -Remaining | limit żądań na minutę dla klucza i pozostała liczba |
X-Plan | free | 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ą.
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. …" }
| HTTP | code | Kiedy występuje |
|---|---|---|
| 400 | invalid_param, invalid_request | nieprawidłowy lub brakujący parametr |
| 401 | missing_api_key, invalid_api_key | brak klucza lub klucz został odwołany |
| 402 | insufficient_credits | za mało tokenów — kup pakiet |
| 403 | account_blocked, plan_required | konto jest zablokowane albo endpoint odblokowuje się po pierwszym zakupie tokenów |
| 404 | not_found | aplikacji lub dewelopera nie ma w bazie albo endpoint jest nieznany |
| 429 | rate_limited | przekroczono limit żądań na minutę |
| 503 | service_unavailable | tymczasowy problem z bazą — spróbuj później; tokeny nie są pobierane |
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.
Twój plan, saldo tokenów, data odnowienia miesięcznych tokenów i limit na minutę.
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 |
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 |
Wyszukiwanie i filtry w całej bazie. Wymagany jest co najmniej jeden filtr. Bez q sortowanie odbywa się według instalacji.
q | słowa do wyszukania w nazwie, opisie i nazwie dewelopera |
category | ID kategorii, np. GAME_PUZZLE (zob. /v1/categories) |
developer_id | ID dewelopera w Google Play |
min_installs | minimum instalacji (progi Google Play: 1000, 10000…) |
max_installs | maksimum instalacji |
min_score | minimalna ocena, 0–5 |
min_ratings | minimum ocen |
free | true — tylko darmowe, false — tylko płatne |
ads | true — z reklamami, false — bez |
iap | true — z zakupami w aplikacji |
lang | język nazwy, kod ISO: en, de, pt… |
released_from | wydane od tej daty, YYYY-MM-DD |
released_to | wydane do tej daty włącznie |
updated_from | zaktualizowane od tej daty |
updated_to | zaktualizowane do tej daty włącznie |
status | live (w sklepie, domyślnie), removed lub all |
sort | relevance | installs | real_installs | score | ratings | reviews | released | updated | price |
order | desc | asc |
page | strona, od 1 |
per | wierszy na stronie, 1–100 (domyślnie 20) |
Podpowiedzi według początku nazwy: 10 najpopularniejszych dopasowań. Bezpłatnie.
q * | początek nazwy, od 2 znaków |
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.
id | ID dewelopera (z karty aplikacji: developer.id) |
name | lub dokładna nazwa dewelopera |
status | all (domyślnie), live lub removed |
sort | relevance | installs | real_installs | score | ratings | reviews | released | updated | price |
page | strona, od 1 |
per | wierszy na stronie, 1–100 (domyślnie 20) |
Nowe aplikacje według daty pierwszego wydania, najnowsze na początku.
since | od tej daty, YYYY-MM-DD (domyślnie 7 dni temu) |
until | do tej daty włącznie |
category | ID kategorii, np. GAME_PUZZLE (zob. /v1/categories) |
min_installs | minimum instalacji (progi Google Play: 1000, 10000…) |
lang | język nazwy, kod ISO: en, de, pt… |
sort | relevance | installs | real_installs | score | ratings | reviews | released | updated | price |
page | strona, od 1 |
per | wierszy na stronie, 1–100 (domyślnie 20) |
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.
since | od tej daty, YYYY-MM-DD (domyślnie 7 dni temu) |
until | do tej daty włącznie |
category | ID kategorii, np. GAME_PUZZLE (zob. /v1/categories) |
min_installs | minimum instalacji (progi Google Play: 1000, 10000…) |
sort | removed_at | installs | score |
page | strona, od 1 |
per | wierszy na stronie, 1–100 (domyślnie 20) |
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).
lang | język, domyślnie en |
q | słowo lub fraza |
phrase | true — tylko frazy dwuwyrazowe, false — tylko pojedyncze słowa |
min_apps | minimum aplikacji |
max_apps | maksimum aplikacji |
sort | opportunity | apps | installs | strong | devs | max_installs |
order | desc | asc |
page | strona, od 1 |
per | wierszy na stronie, 1–100 (domyślnie 20) |
Wszystkie kategorie z liczbą aplikacji i łącznymi instalacjami. Bezpłatnie.
status | live (w sklepie, domyślnie), removed lub all |
Aplikacje, których domena strony dewelopera jest wolna do rejestracji, wraz z popularnością aplikacji. Dostępne po pierwszym zakupie tokenów.
category | ID kategorii, np. GAME_PUZZLE (zob. /v1/categories) |
min_installs | minimum instalacji (progi Google Play: 1000, 10000…) |
status | live (w sklepie, domyślnie), removed lub all |
tld | strefa domenowa, np. com |
sort | relevance | installs | real_installs | score | ratings | reviews | released | updated | price |
page | strona, od 1 |
per | wierszy na stronie, 1–100 (domyślnie 20) |
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 |
collection | free | paid | grossing |
page | strona, od 1 |
per | wierszy na stronie, 1–100 (domyślnie 20) |
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 |
country | tylko jeden kraj |
collection | free | paid | grossing |
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 |
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.
country | kraj, kod ISO |
category | ID kategorii, np. GAME_PUZZLE (zob. /v1/categories) |
sort | entry100 | entry200 | new_share | local_share | local_apps | local_installs | local_new |
order | desc | asc |
page | strona, od 1 |
per | wierszy na stronie, 1–100 (domyślnie 20) |
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
# 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;
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.