Your customers need to block AI tools — and they are asking for a category you do not have. Our OEM feed gives you 16,024+ 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.
AI-tool blocking has shifted from niche compliance request to mainstream product requirement in under eighteen months. Enterprise CISOs, school districts, and MSPs all evaluate products on whether they can block AI traffic out of the box.
The problem is not engineering capacity — it is data. 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.
The feed is delivered via REST API supporting full dumps and daily delta updates. Both endpoints return JSON or CSV, authenticated with a bearer token.
# Full feed download (all domains) curl -H "Authorization: Bearer YOUR_OEM_TOKEN" \ "https://api.aitoolsblocklist.com/v1/feed?format=json" # Delta update since last sync curl -H "Authorization: Bearer YOUR_OEM_TOKEN" \ "https://api.aitoolsblocklist.com/v1/feed/delta?since=2026-07-08T00:00:00Z" # Filter by category curl -H "Authorization: Bearer YOUR_OEM_TOKEN" \ "https://api.aitoolsblocklist.com/v1/feed?category=Code+%26+Development"
The integration follows the same pattern your product uses for other category feeds. Poll our API daily, ingest the delta, 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 json from datetime import datetime, timedelta class AIToolsFeedSync: def __init__(self, api_token, base_url="https://api.aitoolsblocklist.com/v1"): self.headers = {"Authorization": f"Bearer {api_token}"} self.base_url = base_url def get_full_feed(self): """Download the complete classified domain feed.""" resp = requests.get( f"{self.base_url}/feed", headers=self.headers, params={"format": "json"} ) resp.raise_for_status() return resp.json()["domains"] def get_delta(self, since_timestamp): """Fetch only records changed since the given ISO timestamp.""" resp = requests.get( f"{self.base_url}/feed/delta", headers=self.headers, params={"since": since_timestamp, "format": "json"} ) resp.raise_for_status() return resp.json() def sync_to_local_db(self, db_connection): """Perform daily incremental sync to your product database.""" last_sync = self.get_last_sync_time(db_connection) delta = self.get_delta(last_sync) for record in delta["added"]: db_connection.upsert_domain(record) for record in delta["removed"]: db_connection.remove_domain(record["domain"]) self.update_sync_time(db_connection) return len(delta["added"]), len(delta["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 delta 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.
Your team writes integration code to poll the API and ingest records. The feed arrives pre-classified with structured metadata.
Product managers define how the category appears in your admin console, QA verifies, and you ship.
// Example: Node.js integration for a DNS filtering product const axios = require('axios'); const { CategoryStore } = require('./category-store'); async function syncAIToolsCategory() { const store = new CategoryStore(); const lastSync = await store.getLastSyncTimestamp('ai-tools'); const { data } = await axios.get( 'https://api.aitoolsblocklist.com/v1/feed/delta', { headers: { Authorization: `Bearer ${process.env.OEM_API_TOKEN}` }, params: { since: lastSync, format: 'json' } } ); // Upsert new and changed domains into your category DB for (const domain of data.added) { await store.upsert({ domain: domain.domain, categoryId: mapToInternalCategory(domain.primary_category), subcategoryId: mapToInternalSubcategory(domain.subcategory), confidence: domain.confidence }); } // Remove deactivated domains for (const domain of data.removed) { await store.deactivate(domain.domain, 'ai-tools'); } await store.updateSyncTimestamp('ai-tools'); console.log(`Synced: ${data.added.length} added, ${data.removed.length} removed`); } // Run daily via cron syncAIToolsCategory().catch(console.error);