Dokumentation der APK API

REST-API mit Google-Play-Daten: 4 Millionen Apps, Entwickler, neue und entfernte Apps, Titel-Keywords. Format JSON, Kodierung UTF-8, CORS aktiviert.

Schnellstart

Basis-URL: https://apkapi.com/api/v1. Registrieren Sie sich, erstellen Sie einen API-Schlüssel in Ihrem Konto und senden Sie Ihre erste Anfrage:

Maschinenlesbare API-Beschreibung: OpenAPI 3.1 · Postman-Collection — in Postman, Insomnia oder einen Client-Generator (openapi-generator) importieren und ein fertiges SDK für Ihre Sprache erhalten.

curl -H "X-API-Key: IHR_SCHLUESSEL" "https://apkapi.com/api/v1/app?id=com.whatsapp"

Die Daten umfassen über 4 Millionen Google-Play-Apps aus dem US-Store auf Englisch (aus einem anderen Land, falls eine App in den USA nicht verfügbar ist), nächtlich aktualisiert. Apps, die aus dem Store verschwinden, bleiben mit ihren letzten Daten in der Datenbank.

Authentifizierung

Jede Anfrage außer /v1/health muss den API-Schlüssel in einem Header enthalten:

X-API-Key: ak_live_…

Ebenfalls akzeptiert: Authorization: Bearer …. Der Schlüssel darf nicht in URL-Parametern übergeben werden: Er würde in Logs und im Browserverlauf landen.

Bewahren Sie den Schlüssel auf Ihrem Server auf. Steht er im JavaScript der Seite, kann ihn jeder Besucher kopieren. Leiten Sie Frontend-Anfragen über Ihr Backend.

Credits & Limits

Jeder Aufruf kostet je nach Endpunkt 0–3 Credits, unabhängig von der Anzahl der Zeilen in der Antwort (bis 100); der Sammelaufruf apps kostet 1 Credit pro App. Zuerst werden die Tarif-Credits des laufenden Monats verbraucht, dann das Prepaid-Guthaben. Schlägt eine Anfrage auf unserer Seite fehl, werden die Credits erstattet. Tarife & Pakete

HeaderBedeutung
X-Credits-CostCredits, die diese Anfrage gekostet hat
X-Credits-Remainingverbleibende Credits (Tarif + Guthaben)
X-CacheHIT — aus dem Cache (schneller), MISS — neue Abfrage an den Index
X-RateLimit-Limit / -Remainingdas Minutenlimit des Schlüssels und der Rest
X-Planfree | pro | scale | business

Ihre verbleibenden Credits stehen auch im Feld _credits jeder Antwort und unter /v1/account (kostenlos).

Antwortformat und Fehler

Jede Antwort hat das Feld ok. Listen enthalten results, total, page, per, pages. Fehler: ok = false, error ist die Erklärung, code ein maschinenlesbarer Code. Datumsangaben sind ISO 8601 in UTC.

{ "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. …" }
HTTPcodeWann
400invalid_param, invalid_requestungültiger oder fehlender Parameter
401missing_api_key, invalid_api_keykein Schlüssel oder Schlüssel widerrufen
402insufficient_creditsnicht genug Credits — Guthaben aufladen oder Tarif upgraden
403account_blocked, plan_requireddas Konto ist gesperrt oder der Endpunkt erfordert einen höheren Tarif
404not_foundApp oder Entwickler nicht in der Datenbank, oder unbekannter Endpunkt
429rate_limitedAnfragelimit pro Minute überschritten
503service_unavailablevorübergehendes Datenbankproblem — später erneut versuchen; es werden keine Credits berechnet

Endpunkte

Alle Endpunkte sind GET /api/v1/{name}. Paginierung: page (ab 1) und per (1–100), bis zum 10.000. Ergebnis. Sortierung: sort + order=asc|desc.

GET/api/v1/accountkostenlos

Ihr Tarif, Tarif-Credits und Guthaben, das Datum der Credit-Erneuerung und das Minutenlimit.

Apps
GET/api/v1/app 1 Cr.

Der vollständige App-Eintrag: Titel, Beschreibung, Neuigkeiten, Installationen (Schwelle und genaue Zahl), Bewertung, Anzahl der Bewertungen und Rezensionen, Sterneverteilung, Preis, In-App-Käufe, Werbung, Kategorie, Altersfreigabe, Version, minimales Android, Veröffentlichungs- und Update-Datum, Icon, Screenshots, Video, Entwickler und seine Website. Bei entfernten Apps: die zuletzt gespeicherten Daten und das Entfernungsdatum.

id *Paketname der App
GET · POST/api/v1/apps 1 Credit pro App

Bis zu 100 Apps in einem Aufruf: GET ?ids=a,b,c oder POST mit der Liste im Body (eine pro Zeile oder JSON {"ids": […]}). 1 Credit pro App; nicht gefundene stehen in not_found.

ids *Paketnamen, kommagetrennt, bis 100
GET/api/v1/suggest kostenlos

Vorschläge nach Titelanfang: die 10 beliebtesten Treffer. Kostenlos.

q *Titelanfang, ab 2 Zeichen
Entwickler
GET/api/v1/developer 2 Cr.

Ein Entwickler und alle seine Apps: Anzahl (im Store und entfernt), Installationen gesamt, Durchschnittsbewertung, erste Veröffentlichung, Kategorien, Website. Im Business-Tarif: E-Mail, Telefon, Adresse und Firmenname.

idEntwickler-ID (aus einer App: developer.id)
nameoder der genaue Entwicklername
statusall (Standard), live oder removed
sortrelevance | installs | real_installs | score | ratings | reviews | released | updated | price
pageSeite, ab 1
perZeilen pro Seite, 1–100 (Standard 20)
Änderungen im Store
GET/api/v1/new 2 Cr.

Neue Apps nach Datum der Erstveröffentlichung, neueste zuerst.

sinceab Datum, YYYY-MM-DD (Standard: vor 7 Tagen)
untilbis einschließlich Datum
categoryKategorie-ID, z. B. GAME_PUZZLE (siehe /v1/categories)
min_installsMindestinstallationen (Google-Play-Schwellen: 1000, 10000…)
langTitelsprache, ISO-Code: en, de, pt…
sortrelevance | installs | real_installs | score | ratings | reviews | released | updated | price
pageSeite, ab 1
perZeilen pro Seite, 1–100 (Standard 20)
GET/api/v1/removed 2 Cr.

Apps, die aus Google Play verschwunden sind (in allen 19 geprüften Ländern nicht vorhanden), nach Entfernungsdatum. Der Eintrag behält die letzten Daten.

sinceab Datum, YYYY-MM-DD (Standard: vor 7 Tagen)
untilbis einschließlich Datum
categoryKategorie-ID, z. B. GAME_PUZZLE (siehe /v1/categories)
min_installsMindestinstallationen (Google-Play-Schwellen: 1000, 10000…)
sortremoved_at | installs | score
pageSeite, ab 1
perZeilen pro Seite, 1–100 (Standard 20)
Markt
GET/api/v1/keywords 2 Cr.

Wörter und Phrasen aus App-Titeln je Sprache: wie viele Apps und Entwickler sie nutzen, wie viele davon stark sind (100 Tsd.+ Installationen), Installationen gesamt, Anteil des Marktführers und ein Opportunity-Score.

langSprache, Standard en
qWort oder Phrase
phrasetrue — nur Zwei-Wort-Phrasen, false — nur einzelne Wörter
min_appsMindestanzahl Apps
max_appsmaximale Anzahl Apps
sortopportunity | apps | installs | strong | devs | max_installs
orderdesc | asc
pageSeite, ab 1
perZeilen pro Seite, 1–100 (Standard 20)
GET/api/v1/categories kostenlos

Alle Kategorien mit Anzahl der Apps und Installationen gesamt. Kostenlos.

statuslive (im Store, Standard), removed oder all
GET/api/v1/free_domains 3 Cr.Pro+

Apps, deren Website-Domain des Entwicklers frei registrierbar ist, mit der Beliebtheit der App. Tarif Pro und höher.

categoryKategorie-ID, z. B. GAME_PUZZLE (siehe /v1/categories)
min_installsMindestinstallationen (Google-Play-Schwellen: 1000, 10000…)
statuslive (im Store, Standard), removed oder all
tldDomain-Endung, z. B. com
sortrelevance | installs | real_installs | score | ratings | reviews | released | updated | price
pageSeite, ab 1
perZeilen pro Seite, 1–100 (Standard 20)
GET/api/v1/charts 2 Cr.

Ein Google-Play-Chart für ein Land und eine Kategorie: bis zu 200 Plätze, Platzveränderung seit dem vorherigen Stand (change: um wie viele Plätze gestiegen, "new" für Neueinsteiger), Icon und Installationen.

country *Land, ISO-Code: US, DE, BR…
category *Kategorie, z. B. GAME_PUZZLE
collectionfree | paid | grossing
pageSeite, ab 1
perZeilen pro Seite, 1–100 (Standard 20)
GET/api/v1/rankings 1 Cr.

Alle Charts mit der App im letzten Stand: Land, Kategorie, Kollektion, Platz; Anzahl der Charts und Länder und bester Platz.

id *Paketname der App
countrynur ein Land
collectionfree | paid | grossing
GET/api/v1/availability 1 Cr.

Länder, in denen die App bei Google Play verfügbar ist (laut hreflang in der Store-Sitemap). Bei 190+ Ländern wird worldwide = true ohne Liste zurückgegeben.

id *Paketname der App
GET/api/v1/markets 1 Cr.

Marktwettbewerb auf Basis der kostenlosen Charts: Einstiegsschwelle für Top 100 und Top 200 (Installationen der App auf diesem Platz), Anteil neuer (12 Monate) und lokaler (≤3 Länder) Apps in den Top-Plätzen und Größe des lokalen Markts. Ohne Parameter: alle Länder; country: die Kategorien eines Landes; category: eine Kategorie in allen Ländern.

countryLand, ISO-Code
categoryKategorie-ID, z. B. GAME_PUZZLE (siehe /v1/categories)
sortentry100 | entry200 | new_share | local_share | local_apps | local_installs | local_new
orderdesc | asc
pageSeite, ab 1
perZeilen pro Seite, 1–100 (Standard 20)
GET/api/v1/stats kostenlos

Größe der Datenbank: Apps im Store und entfernte, Entwickler, neue und entfernte der letzten 7 Tage, Zeit der letzten Aktualisierung. Kostenlos.

* — Pflichtparameter

Codebeispiele

# 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+ (auf dem Server — nicht im Browser)
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;

Ausprobieren

Einen Schlüssel erstellen Sie in Ihrem Konto. Die Anfrage geht direkt von Ihrem Browser aus. Der Schlüssel wird nirgends gespeichert und ist nach dem Neuladen der Seite weg. Anfragen aus der Konsole verbrauchen Credits wie alle anderen.