Cookieless Audiences
Home Database API Docs Pricing Live Demo Taxonomy
Use Cases
Media Planning by Persona Inventory Curation & Deal Packaging Seller-Defined Audiences CDP & Analytics Enrichment ABM Account Profiling
Industries
SSPs DSPs Publishers Agencies Curation Platforms
Company
Contact Login
Try Live Demo

Content Filtering at Network Speed

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.

102M
classified domains, deployed inside your product
0
network calls for domains already in the database
1
API fallback for the uncategorized tail
2
taxonomies: web-filtering and full IAB
Try the Live Demo Request a Database Sample API Documentation

The problem: the web outruns every hand-built blocklist

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.

Keyword lists overblock

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.

New domains underblock

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.

The latency budget is zero

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.

In-house coverage doesn't scale

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.

The solution: local-first categorization with a live fallback

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.

102M-domain offline database

The URL database ships as a file you load into your own infrastructure. See how the offline database works.

  • Zero per-query latency
  • No rate limits
  • No browsing data leaves the perimeter

A taxonomy built for filtering

The web-filtering taxonomy covers the categories policies are written in — adult, violence, weapons, gambling, drugs and malware-adjacent classes.

Real-time API for the tail

For domains not yet in the database, the real-time categorization API classifies the live page on demand.

  • One POST, ML classification with confidence scores
  • Path-level when you need it (specific URLs, not just domains)

COPPA layer for child-safe modes

Parental-control and school deployments get a second signal: COPPA risk scoring detects child-directed sites running ad tracking on children.

  • Stricter filtering than a category verdict alone
  • Ideal for "kids mode" profiles

The lookup pattern: local first, API for the rest

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.

Gateway integration (Python)
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)
Filtering-taxonomy response
{
  "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.

Child-safe second pass
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")

From category to policy

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 categoryTypical contentEnterprise profileChild-safe profile
AdultPornography, explicit contentBLOCKBLOCK
GamblingCasinos, betting, lotteriesBLOCKBLOCK
WeaponsFirearms sales, explosivesPOLICYBLOCK
DrugsRecreational drug promotionBLOCKBLOCK
Violence / HateGore, extremist contentBLOCKBLOCK
Health & MedicineClinics, patient educationALLOWALLOW
EducationSchools, courseware, referenceALLOWALLOW

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.

Frequently asked

How do we keep the offline database current?

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.

Do you classify full URLs or only domains?

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.

Web-filtering taxonomy or IAB — which should we use?

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.

Related resources

Test it against your own traffic

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
Stay in the loop

You are on the list!

We will send you updates that matter — no spam.