Is this app asking for more than it should?
Paste an app's permissions and broadcast receivers to see whether they are unusual for apps in the same Google Play genre.
Check an app
Your result appears here
You will see whether the app is flagged and which requests stood out. To try it now, load one of the example apps below.
Example apps to try
Load an app to fill the form with its genre and permissions, or copy its list to use elsewhere.
| App | Genre | Names | Actions |
|---|
Get the list from an APK
-
Get the APK
From a phone, print the path of the installed app, then pull the file. From your own project, use the APK in your build output.
adb shell pm path com.example.app adb pull /data/app/.../base.apk app.apk -
Read its manifest
With the Android SDK command-line tools installed:
apkanalyzer manifest print app.apk > manifest.xmlAlternatives:
apktool d app.apkwrites a readableAndroidManifest.xml, andaapt2 dump permissions app.apkprints the permissions only. -
Paste it above
Paste the whole manifest, or one name per line, choose the app's Google Play category as the genre and press Check app. We read the
uses-permissionnames and the actions declared insidereceiverelements. Receivers that an app registers in code while it runs are not in the manifest and cannot be seen.Paste the complete list. A partial list can give a misleading result.
API
Accounts with extended access can run the same check from their own scripts and tools. Checks through the API count toward the same daily allowance as checks on this page.
Send a check
curl https://check.crisplab.net/api/v1/check \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"genre": "tools",
"permissions": ["INTERNET", "CAMERA", "READ_CONTACTS"]}'
Instead of permissions you can send "manifest" with the whole
AndroidManifest.xml as a string. Genres:
entertainment (Entertainment), healthfitness (Health & Fitness), personalization (Personalization), photography (Photography), tools (Tools).
The answer, for example
{"verdict": "unusual", "band": 2, "top_share": 10,
"unexpected": ["READ_CONTACTS"], "genre": "Tools",
"n_names": 3, "n_recognized": 3, "n_unrecognized": 0,
"plan": "monthly", "limit": 50, "remaining": 49,
"reset_at": "2026-10-22T00:00:00Z"}
band runs from 0 (typical) to 3 (very unusual). top_share is 1, 5, 10 or 25 when the
app is among that share of the most unusual apps in its genre, otherwise null.
GET /api/v1/usage shows how many checks are left today. Errors come with a
code: api_key (401), payment_required (402) and limit (429).
Your API keys
API keys come with extended access. Ask for it through the form below.
| Name | Key | Last used | Actions |
|---|
Copy your new key now. For your safety it is shown only once.
More checks, company use and consultation
Used your 5 free checks and need more, want access for a team, or need help applying this to your own apps or data? Tell us what you need and we will reply by email.