Skip to main content
Golux Group

Open data

We ran the production audit over every publicly listed AI-built app we could find

No survey, no opinion piece. Each app was fetched once, from the outside, the way a customer or an attacker would reach it, and scored against the same twenty checks the free audit runs. These are the results, with the method and the sample written down so you can argue with them.

208

apps audited

Last run September 2026

73.6

average score out of 100

Median 75

100%

missing at least one security header

1%

shipped a backend key to the browser

One in this table is one too many

The distribution

Most AI-built apps are not broken. They are unfinished in the same four places.

The scores cluster, and they cluster for a reason: these tools produce a working app and stop at exactly the point where production begins. Nobody chose to skip the security headers — the generator simply had no reason to add them.

A
0 apps · 0%

90–100 — Nothing urgent. Ship, and re-run it after the next big change.

B
194 apps · 93.3%

75–89 — Real findings, none of them bleeding. A week of work, not a rebuild.

C
7 apps · 3.4%

60–74 — Something here will cost you a customer or a night. Fix it before you market.

D
7 apps · 3.4%

40–59 — Data or credentials are exposed, or the app depends on infrastructure you do not own.

F
0 apps · 0%

0–39 — Do not send traffic to this until it is fixed.

What was found, and how often

Every check, ranked by how many apps failed it

Read this as a list of the things nobody tells you to do. The top of it is not where the drama is; the drama is further down, in the handful of apps shipping a key or an open table.

  • Still on the builder's domain

    100%208 apps

  • No clickjacking protection

    100%208 apps

  • No Content-Security-Policy

    99%206 apps

  • Backend reachable directly from the browser

    29.8%62 apps

  • Images served from the builder's CDN, not their own

    2.9%6 apps

  • A database table readable without logging in

    1.9%4 apps

  • First byte slower than 1.5 seconds

    1%2 apps

  • OpenAI API key shipped to the browser

    1%2 apps

  • robots.txt blocks every search engine

    0.5%1 apps

A missing header is a bad afternoon. A service key in the bundle is someone else holding your database. They are in the same table because they were found by the same request.

By builder

Where the apps were built

Platform is detected from the runtime fingerprint and the host, not from what the app says about itself. An app that moved to its own domain is counted as its own domain, which is the correct answer and also why this column is not a league table of tools.

Lovable
208
100% of the sample

Methodology

How this was collected, and what it is not

The uncomfortable parts are in here on purpose. A benchmark whose limits are hidden is marketing, and it would be cited once and then never again.

Only publicly announced apps
URLs came from builder showcases, Product Hunt launches and public 'built with' posts. Nothing anyone sent us privately is in this dataset, and no app is ever named — the stored row is a hash of the URL, the host suffix and the finding codes.
One request, from the outside, rate-limited
Each app was fetched once at no more than one request a second: the home page, the scripts it loads, and the response headers. Nothing was logged into, nothing was submitted, nothing was scanned beyond what a browser downloads to render the page.
The open-table check is a read, never a write
Where a Supabase endpoint is reachable from the browser, one anonymous read is attempted against it. A row that comes back means anyone can read it. Nothing is written, changed, stored or looked at beyond whether a response was returned.
The sample understates the problem
These are apps whose builders were proud enough to publish them, so the set skews to demos, landing pages and portfolios — things with little behind them to expose. The apps founders send us privately, with customers and a database, score materially worse. Treat every number here as a floor.
A single point in time
Each row is one moment. An app fixed the day after it was audited still counts as it was. That is the honest limit of a one-pass crawl, and the reason the set is re-run rather than patched.
The checks are the ones you can run yourself
Same code as the free audit, and the score is a weighted sum of what it found — nothing proprietary, nothing subjective. Run it on your own app and you get a row that would have gone in this table.

Using this

Cite it, link it, argue with it

The numbers are free to quote with a link back to this page. If you are writing about AI-built software and want a cut we have not published — by platform, by finding, by score band — ask and we will run it, because a dataset nobody uses was not worth collecting.

Ask for a cut of the data

Questions

About the data

Is this a hit piece on Lovable, Bolt or v0?
No. These tools do the hard part — they get a working product out of a description, which is genuinely new. What they do not do is the last mile: headers, keys, ownership of your own assets, a database that refuses the wrong reader. That gap is the subject here, not the tools.
How do you detect which builder made an app?
From the host and from runtime fingerprints in the page — the asset paths and scripts a given builder leaves behind. An app that merely mentions a tool is not counted as built with it. Apps on their own domain are recorded as their own domain, because from the outside that is all that can honestly be said.
Did you break into anything?
No. Every request is one a browser makes when it renders the page, plus one anonymous read against a database endpoint the page itself already exposes to every visitor. If that read returns data, the app was publishing it to the whole internet before we arrived.
Will you name the apps?
Never. What is stored is a hash of the URL, the host suffix and the finding codes. There is no list to leak, and we would not publish one if there were.
My app scored badly. Is it actually at risk?
It depends entirely on which findings. A missing header on a portfolio is noise. A readable table on an app with customer data is an incident that has not been noticed yet. Run the audit and read the findings — each one says what it means and how to fix it, and most are fixable without us.
How often is this updated?
Quarterly, as a fresh batch rather than a patch of the old one, so a comparison between two quarters is a comparison of two runs and not of an edited table. The date on this page is the last run.

Next step

The only number on this page that matters is yours

Paste a URL. Thirty seconds, no account, and you get the same checks that produced this table, plus what to do about each one.

The engineering notes

What we find inside AI-built apps.

The findings from the apps we audit, the fixes that worked, and what each one cost — written by the engineers who did the work. No roundups, no reposts.

One email a week. No spam, unsubscribe any time.

Golux Group

Already a client? Golux Club
is where your project lives — tickets, approvals, files, one record.

Open