Classify Thousands of Domains in a Single Request with Batch Processing, CSV Upload, and Webhook Callbacks
Submit up to 100 domains per API request and let our infrastructure classify them in parallel, backed by over 100 million categorized domains across 59 content categories.
Classify up to 100 domains in a single API request with parallel processing for maximum throughput.
Fire-and-forget batch jobs with webhook callbacks that notify your endpoint when results are ready.
Upload CSV files of domains directly and receive classified results in your preferred output format.
Submit domains in whatever format your workflow produces
Submit a JSON array of domain strings directly in the request body for programmatic integrations. This is the fastest path for applications that already have domain lists in memory.
Upload CSV files containing domain lists extracted from spreadsheets, log analysis tools, or database exports.
Pipe raw domain lists from command-line tools directly to the API using plain text with one domain per line.
Submit full URLs instead of bare domains when your source data includes complete web addresses.
For batches of up to 10,000 domains, synchronous mode returns results directly in the HTTP response.
Batches exceeding 10,000 domains or explicit async requests return immediately with a job ID and status URL.
Register webhook endpoints that receive signed POST notifications at key processing milestones: job accepted, 50% complete, processing finished, and results available for download.
Scale predictably with transparent limits and intelligent throttling
Synchronous batches support up to 10,000 domains per request. Async batches accept up to 1 million domains per job. These limits ensure predictable processing times and fair resource allocation across all API consumers. Requests exceeding limits receive a 413 status with guidance on splitting the batch.
Batch endpoints are rate-limited separately from single-lookup endpoints. Standard plans allow 60 batch requests per minute with up to 10 concurrent async jobs. Enterprise plans offer configurable concurrency up to 100 simultaneous jobs. Rate limit headers in every response show remaining quota and reset timestamps.
Each plan includes a monthly domain classification quota shared between single and batch lookups. Usage dashboards and threshold alerts help you monitor consumption.
While the API accepts up to 10,000 domains synchronously, optimal throughput is achieved with batches of 1,000 to 5,000 domains. Smaller batches reduce latency per request, allowing parallelism on the client side. For maximum throughput, submit multiple medium-sized batches concurrently rather than one maximum-sized batch.
Quota efficiency: Batch processing consumes one quota unit per unique domain classified, so submitting the same domain in multiple batches within a billing cycle only counts once.
Get classification results in the format that fits your data pipeline
The default response format returns a JSON object with each domain as a key mapping to its classification result.
Request CSV output for direct import into spreadsheets, databases, or data warehouse ETL pipelines.
Newline-delimited JSON format streams results one domain per line, enabling processing to begin before the full response arrives.
The enriched response mode adds metadata beyond basic classification: domain age, registrar information, DNS record summary, SSL certificate status, historical category changes, and related domains sharing the same infrastructure.
How organizations leverage batch classification across industries
Security operations centers feed indicator lists, classification feeds, and suspicious domain extractions through the bulk API to categorize and prioritize content risks.
Advertising platforms classify publisher domain inventories to ensure ads appear only alongside brand-safe content. Bulk lookup categorizes entire exchange inventories overnight, flagging domains in categories like Adult, Violence, or Hate Speech so demand-side platforms can apply advertiser exclusion lists before bidding begins.
Compliance teams export DNS query logs or proxy access logs, extract unique domains, and batch-classify them to identify policy violations. Monthly audit reports reveal category distributions, flag access to restricted categories, and track trends in web usage patterns across the organization over time.
Production batch workflows should implement idempotent job submission using client-generated request IDs to safely retry failed submissions without creating duplicate jobs. These same pipeline patterns apply when constructing an acquisition pipeline for aging business owners that processes thousands of business domains.
Partition large domain lists into chunks of 5,000 before submission, allowing parallel processing across multiple batch requests.
Store the job ID returned by the API to enable progress tracking and result retrieval even if the submitting process restarts.
For recurring batch jobs, such as nightly log classification or weekly classification feed enrichment, use the incremental mode that only classifies domains not seen in previous batches.
Classify thousands of domains in a single request with just a few lines of code
Submit a list of domains and receive categorization results for all of them in one response.
import requests API_URL = "https://webfilteringdatabase.com/api/moderate.php" API_KEY = "YOUR_API_KEY" # Batch of domains to classify domains = [ "google.com", "facebook.com", "gambling-site.xyz", "github.com", "adult-content.xxx" ] # Classify each domain and collect results results = {} for domain in domains: response = requests.post(API_URL, json={ "api_key": API_KEY, "query": domain }) data = response.json() results[domain] = { "category": data.get("primary_category", "Unknown"), "risk": data.get("risk_level", "low") } # Print classification report for domain, info in results.items(): print(f"{domain}: {info['category']} (risk: {info['risk']})")
const API_URL = 'https://webfilteringdatabase.com/api/moderate.php'; const API_KEY = 'YOUR_API_KEY'; const domains = [ 'google.com', 'facebook.com', 'gambling-site.xyz', 'github.com', 'adult-content.xxx' ]; async function bulkClassify(domainList) { const results = await Promise.all( domainList.map(async (domain) => { const res = await fetch(API_URL, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ api_key: API_KEY, query: domain }) }); const data = await res.json(); return { domain, category: data.primary_category, risk: data.risk_level }; }) ); return results; } bulkClassify(domains).then(results => { results.forEach(r => console.log(`${r.domain}: ${r.category} (risk: ${r.risk})`) ); });
# Classify multiple domains in sequence for domain in google.com facebook.com gambling-site.xyz github.com; do curl -s -X POST "https://webfilteringdatabase.com/api/moderate.php" \ -H "Content-Type: application/json" \ -d "{\"api_key\": \"YOUR_API_KEY\", \"query\": \"$domain\"}" \ | jq "{domain: .domain, category: .primary_category, risk: .risk_level}" done # Example output for one domain: # { # "domain": "gambling-site.xyz", # "category": "Gambling", # "risk": "high" # }
<?php $apiUrl = 'https://webfilteringdatabase.com/api/moderate.php'; $apiKey = 'YOUR_API_KEY'; $domains = ['google.com', 'facebook.com', 'gambling-site.xyz', 'github.com']; foreach ($domains as $domain) { $ch = curl_init($apiUrl); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([ 'api_key' => $apiKey, 'query' => $domain ])); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $result = json_decode(curl_exec($ch), true); curl_close($ch); echo "$domain: {$result['primary_category']} (risk: {$result['risk_level']})\n"; } ?>
Process thousands to millions of domains with our batch classification API backed by 100 million categorized domains.