Keyword blocklists fail both ways: they miss crises lacking the blocked word and suppress quality journalism containing it. This API reads each page in full — categories, quality, MFA, COPPA, and sentiment — so you can replace binary blocking with suitability tiers that protect the brand without killing reach.
Every brand-safety incident follows the same script: an ad beside content no one would place it near, a screenshot circulates, spend freezes. The industry reflex — longer keyword blocklists — causes the opposite failure at far larger scale.
Keyword filters miss dangerous pages because the blocked word is absent, and flag harmless ones because it appears. Only whole-page understanding separates the two.
Words like "shooting" or "attack" strip ads from award-winning journalism. Brands lose the high-attention news audience; publishers lose revenue — and spend flows to blander, worse inventory.
Industry frameworks distinguish an absolute floor from graduated risk levels per category. A keyword cannot tell glorification of violence from reporting on it — a page-level classifier can.
A page can pass every content check and still be a made-for-advertising farm wasting budget — or a child-directed site creating COPPA liability. Categories alone miss commercial and regulatory risk.
Four products, one URL in. Together they replace "is this word present?" with "what is this page, how risky is it, and at what tier should we buy it?"
One call to POST /api/iab/iab_web_content_filtering.php classifies the
page into the IAB Content Taxonomy (703 categories) and the
Web Filtering taxonomy — 44 categories
covering floor content every framework excludes. Because the model reads meaning, crisis
reporting and glorification land in different categories.
Quality scores grade clickbait, trustworthiness, design, and deception so you can express policy as tiers, not walls. Explore live results in the suitability dashboard and the URL classification dashboard, or test single pages with the Brand Safety Checker and Quality Score tools.
MFA detection
(POST /api/mfa/score.php) protects the budget from arbitrage inventory that
passes every content check. COPPA compliance
scoring (POST /api/coppa/score.php) flags child-directed pages where
behavioral advertising creates regulatory exposure — two risks no keyword list
can see.
Some placements are category-safe but tone-wrong: a celebration campaign beside a
somber obituary is technically "News" and completely unsuitable. The
Sentiment Analyzer adds a tone dimension,
also available in segmentation's content_context block. For planning-scale
screening, the 102M-domain database carries pre-built
classifications.
Classification first, floors second, graduated risk last. The result is a tier your DSP or ad server can act on — and that a marketer can read.
curl -X POST "https://www.websitecategorizationapi.com/api/iab/iab_web_content_filtering.php" \ -d "query=https://example.com/news/article" \ -d "api_key=YOUR_API_KEY" \ -d "data_type=url"
{
"classification": [
{"category": "News and Politics > Crime", "confidence": 0.91},
{"category": "News and Politics > Law", "confidence": 0.64}
],
"language": "en",
"status": 200
}
The classifier tells you this page is reporting about crime — a suitability decision — not promoting it, which would surface in the web-filtering floor categories instead.
import requests
BASE = "https://www.websitecategorizationapi.com"
def post(path, extra=None):
data = {"query": url, "api_key": API_KEY}
data.update(extra or {})
return requests.post(BASE + path, data=data, timeout=180).json()
def suitability_tier(url):
page = post("/api/iab/iab_web_content_filtering.php",
{"data_type": "url"})
cats = {c["category"] for c in page["classification"]
if c["confidence"] >= 0.6}
# 1. Floor: never monetize, for any brand
if cats & FLOOR_CATEGORIES: # adult, weapons, hate...
return "FLOOR"
# 2. Commercial + regulatory layers
mfa = post("/api/mfa/score.php")
if mfa["mfa_score"] >= 66:
return "HIGH_RISK" # budget safety
coppa = post("/api/coppa/score.php")
if coppa_flags_child_directed(coppa):
return "REGULATED" # contextual ads only
# 3. Graduated suitability, per brand policy
if cats & brand_policy.high_risk: # e.g. graphic news
return "HIGH_RISK"
if cats & brand_policy.medium: # e.g. hard news, debate
return "MODERATE"
return "SUITABLE"
tier = suitability_tier(url)
apply_bid_multiplier(url, TIER_MULTIPLIERS[tier])
Different brands draw the line differently: a toy brand and an energy-drink brand should not share a blocklist. Keep the floor absolute and let each campaign pick its tier — that is how you stay safe and stay in the news.
| Tier | What lands here | Typical treatment |
|---|---|---|
| FLOOR | Web-filtering floor categories: adult, hate, weapons, illegal content | Never monetize, for any brand, ever |
| HIGH RISK | Graphic or breaking crisis coverage; MFA score 66+ | Exclude by default; opt-in only for risk-tolerant brands |
| MODERATE | Hard news, politics, contested social topics | Suitable for most brands; sensitive campaigns exclude |
| LOW RISK | General news, sport, business, entertainment | Include; monitor tone via sentiment |
| SUITABLE | Aligned verticals, high quality scores, positive or neutral tone | Include; candidate for contextual PMPs |
A marathon-day tragedy article tiers HIGH RISK for a sportswear launch — and stays monetizable for a brand that supports news. Journalism keeps its funding, your brand keeps its distance, each by explicit policy rather than keyword accident.
The web filtering taxonomy covers floor categories such frameworks exclude outright. The 703-category IAB classification provides resolution for graduated risk levels per sensitive topic. You receive categories and confidences — not a verdict — so you can encode your own mapping and change it per client without re-classifying.
The opposite — that is the point. Whole-page classification distinguishes reporting from glorification, and sentiment separates somber from routine coverage. Buy journalism at the MODERATE and LOW RISK tiers instead of keyword-blocking the entire category. Reach comes back; only genuinely unsuitable pages leave the plan.
Yes. Screen placement lists in batch through the APIs, or license the 102M-domain offline database to tier every domain before a single bid — the same architecture our DSP & SSP customers use. For one-off checks, the Brand Safety Checker gives an instant interactive answer.
Send us your keyword blocklist and a placement sample. We return the pages you wrongly block, the risks you miss, and a tiered suitability map to replace both.
Try Categorization Request a Sample Read the API Docs