Documentazione APK API

API REST con dati Google Play: 4 milioni di app, sviluppatori, app nuove e rimosse, parole chiave dei titoli. Formato: JSON, codifica UTF-8, CORS attivo.

Guida rapida

URL di base: https://apkapi.com/api/v1. Registrati, crea una chiave API nel tuo account e invia la tua prima richiesta:

Descrizione dell'API leggibile dalle macchine: OpenAPI 3.1 · Raccolta Postman — importala in Postman, Insomnia o in un generatore di client (openapi-generator) per ottenere un SDK pronto per il tuo linguaggio.

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

I dati coprono oltre 4 milioni di app Google Play dello store statunitense in inglese (da un altro paese se l'app non è disponibile negli USA) e sono aggiornati ogni notte. Le app che spariscono dallo store restano nel database con i loro ultimi dati.

Autenticazione

Ogni richiesta tranne /v1/health deve includere la chiave API in un'intestazione:

X-API-Key: ak_live_…

Accettato anche: Authorization: Bearer …. Non è consentito passare la chiave nei parametri URL: finirebbe nei log e nella cronologia del browser.

Conserva la chiave sul tuo server. Se la inserisci nel JavaScript della pagina, qualsiasi visitatore può copiarla. Fai passare le richieste del frontend dal tuo backend.

Crediti e limiti

Ogni chiamata costa 0–3 crediti secondo l'endpoint, indipendentemente dal numero di righe nella risposta (fino a 100); la chiamata batch apps costa 1 credito per app. Si usano prima i crediti del piano del mese corrente, poi il saldo prepagato. Se una richiesta fallisce per colpa nostra, i crediti vengono restituiti. Piani e pacchetti

IntestazioneSignificato
X-Credits-Costcrediti di questa richiesta
X-Credits-Remainingcrediti rimasti (piano + saldo)
X-CacheHIT — dalla cache (più veloce), MISS — nuova query sull'indice
X-RateLimit-Limit / -Remainingil limite al minuto della chiave e quanto resta
X-Planfree | pro | scale | business

I crediti rimanenti sono anche nel campo _credits di ogni risposta e in /v1/account (gratuito).

Formato delle risposte ed errori

Ogni risposta ha un campo ok. Gli elenchi contengono results, total, page, per, pages. Errore: ok = false, error è la spiegazione, code è un codice leggibile dalle macchine. Le date sono 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. …" }
HTTPcodeQuando
400invalid_param, invalid_requestparametro non valido o mancante
401missing_api_key, invalid_api_keychiave assente o revocata
402insufficient_creditscrediti insufficienti — ricarica o passa a un piano superiore
403account_blocked, plan_requiredl'account è bloccato o l'endpoint richiede un piano superiore
404not_foundl'app o lo sviluppatore non è nel database, oppure l'endpoint è sconosciuto
429rate_limitedlimite di richieste al minuto superato
503service_unavailableproblema temporaneo del database — riprova più tardi; nessun credito addebitato

Endpoint

Tutti gli endpoint sono GET /api/v1/{name}. Paginazione: page (da 1) e per (1–100), fino al 10.000° risultato. Ordinamento: sort + order=asc|desc.

GET/api/v1/accountgratis

Il tuo piano, i crediti del piano e il saldo, la data di azzeramento dei crediti e il limite al minuto.

App
GET/api/v1/app 1 cr.

La scheda completa dell'app: titolo, descrizione, novità, installazioni (soglia e numero esatto), valutazione, numero di valutazioni e recensioni, distribuzione delle stelle, prezzo, acquisti in-app, pubblicità, categoria, classificazione dei contenuti, versione, Android minimo, date di pubblicazione e aggiornamento, icona, screenshot, video, sviluppatore e il suo sito. Per le app rimosse: gli ultimi dati salvati e la data di rimozione.

id *nome del pacchetto dell'app
GET · POST/api/v1/apps 1 credito per app

Fino a 100 app in una chiamata: GET ?ids=a,b,c oppure POST con l'elenco nel corpo (uno per riga o JSON {"ids": […]}). 1 credito per app; gli id che non abbiamo tornano in not_found.

ids *nomi dei pacchetti, separati da virgole, fino a 100
GET/api/v1/suggest gratis

Suggerimenti dall'inizio del titolo: le 10 corrispondenze più popolari. Gratuito.

q *inizio del titolo, 2+ caratteri
Sviluppatori
GET/api/v1/developer 2 cr.

Uno sviluppatore e tutte le sue app: conteggi (nello store e rimosse), installazioni totali, valutazione media, prima pubblicazione, categorie, sito. Nel piano Business: email, telefono, indirizzo e ragione sociale.

idID sviluppatore (dall'app: developer.id)
nameo il nome esatto dello sviluppatore
statusall (predefinito), live o removed
sortrelevance | installs | real_installs | score | ratings | reviews | released | updated | price
pagepagina, da 1
perrighe per pagina, 1–100 (predefinito 20)
Modifiche nello store
GET/api/v1/new 2 cr.

Nuove app per data di prima pubblicazione, le più recenti in alto.

sinceda questa data, AAAA-MM-GG (predefinito: 7 giorni fa)
untilfino a questa data, inclusa
categoryID categoria, es. GAME_PUZZLE (vedi /v1/categories)
min_installsinstallazioni minime (soglie di Google Play: 1000, 10000…)
langlingua del titolo, codice ISO: en, de, pt…
sortrelevance | installs | real_installs | score | ratings | reviews | released | updated | price
pagepagina, da 1
perrighe per pagina, 1–100 (predefinito 20)
GET/api/v1/removed 2 cr.

App sparite da Google Play (assenti in tutti i 19 paesi che controlliamo), per data di rimozione. La scheda conserva gli ultimi dati.

sinceda questa data, AAAA-MM-GG (predefinito: 7 giorni fa)
untilfino a questa data, inclusa
categoryID categoria, es. GAME_PUZZLE (vedi /v1/categories)
min_installsinstallazioni minime (soglie di Google Play: 1000, 10000…)
sortremoved_at | installs | score
pagepagina, da 1
perrighe per pagina, 1–100 (predefinito 20)
Mercato
GET/api/v1/keywords 2 cr.

Parole e frasi dai titoli delle app per ogni lingua: quante app e sviluppatori le usano, quante di queste sono forti (100K+ installazioni), installazioni totali, quota del leader e punteggio di opportunità.

langlingua, predefinita en
qparola o frase
phrasetrue — solo frasi di due parole, false — solo parole singole
min_appsapp minime
max_appsapp massime
sortopportunity | apps | installs | strong | devs | max_installs
orderdesc | asc
pagepagina, da 1
perrighe per pagina, 1–100 (predefinito 20)
GET/api/v1/categories gratis

Tutte le categorie con numero di app e installazioni totali. Gratuito.

statuslive (nello store, predefinito), removed o all
GET/api/v1/free_domains 3 cr.Pro+

App il cui dominio del sito dello sviluppatore è registrabile, con la popolarità dell'app. Piano Pro e superiori.

categoryID categoria, es. GAME_PUZZLE (vedi /v1/categories)
min_installsinstallazioni minime (soglie di Google Play: 1000, 10000…)
statuslive (nello store, predefinito), removed o all
tldzona del dominio, es. com
sortrelevance | installs | real_installs | score | ratings | reviews | released | updated | price
pagepagina, da 1
perrighe per pagina, 1–100 (predefinito 20)
GET/api/v1/charts 2 cr.

Una classifica Google Play per un paese e una categoria: fino a 200 posizioni, variazione rispetto all'istantanea precedente (change: di quanti posti è salita, "new" per i nuovi ingressi), icona e installazioni.

country *paese, codice ISO: US, DE, BR…
category *categoria, es. GAME_PUZZLE
collectionfree | paid | grossing
pagepagina, da 1
perrighe per pagina, 1–100 (predefinito 20)
GET/api/v1/rankings 1 cr.

Tutte le classifiche in cui si trova l'app nell'ultima istantanea: paese, categoria, collezione, posizione; numero di classifiche e paesi e posizione migliore.

id *nome del pacchetto dell'app
countryun solo paese
collectionfree | paid | grossing
GET/api/v1/availability 1 cr.

Paesi in cui l'app è disponibile su Google Play (dagli hreflang della sitemap dello store). Con oltre 190 paesi viene restituito worldwide = true senza elenco.

id *nome del pacchetto dell'app
GET/api/v1/markets 1 cr.

Concorrenza di mercato basata sulle classifiche gratuite: soglia di ingresso per la top 100 e la top 200 (installazioni dell'app in quella posizione), quota di app nuove (ultimi 12 mesi) e locali (≤3 paesi) in classifica e dimensione del mercato locale. Senza parametri: tutti i paesi; country: le categorie di un paese; category: una categoria in tutti i paesi.

countrypaese, codice ISO
categoryID categoria, es. GAME_PUZZLE (vedi /v1/categories)
sortentry100 | entry200 | new_share | local_share | local_apps | local_installs | local_new
orderdesc | asc
pagepagina, da 1
perrighe per pagina, 1–100 (predefinito 20)
GET/api/v1/stats gratis

Dimensione del database: app nello store e rimosse, sviluppatori, nuove e rimosse negli ultimi 7 giorni, ora dell'ultimo aggiornamento. Gratuito.

* — parametro obbligatorio

Esempi di codice

# 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+ (sul server, non nel 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;

Prova

Puoi creare una chiave nel tuo account. La richiesta parte direttamente dal tuo browser. La chiave non viene salvata da nessuna parte e sparisce ricaricando la pagina. Le richieste dalla console consumano crediti come tutte le altre.