Blog · Supply chain

Half a billion AI slop impressions in H1 2026 can still arrive as clean OpenRTB requests, because nothing on the bid labels generated junk.

Trade coverage on September 14 reported that verification technology detected more than half a billion impressions of low-quality AI-generated content, what the industry is calling AI slop, during the first half of 2026. The figure is large enough to headline. The footnote underneath it is what matters for programmatic buyers: the count includes impressions blocked before an ad served and impressions measured after an ad already appeared. Those are not the same population, and neither one is labeled on the OpenRTB request that cleared the exchange.

The denominator mixes defense with exposure

When a verification vendor publishes a single integer for AI slop, read the sentence after the number first. The September 14 reports say the half-billion figure includes slop impressions identified through the vendor's technology, as well as whether they were blocked from serving an ad or measured after an ad appeared. Blocked inventory never reached your DSP. Measured-after inventory did, and only shows up in a post-bid or log-level data feed if you bought that layer.

A buyer who turned on pre-bid avoidance in Q1 can honestly say slop exposure fell on defended lines while the industry total still climbed. That is not a contradiction. It is two budgets looking at two slices of the same supply pool. Unprotected programmatic spend is still the monetization engine the report describes: low-quality AI content can be produced quickly and cheaply, creating an incentive to generate content at scale and monetise the resulting traffic through advertising.

The same release notes a coordinated network of more than 200 AI slop domains where operators left the AI prompts used to create the network in the sites' code. That detail is useful because it confirms the supply is programmatic in practice: hundreds of interchangeable domains, not one bad URL you can add to a static blocklist and forget. RTBlint is independent and not affiliated with DoubleVerify or any verification vendor.

Categories on the page are not categories on the bid

The data also shows how varied AI slop has become. In EMEA, travel was the number one content category for AI slop, with significant volume across sports, technology and computing, violence, and vehicle disasters. A travel buyer who reads that list may assume their travel segment is safe because they excluded violence. Programmatic targeting does not work that way. The slop page can carry an IAB content taxonomy code that reads like travel while the article body is generated filler about destinations nobody verified.

OpenRTB carries category signals on site.cat, app.cat, and inside the content object as content.cat with a cattax pointer. Sellers populate those fields from their CMS, their SSAI classifier, or a best guess. Buyers filter on them. Nothing in the bid request asserts human editorial review, model provenance, or image authenticity. A made-for-advertising domain and a legitimate travel publisher can both emit content.cat values that parse cleanly and mean different things in the real world.

That gap is the same structural blind spot MFA inventory has exploited for years. Our MFA definition notes that nothing in OpenRTB marks a request as made for advertising, and MFA inventory usually passes ads.txt, sellers.json, and payload validation cleanly. AI slop is MFA with a generative production line attached. The bid still looks like a page view on a domain with a category array and a valid seller chain.

What the request looks like when slop monetizes

Here is a simplified site request for a display imp on one of those interchangeable slop domains. Every field below can validate against OpenRTB 2.x and AdCOM enums while the page is still low-quality generated text with auto-refreshing slots. The buyer sees travel taxonomy codes because that is what the seller sent, not because a human travel editor approved the article.

{
  "id": "req-slop-travel-001",
  "site": {
    "domain": "ai-travel-digest.example",
    "page": "https://ai-travel-digest.example/budget-trips-paris",
    "cat": ["IAB20"],
    "publisher": { "id": "pub-8842", "name": "Travel Network LLC" }
  },
  "source": {
    "fd": 1,
    "tid": "tid-slop-001",
    "schain": {
      "complete": 1,
      "nodes": [
        { "asi": "reseller.example", "sid": "8842", "hp": 1 },
        { "asi": "exchange.example", "sid": "441", "hp": 1 }
      ]
    }
  },
  "imp": [{
    "id": "1",
    "banner": { "w": 300, "h": 250, "pos": 0 },
    "bidfloor": 0.08,
    "ext": { "refresh": 30 }
  }]
}

A linter checking required objects, ID formats, and schain completeness returns green. A buyer applying a travel inclusion list on site.cat or content.cat may bid. A buyer relying on domain reputation alone may bid if the domain is new enough not to be on last month's blocklist yet. The impression only becomes slop in post-bid classification or in a verification log, after money moved. That timing mismatch is why the half-billion number can rise while your pre-bid dashboard looks calm.

UK brand risk is a supply-path problem too

The release highlights UK consumer sensitivity. Nearly half, 48 percent, of UK consumers say seeing a brand advertised alongside low-quality AI-generated content would negatively impact their perception of that brand, including 30 percent who say it would have a very negative impact. Brand teams will read that as a creative adjacency issue. For programmatic operators it is also a path issue: the adjacency is chosen by the auction, not by a human trafficker, unless you enforce inventory rules upstream of the bid.

Quotes in the coverage argue that identifying and avoiding individual pieces of content is not enough because new sources emerge daily. That maps directly to bidstream architecture. Piece-level post-hoc reporting helps finance reconcile spend. It does not stop the next domain in the 200-site network from sending tomorrow's request with a fresh site.domain and the same publisher.id pattern. Domain lists decay. Category allowlists inherit whatever the seller asserted. Fresh slop domains rotate faster than quarterly list updates unless you automate ingestion from verification feeds or build performance-based exclusion on log-level outcomes.

Preventing ads from appearing alongside slop, as the release puts it, reduces the financial incentive to produce more of it. That only works when enough spend is actually blocked or bid-adjusted pre-auction. Measured-after impressions in the same headline total did contribute to the economics until someone turned the filter on.

Where buyers can still see the request

OpenRTB will not add an ai_generated: true flag tomorrow. Practical filters stay where they already live for MFA and IVT: vendor segments attached in imp.ext or bid request extensions, deal IDs that require a declared quality segment, domain and app bundle blocklists maintained from log-level data, and bcat / category exclusions that match how your team maps IAB codes to verticals. Refresh intervals on display imps remain a tell: auto-refreshing slots show up in imp.ext.refresh on some exchanges and never appear on others, which is its own consistency problem when you compare supply paths.

For sellers, inconsistent content.cat versus on-page topic is a long-term trust problem. Mislabeled travel inventory trains buyers to distrust your taxonomy, which hurts legitimate packages. Sending both deprecated and current video fields is already a documented CTV failure mode; sending confident category codes on generated pages is the display equivalent. Validation catches malformed IDs, not editorial truth.

If you receive BidResponse.nbr codes from partners, none of them currently encode slop. You will see nbr 2 for malformed requests and inventory filtered for business reasons you configured off-request. Slop remains invisible at auction time unless you imported an external segment. Our no-bid reason guide covers what you can diagnose from nbr; slop is not on that list yet.

Checklist before you trust a category target

  • Split verification metrics into blocked pre-bid versus measured post-bid before you compare quarters or regions.
  • Do not treat site.cat or content.cat as ground truth for editorial quality. Treat them as seller assertions you corroborate with log-level outcomes and domain history.
  • Refresh domain and bundle blocklists from verification feeds faster than the slop networks rotate domains. A 200-domain network is a template, not a finite set.
  • Watch imp.ext.refresh and ad density proxies where your exchanges expose them. High refresh plus paid traffic acquisition patterns overlap MFA and slop economics.
  • Validate OpenRTB shape on ingress so you separate parse failures from business filters. A malformed schain and a clean request on a slop domain are different fixes. RTBlint checks payload consistency; it does not detect AI-generated text or bots.

Inspect a live bid request on rtblint.org/validate/ when you are debugging field drift, schain completeness, or category arrays that look plausible in JSON and wrong in the placement report.

Sources