Build web filters, secure web gateways, DNS filtering, parental controls and ISP-grade filtering on a 102M-domain offline categorization database with a real-time API fallback for the long tail. We supply the classification backbone — you focus on enforcement.
A filtering product is judged on two failure modes at once: block a health-education page and a school files a ticket; let a gambling mirror through and an enterprise churns. With 100M+ active domains changing daily, keyword lists and manual curation can't keep both failure rates down.
String matching can't tell a breast-cancer charity from adult content, or a chemistry syllabus from a drugs marketplace. Health and education traffic becomes collateral damage.
Casino mirrors and adult hosts rotate domains precisely because static lists lag. Anything registered after your last refresh is invisible — and that unrated tail is where violations concentrate.
A DNS resolver or inline gateway can't hold a connection open while a cloud classifier thinks. If every verdict costs a round-trip, your filter becomes the slowest hop on the network.
Crawling and classifying 100M+ domains — then keeping results current — is a full-time ML operation. It is our entire product; for a filtering vendor it is a distraction.
Answer almost every lookup from a local copy of the classified-domain database. Send only the genuinely unknown tail to the real-time API — caching answers so each unknown is paid for once.
The URL database ships as a file you load into your own infrastructure. See how the offline database works.
The web-filtering taxonomy covers the categories policies are written in — adult, violence, weapons, gambling, drugs and malware-adjacent classes.
For domains not yet in the database, the real-time categorization API classifies the live page on demand.
Parental-control and school deployments get a second signal: COPPA risk scoring detects child-directed sites running ad tracking on children.
POST to /api/iab/iab_web_content_filtering.php with
query, api_key and data_type=url. The web-content-filtering taxonomy returns filtering categories on the same endpoint.
import requests
BLOCKED = {"Adult", "Gambling", "Weapons", "Drugs"}
def category_for(domain):
# 1. Local lookup: 102M-domain offline database
row = local_db.get(domain)
if row:
return row["category"], "local"
# 2. Fallback: real-time API for the unknown tail
resp = requests.post(
"https://www.websitecategorizationapi.com"
"/api/iab/iab_web_content_filtering.php",
data={"query": f"https://{domain}",
"api_key": API_KEY,
"data_type": "url"},
timeout=30,
)
top = resp.json()["classification"][0]
local_db.put(domain, top) # pay for each unknown once
return top["category"], "api"
category, source = category_for("lucky-spins-777.example")
if category in BLOCKED:
serve_block_page(category)
{
"classification": [
{"category": "Gambling", "confidence": 0.96},
{"category": "Video Gaming", "confidence": 0.03}
],
"language": "en",
"status": 200
}
Tune the threshold yourself: enforce at 0.9+ for a light-touch enterprise profile, or at 0.6 with review for a strict school profile.
Try any URL interactively in the live demo dashboard before writing a line of code.
coppa = requests.post(
"https://www.websitecategorizationapi.com/api/coppa/score.php",
data={"query": f"https://{domain}", "api_key": API_KEY},
).json()
if profile == "kids" and coppa["risk_level"] in ("HIGH", "CRITICAL"):
serve_block_page("child-safety")
Categories map cleanly onto the profiles filtering products already sell. A typical starting matrix — every cell is your call, because you receive categories and confidences, not opaque verdicts:
| Filtering category | Typical content | Enterprise profile | Child-safe profile |
|---|---|---|---|
| Adult | Pornography, explicit content | BLOCK | BLOCK |
| Gambling | Casinos, betting, lotteries | BLOCK | BLOCK |
| Weapons | Firearms sales, explosives | POLICY | BLOCK |
| Drugs | Recreational drug promotion | BLOCK | BLOCK |
| Violence / Hate | Gore, extremist content | BLOCK | BLOCK |
| Health & Medicine | Clinics, patient education | ALLOW | ALLOW |
| Education | Schools, courseware, reference | ALLOW | ALLOW |
Why the last two rows matter: Content-based classification resolves medical and educational sites to their own categories instead of tripping adult or drugs rules.
This is exactly where keyword filters bleed support tickets. Browse the complete set at filtering_categories.php.
You re-sync the database on a schedule and let the real-time API cover anything newer than your last sync. API answers are cached locally, so fallback volume stays a small fraction of total lookups.
Both. The offline database is domain-level, which is what DNS filtering and gateway fast paths need. The real-time endpoint accepts full URLs with data_type=url, so an HTTPS-inspecting proxy can get path-level verdicts for large mixed-content platforms.
The web-filtering taxonomy if you sell filtering: it is organized around block/allow decisions. The IAB taxonomy suits products that also serve analytics or advertising. Both run on the same endpoint and database, so you can carry both.
Send us a sample of your resolver or gateway logs and get back a categorized extract — coverage rate, category distribution, and the uncategorized tail the API would absorb.
Try the Live Demo Request a Sample Read the API Docs