Maintaining 100% Google-Friendly Brand Safety: Filtering Alcohol, Gambling, and Sensitive Categories at the Edge

In OpenRTB 2.6 auction orchestration, brand safety enforcement begins at the edge before a single bid request leaves the supply-side platform (SSP) or Prebid

3D illustration of a multi-layered emerald-glass brand-safety filtration shield deflecting jagged restricted ad shards while allowing clean golden and blue programmatic packets through.

In OpenRTB 2.6 auction orchestration, brand safety enforcement begins at the edge before a single bid request leaves the supply-side platform (SSP) or Prebid Server instance, specifically through the deterministic population of the bcat (blocked advertiser categories), badv (blocked advertiser domains), and battr (blocked creative attributes) arrays. When an ad network or SSP allows unrestricted demand categories such as alcohol, online gambling, adult themes, tobacco, or unverified pharmaceuticals into its auction stream, the resulting policy friction degrades auction mechanics across the entire supply chain. Even if a single publisher temporarily captures a marginal CPM uplift from a high-risk vertical, the downstream penalties from tier-1 demand-side platforms (DSPs) and primary exchange partners quickly erase those gains through reduced bid density, aggressive query-per-second (QPS) throttling, and domain-level or bundle-level blocks.

At Sky Boosts, our programmatic architecture is engineered around a strict, network-wide invariant: we monetize 100% Google-friendly, HUMAN and Pixalate invalid-traffic-clean (IVT-clean) inventory, and we clear exclusively mainstream, brand-safe demand. By filtering restricted categories at the Prebid.js 11.x, Prebid Mobile SDK, and Prebid Server (Go/Java) edge across Web, Mobile App, and Connected TV (CTV) environments, our unified SSP and monetization platform protects publisher ad accounts from policy strikes while preserving institutional demand access.

Why Mainstream Demand Commands Premium Long-Term Fill Rates

Programmatic yield optimization is frequently misunderstood as a pure floor-price or wrapper-timeout exercise, yet supply path hygiene dictates long-term clearing prices far more than short-term bid shading adjustments. Tier-1 DSPs continuously score supply paths based on historical brand safety compliance, IVT rates, and category alignment. When an SSP or Google Multiple Customer Management (MCM) network mixes mainstream publisher inventory with sensitive or restricted demand, automated DSP supply-path optimization (SPO) algorithms reclassify the entire supply seat as higher risk. Consequently, Fortune 500 brand campaigns with strict inclusion lists automatically route their budgets away from that supply path, starving publishers of high-margin, evergreens brand spend.

This structural reality is reinforced by the Google Publisher Restrictions, which govern content involving sexual themes, shocking content, weapons, alcohol, tobacco, prescription drugs, and online gambling. Under these operational rules, Google Ads will not serve on restricted content, and any cross-contamination that crosses the threshold into violations of Google Publisher Policies (answer/10502938) can result in immediate ad serving deactivation or permanent account suspension. In a Google Ad Manager (GAM 360) and AdX environment operating under MCM Manage Inventory or Manage Account hierarchies, a policy violation triggered by unvetted third-party demand or non-compliant publisher placements jeopardizes not only the individual property, but also the parent network's standing and working capital continuity.

For institutional media owners evaluating enterprise publisher solutions, maintaining a 100% mainstream supply and demand profile directly stabilizes cash flow. Clean inventory avoids the revenue clawbacks, impressions write-offs, and sudden seat suspensions that plague networks tolerating gray-area verticals. Because mainstream brand demand clears with near-zero policy clawback risk, Sky Boosts is able to underwrite predictable Net-30 and Net-60 payment cycles, ensuring that high fill rates and clearing prices translate into realized publisher payouts rather than disputed invoice deductions.

Mapping IAB Content Taxonomy 3.1 to OpenRTB bcat and acat Arrays

Enforcing a zero-tolerance policy against restricted categories at scale requires translating high-level compliance rules into machine-readable OpenRTB protocol signals. Historically, programmatic exchanges relied on the legacy IAB Tier-1 and Tier-2 category codes introduced in OpenRTB 2.0 (such as IAB1 through IAB26). While still widely used by legacy DSP bidders, that initial classification framework lacked the granularity required to distinguish between benign editorial contexts and restricted commercial intent across modern media formats.

To resolve this ambiguity, the IAB Tech Lab Content Taxonomy 3.0 and 3.1 standards (with version 3.1 released in December 2024) expand contextual classification from roughly 400 legacy codes to over 1,500 distinct categories, while introducing multi-dimensional descriptive vectors to standardize brand safety signaling across news, CTV, podcasts, and games. Rather than treating content classification as a flat string match, Content Taxonomy 3.1 separates the core topic hierarchy from orthogonal vectors such as Content Type, Channel, and Environment, enabling edge servers to classify inventory with surgical accuracy while blocking high-risk advertiser categories without over-blocking legitimate journalism or entertainment.

Within OpenRTB 2.6, the taxonomy version in use is declared explicitly via the cattax integer attribute at the root bid request level (and within the content.cattax object for supply-side contextual declarations). While cattax: 1 denotes the original IAB Content Category Taxonomy 1.0 and cattax: 2 denotes version 2.0, modern edge implementations utilize updated taxonomy enumerations alongside backward-compatible category translation tables. Furthermore, OpenRTB 2.6 supports both bcat (an array of blocked advertiser categories) and acat (an array of allowed advertiser categories), giving our brand-safety and IVT filtering framework dual-mode control over which demand verticals can participate in a given auction.

Blocking Restricted IAB Tier-1 and Tier-2 Codes in Bid Requests

Because global DSPs operate at varying stages of taxonomy migration, a resilient edge filter cannot rely solely on a single taxonomy version. If an SSP sends only Content Taxonomy 3.1 integer IDs to a bidder whose parser still expects legacy IAB8-5 (Cocktails/Beer) or IAB9-7 (Card Games/Casinos) strings, the blocklist fails silently. To prevent this protocol mismatch, Sky Boosts' Prebid Server adapter layer dynamically translates our master brand-safety policy into the specific cattax dialect registered in each downstream bidder's capability profile before transmitting the HTTP POST payload.

Across all auctions, our edge router enforces a hard block on alcohol (IAB8-5, IAB8-18, and Taxonomy 3.1 equivalents under Food & Drink > Alcoholic Beverages), gambling and sports betting (IAB9-7 and sensitive gambling vectors), tobacco and vaping (IAB9-9), adult and non-standard content (IAB25, IAB25-1 through IAB25-7), illegal content (IAB26), weapons, and unverified pharmaceuticals (IAB7-5, IAB7-39). Below is a production-grade representation of how Sky Boosts normalizes and injects these constraints at the OpenRTB 2.6 request edge alongside Prebid Server ortb2 configuration rules:

{
  "id": "80ce30c53c16e0b341016993",
  "tmax": 160,
  "cur": ["USD"],
  "cattax": 1,
  "bcat": [
    "IAB7-39",
    "IAB8-5",
    "IAB8-18",
    "IAB9-7",
    "IAB9-9",
    "IAB25",
    "IAB25-1",
    "IAB25-2",
    "IAB25-3",
    "IAB25-4",
    "IAB25-5",
    "IAB25-6",
    "IAB25-7",
    "IAB26",
    "IAB26-1",
    "IAB26-2",
    "IAB26-3",
    "IAB26-4"
  ],
  "badv": [
    "example-casino-operator.com",
    "example-spirits-brand.com",
    "unverified-pharma-direct.net"
  ],
  "imp": [
    {
      "id": "1",
      "banner": {
        "format": [{"w": 300, "h": 250}, {"w": 300, "h": 600}],
        "battr": [1, 2, 3, 6, 8, 9, 10, 14]
      },
      "video": {
        "mimes": ["video/mp4", "application/javascript"],
        "minduration": 5,
        "maxduration": 30,
        "protocols": [7, 8, 11, 12],
        "battr": [1, 3, 8, 9, 10, 14]
      },
      "bidfloor": 1.85,
      "bidfloorcur": "USD"
    }
  ],
  "site": {
    "id": "pub-99412",
    "domain": "mainstream-news-publisher.com",
    "cat": ["IAB12", "IAB13"],
    "content": {
      "cattax": 6,
      "cat": ["386", "392"],
      "language": "en"
    }
  }
}

By populating the site.content node with rich Content Taxonomy 3.1 vectors while simultaneously enforcing strict bcat and badv arrays at the root auction level, the edge server guarantees that buyers receive full contextual transparency for mainstream inventory while restricted demand seats are filtered out prior to bid evaluation.

Creative Attribute Filtering (battr) for Audio and Auto-Expandables

Category filtering alone does not guarantee a Google-friendly user experience if an otherwise mainstream advertiser delivers an intrusive, resource-heavy, or deceptive creative execution. Google Publisher Policies and Chromium's Heavy Ad Intervention framework strictly penalize ad units that hijack the browser main thread, trigger unexpected layout shifts, or initiate unsolicited audio playback. To eliminate these failure modes at the protocol layer, Sky Boosts enforces granular creative attribute filtering via the battr array inside every imp.banner and imp.video object, mapping directly to IAB OpenRTB Creative Attributes (Table 5.3).

Specifically, our display and native pipes block attribute 1 (Audio Ad - Auto-Play), attribute 3 (Expandable - Automatic), attribute 6 (In-Banner Video Ad - Auto-Play), attribute 8 (Pop, including pop-up, pop-under, and exit pop), attribute 9 (Provocative or Suggestive Imagery), attribute 10 (Shaky, Flashing, Flickering, Extreme Smileys), and attribute 14 (Windows Dialog or Alert Style). In CTV Server-Side Ad Insertion (SSAI) and VAST 4.3 video streams, where audio playback is expected by the viewer, our edge logic dynamically adjusts battr to permit standard audio while blocking interactive overlays (13), survey units (16), and unskippable VPAID scripts that stall mezzanine transcoding or cause frame drops on resource-constrained Samsung Tizen, LG webOS, and Roku devices.

Automated Creative Scanning and Google Publisher Restrictions Compliance

Signaling bcat, badv, and battr in outbound bid requests establishes the first boundary of defense, yet production AdOps architectures must account for non-compliant or misconfigured DSP seats that ignore request blocks or omit accurate category metadata in their bid responses. If a buyer returns a winning bid declaring a benign category (IAB1 Arts & Entertainment) while its adm markup or VAST 4.3 wrapper chains out to an unlicensed gambling landing page or an alcohol promotion, relying solely on bidder self-declaration exposes the publisher to immediate Google policy strikes.

To close this vulnerability, Sky Boosts implements a synchronous post-bid, pre-render inspection pipeline inside our Prebid Server clusters, paired with continuous asynchronous creative verification. When a seatbid[].bid[] object arrives at the auction edge within the tmax timeout window, our response validator executes four deterministic checks in sub-millisecond memory space before the bid is allowed to compete in the final first-price clearing auction:

  1. Mandatory Metadata Validation: Any bid response lacking a populated adomain (advertiser domain), crid (creative ID), or cat array is immediately rejected at the edge with an OpenRTB loss notice (lurl) carrying loss reason code 200 (Creative Filtered - General) or 203 (Creative Filtered - Size/Attribute Not Allowed).
  2. Real-Time Domain and Category Cross-Checking: The declared bid.cat and bid.attr arrays are validated against the request's bcat and battr lists, while bid.adomain is checked against an in-memory Radix tree containing hundreds of thousands of categorized alcohol, gambling, adult, tobacco, and pharmaceutical domains.
  3. VAST 4.3 and HTML Markup Sanitization: For video bids, our edge parser inspects the XML payload to verify VAST 4.3 schema compliance, blocks insecure HTTP media files, caps wrapper depth to prevent infinite redirect loops, and extracts the AdVerifications and UniversalAdId nodes. For display adm payloads, we strip unauthorized third-party pixels and block known malvertising redirect domains.
  4. Asynchronous Headless Crawling and IVT Telemetry: Every newly observed crid and adm combination is queued into an out-of-band headless Chromium and mobile-emulation scanner integrated with our trust and certifications verification stack. Using HUMAN and Pixalate pre-bid and post-bid telemetry alongside automated visual and DOM classification, any creative that exhibits cloaking, auto-redirect behavior, or undeclared restricted content is permanently added to the edge blocklist across all global regions within seconds.

For publisher engineering and yield teams, the operational takeaway is straightforward: brand safety cannot be relegated to reactive post-campaign reporting or manual blocklist updates after a Google Ad Manager policy warning has already arrived. By enforcing Content Taxonomy 3.1 signaling, strict OpenRTB 2.6 bcat and battr arrays, and synchronous response validation at the SSP and Prebid Server edge, publishers eliminate alcohol, gambling, and restricted categories before a single restricted pixel reaches the client device, securing uninterrupted GAM 360 and AdX access and compounding long-term programmatic yield.

Next step

Put it to work.

Every pattern in this article runs on our unified SSP and monetization platform: GAM and MCM management, Prebid client and server-side, and CTV SSAI.

Net-30 / Net-60 terms · 100% brand-safe demand