Your customers need to block AI tools — and they are asking for a category you do not have. Our OEM feed gives you 17,410+ classified AI domains to ship as a native category in weeks, not quarters.
Every DNS filter, SWG, and MDM platform is fielding the same request: "Where is your AI category?" If your product does not have one, the deal goes to the vendor that does.
Maintaining a comprehensive AI-tool domain list requires monitoring the landscape continuously across a 102-million-domain corpus that catches tools appearing in no directory or curated list.
We handle classification so you can ship the category. Your engineering team gets a clean REST API — no scraping, no manual curation, no stale lists.
CISOs under board-level mandates to block shadow AI evaluate your product on whether it has an AI category. Without one, they move to the next vendor on the shortlist.
K-12 tech directors need CIPA-compliant AI filtering. District-level purchases are decided on whether your product blocks AI tools out of the box, not after a custom configuration.
Managed service providers are fielding the same AI-blocking request from multiple clients simultaneously. They need a centrally managed category, not per-client custom rules.
Not a flat domain list — a structured, classified dataset with rich metadata for granular policy enforcement.
Each category contains 5–13 subcategories, giving your product approximately 180 total classification labels.
// Sample feed record (JSON format) { "domain": "chatgpt.com", "primary_category": "Text & Language", "subcategory": "General assistants & chatbots", "confidence": 0.99, "status": "active", "first_seen": "2022-11-30", "last_verified": "2026-07-09", "languages": ["en", "multi"], "risk_tier": "high" }
The feed is delivered via a REST API. Authenticate with your API key in the X-API-Key header (HTTPS GET). The download_database action streams the full database as CSV with columns domain,category,subcategory, and the database_info action reports when the database last changed so you only re-download when needed.
# Check when the database last changed curl -H "X-API-Key: YOUR_API_KEY" \ "https://www.aitoolsblocklist.com/api/database/?action=database_info" # Full feed download (CSV: domain,category,subcategory) curl -H "X-API-Key: YOUR_API_KEY" \ "https://www.aitoolsblocklist.com/api/database/?action=download_database" -o ai_tools.csv # Filter by category client-side after download awk -F',' '$2 == "Code & Development"' ai_tools.csv
The integration follows the same pattern your product uses for other category feeds. Poll our API daily, re-download the CSV when it changes, and the AI category behaves like any other content category.
Each domain maps directly to a DNS query your resolver matches against. Subcategory data enables granular policies — block code assistants while allowing education tools.
The feed applies at the URL-filtering layer, matching the host portion against classified domains. TLS inspection enables subcategory-level policy on multi-product platforms.
Domain feed maps to WebContentFilter (iOS), managed Chrome restrictions (Android/ChromeOS), or VPN-based filtering. Easily transformed into any platform-specific format.
// Example: Python sync script for OEM integration import requests import csv import io class AIToolsFeedSync: def __init__(self, api_key, base_url="https://www.aitoolsblocklist.com/api/database/"): self.headers = {"X-API-Key": api_key} self.base_url = base_url def get_database_info(self): """Fetch metadata: last_updated_unix, file size, plan.""" resp = requests.get( self.base_url, headers=self.headers, params={"action": "database_info"} ) resp.raise_for_status() return resp.json() def get_full_feed(self): """Download the complete classified domain feed (CSV).""" resp = requests.get( self.base_url, headers=self.headers, params={"action": "download_database"} ) resp.raise_for_status() # Columns: domain, category, subcategory return list(csv.DictReader(io.StringIO(resp.text))) def sync_to_local_db(self, db_connection): """Daily sync: re-download only when the database changed.""" info = self.get_database_info() if info["last_updated_unix"] <= self.get_last_sync_time(db_connection): return 0, 0 # nothing changed since last sync # Diff the new snapshot against your local copy new_rows = {r["domain"]: r for r in self.get_full_feed()} old_domains = db_connection.get_known_domains() added = [r for d, r in new_rows.items() if d not in old_domains] removed = [d for d in old_domains if d not in new_rows] for record in added: db_connection.upsert_domain(record) for domain in removed: db_connection.remove_domain(domain) self.update_sync_time(db_connection, info["last_updated_unix"]) return len(added), len(removed)
We license the feed, not seats. Your product can serve any number of end customers under a single OEM agreement.
Full feed access with daily updates and white-label delivery. Volume-based annual pricing tied to end-customer accounts.
Everything in Standard, plus custom category mappings, priority classification, and dedicated engineering support. Built for deep policy-engine integration.
Both licenses include a 30-day technical evaluation with full API access. We assign a solutions engineer to help your team complete the integration.
Tell us about your product, approximate customer count, and desired integration timeline. We will prepare a licensing proposal within 48 hours.
Your team can build a classifier — but the ongoing operational burden rarely justifies it when a production-ready feed already exists.
| Dimension | Build In-House | OEM Feed License |
|---|---|---|
| Time to market | 2–4 quarters | 2–4 weeks |
| Domain coverage | Varies by effort | 17,410+ domains |
| Ongoing maintenance | Dedicated headcount | Zero — handled by us |
| Engineering cost | Months of pipeline dev | API integration only |
| Update frequency | Depends on capacity | Daily, automated |
| Domain corpus | Build from scratch | 102M domains, battle-tested |
// Example: Node.js integration for a DNS filtering product const axios = require('axios'); const { parse } = require('csv-parse/sync'); const { CategoryStore } = require('./category-store'); const API = 'https://www.aitoolsblocklist.com/api/database/'; const headers = { 'X-API-Key': process.env.OEM_API_KEY }; async function syncAIToolsCategory() { const store = new CategoryStore(); const lastSync = await store.getLastSyncTimestamp('ai-tools'); // Re-download only when the database has changed const { data: info } = await axios.get(API, { headers, params: { action: 'database_info' } }); if (info.last_updated_unix <= lastSync) return; // Full CSV snapshot: domain,category,subcategory const { data: csv } = await axios.get(API, { headers, params: { action: 'download_database' } }); const rows = parse(csv, { columns: true }); // Upsert every domain into your category DB for (const row of rows) { await store.upsert({ domain: row.domain, categoryId: mapToInternalCategory(row.category), subcategoryId: mapToInternalSubcategory(row.subcategory) }); } // Deactivate domains no longer present in the snapshot await store.deactivateMissing('ai-tools', rows.map(r => r.domain)); await store.updateSyncTimestamp('ai-tools', info.last_updated_unix); console.log(`Synced ${rows.length} domains`); } // Run daily via cron syncAIToolsCategory().catch(console.error);
Both licenses include a 30-day technical evaluation with full API access. We assign a solutions engineer to help your team complete the integration.