Behavioral targeting depended on third-party cookies — and that foundation is gone. We classify any URL into 703 IAB categories in real time, layer audience personas and purchase intent on top, and score content quality — so you target the right context, for the right audience, on pages worth buying.
Safari and Firefox block third-party cookies by default. Chrome has moved them behind user choice, and Apple’s ATT gutted mobile identifiers. Contextual targeting is the privacy-safe replacement, but naive implementations fail in predictable ways.
Retargeting pools and third-party segments depend on cross-site identity. As identifiers vanish, match rates fall and CPAs rise — no consent banner brings the signal back.
String matching cannot tell “marathon” in a shoe review from “marathon” in bombing coverage. Keyword contextual puts sneaker ads next to tragedy.
A clickbait farm about “best SUVs 2026” matches your automotive keyword list exactly like Car and Driver. Topic alone says nothing about page quality.
“Automotive” covers a teenager reading about video-game cars and an executive configuring a Porsche. Without demographics and intent per page, audience precision is lost.
Each failure mode maps to a specific product. All four layers run from the same URL input — via the real-time API or the offline database — and none touches a user identifier.
The real-time API reads the full page and classifies it into the IAB Content Taxonomy — 703 categories across 4 tiers — with a confidence score per label.
Audience segmentation infers who reads a page: 1,667+ buyer personas across 33 interest groups, demographics, purchase intent and B2B signals.
Content quality scores rate clickbait, trustworthiness and deception per page. MFA detection flags made-for-advertising farms.
The offline database lets you size contextual reach per category, build inclusion lists by vertical or audience segment, and cross-reference traffic tiers.
Categorize the page, map the category to your campaign taxonomy, then attach audience segments. Categorization is one POST with three form fields.
curl -X POST "https://www.websitecategorizationapi.com/api/iab/iab_web_content_filtering.php" \ -d "query=https://www.caranddriver.com" \ -d "api_key=YOUR_API_KEY" \ -d "data_type=url"
{
"classification": [
{"category": "Automotive > Car Reviews", "confidence": 0.93},
{"category": "Automotive > Buying Advice", "confidence": 0.81}
],
"language": "en",
"status": 200
}
import requests
BASE = "https://www.websitecategorizationapi.com"
def categorize(url):
r = requests.post(f"{BASE}/api/iab/iab_web_content_filtering.php",
data={"query": url, "api_key": API_KEY, "data_type": "url"},
timeout=60)
return r.json()
def segment(url):
r = requests.post(f"{BASE}/api/audience/segment.php",
data={"query": url, "api_key": API_KEY}, timeout=120)
return r.json()["audience_segmentation"]
CAMPAIGN_LINES = { # your campaign taxonomy
"Automotive": "line_auto_q3",
"Personal Finance": "line_finance_q3",
}
page = categorize(url)
top = page["classification"][0]
if top["confidence"] >= 0.85: # tight match: safe to target
line = CAMPAIGN_LINES.get(top["category"].split(">")[0].strip())
aud = segment(url)
intent = aud["purchase_intent"]
if line and intent and intent[0]["confidence"] >= 0.8:
activate(line, url,
personas=[p["persona"] for p in aud["personas"][:5]],
income=aud["demographics"]["likely_income"]["level"])
{
"url": "https://robbreport.com/motors/cars/",
"audience_segmentation": {
"personas": [
{"persona": "Exotic Car Enthusiast",
"mapped_from": "Automotive > Auto Type > Luxury Cars"},
{"persona": "Luxury Car Enthusiast",
"mapped_from": "Automotive > Auto Type > Luxury Cars"},
{"persona": "Luxury Traveler",
"mapped_from": "Automotive > Auto Type > Luxury Cars"}
],
"demographics": {
"likely_age_groups": [
{"range": "35-44", "confidence": 0.7},
{"range": "45-54", "confidence": 0.6}
],
"likely_gender_skew": {"male": 0.8, "female": 0.2},
"likely_income": {"level": "affluent", "confidence": 0.9},
"likely_education": {"level": "bachelor", "confidence": 0.7}
},
"purchase_intent": [
{"category": "luxury vehicles", "confidence": 0.9}
],
"life_stage": [
{"stage": "established professionals", "confidence": 0.8}
],
"content_context": {
"content_type": "news",
"brand_mentions": ["Tesla", "BMW", "Porsche",
"McLaren", "Maserati"],
"price_signals": "premium",
"sentiment": "positive"
},
"iab_categories": ["Automotive > Luxury Cars",
"Automotive > Supercars",
"Automotive > Electric Vehicles"]
},
"page_title": "Robb Report Cars | Luxury Vehicles and High-End Cars",
"status": 200
}
Every classification returns a confidence value. The right threshold depends on what the decision costs — tune against your own delivery data.
| Confidence | Band | Meaning | Typical action |
|---|---|---|---|
| 0.85–1.00 | STRONG | Unambiguous topical match | Target; use for premium contextual PMPs |
| 0.60–0.84 | GOOD | Clear category, mixed-topic page | Target in broad-reach lines |
| 0.40–0.59 | WEAK | Secondary theme only | Use as negative signal or ignore |
| < 0.40 | NOISE | No reliable topical signal | Exclude from contextual lines |
Pull reach counts per IAB category and persona from the 102M-domain database. Build inclusion lists that clear your quality bar.
Classify placement URLs through the API nightly, attaching IAB codes, personas and quality tiers to every placement you already buy.
Push URL and domain lists into your DSP as contextual segments — standard inclusion-list targeting, no custom integration.
Compare CPA and attention by category and persona, then feed winners back into step 1. Pages, unlike cookies, do not expire.
Built-in DSP contextual is typically domain-level and keyword-based. This platform classifies the individual page with a full-taxonomy model, adds audience personas and purchase intent, and exposes confidence scores so you control precision. Everything exports as plain lists for any DSP.
Use the right tool per decision point. The real-time API suits enrichment pipelines and ad-server lookups. For bid-stream speeds, the offline 102M-domain database gives local lookups with no network call — see our DSP & SSP use case.
No user data is involved. Every signal — category, persona, intent — is inferred from page content, not from who visited. There is nothing to consent, hash or sync; it works identically in Safari, the EU and on iOS.
Send us placement URLs and get back IAB categories, personas and quality tiers — the exact enrichment a live integration would produce.
Try the Context Aware Ads Demo Request a Sample Read the API Docs