Behavioral targeting was built on third-party cookies, and that foundation is gone. Contextual targeting is the replacement — but only if it understands the page, not just its keywords. We classify any URL into 703 IAB content categories in real time, layer audience personas, demographics and purchase intent on top, and score content quality — so you target the right context, for the right audience, on pages actually worth buying.
Safari and Firefox block third-party cookies by default, Chrome has moved them behind user choice, and Apple's App Tracking Transparency gutted mobile identifiers. Every behavioral audience built on those signals shrinks in reach and accuracy each quarter. Contextual targeting is the privacy-safe replacement — it needs no consent string because it profiles the page, not the person — but the naive version of it fails in ways every media buyer has seen first-hand.
Retargeting pools, lookalikes and third-party segments all depend on cross-site identity. As identifiers vanish, match rates fall and CPAs rise — and no consent banner brings the signal back for the users who decline.
String matching cannot tell "marathon" in a running-shoe review from "marathon" in coverage of the Boston Marathon bombing. Keyword contextual puts sneaker ads next to tragedy — exactly the adjacency failure contextual was supposed to prevent.
A clickbait content farm about "best SUVs 2026" matches your automotive keyword list exactly like Car and Driver does. Topic alone says nothing about whether a page deserves an impression — or will ever deliver attention.
"Automotive" covers a teenager reading about video-game cars and an executive configuring a Porsche. Without demographics, purchase intent and personas per page, contextual buying loses the audience precision behavioral targeting used to deliver.
Each failure mode above maps to a specific product on this platform. All four layers run from the same URL input — via the real-time API for live decisioning or the offline database for planning — and none of them touches a single user identifier.
The real-time categorization API fetches and reads the full page, then classifies it into the IAB Content Taxonomy — 703 categories across 4 tiers — with a confidence score per label. A bombing report classifies as sensitive news coverage; a shoe review classifies as running gear. Machine-read meaning, not string matching, is what eliminates the "marathon" class of errors.
Audience segmentation infers who reads a page: 1,667+ buyer personas across 33 interest groups, likely age, gender skew, income and education, purchase-intent categories, life stage and B2B signals — each persona citing the IAB category that produced it. Browse the full structure in the audience segmentation taxonomy. This restores audience buying without cookies: you buy the pages your audience demonstrably reads.
Content quality scores rate clickbait, trustworthiness, design quality and deception per page, and MFA detection flags the made-for-advertising farms that keyword lists happily match. Test any URL interactively with the Quality Score tool or the Ad Placement Analyzer before it enters a plan.
Media planning needs breadth before the first bid. The offline database of 102M classified domains lets you size contextual reach per category, build inclusion lists by vertical or audience segment, and cross-reference traffic tiers — delivered as flat files or a database, with no API calls in your planning loop.
The core contextual loop: categorize the page, map the category to your campaign taxonomy, then attach audience segments so the line item carries both context and audience. 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
}
This is a real classification from our benchmark set, trimmed for length. Note the difference from a keyword match: the same "cars" page yields an affluent, 35–54, luxury-vehicle purchase intent 0.9 profile — a premium-auto campaign targets it, a budget-hatchback campaign skips it, and neither needed a cookie.
Every classification returns a confidence value, and the right threshold depends on what the decision costs. These are the defaults we recommend to programmatic teams; tune them 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 category and domain inclusion lists that actually clear your quality bar.
Classify your ad server's placement URLs through the API nightly, attaching IAB codes, personas and quality tiers to every placement you already buy.
Push the resulting URL and domain lists into your DSP as contextual segments — standard inclusion-list targeting, no custom integration required.
Compare CPA and attention by category and persona, then feed winners back into step 1. Contextual gets sharper with every cycle, because 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, demographics and purchase intent that DSP segments do not carry, and exposes confidence scores so you control precision. Everything also exports as plain lists, so it works inside any DSP you already use.
Use the right tool per decision point. The real-time API suits enrichment pipelines, ad-server lookups and pre-flight checks. For bid-stream speeds, the offline 102M-domain database gives you the same classifications as a local lookup with no network call — the pattern detailed in our DSP & SSP use case.
No user data is involved at any point. Every signal — category, persona, demographic skew, purchase intent — is a property of the page content, inferred from what the page is about, not from who visited it. There is nothing to consent, hash or sync; it works identically in Safari, in the EU, and on iOS.
Send us a list of placement URLs and get back IAB categories, personas and quality tiers for each — the exact enrichment a live integration would produce.
Try the Audience Demo Request a Sample Read the API Docs