Original research · open data
We asked 4,740 live AI-built apps for their private data with no login. 261 answered.
Prbl's research on the security of apps built with Lovable, Bolt, Cursor, Claude and Codex, published as a downloadable dataset. Every app and repo is anonymised. The charts, CSVs and the script that built them are on GitHub under CC BY 4.0.
Part 1: live apps
Over two days in August 2026 we took 4,740 deployed apps from public launch directories, Show HN and builder galleries and did what any visitor's browser does with no session: requested /dashboard, /admin and /account, re-issued each app's own /api endpoints with no auth header, and where the frontend shipped a Supabase anon key, tried a one-row read with that same public key.

261 of 4,740, or 5.5 percent. Every probe was read-only, nothing returned was stored, and no app is named. An app counts as exposed only when its own response proved it: a rendered private view, a records payload, or a successful row read. There is no scanner heuristic between the request and the verdict.
Part 2: repositories
We also statically scanned 2,148 public GitHub repositories built with or by AI tools, in three separately sourced corpora. 551 of them, 25.7 percent, contained at least one high-severity finding. The corpora are not comparable to each other; read each row on its own.

| Group | Repos | With a high finding |
|---|---|---|
| Lovable | 299 | 32.1% |
| Bolt | 329 | 17.9% |
| Show HN repos | 976 | 32.7% |
| Claude Fable 5 | 116 | 13.8% |
| Claude Opus 4.8 | 130 | 16.2% |
| Claude Opus 4.5 | 96 | 17.7% |
| Cursor | 120 | 12.5% |
| OpenAI Codex | 82 | 9.8% |
What the scanner found most

- 276Hardcoded credential in source
- 135Path traversal from user input
- 79Code injection (eval / exec)
- 72Math.random() for a security value
- 49TLS certificate verification disabled
- 46Prototype pollution
- 40SQL injection by string concatenation
Treat the repo rates as upper bounds. They come from a static scanner. High-severity findings in the Lovable and Bolt corpus were manually reviewed and false positives are marked and excluded in the dataset; the other corpora were reviewed in aggregate to fix scanner rules, not individually labelled. The pattern that holds in every group independently: hardcoded secrets sit at or near the top.
Why it keeps happening
Ask an AI tool to add login and it builds the sign-in page, the session, the redirect. That is authentication. The part it routinely skips is authorization: the check that runs after login on every route and every endpoint, including the ones with no visible button. Because the login screen exists, the app feels secure. The insecure version works, so it ships. Same story with the API key pasted inline and meant to be moved later.
Common questions
Is the dataset really anonymous?
Yes. Every app and repo is identified only by a salted SHA-256 hash, and the salt is not published and changes on every build. Files appear only as extensions. The raw inputs that name real apps are not in the repository and will not be shared, because most of the exposed apps are still exposed.
Were the live-app probes an attack?
No. Every probe was a read-only, unauthenticated request of the kind any browser sends: load a route with no session, call an API with no token, read one row with a key the app already ships to visitors. Nothing returned by any probe was stored. An app counts as exposed only when its own response proved it.
Why do the repo numbers differ from earlier Prbl blog posts?
The blog posts used later re-scans after scanner false-positive fixes, which lowered some rates. The public repository publishes the scan output as recorded, with the manual false-positive exclusions for the Lovable and Bolt corpus applied, so anyone can recompute every figure. The README has a reconciliation section.
Can I use the data?
Yes. The data and charts are CC BY 4.0, the build script is MIT. Cite it as Prbl, AI-built app security study, 2026, and link the repository.
The same probes and rules behind these numbers run in the free scanner. Paste a URL or a public repo and find out which side of this your app is on.
Scan my app →Related: the unprotected dashboard study · the same secret kept leaking · Lovable and Bolt scan