AI Tools Blocklist
Home AI Tools Database Taxonomy Pricing
Solutions
Enterprise IT & CISO Education Firewall Admins Shadow AI Prevention
Integrations
Palo Alto Networks FortiGate Cisco Umbrella pfSense REST API
Download Free Sample
Classification Methodology

How We Classify 16,024+ AI Tools
from a 102M-Domain Corpus

Our pipeline scans 102 million domains daily, classifying AI tools into 18 categories with 180+ subcategories. Here is exactly how it works — from DNS enumeration to confidence-scored, human-verified output.

102MDomains Scanned
16,024+AI Tools Classified
18Functional Categories
Download Free Sample Enterprise Pricing
Discovery Pipeline

The Discovery Pipeline: Finding AI Tools in 102 Million Domains

A fully automated pipeline processes over 102 million active domains to identify AI-powered tools. It combines DNS enumeration, HTTP fingerprinting, content analysis, and ML classification into a continuous inventory.

1

Seed List Generation

The starting corpus is built from all major TLDs, then deduplicated, normalized, and filtered to exclude parking pages.

Zone file data for all gTLDs and ccTLDs
Certificate Transparency logs (new domains within hours)
Deduplication and parking-page filtering
2

DNS Enumeration & Resolution

Every seed domain is resolved to confirm liveness. Inactive domains are excluded from further processing.

A/AAAA/CNAME record validation
Hosting provider (IP range + ASN)
CDN detection (Cloudflare, Fastly) + MX records
3

HTTP Fingerprinting

Lightweight HTTP requests capture response data without JavaScript execution. Raw HTML analysis at scale.

Status codes, response headers, TLS certs
First 512 KB of HTML content
Server, X-Powered-By, CSP headers
4

Feature Vector Construction

200+ discrete signals are assembled into a structured vector for each domain.

Meta tags, headings, OG properties
AI SDK/API references in page source
Interactive elements (chat, upload, API key fields)

200+ Signals by Category

Signal Category Examples
Meta Tags Title, description, keywords, Open Graph properties
Page Structure Heading hierarchy, navigation depth, external scripts/stylesheets
AI SDK References OpenAI, Anthropic, Replicate, Hugging Face API calls in source
Interactive Elements Text inputs, file uploads, API key fields, chat interfaces, canvas
Infrastructure TLD, hosting provider, CDN, /docs and /api subpaths

Scale and Infrastructure

A distributed fleet of stateless workers processes the full corpus within a 24-hour window. The pipeline is fully idempotent, enabling efficient change detection between cycles.

50K
Domains / Worker / Hour
24h
Full Scan Cycle
3x
Retry with Backoff
Per-ASN
Rate Limiting

DNS Enumeration

Zone file ingestion and Certificate Transparency log monitoring capture every active domain, including those registered within the last 24 hours. Resolution confirms liveness and extracts hosting metadata used as classification features.

HTTP Fingerprinting

Lightweight HTTP requests extract 200+ signals from response headers, TLS certificates, meta tags, page structure, and referenced scripts. No JavaScript execution — raw HTML analysis at scale.

Candidate Filtering

A fast pre-classifier reduces the 102M-domain corpus to approximately 300,000 candidate domains that exhibit AI-related signals. Only these candidates proceed to the full NLP classification engine, reducing compute cost by 99.7%.

Classification Engine

NLP-Based Classification Engine

Candidate domains pass through a transformer-based NLP model fine-tuned on manually labeled AI tools. The model assigns category labels from the 18-category taxonomy with calibrated confidence scores.

Feature Extraction

Raw HTTP fingerprints are converted into structured inputs across three feature tiers.

Feature Type Examples Purpose
Primary (Textual) Page title, meta description, H1-H4, first 2,000 tokens of body, image alt text Captures how the tool describes itself
Secondary (Structural) Code editors, chat interfaces, file uploads, TensorFlow.js, ONNX Runtime, AI API refs Identifies AI-specific UI patterns and SDKs
Tertiary (Metadata) TLD, registration age, hosting provider, /docs / /api / /swagger subpaths Contextual signals for classification accuracy

Training Data

15,000+
Labeled Domains
2+
Annotators per Domain
0.87
Cohen's Kappa
Quarterly
Refresh Cycle

Each domain is reviewed by at least two human annotators who assign primary/secondary categories, subcategory labels, and confidence ratings. Refreshed quarterly to incorporate new tool categories and correct labeling errors.

Model Architecture

A fine-tuned transformer encoder outputs probability distributions across 18 categories and 180+ subcategories. Each domain receives both a primary category prediction and a calibrated confidence score between 0 and 1.

Confidence threshold: Domains with primary category confidence below 0.65 are flagged for manual review rather than auto-classified. This threshold balances coverage against precision for enterprise-grade accuracy.
#!/usr/bin/env python3
"""AI Tool Classification Pipeline — feature extraction and category prediction."""

import json
from dataclasses import dataclass
from typing import Dict, List, Tuple

@dataclass
class DomainFeatures:
    domain: str
    title: str
    meta_description: str
    headings: List[str]
    body_text: str
    has_chat_interface: bool
    has_code_editor: bool
    has_file_upload: bool
    has_image_canvas: bool
    ai_sdk_references: List[str]
    api_docs_present: bool

CATEGORY_LABELS = [
    "AI Chatbots", "AI Code Assistants",
    "AI Image Generators", "AI Video Tools",
    "AI Audio/Music", "AI Writing Tools",
    "AI Search Engines", "AI Data Analytics",
    "AI Marketing Tools", "AI Design Tools",
    "AI Education", "AI Healthcare",
    "AI Finance", "AI Legal",
    "AI HR/Recruiting", "AI Customer Service",
    "AI Productivity", "AI Developer Tools",
]

def extract_features(domain: str, html: str, headers: dict) -> DomainFeatures:
    """Extract classification features from raw HTTP response."""
    from html.parser import HTMLParser
    title = extract_tag_content(html, "title")
    meta_desc = extract_meta(html, "description")
    headings = extract_all_headings(html)
    body = extract_visible_text(html, max_tokens=2000)

    return DomainFeatures(
        domain=domain,
        title=title,
        meta_description=meta_desc,
        headings=headings,
        body_text=body,
        has_chat_interface="chat" in html.lower() and "textarea" in html.lower(),
        has_code_editor=any(s in html for s in ["monaco", "codemirror", "ace-editor"]),
        has_file_upload='type="file"' in html or "dropzone" in html.lower(),
        has_image_canvas="<canvas" in html and "generate" in html.lower(),
        ai_sdk_references=detect_ai_sdks(html),
        api_docs_present=any(p in html for p in ["/api", "/docs", "swagger"]),
    )

def classify(features: DomainFeatures) -> List[Tuple[str, float]]:
    """Run the classification model and return ranked predictions."""
    feature_vector = vectorize(features)
    probabilities = model.predict(feature_vector)  # transformer output
    ranked = sorted(
        zip(CATEGORY_LABELS, probabilities),
        key=lambda x: x[1], reverse=True
    )
    return [(label, round(prob, 4)) for label, prob in ranked if prob > 0.05]

# Example: classify a discovered domain
features = extract_features("example-ai-code.dev", raw_html, resp_headers)
predictions = classify(features)
print(f"Domain:  {features.domain}")
print(f"Title:   {features.title}")
for label, score in predictions[:3]:
    print(f"  {label:30s}  confidence: {score:.4f}")
# Output:
#   AI Code Assistants              confidence: 0.9230
#   AI Developer Tools               confidence: 0.1840
#   AI Productivity                   confidence: 0.0620

The highest-confidence label becomes the primary category. When the second-highest category exceeds 0.25 confidence, it is recorded as a secondary category.

This multi-label capability lets security teams filter on either category — a code assistant that also provides chat-based explanations appears under both "AI Code Assistants" and "AI Chatbots."

Taxonomy Design

The 18-Category Taxonomy: Rationale and Structure

Every classified domain maps to one of 18 top-level categories and 180+ subcategories. The taxonomy was derived empirically by clustering 10,000+ AI tools by functional similarity and iteratively refining boundaries.

Design Principle: Functional Risk Grouping

Domains with similar data-handling risks belong to the same category. This differs from marketing-oriented taxonomies that group by "content type."

Example: We separate "AI Chatbots" from "AI Writing Tools" because chatbots accept freeform real-time input while writing tools operate on longer documents with revision history. A security team can block real-time conversational AI while allowing long-form writing. A "Content Creation" super-category would make that policy impossible.

Each category contains 5-18 subcategories calibrated to the diversity of tools in that space. The full taxonomy is documented separately and updated as new subcategories emerge.

AI Chatbots

General-purpose conversational AI, question-answering systems, role-playing bots, and multi-modal chat interfaces. Highest data exposure risk due to unrestricted freeform input. 14 subcategories including enterprise chat, open-source interfaces, and wrapper applications.

AI Code Assistants

Code completion, code generation, debugging assistants, code review tools, and autonomous coding agents. Critical category for IP protection — source code submitted to these tools may be retained for model training. 12 subcategories spanning IDE plugins, web-based editors, and CLI tools.

AI Image Generators

Text-to-image generation, image editing, inpainting, style transfer, and AI art platforms. Lower direct data exposure than text tools but significant IP and compliance risk from generated outputs. 11 subcategories including photorealistic generation, illustration, and brand asset creation.

AI Data Analytics

Data visualization, automated insights, natural-language-to-SQL, spreadsheet AI, and predictive analytics platforms. Extreme data exposure risk — users upload entire datasets. 15 subcategories covering business intelligence, scientific analysis, and financial modeling.

AI Legal

Contract review, legal research, case analysis, compliance checking, and document drafting tools. Handles attorney-client privileged material and regulated data. 8 subcategories including contract lifecycle, litigation support, and regulatory compliance.

AI Developer Tools

API providers, model hosting platforms, MLOps infrastructure, vector databases, and AI application frameworks. These are the building blocks other AI tools are constructed from. 18 subcategories spanning inference APIs, fine-tuning platforms, and observability tools.

Quality Assurance

Confidence Scoring and Human Verification

Every classification carries a calibrated confidence score between 0.0 and 1.0. This score is post-hoc adjusted using isotonic regression so that 0.85 confidence means ~85% accuracy.

The confidence score is not a raw softmax probability. Calibrated scores let enterprise customers make risk-informed deployment decisions based on classification reliability.

Three-Tier Processing Workflow

Tier Score Range Action Accuracy
Auto-Publish ≥ 0.85 Published to database automatically > 96%
Manual Review 0.65 – 0.85 Human analyst reviews, confirms, or corrects Analyst-verified
Batch Hold < 0.65 Held for weekly batch review or discarded Ambiguous
False Positive Rate
0.07%

Fewer than 3 out of every 4,000 domains are incorrectly classified. Measured weekly by sampling 500 domains and manually verifying.

Coverage (Recall)
98.2%

Estimated via competitive benchmarking against 6 directories and customer-reported gap analysis. Covers AI tools with 1,000+ monthly visits.

#!/usr/bin/env python3
"""Confidence scoring and tier assignment for classified domains."""

from dataclasses import dataclass
from enum import Enum
from typing import Optional

class ReviewTier(Enum):
    AUTO_PUBLISH = "auto_publish"
    MANUAL_REVIEW = "manual_review"
    BATCH_HOLD = "batch_hold"
    REJECTED = "rejected"

CONFIDENCE_THRESHOLDS = {
    "auto_publish":  0.85,   # ≥0.85 → publish automatically
    "manual_review": 0.65,   # 0.65–0.85 → human review queue
    "batch_hold":    0.40,   # 0.40–0.65 → weekly batch review
    "reject":        0.40,   # <0.40 → discard as non-AI
}

@dataclass
class ClassificationResult:
    domain: str
    primary_category: str
    confidence: float
    secondary_category: Optional[str]
    secondary_confidence: Optional[float]
    tier: ReviewTier

def assign_review_tier(confidence: float) -> ReviewTier:
    """Map confidence score to processing tier."""
    if confidence >= CONFIDENCE_THRESHOLDS["auto_publish"]:
        return ReviewTier.AUTO_PUBLISH
    elif confidence >= CONFIDENCE_THRESHOLDS["manual_review"]:
        return ReviewTier.MANUAL_REVIEW
    elif confidence >= CONFIDENCE_THRESHOLDS["batch_hold"]:
        return ReviewTier.BATCH_HOLD
    else:
        return ReviewTier.REJECTED

def process_classification(domain: str, predictions: list) -> ClassificationResult:
    """Produce final classification with tier assignment."""
    primary_label, primary_conf = predictions[0]
    secondary = predictions[1] if len(predictions) > 1 and predictions[1][1] > 0.25 else None
    return ClassificationResult(
        domain=domain,
        primary_category=primary_label,
        confidence=primary_conf,
        secondary_category=secondary[0] if secondary else None,
        secondary_confidence=secondary[1] if secondary else None,
        tier=assign_review_tier(primary_conf),
    )

# Example: process classification output
predictions = [("AI Code Assistants", 0.923), ("AI Developer Tools", 0.184)]
result = process_classification("example-ai-code.dev", predictions)
print(f"Domain:     {result.domain}")
print(f"Category:   {result.primary_category} ({result.confidence:.1%})")
print(f"Tier:       {result.tier.value}")
# Output: Tier: auto_publish (confidence 92.3% exceeds 85% threshold)

The published database maintains a false positive rate below 0.1%. Enterprise teams can trust that blocked domains are genuine AI tools.

The API also exposes raw confidence scores per domain, letting customers apply custom thresholds — for example, financial institutions may only block domains above 0.90 confidence.

Daily Updates

The Daily Update Pipeline: Keeping the Database Current

A stale AI tools database is a liability. New tools launch daily, existing tools pivot, and domains change ownership constantly.

The update pipeline runs on a strict 24-hour cycle with four phases to ensure the blocklist always reflects the current landscape.

1

Scan Phase

Hours 0-16

Distributed crawlers process all 102M domains, generating feature vectors for every reachable domain.

Content hashing detects changes from previous cycle
92-95% of domains produce identical hashes (skipped)
Only 5-8M changed/new domains proceed downstream
2

Classification Phase

Hours 16-20

NLP engine processes all changed and new domains with full classification and scoring.

New domains classified and scored from scratch
Changed domains re-evaluated for category drift
Category transitions flagged for human review
3

Review Phase

Hours 20-22

Human analysts process the manual review queue of 200-500 flagged domains per cycle.

Verify category assignments and resolve ambiguity
Investigate reclassification flags
Decisions feed back as ground truth for retraining
4

Publication Phase

Hours 22-24

Updated database is validated and published to API endpoints and download feeds.

Referential integrity + temporal consistency checks
Volume sanity checks (monotonic growth ±2%)
Incremental changeset endpoint for efficient polling
Accuracy Metrics

Data Quality and Accuracy Metrics

Enterprise teams need verified accuracy before deploying a blocklist into production infrastructure. We publish a comprehensive set of quality metrics updated quarterly through ongoing audits.

Classification Precision

Methodology: Each quarter, 50 random domains from each of the 18 categories (900 total) are verified by two independent analysts. Disagreements resolved by a senior reviewer.

Range: Per-category precision from 94.1% (AI Productivity, most heterogeneous) to 99.2% (AI Image Generators, most distinctive fingerprints).

Classification Recall

Method 1: Competitive benchmarking against 6 other AI tool directories and catalogs.

Method 2: Customer-reported gaps investigated and fed back into pipeline improvements and model retraining.

97.3% Precision

Quarterly stratified sampling of 900 domains verified by independent human analysts. False positive rate below 0.1%.

98.2% Recall

Benchmarked against 6 directories plus customer-reported gaps. Coverage exceeds 98% for tools with meaningful traffic.

0.977 F1 Score

Harmonic mean of precision and recall. High accuracy across both false positives and false negatives. Updated quarterly.

Error Correction and Feedback Loops

Production quality is defined not just by error rate, but by how fast errors are corrected. Three mechanisms ensure continuous improvement.

Customer-Reported Corrections < 4 hours

False positive reports trigger immediate human review. Confirmed errors removed in the next publication cycle.

Automated Anomaly Detection Every cycle

Domains with significant confidence score drift between cycles are flagged. Catches content changes that invalidate classifications.

Quarterly Re-evaluation Every 90 days

Entire database reprocessed through the latest model version. Typically reclassifies 1-2% of domains as model accuracy improves.

Enterprise customers access full classification metadata via the REST API — confidence score, classification date, and last-reviewed date per domain.

This metadata enables custom quality filters, such as deploying only domains classified within the last 30 days above a custom confidence threshold.

Request a Technical Deep Dive

We walk enterprise evaluators through the full pipeline — crawling, classification, confidence scoring, and quality auditing. Tell us your evaluation criteria.

Request a Technical Deep Dive

Tell us about your evaluation criteria and we will schedule a technical walkthrough of our classification methodology.