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

Contextual Ad Targeting

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.

703
IAB content categories, 4 tiers deep
1,667+
buyer personas mapped per page
102M
pre-classified domains for planning
0
cookies, IDs or user data required
Try the Audience Demo Request a Sample API Documentation

The problem: the targeting signal you built on is disappearing

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.

Behavioral audiences are collapsing

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.

Keyword targeting misfires badly

String matching cannot tell “marathon” in a shoe review from “marathon” in bombing coverage. Keyword contextual puts sneaker ads next to tragedy.

Junk contexts match the same keywords

A clickbait farm about “best SUVs 2026” matches your automotive keyword list exactly like Car and Driver. Topic alone says nothing about page quality.

Topic is not audience

“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.

The solution: four intelligence layers on every page

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.

1. Page-level IAB categorization

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.

  • A bombing report classifies as sensitive news, not “running gear”
  • Machine-read meaning eliminates the “marathon” class of errors

2. Audience segmentation on top of context

Audience segmentation infers who reads a page: 1,667+ buyer personas across 33 interest groups, demographics, purchase intent and B2B signals.

3. Quality scores to skip junk contexts

Content quality scores rate clickbait, trustworthiness and deception per page. MFA detection flags made-for-advertising farms.

4. A 102M-domain database for planning

The offline database 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
  • No API calls in your planning loop

From URL to activated line item

Categorize the page, map the category to your campaign taxonomy, then attach audience segments. Categorization is one POST with three form fields.

Categorize a page (curl)
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"
Response shape
{
  "classification": [
    {"category": "Automotive > Car Reviews", "confidence": 0.93},
    {"category": "Automotive > Buying Advice", "confidence": 0.81}
  ],
  "language": "en",
  "status": 200
}
Categorize → map → segment (Python)
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"])
Real audience response — robbreport.com/motors/cars/ (trimmed)
{
  "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
}
Key difference from keyword matching: this “cars” page yields an affluent, 35–54, luxury-vehicle intent 0.9 profile. A premium-auto campaign targets it; a budget-hatchback campaign skips it — neither needed a cookie.

Working with confidence scores

Every classification returns a confidence value. The right threshold depends on what the decision costs — tune against your own delivery data.

ConfidenceBandMeaningTypical action
0.85–1.00STRONGUnambiguous topical matchTarget; use for premium contextual PMPs
0.60–0.84GOODClear category, mixed-topic pageTarget in broad-reach lines
0.40–0.59WEAKSecondary theme onlyUse as negative signal or ignore
< 0.40NOISENo reliable topical signalExclude from contextual lines

How teams run it

1

Plan

Pull reach counts per IAB category and persona from the 102M-domain database. Build inclusion lists that clear your quality bar.

2

Enrich

Classify placement URLs through the API nightly, attaching IAB codes, personas and quality tiers to every placement you already buy.

3

Activate

Push URL and domain lists into your DSP as contextual segments — standard inclusion-list targeting, no custom integration.

4

Measure

Compare CPA and attention by category and persona, then feed winners back into step 1. Pages, unlike cookies, do not expire.

Frequently asked

How is this different from the contextual targeting my DSP already offers?

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.

Is page-level classification fast enough for live decisioning?

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.

Does contextual plus audience segmentation raise privacy issues?

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.

Related resources

See your campaign categories mapped

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

You are on the list!

We will send you updates that matter — no spam.