Executive summary
A User-Agent is a label, not an identity. Of 12,948 requests carrying recognised AI-crawler names, 10,064 — 77.7% — could not be tied to the claimed provider by available network evidence.
Unverified does not automatically mean malicious. The defensible floor is the 4,355 requests whose targets were themselves sensitive: environment files, credentials, keys, configuration, runtime interfaces, source repositories or deployment files.
What the requests targeted
The largest category was environment-variable discovery. These files commonly contain database URLs, API tokens and service credentials when a system is misconfigured.
Categories are mutually exclusive. Counts cover only unverified AI-labelled requests to explicitly sensitive target patterns.
The exact paths they requested
These are the most frequently requested sensitive paths. They show why the activity is classified as attempted credential discovery rather than ordinary content crawling.
| Requested path | Requests | Source IP identities | Claimed bots | Potential target |
|---|---|---|---|---|
/.env | 87 | 42 | 15 | Environment secrets and database/API credentials |
/.git/HEAD | 81 | 39 | 12 | Repository presence and current branch reference |
/.git/config | 74 | 38 | 13 | Repository remotes and deployment metadata |
/graphql | 71 | 34 | 13 | Queryable application API surface |
/.env.local | 63 | 43 | 13 | Local environment secrets |
/.env.production | 61 | 43 | 13 | Production environment secrets |
/firebase-adminsdk.json | 56 | 36 | 13 | Cloud service-account credentials |
/config.json | 56 | 40 | 13 | Application configuration |
/api/env | 56 | 39 | 13 | Runtime environment exposure |
/.env.development | 56 | 38 | 14 | Development environment secrets |
/.env.bak | 56 | 42 | 14 | Backup copy of environment secrets |
/api/config | 55 | 39 | 13 | Runtime application configuration |
/secrets.json | 51 | 38 | 12 | Generic secret storage file |
/.env.backup | 51 | 42 | 14 | Backup copy of environment secrets |
/service-account.json | 49 | 34 | 12 | Cloud service-account credentials |
/gcp-credentials.json | 47 | 31 | 12 | Google Cloud credentials |
/credentials.json | 47 | 35 | 13 | Generic credentials file |
/actuator/env | 47 | 35 | 13 | Application runtime environment |
/.aws/credentials | 40 | 35 | 17 | AWS access credentials |
Paths are public request targets, not evidence that the corresponding files existed. Representative live checks returned the public homepage fallback.
Which crawler identities were used
The names below are claimed identities, not attribution. A User-Agent string can be copied by any HTTP client.
| Claimed identity | Sensitive-target requests | Source IP identities | Distinct paths |
|---|---|---|---|
| ChatGPT-User | 731 | 60 | 251 |
| Amazonbot | 676 | 17 | 278 |
| Claude-SearchBot | 447 | 11 | 113 |
| OAI-SearchBot | 394 | 38 | 197 |
| GPTBot | 386 | 35 | 186 |
| ClaudeBot | 351 | 34 | 166 |
| PerplexityBot | 338 | 36 | 154 |
Where the unverified traffic came from
7,049 of the 10,064 unverified requests — 70.0% — came from 29 source IP identities on generic Google Cloud infrastructure. Their reverse DNS names ended in .googleusercontent.com.
| Observed network owner | Unverified requests | Source IP identities | Claimed bots |
|---|---|---|---|
| Google LLC | 7,049 | 29 | 18 |
| Infraly, LLC | 1,370 | 13 | 8 |
| Limestone Networks, Inc. | 618 | 4 | 8 |
| Cloudflare, Inc. | 442 | 11 | 14 |
| Cloudflare London, LLC | 105 | 17 | 13 |
| DigitalOcean, LLC | 101 | 3 | 8 |
| Ambyre LLC | 69 | 1 | 8 |
| Rackvolt Cloud Solutions Private Limited | 65 | 1 | 8 |
| NITEX ISP s.r.o. | 57 | 1 | 6 |
Network ownership establishes the hosting environment, not the operator. Cloud providers are shared infrastructure and are not the attacker by default. Cloudflare-origin traffic can also include proxy or synthetic traffic and remains unverified unless provider identity evidence matches.
Did anything leak?
/.env, /.aws/credentials and /.git/config returned the 91,450-byte public homepage HTML, not secrets or source code.The endpoints returned HTTP 200 because the static site fallback served the homepage for unknown paths. The response bodies had the same page title and canonical URL. Their only difference was a per-request Cloudflare challenge identifier.
This matters for interpretation: HTTP 200 in a crawler log does not prove that the requested secret existed or was retrieved.
What leaders should do
- Verify identityCombine User-Agent claims with provider IP ranges, reverse DNS and network ownership evidence.
- Separate analyticsReport verified AI crawlers, unverified claims and security probes as different traffic classes.
- Protect without disappearingReturn real 404/403 responses for sensitive paths while keeping legitimate AI crawler access intentional.
The strategic point: blocking every AI-labelled request can reduce legitimate discovery and citation opportunity. Trusting every AI-labelled request creates security exposure. Identity verification separates the two.
Method and definitions
The study covers requests to the apex host verisai.eu during a 90-day observation window ending 8 September 2026. The bot registry first identified recognised AI crawler User-Agents. VerisAI then evaluated provider identity using the available combination of Cloudflare bot signals, published provider CIDR ranges, reverse DNS, ASN ownership and Cloudflare Radar evidence.
Key definitions
- AI-labelled: the User-Agent matched a recognised AI crawler in the VerisAI registry.
- Provider verified: available network evidence matched the claimed provider with medium or high confidence.
- Unverified: the provider identity could not be confirmed. This is not, by itself, proof of malicious intent.
- Sensitive-target attempt: an unverified request targeted a path associated with credentials, secrets, configuration, source/deployment material or runtime/API inspection.
- Source IP identity: a unique source IP counted through an irreversible hash. Raw IP addresses are not published.
Limitations
- This is a field study of one domain, not an estimate of prevalence across the EU or the wider web.
- One IP may represent multiple systems, and one system may use multiple IPs.
- The study measures requests and observable network evidence; it does not identify human operators.
- The phrase “thieves in disguise” is editorial shorthand for credential-seeking requests using impersonated crawler identities. The measured claim is attempted discovery, not proven theft.
- The remaining 5,709 unverified requests targeted public or other paths and are not automatically classified as malicious.
Use and cite the evidence
Aggregated results are published under CC BY 4.0. Raw IP addresses, request identifiers and full User-Agent strings are withheld.
- JSON dataset
Metadata, findings and tables - CSV target classes
Five target categories - CSV requested paths
Top sensitive paths - CSV networks
Observed network owners - Methodology
Definitions and limitations - SQL queries
Reproducible aggregations
Cite as
VerisAI (2026). EU AI Readiness Observatory, Threat Note 01: Some crawlers are thieves in disguise. 90-day observation ending 8 September 2026. https://verisai.eu/observatory/threat-note-01-ai-crawler-impersonation
Frequently asked questions
What is AI crawler impersonation?
It is a request that claims a known AI crawler identity while the source network cannot be verified as belonging to that provider.
Were the named AI companies responsible?
The evidence does not show that. Their crawler names appeared in copyable User-Agent strings.
What did the requests try to access?
At least 4,355 targeted environment variables, credentials, keys, secrets, application configuration, runtime APIs, source files or deployment files.
Did verisai.eu expose sensitive data?
No leak was found. Representative sensitive URLs returned the public homepage HTML.
Why does this matter for AI visibility?
Verification lets a site keep legitimate AI crawler access open for discovery while treating impersonated identities as untrusted traffic.