How the tool works, what the API keys are for, and how your keys and data are handled.
APKAnalyst is an AI security analyst agent for Android apps. You give it an
.apk; it decompiles the app, investigates it for security issues the way a human
analyst would โ planning, running real static-analysis tools, and reasoning about what it finds โ
and returns a prioritized, structured report.
It is deliberately not a pattern-matching scanner. It is an agent: it decides what to look at next, pulls apart native libraries, verifies its own hypotheses with quoted evidence, and cites the security standard each finding maps to rather than relying on the model's memory.

Every scan runs the same first stage โ extraction โ then hands the facts to the AI:
your APK
โ decompile (jadx + apktool) ยท parse the manifest ยท extract native strings
โผ
extracted facts โโโบ Claude (analysis)
โ agentic mode also uses tools:
โ list_dir ยท read_file ยท grep ยท strings_in_lib ยท search_knowledge
โ findings grounded by โโ RAG knowledge base (OWASP MASVS + methodology)
โผ
structured JSON findings โโโบ prioritized report (view in browser ยท download PDF)
In agentic mode the model runs a tool-driven loop: given a small seed view of the app plus a toolbox, it decides what to read, grep, or disassemble next. When it has investigated thoroughly it stops, and a final structured pass emits the report against a strict schema โ severity ยท OWASP Mobile category ยท CWE ยท location ยท evidence ยท exploit path ยท fix ยท cited standards.
All analysis runs on the server; the browser only uploads the APK, shows live progress, and renders the finished report.
Queueing: this server runs one scan at a time. If a scan is already running when you start, yours waits in a queue and begins automatically when the current one finishes โ so at busy times there may be a delay before it starts. The progress view shows your position in the queue (e.g. "#2 in queue"); just leave the page open.
Scheduled maintenance: when an update is planned, a banner appears on the main page showing the date and time (in your local timezone and in UTC). An update restarts the service and will interrupt a scan that is running at that moment, so please avoid starting a scan right before the announced time.
| Mode | What it does | Speed / cost | Grounding |
|---|---|---|---|
| Full agentic recommended |
The tool-driven agent investigates the decompiled code across many steps, verifying each finding against the real bytecode. | A few minutes; higher cost โ typically ~$1.20โ1.50 per scan (many model calls). | Yes โ calls search_knowledge (needs a Voyage key + a built index). |
| Single-call | One structured pass over the extracted facts. Fewer, shallower findings โ good for a quick look. | ~15โ30s; low cost โ roughly ~$0.10 (one call). | No retrieval step; uses no Voyage key. |
Agentic mode consistently finds more real issues because it verifies rather than guesses โ in our case study it caught the same headline issues as single-call plus three extra code-level bugs, and retracted a false positive single-call had asserted.
Costs are rough estimates that vary with app size, and are billed to whichever API key runs the scan (yours if you provide one).
Without a Voyage key an agentic scan still runs fully โ it explores the app with tools and reports โ but the knowledge base is not consulted at all (no MASVS/methodology retrieval and no citations); the agent falls back on its own knowledge plus the methodology built into its prompt. Single-call mode never uses the knowledge base either. So the practical difference between single-call and an ungrounded agentic scan is the agentic loop's tool exploration (reading files, grep, disassembling native libs) โ not the knowledge base.
APKAnalyst doesn't run its own AI model โ it calls hosted APIs. Two keys are involved:
This powers the analysis itself: the reasoning, the tool-use loop, and the final structured report are all Claude calls. No Anthropic key (in the form or on the server) means no scan. Get an Anthropic key โ
This powers RAG grounding. In agentic mode the agent's search_knowledge
tool turns its query into an embedding (a numeric vector) using Voyage AI, then finds the most relevant
OWASP MASVS controls and methodology notes by meaning. Those become the citations attached to each
finding.
Voyage's embedding usage is generous, but the throttle depends on whether the account has a payment method:
| Account | Rate limit | What you feel |
|---|---|---|
| Free tier, no card | 3 requests/min ยท 10K tokens/min | Each search_knowledge call may wait ~a minute, so an agentic scan feels slow
(long silent gaps in the console). |
| Free tier, payment method added | Throttle removed | Retrieval is near-instant. You still get Voyage's large free token allowance โ the whole corpus plus a scan's queries is tiny. |
We want to be precise here rather than reassuring, because your API key is a sensitive secret.
This service runs on your keys: an Anthropic key is required for every scan, and a Voyage key is optional (it enables grounded citations). There is no shared server key โ if you don't supply an Anthropic key, the scan won't start.
.env once at startup. After adding
or changing a key there, restart the server (Ctrl+C and relaunch) โ a running
process won't pick up the change.
Whenever you hand an API key to any hosted tool โ this one included โ reduce what a leak could cost you:
.apk files.Findings are grounded in a local vector knowledge base with two roles:
The corpus is embedded once with Voyage AI into a small local vector store; at analysis time the agent retrieves the most relevant controls/notes by meaning and records them on each finding. As a guard against the model inventing a citation, any cited standard that isn't actually in the corpus is dropped before the report is shown โ so every citation you see is a real, resolvable reference.
APKAnalyst is open to run locally. It needs jadx, apktool, and
strings on the server's PATH, plus Python dependencies.
pip install -r requirements.txt
cp .env.example .env # add ANTHROPIC_API_KEY (and VOYAGE_API_KEY for grounding)
python3 run.py --build-kb # build the RAG index once
python3 -m uvicorn webapp.server:app --port 8077
Then open http://127.0.0.1:8077. With no methodology notes the index builds
MASVS-only and the tool still works โ findings just cite MASVS. Full setup details,
including how to add your own methodology notes, are in the project README and
playbook/README.md.
The project's source code is released under the PolyForm Noncommercial License 1.0.0 โ that governs reuse of the code; use of this hosted service is governed by the terms on this page.
Attribution. The knowledge base is built from OWASP MASVS, MASWE and MASTG, ยฉ the OWASP Foundation, used under CC BY-SA 4.0. Decompilation uses jadx and Apktool (Apache-2.0). These projects do not endorse this service.
Questions or a removal request can be directed to the site operator at access_request@apkanalyst.com.