URL base: https://apiapk.cc/api/v1. Regístrate, crea una clave API en tu cuenta y envía tu primera solicitud:
Descripción de la API legible por máquina: OpenAPI 3.1 · colección de Postman — impórtala en Postman, Insomnia o un generador de clientes (openapi-generator) y obtendrás un SDK listo para tu lenguaje.
curl -H "X-API-Key: TU_CLAVE" "https://apiapk.cc/api/v1/app?id=com.whatsapp"
Los datos cubren más de 4 millones de apps de Google Play de la tienda de EE. UU. en inglés (de otro país si la app no está en EE. UU.), actualizados cada noche. Las apps que desaparecen de la tienda permanecen en la base con sus últimos datos.
Toda solicitud, salvo /v1/health, debe incluir la clave API en una cabecera:
X-API-Key: ak_live_…
También se acepta: Authorization: Bearer …. No se permite pasar la clave en los parámetros de la URL: acabaría en los registros y en el historial del navegador.
Cada llamada cuesta 0–3 créditos según el endpoint, sin importar cuántas filas devuelva (hasta 100); la llamada por lotes apps cuesta 1 crédito por app. Primero se gastan los créditos del plan del mes en curso y luego el saldo prepago. Si la solicitud falla por nuestra parte, los créditos se devuelven. Planes y paquetes
| Cabecera | Significado |
|---|---|
X-Credits-Cost | créditos que costó esta solicitud |
X-Credits-Remaining | créditos restantes (plan + saldo) |
X-Cache | HIT — servido desde la caché (más rápido), MISS — consulta nueva al índice |
X-RateLimit-Limit / -Remaining | el límite por minuto de la clave y lo que queda |
X-Plan | free | pro | scale | business |
Tus créditos restantes también aparecen en el campo _credits de cada respuesta y en /v1/account (gratis).
Cada respuesta tiene el campo ok. Las listas contienen results, total, page, per, pages. Error: ok = false, error es la explicación, code es un código para máquinas. Las fechas son ISO 8601 en 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 | Cuándo |
|---|---|---|
| 400 | invalid_param, invalid_request | parámetro no válido o ausente |
| 401 | missing_api_key, invalid_api_key | sin clave o la clave está revocada |
| 402 | insufficient_credits | créditos insuficientes: recarga o mejora tu plan |
| 403 | account_blocked, plan_required | la cuenta está bloqueada o el endpoint requiere un plan superior |
| 404 | not_found | la app o el desarrollador no está en la base, o el endpoint no existe |
| 429 | rate_limited | se superó el límite de solicitudes por minuto |
| 503 | service_unavailable | problema temporal de la base: reinténtalo más tarde; no se cobran créditos |
Todos los endpoints son GET /api/v1/{nombre}. Paginación: page (desde 1) y per (1–100), hasta el resultado 10.000. Orden: sort + order=asc|desc.
Tu plan, créditos del plan y saldo, la fecha de renovación de créditos y el límite por minuto.
La ficha completa de la app: título, descripción, novedades, instalaciones (umbral y número exacto), valoración, número de valoraciones y reseñas, distribución de estrellas, precio, compras, anuncios, categoría, clasificación por edad, versión, Android mínimo, fechas de lanzamiento y actualización, icono, capturas, vídeo, desarrollador y su sitio. Para las eliminadas: los últimos datos guardados y la fecha de desaparición.
id * | nombre de paquete de la app |
Hasta 100 apps en una solicitud: GET ?ids=a,b,c o POST con la lista en el cuerpo (una por línea o JSON {"ids": […]}). 1 crédito por app; las que no encontramos vuelven en not_found.
ids * | nombres de paquete separados por comas, hasta 100 |
Búsqueda y filtros en toda la base. Se necesita al menos un filtro. Sin q, se ordena por instalaciones.
q | palabras a buscar en el título, la descripción y el nombre del desarrollador |
category | ID de categoría, p. ej. GAME_PUZZLE (ver /v1/categories) |
developer_id | ID del desarrollador en Google Play |
min_installs | mínimo de instalaciones (umbrales de Google Play: 1000, 10000…) |
max_installs | máximo de instalaciones |
min_score | valoración mínima, 0–5 |
min_ratings | mínimo de valoraciones |
free | true — solo gratis, false — solo de pago |
ads | true — con anuncios, false — sin |
iap | true — con compras en la app |
lang | idioma del título, código ISO: en, de, pt… |
released_from | lanzadas desde esta fecha, YYYY-MM-DD |
released_to | lanzadas hasta esta fecha inclusive |
updated_from | actualizadas desde esta fecha |
updated_to | actualizadas hasta esta fecha inclusive |
status | live (en la tienda, por defecto), removed o all |
sort | relevance | installs | real_installs | score | ratings | reviews | released | updated | price |
order | desc | asc |
page | página, desde 1 |
per | filas por página, 1–100 (por defecto 20) |
Sugerencias por el inicio del título: las 10 coincidencias más populares. Gratis.
q * | inicio del título, 2+ caracteres |
Un desarrollador y todas sus apps: número (en la tienda y eliminadas), instalaciones totales, valoración media, primer lanzamiento, categorías, sitio. En el plan Business: email, teléfono, dirección y razón social.
id | ID del desarrollador (de la ficha de una app: developer.id) |
name | o el nombre exacto del desarrollador |
status | all (por defecto), live o removed |
sort | relevance | installs | real_installs | score | ratings | reviews | released | updated | price |
page | página, desde 1 |
per | filas por página, 1–100 (por defecto 20) |
Apps nuevas por fecha del primer lanzamiento, las más recientes primero.
since | desde esta fecha, YYYY-MM-DD (por defecto, hace 7 días) |
until | hasta esta fecha inclusive |
category | ID de categoría, p. ej. GAME_PUZZLE (ver /v1/categories) |
min_installs | mínimo de instalaciones (umbrales de Google Play: 1000, 10000…) |
lang | idioma del título, código ISO: en, de, pt… |
sort | relevance | installs | real_installs | score | ratings | reviews | released | updated | price |
page | página, desde 1 |
per | filas por página, 1–100 (por defecto 20) |
Apps que desaparecieron de Google Play (ausentes en los 19 países que comprobamos), por fecha de desaparición. La ficha conserva los últimos datos.
since | desde esta fecha, YYYY-MM-DD (por defecto, hace 7 días) |
until | hasta esta fecha inclusive |
category | ID de categoría, p. ej. GAME_PUZZLE (ver /v1/categories) |
min_installs | mínimo de instalaciones (umbrales de Google Play: 1000, 10000…) |
sort | removed_at | installs | score |
page | página, desde 1 |
per | filas por página, 1–100 (por defecto 20) |
Palabras y frases de títulos de apps por idioma: cuántas apps y desarrolladores las usan, cuántas son fuertes (100 mil+ instalaciones), instalaciones totales, cuota del líder y una puntuación de oportunidad.
lang | idioma, por defecto en |
q | palabra o frase |
phrase | true — solo frases de dos palabras, false — solo palabras sueltas |
min_apps | mínimo de apps |
max_apps | máximo de apps |
sort | opportunity | apps | installs | strong | devs | max_installs |
order | desc | asc |
page | página, desde 1 |
per | filas por página, 1–100 (por defecto 20) |
Todas las categorías con número de apps e instalaciones totales. Gratis.
status | live (en la tienda, por defecto), removed o all |
Apps cuyo dominio del sitio del desarrollador está libre para registrar, con la popularidad de la app. Plan Pro o superior.
category | ID de categoría, p. ej. GAME_PUZZLE (ver /v1/categories) |
min_installs | mínimo de instalaciones (umbrales de Google Play: 1000, 10000…) |
status | live (en la tienda, por defecto), removed o all |
tld | zona de dominio, p. ej. com |
sort | relevance | installs | real_installs | score | ratings | reviews | released | updated | price |
page | página, desde 1 |
per | filas por página, 1–100 (por defecto 20) |
Un ranking de Google Play de un país y categoría: hasta 200 posiciones, cambio de puesto desde la captura anterior (change: cuántos puestos subió, "new" para las nuevas), icono e instalaciones.
country * | país, código ISO: US, DE, BR… |
category * | categoría, p. ej. GAME_PUZZLE |
collection | free | paid | grossing |
page | página, desde 1 |
per | filas por página, 1–100 (por defecto 20) |
Todos los rankings en los que está la app en la última captura: país, categoría, colección, puesto; número de rankings y países y mejor puesto.
id * | nombre de paquete de la app |
country | solo un país |
collection | free | paid | grossing |
Países donde la app está disponible en Google Play (según hreflang del sitemap de la tienda). Con 190+ países se devuelve worldwide = true sin lista.
id * | nombre de paquete de la app |
Competencia por mercado según los rankings gratuitos: umbral de entrada al top 100 y top 200 (instalaciones de la app en esa posición), cuota de apps nuevas (12 meses) y locales (≤3 países) en el top y tamaño del mercado local. Sin parámetros: todos los países; country: las categorías de un país; category: una categoría en todos los países.
country | país, código ISO |
category | ID de categoría, p. ej. GAME_PUZZLE (ver /v1/categories) |
sort | entry100 | entry200 | new_share | local_share | local_apps | local_installs | local_new |
order | desc | asc |
page | página, desde 1 |
per | filas por página, 1–100 (por defecto 20) |
Tamaño de la base: apps en la tienda y eliminadas, desarrolladores, nuevas y eliminadas en 7 días, hora de la última actualización. Gratis.
* — parámetro obligatorio
# curl — one app
curl -H "X-API-Key: $KEY" "https://apiapk.cc/api/v1/app?id=org.telegram.messenger"
# curl — puzzle games with 10M+ installs, best rated first
curl -H "X-API-Key: $KEY" "https://apiapk.cc/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://apiapk.cc/api/v1/apps"
# Python — apps removed from Google Play this week
import os, requests
r = requests.get("https://apiapk.cc/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+ (en el servidor, no en el navegador)
const res = await fetch("https://apiapk.cc/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://apiapk.cc/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;
Puedes crear una clave en tu cuenta. La solicitud va directamente desde tu navegador. La clave no se guarda en ningún sitio y desaparece al recargar la página. Las solicitudes desde la consola gastan créditos como cualquier otra.