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.
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.
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
| Intestazione | Significato |
|---|---|
X-Credits-Cost | crediti di questa richiesta |
X-Credits-Remaining | crediti rimasti (piano + saldo) |
X-Cache | HIT — dalla cache (più veloce), MISS — nuova query sull'indice |
X-RateLimit-Limit / -Remaining | il limite al minuto della chiave e quanto resta |
X-Plan | free | pro | scale | business |
I crediti rimanenti sono anche nel campo _credits di ogni risposta e in /v1/account (gratuito).
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. …" }
| HTTP | code | Quando |
|---|---|---|
| 400 | invalid_param, invalid_request | parametro non valido o mancante |
| 401 | missing_api_key, invalid_api_key | chiave assente o revocata |
| 402 | insufficient_credits | crediti insufficienti — ricarica o passa a un piano superiore |
| 403 | account_blocked, plan_required | l'account è bloccato o l'endpoint richiede un piano superiore |
| 404 | not_found | l'app o lo sviluppatore non è nel database, oppure l'endpoint è sconosciuto |
| 429 | rate_limited | limite di richieste al minuto superato |
| 503 | service_unavailable | problema temporaneo del database — riprova più tardi; nessun credito addebitato |
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.
Il tuo piano, i crediti del piano e il saldo, la data di azzeramento dei crediti e il limite al minuto.
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 |
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 |
Ricerca e filtri su tutto il database. Serve almeno un filtro. Senza q i risultati sono ordinati per installazioni.
q | parole da cercare nel titolo, nella descrizione e nel nome dello sviluppatore |
category | ID categoria, es. GAME_PUZZLE (vedi /v1/categories) |
developer_id | ID sviluppatore Google Play |
min_installs | installazioni minime (soglie di Google Play: 1000, 10000…) |
max_installs | installazioni massime |
min_score | valutazione minima, 0–5 |
min_ratings | valutazioni minime |
free | true — solo gratuite, false — solo a pagamento |
ads | true — con pubblicità, false — senza |
iap | true — con acquisti in-app |
lang | lingua del titolo, codice ISO: en, de, pt… |
released_from | pubblicate da questa data, AAAA-MM-GG |
released_to | pubblicate fino a questa data, inclusa |
updated_from | aggiornate da questa data |
updated_to | aggiornate fino a questa data, inclusa |
status | live (nello store, predefinito), removed o all |
sort | relevance | installs | real_installs | score | ratings | reviews | released | updated | price |
order | desc | asc |
page | pagina, da 1 |
per | righe per pagina, 1–100 (predefinito 20) |
Suggerimenti dall'inizio del titolo: le 10 corrispondenze più popolari. Gratuito.
q * | inizio del titolo, 2+ caratteri |
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.
id | ID sviluppatore (dall'app: developer.id) |
name | o il nome esatto dello sviluppatore |
status | all (predefinito), live o removed |
sort | relevance | installs | real_installs | score | ratings | reviews | released | updated | price |
page | pagina, da 1 |
per | righe per pagina, 1–100 (predefinito 20) |
Nuove app per data di prima pubblicazione, le più recenti in alto.
since | da questa data, AAAA-MM-GG (predefinito: 7 giorni fa) |
until | fino a questa data, inclusa |
category | ID categoria, es. GAME_PUZZLE (vedi /v1/categories) |
min_installs | installazioni minime (soglie di Google Play: 1000, 10000…) |
lang | lingua del titolo, codice ISO: en, de, pt… |
sort | relevance | installs | real_installs | score | ratings | reviews | released | updated | price |
page | pagina, da 1 |
per | righe per pagina, 1–100 (predefinito 20) |
App sparite da Google Play (assenti in tutti i 19 paesi che controlliamo), per data di rimozione. La scheda conserva gli ultimi dati.
since | da questa data, AAAA-MM-GG (predefinito: 7 giorni fa) |
until | fino a questa data, inclusa |
category | ID categoria, es. GAME_PUZZLE (vedi /v1/categories) |
min_installs | installazioni minime (soglie di Google Play: 1000, 10000…) |
sort | removed_at | installs | score |
page | pagina, da 1 |
per | righe per pagina, 1–100 (predefinito 20) |
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à.
lang | lingua, predefinita en |
q | parola o frase |
phrase | true — solo frasi di due parole, false — solo parole singole |
min_apps | app minime |
max_apps | app massime |
sort | opportunity | apps | installs | strong | devs | max_installs |
order | desc | asc |
page | pagina, da 1 |
per | righe per pagina, 1–100 (predefinito 20) |
Tutte le categorie con numero di app e installazioni totali. Gratuito.
status | live (nello store, predefinito), removed o all |
App il cui dominio del sito dello sviluppatore è registrabile, con la popolarità dell'app. Piano Pro e superiori.
category | ID categoria, es. GAME_PUZZLE (vedi /v1/categories) |
min_installs | installazioni minime (soglie di Google Play: 1000, 10000…) |
status | live (nello store, predefinito), removed o all |
tld | zona del dominio, es. com |
sort | relevance | installs | real_installs | score | ratings | reviews | released | updated | price |
page | pagina, da 1 |
per | righe per pagina, 1–100 (predefinito 20) |
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 |
collection | free | paid | grossing |
page | pagina, da 1 |
per | righe per pagina, 1–100 (predefinito 20) |
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 |
country | un solo paese |
collection | free | paid | grossing |
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 |
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.
country | paese, codice ISO |
category | ID categoria, es. GAME_PUZZLE (vedi /v1/categories) |
sort | entry100 | entry200 | new_share | local_share | local_apps | local_installs | local_new |
order | desc | asc |
page | pagina, da 1 |
per | righe per pagina, 1–100 (predefinito 20) |
Dimensione del database: app nello store e rimosse, sviluppatori, nuove e rimosse negli ultimi 7 giorni, ora dell'ultimo aggiornamento. Gratuito.
* — parametro obbligatorio
# 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;
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.