Skip to content

AI Detections

WebDecoy provides comprehensive detection of AI-related activity on your website, including server-side AI crawlers, client-side browser extensions, LLM referral tracking, and suspicious signals that indicate AI-assisted browsing.

For the crawl-to-referral model and reporting capabilities, see the AI Traffic product overview.

AI activity falls into six main categories:

Category Detection Method Needs a server-side sensor? Examples
AI Scrapers User-Agent analysis Yes GPTBot, ClaudeBot, CCBot
AI Browser Plugins DOM/JavaScript analysis No Claude extension, ChatGPT sidebar
Vision AI Bots Form behavior analysis No Claude Computer Use, Stagehand, Browser Use
LLM Referrals Referrer header analysis No Visitors clicking links shared by ChatGPT, Perplexity, Claude
AI Tools Behavioral signals No Automated form filling, content extraction
Suspicious Signals API monitoring No Wrapped fetch, modified observers
┌─────────────────────────────────────────────────────────────────┐
│ AI DETECTION LAYERS │
├─────────────────────────────────────────────────────────────────┤
│ │
│ SERVER-SIDE CLIENT-SIDE (Pro) │
│ ─────────── ───────────────── │
│ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ AI Scrapers │ │ Browser Plugins │ │
│ │ (User-Agent) │ │ (DOM Detection) │ │
│ └────────┬────────┘ └────────┬────────┘ │
│ │ │ │
│ │ ┌────────┴────────┐ │
│ │ │ Vision AI Bots │ │
│ │ │ (Form Behavior)│ │
│ │ └────────┬────────┘ │
│ ▼ ▼ │
│ ┌─────────────────┐ ┌─────────────────┐ │
│ │ AI Scraper │ │ AI Plugin + │ │
│ │ Score (0-100) │ │ Vision Flags │ │
│ └────────┬────────┘ └────────┬────────┘ │
│ │ │ │
│ └──────────────┬───────────────┘ │
│ ▼ │
│ ┌─────────────────┐ │
│ │ Detection │ │
│ │ Record │ │
│ └─────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘

AI scrapers are bots that crawl websites to collect content for training AI models. WebDecoy detects these through User-Agent analysis and assigns an AI Scraper Score.

These crawlers explicitly collect content for AI/ML model training:

Crawler Company Score User-Agent Pattern Purpose
GPTBot OpenAI 85 GPTBot/1.0 Training ChatGPT and GPT models
ChatGPT-User OpenAI 85 ChatGPT-User ChatGPT plugins and browsing
OAI-SearchBot OpenAI 80 OAI-SearchBot SearchGPT content retrieval
ClaudeBot Anthropic 85 ClaudeBot Training Claude models
Anthropic Anthropic 85 anthropic-ai Anthropic’s general crawler
CCBot Common Crawl 80 CCBot/2.0 Open dataset for AI training
Google-Extended Google 80 Google-Extended Gemini/Bard AI training
PerplexityBot Perplexity 80 PerplexityBot Perplexity AI search
Cohere Cohere 80 cohere-ai Cohere model training
ByteSpider ByteDance 75 Bytespider TikTok/Douyin AI features
Meta-ExternalAgent Meta 75 Meta-ExternalAgent Meta AI training
Applebot-Extended Apple 75 Applebot-Extended Apple Intelligence training
YouBot You.com 75 YouBot You.com AI search
Amazonbot Amazon 70 Amazonbot Alexa and Amazon AI
FacebookBot Meta 70 facebookexternalhit Facebook AI features
Diffbot Diffbot 70 Diffbot Knowledge graph extraction

Traditional search engines that may also feed AI features:

Crawler Company Score User-Agent Pattern Note
Googlebot Google 30 Googlebot Primary search indexing
Bingbot Microsoft 30 bingbot Bing search + Copilot
DuckDuckBot DuckDuckGo 30 DuckDuckBot Privacy-focused search
Applebot Apple 30 Applebot Siri and Spotlight
YandexBot Yandex 35 YandexBot Russian search + AI
Baiduspider Baidu 40 Baiduspider Chinese search + AI
Crawler Company Score User-Agent Pattern
Semrush Semrush 35 SemrushBot
Ahrefs Ahrefs 35 AhrefsBot
MJ12bot Majestic 30 MJ12bot
DotBot Moz 30 DotBot

Detected when used for scraping:

Library Pattern Score
Python Requests python-requests 25
Go HTTP Client Go-http-client 25
Java HTTP Client Apache-HttpClient 25
cURL curl/ 20
Wget Wget/ 20
Scrapy Scrapy 40

Individual crawler hits land in the Detections table like anything else, but the report built for them is AI Crawlers & Agents (AI Crawlers in the sidebar, at /verified-agents). It answers a question a score alone cannot: whether the crawler was who it said it was.

Requests that claimed a known agent are split three ways, at the request level:

Bucket Meaning
Proven a Web Bot Auth signature verified, or the address matched the operator’s published ranges with forward-confirmed reverse DNS
Unproven the claim stands alone, with nothing corroborating it either way
Forged the claim was made and the proof failed, which is an impersonation attempt

The report’s Overview carries those totals for the whole property, its Agents tab breaks them down per crawler, and its Handshakes tab reports clients whose TLS handshake contradicts the identity they claimed. See Verified Agents for how each proof is produced.

A GPTBot row with a high AI scraper score therefore means two different things depending on which bucket it fell into, and only the report tells you which.


WebDecoy’s Detection Script detects AI browser extensions installed by visitors. These extensions inject DOM elements, global variables, and content scripts that can be identified.

High-confidence detection of major AI assistant extensions:

Extension Detection Flags Score Impact
Claude Extension claude_extension +15 points
ChatGPT Extension chatgpt_extension +15 points
GitHub Copilot copilot_extension +15 points
Gemini/Bard Extension gemini_extension +15 points
Perplexity Extension perplexity_extension +15 points

Other AI-powered browser extensions:

Extension Detection Flags Score Impact
Monica AI monica_extension +10 points
Jasper AI jasper_extension +10 points
WriteSonic writesonic_extension +10 points
Merlin AI merlin_extension +10 points
Sider AI sider_extension +10 points
MaxAI maxai_extension +10 points

WebDecoy uses multiple techniques to detect AI browser plugins:

AI extensions inject UI elements with identifiable patterns:

// Claude extension patterns
'[class*="claude"]'
'[data-claude]'
'[data-anthropic]'
'[id*="claude-"]'
'claude-extension'
// ChatGPT extension patterns
'[class*="chatgpt"]'
'[class*="openai"]'
'[data-chatgpt]'
'chatgpt-sidebar'
// Copilot patterns
'[class*="copilot"]'
'[data-copilot]'
'github-copilot'

Extensions often expose global objects:

// Claude
window.__claude__
window.__CLAUDE__
window.__anthropic__
// ChatGPT/OpenAI
window.__chatgpt__
window.__openai__
window.chatGPTExtension
// Copilot
window.__copilot__
window.githubCopilot
// Generic AI
window.__aiAssistant__
window.__AI_EXTENSION__

Modern extensions use Shadow DOM for isolation. WebDecoy inspects:

  • Custom element tag names (<claude-assistant>, <chatgpt-sidebar>)
  • Shadow root content for AI-related patterns
  • Nested shadow DOM structures

Extensions register custom HTML elements:

// Checked custom elements
'claude-assistant'
'claude-sidebar'
'claude-popup'
'chatgpt-assistant'
'chatgpt-sidebar'
'gpt-popup'
'copilot-assistant'
'copilot-suggestion'
'perplexity-assistant'
'gemini-assistant'
'monica-assistant'
'merlin-assistant'
'sider-assistant'

Vision AI bots represent a new category of AI-assisted browsing where AI agents directly control browser interactions. Unlike traditional browser extensions that assist users, Vision AI bots operate the browser autonomously by manipulating the DOM directly.

Vision AI bots are AI systems that:

  • See the page visually using screenshots or DOM snapshots
  • Interact programmatically by setting form values directly via JavaScript
  • Skip human input patterns by not generating keyboard/mouse events
  • Operate autonomously to fill forms, click buttons, and navigate sites
┌─────────────────────────────────────────────────────────────────┐
│ VISION AI BOT INTERACTION │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Human User Vision AI Bot │
│ ────────── ────────────── │
│ │
│ Keyboard → keydown event DOM Manipulation │
│ → keyup event element.value = "text" │
│ → input event ↓ │
│ → value changes input event only │
│ (no keyboard events!) │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Detection: Field has content but ZERO keyboard events │ │
│ │ Confidence: 90% | Score Impact: +40 points │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘
Bot/Tool Type Detection Method
Claude Computer Use AI Agent DOM manipulation, no keyboard events
Stagehand Browser Automation DOM manipulation, synthetic events
Browserbase Agents Cloud Browser DOM manipulation, headless signals
Playwright AI Testing Framework DOM manipulation, automation flags
Browser Use AI Agent Framework DOM manipulation, programmatic clicks

WebDecoy uses two complementary techniques to detect Vision AI bots:

  1. Ghost Click Detection - Clicks at positions where the mouse was never near
  2. FormAnalyzer - Form fields with content but no keyboard events

Real users must move their mouse to a position before clicking there. Vision AI bots using element.click() or browser automation APIs can click anywhere without prior mouse movement.

┌─────────────────────────────────────────────────────────────────┐
│ GHOST CLICK DETECTION │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Human User Vision AI Bot │
│ ────────── ────────────── │
│ │
│ 1. Move mouse to button 1. Find element via DOM │
│ 2. Hover over button 2. Call element.click() │
│ 3. Click button 3. No mouse movement at all! │
│ │
│ Mouse path recorded: Mouse path recorded: │
│ ▸ (100,50) → (150,80) → click ▸ click at (150,80) │
│ (no prior movements!) │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ Detection: Click with NO mouse activity within 100px │ │
│ │ Confidence: 95% | Score Impact: +45 points │ │
│ └─────────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────────┘

Key features:

  • Tracks mouse position history with timestamps
  • Checks if mouse was within 100px of click position in the 2 seconds before click
  • Immediate detection: Sends alert instantly when 2+ ghost clicks detected (doesn’t wait for behavioral phase)
  • Works even if page navigates away immediately after click

WebDecoy’s FormAnalyzer tracks keyboard events per form field and compares them against actual content:

// FormAnalyzer tracks per-field keyboard activity
{
"email_field": {
keydownCount: 0, // No keydown events
keyupCount: 0, // No keyup events
inputCount: 1, // One input event (from DOM manipulation)
pasteCount: 0, // No paste events
contentLength: 25 // But field has 25 characters!
}
}
Pattern Detection Confidence Score
Content without keyboard Field has content but zero keydown/keyup events 90% +40
High DOM manipulation ratio More input events than keyboard events 75% +25
Abnormal keydown/keyup ratio Ratio outside 0.5-2.0 range 60% +15
Multiple DOM manipulations 3+ fields with suspicious patterns n/a +20

Real humans have variable typing rhythms. Bots often have:

  • Zero variance in keystroke timing
  • Superhuman speed (< 30ms between keystrokes)
  • Perfect consistency across all fields

When Vision AI activity is detected, these flags are added:

Flag Meaning Score Impact Confidence
ghost_clicks Clicks at positions with no prior mouse activity +45 95%
form_dom_manipulation Field content set via DOM, not keyboard +40 90%
high_dom_manipulation_ratio Mixed DOM/keyboard with suspicious ratio +25 75%
instant_clicks Clicks with no delay after mouse stops +30 85%
clicks_no_pre_movement Clicks without preceding mouse movement +20 80%
multiple_dom_manipulations 3+ fields showing DOM manipulation +20 n/a
abnormal_key_ratio Keydown/keyup ratio outside normal range +15 60%
{
"id": "det_xyz789",
"source": "bot_scanner",
"unified_score": 85,
"threat_level": "HIGH",
"flags": [
"ghost_clicks",
"form_dom_manipulation",
"multiple_dom_manipulations"
],
"metadata": {
"behavior": {
"clickAnalysis": {
"ghostClicks": true,
"ghostClickRatio": 0.67,
"instantClicks": false,
"noPreMovement": true
},
"formAnalysis": {
"suspiciousFields": [
{
"id": "email",
"reason": "content_without_keyboard",
"contentLength": 24,
"confidence": 0.9
},
{
"id": "message",
"reason": "content_without_keyboard",
"contentLength": 156,
"confidence": 0.9
}
],
"totalDomManipulations": 2,
"fields": {
"email": {
"contentLength": 24,
"keyCount": 0,
"noKeyboardEvents": true
},
"message": {
"contentLength": 156,
"keyCount": 0,
"noKeyboardEvents": true
}
}
}
}
}
}

Not all DOM manipulation is malicious. WebDecoy accounts for:

Scenario How We Handle It
Password managers Usually trigger paste events (tracked separately)
Autofill Browser autofill fires input events with isTrusted: true
Copy/paste Paste events are tracked and not flagged
Form pre-population Only analyzed after user interaction begins
Alert Rule: Ghost Click Detection
Trigger:
- flags contains 'ghost_clicks'
Action: Block immediately
Rationale: Strongest indicator of browser extension or automation
Alert Rule: Vision AI on Signup
Trigger:
- path matches '/signup' OR '/register'
- formAnalysis.suspiciousFields.length > 0
Action: Require additional verification
Rationale: Prevent AI-automated account creation
Alert Rule: AI Form Probing
Trigger:
- formAnalysis.totalDomManipulations >= 2
- session duration < 10 seconds
Action: Block and log
Rationale: AI bot rapidly filling forms to test responses
Dashboard Query: Vision AI Activity
Filter:
- flags contains 'ghost_clicks' OR 'form_dom_manipulation'
Group by: path
Metric: Count per page

In the Detections table, use these filters:

Filter Value What It Shows
Flags contain ghost_clicks All ghost click detections
Flags contain form_dom_manipulation All DOM manipulation detections
Unified Score ≥ 70 High-confidence Vision AI activity
Source bot_scanner All client-side detections

API Example:

Terminal window
# Get all Vision AI detections
curl -H "Authorization: Bearer $TOKEN" \
"https://api.webdecoy.com/v1/detections?flags_contain=ghost_clicks"
# Get all form manipulation detections
curl -H "Authorization: Bearer $TOKEN" \
"https://api.webdecoy.com/v1/detections?flags_contain=form_dom_manipulation"

These signals indicate potential AI-assisted or automated browsing but aren’t specific to a single extension:

Signal Flag Score Impact Meaning
Wrapped Fetch API wrapped_fetch +5 points window.fetch has been modified
Wrapped XHR wrapped_xhr +5 points XMLHttpRequest.open has been modified
Modified MutationObserver modified_mutation_observer +5 points Observer constructor has been patched

API wrapping can indicate:

  • AI extensions intercepting network requests
  • Content extraction tools
  • Automated form submission tools
  • Browser automation frameworks
// Check if fetch has been wrapped
var fetchStr = window.fetch.toString();
if (fetchStr.indexOf('[native code]') === -1) {
// Fetch has been wrapped by an extension
flags.push('wrapped_fetch');
}
// Check if XHR has been wrapped
var xhrStr = XMLHttpRequest.prototype.open.toString();
if (xhrStr.indexOf('[native code]') === -1) {
// XHR has been wrapped
flags.push('wrapped_xhr');
}
Signal Flag Meaning
AI Context Menu ai_context_menu Extension added AI options to right-click menu

When AI activity is detected, flags are added to the detection record:

┌─────────────────────────────────────────────────────────────────┐
│ DETECTION FLAGS BREAKDOWN │
├─────────────────────────────────────────────────────────────────┤
│ │
│ Primary AI Extensions (15 pts each) │
│ ──────────────────────────────────── │
│ claude_extension, chatgpt_extension, copilot_extension, │
│ gemini_extension, perplexity_extension │
│ │
│ Secondary AI Extensions (10 pts each) │
│ ───────────────────────────────────── │
│ monica_extension, jasper_extension, writesonic_extension, │
│ merlin_extension, sider_extension, maxai_extension │
│ │
│ Suspicious Signals (5 pts each) │
│ ─────────────────────────────── │
│ wrapped_fetch, wrapped_xhr, modified_mutation_observer │
│ │
│ Other Signals (8 pts each) │
│ ───────────────────────── │
│ generic_ai_extension, ai_context_menu │
│ │
└─────────────────────────────────────────────────────────────────┘
{
"id": "det_abc123",
"source": "bot_scanner",
"ip_address": "192.168.1.100",
"unified_score": 45,
"threat_level": "MEDIUM",
"ai_scraper_score": 0,
"ai_scraper_category": "none",
"flags": [
"claude_extension",
"wrapped_fetch"
],
"metadata": {
"aiBrowserPlugins": {
"detected": true,
"plugins": ["claude_extension"],
"count": 1
}
}
}

In the Detections table, filter specifically for AI-related activity:

Filter How to Use Effect
AI Scraper Score Set minimum score Show only AI crawler activity
Flags contain Search for flag name Show detections with specific AI flags
Source = bot_scanner Select source filter Show client-side detections
Impersonation only ?agent_impersonation=true on the detections URL Show only requests that claimed a known agent and failed the proof
One agent ?ai_scraper_name=GPTBot on the detections URL Show every request that claimed that identity, proven or not

The forged counts in the agent trust report are links that set exactly these two parameters, so clicking a number lands you on the requests behind it rather than on a filter you have to rebuild.

Find all Claude extension users:

Flags contain: claude_extension

Find all AI training crawlers:

AI Scraper Score >= 70
AI Scraper Category = training_crawler

Find all AI browser plugin activity:

Flags contain: _extension
Source = bot_scanner

Find suspicious API wrapping:

Flags contain: wrapped_

AI browser plugin detection contributes to the overall bot score:

Detection Points Added Rationale
Single primary AI extension +15 Strong indicator of AI-assisted browsing
Multiple primary AI extensions +15 each Compounding evidence
Secondary AI extension +10 Common AI productivity tools
API wrapping +5 Could be legitimate extensions too
Generic AI signals +8 Unspecified AI activity
Scenario Flags Added Score
Claude extension only claude_extension +15
ChatGPT + wrapped fetch chatgpt_extension, wrapped_fetch +20
Multiple AI tools claude_extension, monica_extension, copilot_extension +40
Wrapped APIs only wrapped_fetch, wrapped_xhr +10

Detect when AI tools might be used to extract or summarize your content:

Alert Rule: AI Content Extraction
Trigger:
- flags contains 'claude_extension' OR 'chatgpt_extension'
- path matches '/premium/*'
Action: Log and alert
Rationale: User may be using AI to summarize premium content

Identify AI-assisted form filling:

Alert Rule: AI Form Assistance
Trigger:
- source = 'bot_scanner'
- flags contains any '_extension'
- path matches '/signup' OR '/checkout'
Action: Add CAPTCHA challenge
Rationale: AI tools may be automating form submissions

Track AI adoption among your visitors:

Dashboard Query: AI Tool Adoption
Group by: flags
Filter: flags contains '_extension'
Metric: Unique visitors per AI tool

Access AI detection data via the WebDecoy API:

{
"flags": ["claude_extension", "wrapped_fetch"],
"metadata": {
"aiBrowserPlugins": {
"detected": true,
"plugins": ["claude_extension"],
"count": 1
}
},
"ai_scraper_score": 0,
"ai_scraper_category": "none",
"ai_scraper_name": null
}
Terminal window
# Get all detections with AI browser plugins
curl -H "Authorization: Bearer $TOKEN" \
"https://api.webdecoy.com/v1/detections?flags_contain=_extension"
# Get Claude extension detections
curl -H "Authorization: Bearer $TOKEN" \
"https://api.webdecoy.com/v1/detections?flags_contain=claude_extension"
# Get all AI scraper activity
curl -H "Authorization: Bearer $TOKEN" \
"https://api.webdecoy.com/v1/detections?ai_scraper_score_gte=50"

AI browser plugin detection is designed to be:

  • Non-invasive: Only checks for presence, doesn’t read content
  • Privacy-respecting: Doesn’t capture what users type into AI tools
  • Transparent: Detection signals are clearly documented

When a visitor arrives at your site by clicking a link shared by an AI platform (e.g., a ChatGPT conversation, a Perplexity search result, or a Claude response), WebDecoy’s detection script automatically detects this and sends a lightweight referral beacon.

The detection script checks document.referrer against a list of known AI platform domains. If a match is found, it fires a beacon independently of bot detection (since these are human visitors, not bots).

Visitor clicks link in ChatGPT → Lands on your site
├── document.referrer = "https://chatgpt.com/..."
├── Detection script matches against LLM_DOMAINS
└── Lightweight beacon sent:
{ score: 0, flags: ['llm_referral'], src: 'llm_referral' }
Platform Domains Tracked
ChatGPT chat.openai.com, chatgpt.com
Perplexity perplexity.ai, www.perplexity.ai
Google Gemini gemini.google.com
Claude claude.ai
DeepSeek deepseek.com, www.deepseek.com, chat.deepseek.com
Microsoft Copilot copilot.microsoft.com
You.com you.com, www.you.com
Phind phind.com, www.phind.com
Kagi kagi.com, www.kagi.com
Meta AI meta.ai, www.meta.ai
Grok grok.com, www.grok.com
Aspect Detail
Score Always 0 (these are human visitors)
Source llm_referral
Flag llm_referral
Fires independently Does not interfere with bot detection
Once per page load Guarded to fire only once

LLM referral detections appear in the AI Referrals dashboard, which shows:

  • Top referring AI platforms
  • Traffic trends over time
  • Top landing pages receiving AI referral traffic
  • Referral volume breakdown by platform
{
"source": "llm_referral",
"unified_score": 0,
"threat_level": "NONE",
"flags": ["llm_referral"],
"metadata": {
"page_url": "https://example.com/article/best-practices",
"referrer": "https://chatgpt.com/c/abc123",
"llm_referrer": "ChatGPT"
}
}

WebDecoy continues to expand AI detection as the landscape evolves:

  • New AI Extensions: Detection for emerging AI browser tools
  • AI Agent Detection: Identifying AI agents browsing on behalf of users
  • Content Summarization Detection: Identifying AI summary extraction patterns

If you discover new AI extension patterns, please report them to help improve detection coverage.