Keyword blocklists fail in both directions: they let a brand land next to a crisis because the "wrong word" wasn't on the list, and they block quality journalism because the "right word" was. This platform reads the whole page — 703 IAB categories plus a 44-category web filtering taxonomy, suitability and quality scores, MFA and COPPA risk layers, and sentiment — so you can move from binary blocking to suitability tiers that protect the brand without killing reach.
Every brand-safety incident that makes the trade press follows the same script: an ad appears beside content no reasonable person would place it near, a screenshot circulates, and spend is frozen while everyone audits everyone. The industry's reflex — longer keyword blocklists — causes the opposite failure at far larger scale.
Airline ads beside crash coverage, snack brands beside tragedy — keyword filters miss these because the dangerous page rarely contains the blocked word, and the harmless page often does. Only whole-page understanding separates the two.
Blocklists carrying words like "shooting", "COVID" or "attack" strip ads from award-winning journalism wholesale. Brands lose the engaged, high-attention news audience; publishers lose the revenue that funds the reporting — and the money flows to blander, worse inventory.
Industry suitability frameworks distinguish an absolute floor (never monetize) from graduated risk levels per category. A keyword can't tell glorification of violence from reporting on it — a classifier that reads the page can.
A page can be "safe" by every content standard and still be a made-for-advertising farm wasting your budget — or a child-directed site exposing you to COPPA liability. Content categories alone don't surface 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 for this brand, and at what tier should we buy it?"
One call to POST /api/iab/iab_web_content_filtering.php classifies the rendered
page into the IAB Content Taxonomy (703 categories) and the
Web Filtering taxonomy — 44 categories built for
brand safety, parental controls and compliance, covering the floor content every framework
excludes: adult, weapons, hate, illegal drugs and their neighbors. Because the model reads
meaning, crisis reporting and its 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, and COPPA compliance scoring
(POST /api/coppa/score.php) flags child-directed pages where behavioral
advertising creates regulatory exposure — two risks no keyword list can even 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, and the
same signal ships in audience segmentation's content_context block for
campaign-scale use. For planning-scale screening, the
102M-domain database carries classifications for every domain
you might ever bid on.
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
}
Note what the classifier gives you that a keyword never could: this page is reporting about crime — a suitability decision — not a page 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])
The point of tiers is that 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 news article about a marathon-day tragedy tiers HIGH RISK for a sportswear brand's launch campaign — and stays monetizable for a brand that has chosen to support news. That is the difference between suitability and a blocklist: the journalism keeps its funding, and your brand keeps its distance, each by explicit policy rather than by keyword accident.
The web filtering taxonomy covers the floor categories such frameworks exclude outright, and the 703-category IAB classification gives you the resolution to implement graduated risk levels per sensitive topic. Because you receive categories and confidences rather than a verdict, you can encode your own framework mapping — and change it per client without re-classifying anything.
The opposite — that is the point. Whole-page classification distinguishes reporting from glorification, and sentiment separates somber coverage from routine news, so you can keep buying 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 are wrongly blocking, the risks you are missing, and a tiered suitability map to replace both.
Try the Brand Safety Demo Request a Sample Read the API Docs