APKAnalyst โ€” Documentation

How the tool works, what the API keys are for, and how your keys and data are handled.

1. What APKAnalyst is

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.

2. How a scan works

APKAnalyst demo: drag an APK, watch the agent scan, read the report

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.

3. Scan modes

ModeWhat it doesSpeed / costGrounding
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.

4. Why it needs API keys

APKAnalyst doesn't run its own AI model โ€” it calls hosted APIs. Two keys are involved:

Anthropic API key required

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 โ†—

Voyage API key optional ยท agentic only

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.

Get a Voyage key โ†—

5. The Voyage key: free vs paid

Voyage's embedding usage is generous, but the throttle depends on whether the account has a payment method:

AccountRate limitWhat 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.
The throttle is a Voyage account setting, not something the tool controls. Adding a payment method to whichever Voyage account's key is used is what removes it. Supplying your own Voyage key here only speeds things up if your account is card-backed; a card-less free key hits the same 3 req/min limit as any other.

6. How your keys are handled

We want to be precise here rather than reassuring, because your API key is a sensitive secret.

Where a key you paste goes

Be clear-eyed: this is not "client-side only." Because the scan runs on the server, your key does travel to and briefly live in the server's memory โ€” it has to, to make the API calls. Any hosted tool that runs the work for you is ultimately "trust the operator." Treat the key-handling promises above as exactly that: a promise about how this server behaves, not a guarantee the code can prove to you from the browser. The safest posture is in ยง7.

Bring-your-own-key (required)

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.

Self-hosting note. Keys are read from .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.

7. Protecting yourself (recommended)

Whenever you hand an API key to any hosted tool โ€” this one included โ€” reduce what a leak could cost you:

  • Create a dedicated key just for this, separate from any production key.
  • Cap its spend / rate limit where the provider allows (Anthropic and Voyage both let you set per-key limits), so an unexpected loop or leak can't run up a large bill.
  • Revoke it when you're done. A one-off scan doesn't need a long-lived key โ€” delete it afterward from the Anthropic / Voyage dashboard.
  • Never reuse a key that has broad access to other projects or billing.

8. Your APK & your data

9. Grounding & citations

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.

10. Running it yourself

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.

12. Privacy & data

Questions or a removal request can be directed to the site operator at access_request@apkanalyst.com.

APKAnalyst โ€” an AI security analyst agent for Android APKs ยท Back to the scanner
Built on jadx, Apktool, Voyage AI, and Anthropic Claude ยท grounded in OWASP MASVS, MASWE & MASTG.