The AI builder defect index

How often each check found a problem in scans run on xlogs.com, grouped by the AI builder platform an app appears to use. Every rate says what it is out of, which dates it covers and how often the check could run. Our own test scans are left out from October 19, 2026. When there is not enough data to say something honestly, this page says so instead of showing a number.

October 19, 2026 to today

28 completed scans of addresses that are not ours. A site scanned twice counts twice, so every figure here is a share of scans, not of sites. A check completes when it reaches an answer; scans where it did not apply or could not finish are left out of its rate and show up in its coverage instead. A rate appears only where a check completed at least 30 times on a platform.

Not identified28 completed scans
  • Private files public24 completed checks so far; a rate needs 30. It completed in 24 of 28 scans.not enough data
  • Source code downloadable7 completed checks so far; a rate needs 30. It completed in 7 of 28 scans.not enough data
  • Scripts from compromised or look-alike hosts24 completed checks so far; a rate needs 30. It completed in 24 of 28 scans.not enough data
  • Dependency list public24 completed checks so far; a rate needs 30. It completed in 24 of 28 scans.not enough data
  • No email spoofing protection17 completed checks so far; a rate needs 30. It completed in 17 of 28 scans.not enough data
  • Secret key in the browser9 completed checks so far; a rate needs 30. It completed in 9 of 28 scans.not enough data
  • Missing security headers24 completed checks so far; a rate needs 30. It completed in 24 of 28 scans.not enough data
  • Database readable by anyone0 completed checks so far; a rate needs 30. It completed in 0 of 28 scans.not enough data
  • Dangling DNS28 completed checks so far; a rate needs 30. It completed in 28 of 28 scans.not enough data
  • Other addresses on the domain17 completed checks so far; a rate needs 30. It completed in 17 of 28 scans.not enough data

Before October 19, 2026: totals only

Until October 19, 2026 these counters also counted our own test scans: mostly a deliberately vulnerable test app we scan after every release, plus scans of xlogs.com itself. They were not recorded separately, so they cannot be taken out exactly, and we do not publish an estimate in their place. The totals below stay as recorded. No rates are shown for this period, because our own test scans cannot be taken out of them; October's figure for databases readable by anyone came mostly from our test app's open tables.

  • August 202675 completed scans
  • September 2026132 completed scans
  • October 1 to 19, 2026220 completed scans

The running total of counted scans keeps these months as recorded. Nothing on this site publishes it as a usage figure.

Repository scans, October 2026 so far

The same counting applied to the repo scanner: 56 completed repository scans in this period. A repository scanned twice counts twice. Every check runs on every repository scan, so each rate is out of that ecosystem's scans. These counts can include our own checks of public repositories after a release; telling those apart needs a mark only our own runs can carry, which is not built yet. No repository names are stored or published, ever.

npm27 scans
  • Runs a script when you install it27 scans so far; a rate needs 30.not enough data
  • Poisoned AI-instruction file27 scans so far; a rate needs 30.not enough data
  • Contacts a known exfiltration channel27 scans so far; a rate needs 30.not enough data
  • A real secret committed in the code27 scans so far; a rate needs 30.not enough data
  • Dependency from a git or archive source27 scans so far; a rate needs 30.not enough data
  • CI runs untrusted PR code with secrets27 scans so far; a rate needs 30.not enough data
  • Decodes and runs a hidden payload27 scans so far; a rate needs 30.not enough data
  • Reads local credentials or cloud metadata27 scans so far; a rate needs 30.not enough data
Other25 scans
  • CI runs untrusted PR code with secrets25 scans so far; a rate needs 30.not enough data
  • Poisoned AI-instruction file25 scans so far; a rate needs 30.not enough data
  • A real secret committed in the code25 scans so far; a rate needs 30.not enough data
  • Contacts a known exfiltration channel25 scans so far; a rate needs 30.not enough data
  • Decodes and runs a hidden payload25 scans so far; a rate needs 30.not enough data
  • Runs a script when you install it25 scans so far; a rate needs 30.not enough data
  • Reads local credentials or cloud metadata25 scans so far; a rate needs 30.not enough data
  • Dependency from a git or archive source25 scans so far; a rate needs 30.not enough data
Python2 scans
  • A real secret committed in the code2 scans so far; a rate needs 30.not enough data
  • Contacts a known exfiltration channel2 scans so far; a rate needs 30.not enough data
  • Dependency from a git or archive source2 scans so far; a rate needs 30.not enough data
  • CI runs untrusted PR code with secrets2 scans so far; a rate needs 30.not enough data
  • Reads local credentials or cloud metadata2 scans so far; a rate needs 30.not enough data
  • Decodes and runs a hidden payload2 scans so far; a rate needs 30.not enough data
  • Runs a script when you install it2 scans so far; a rate needs 30.not enough data
  • Poisoned AI-instruction file2 scans so far; a rate needs 30.not enough data
Go1 scan
  • A real secret committed in the code1 scan so far; a rate needs 30.not enough data
  • Decodes and runs a hidden payload1 scan so far; a rate needs 30.not enough data
  • Contacts a known exfiltration channel1 scan so far; a rate needs 30.not enough data
  • CI runs untrusted PR code with secrets1 scan so far; a rate needs 30.not enough data
  • Reads local credentials or cloud metadata1 scan so far; a rate needs 30.not enough data
  • Dependency from a git or archive source1 scan so far; a rate needs 30.not enough data
  • Poisoned AI-instruction file1 scan so far; a rate needs 30.not enough data
  • Runs a script when you install it1 scan so far; a rate needs 30.not enough data
Rust1 scan
  • Runs a script when you install it1 scan so far; a rate needs 30.not enough data
  • CI runs untrusted PR code with secrets1 scan so far; a rate needs 30.not enough data
  • Reads local credentials or cloud metadata1 scan so far; a rate needs 30.not enough data
  • Dependency from a git or archive source1 scan so far; a rate needs 30.not enough data
  • Contacts a known exfiltration channel1 scan so far; a rate needs 30.not enough data
  • A real secret committed in the code1 scan so far; a rate needs 30.not enough data
  • Poisoned AI-instruction file1 scan so far; a rate needs 30.not enough data
  • Decodes and runs a hidden payload1 scan so far; a rate needs 30.not enough data

What is counted, and what is not

A scan is counted when it was started on xlogs.com and finished with a report for a site that answered. A scan that could not reach the site, was refused or failed is not counted.

For each counted scan we add one to counters for the month: which builder platform the app appears to use; for each check, whether it found something, found nothing, did not apply or could not finish; for a check that could not finish, a coarse reason such as timed out or blocked; which technologies the scan observed, by name and by how sure the detection was; which rule for the security badge the scan reached; and a coarse bucket for how long it took. We also keep a running total of counted scans.

Scans of our own test targets, the deliberately vulnerable app we scan after every release and xlogs.com itself, go to a separate internal tally with the same counts, and into nothing published here. That is decided on our server from the address that was scanned. Until October 19, 2026 they were counted with everyone else's.

We do not store the URL, the hostname, an IP address, a timestamp finer than the month, any finding detail, or any data from your app. There is no identifier of any kind in this, so there is nothing that could be traced back to a person or an app. See the privacy policy for the full statement.

We will never publish a list of affected sites. This index is counts only. Naming a stranger's app because our scanner found something would be the same adversarial disclosure we refuse to do anywhere else.

What these numbers can and cannot tell you

They are counts of scans, not of sites: a site scanned ten times counts ten times, and with no site identifier stored there is no way to tell. They cover whoever chose to point xlogs at something, so they are not a census of AI-built apps, and for many scans the builder cannot be identified at all. A rate here says how often a check found a problem in the scans it completed on, during the dates shown, and nothing wider.

What they can offer that a vendor's numbers cannot: the scanner is free and needs no account, so the sample is not limited to people who already bought a security tool. That makes it different, not representative.

Add your app to the count

Free and read-only. A completed scan adds one anonymous count and nothing else.