PlaybooksArticleOperator-judged

Supply-quality readout checklist

Read a remnant display flight on concentration and click-to-page-view. IVT is not attached until a vendor tag is on the creative. Delivery clicks use the clicks plural field.

Published 2026-09-09 · Search job: how to audit ad placements

Do not open a remnant report and read CTR first.

On the open exchange, leftover inventory produces clicks readily. The June 2026 learning flight was judged on clicks and CTR, then thrown out. The later Supply Bench pull showed why: most placements did nothing, and a few domains produced a large share of billed clicks.

This checklist is how we read a flight when we do not yet have a fraud-vendor number. IVT and viewability stay blank until a vendor tag is attached to the creative. Zero invalid_impressions means nothing is measuring, not that the traffic is clean.

Meters, in order

  1. Coverage. Did the report include the whole spend slice, or only the top rows? Our August 2026 Supply Bench pull ignored offset and 50,000-row limits returned 400, so we only saw the high-spend tail. State that limit before you quote a share.
  2. Concentration. How many domains or placements produced the clicks? Seven domains produced 41.3 percent of clicks from 4.7 percent of impressions in that pull. That shape is the story.
  3. Click-to-page-view. Exchange clicks are not visits. Anonymized main-seat brand-name display flights we can cite sat at 15.85 percent when usable and 3.75 percent when not. Missing visit instrumentation is an instrumentation gap, not automatic fraud.
  4. IVT, only after a vendor tag. Strict rate is invalid_impressions / impressions. Do not use measurable_invalid_impressions as the numerator. Anonymized main-seat flights sat at 0.523 percent acceptable and 1.544 percent when they triggered intervention.
  5. CTR last, and only as a contamination clue. Implausible CTRs on a handful of domains are a watchlist, not a quality score.

Reporting traps that look like "zero quality"

  • Request the clicks plural field. click singular is the wrong name and reads as zero.
  • Async rows come back label-cased (Campaign ID, Clicks). A parser keyed on snake_case reads every metric as zero.
  • Snapshot spend rows can store clicks as zero on purpose. Do not sum snapshot and hourly rows as if they were different auctions.
  • generated_at is when our API responded. It is not provider freshness.

Checklist

Supply-quality readout

Window: _______________
Spend observed: _______________
Coverage (full / partial / unknown): _______________

[ ] Report field for delivery clicks is clicks (plural)
[ ] Parser reads label-cased keys
[ ] Spend is not a raw sum of snapshot plus hourly rows
[ ] Placement count, domain count, and zero-click placement share written down
[ ] Click concentration written (top domains, share of clicks, share of imps)
[ ] Click-to-page-view computed only if the visit join exists
[ ] IVT left blank unless a vendor add-on is on the creative and fields are non-zero
[ ] measurable_invalid_impressions is not used as the rate numerator
[ ] CTR used only to flag implausible domains, not to pick a winner
[ ] ads.txt unauthorized spend noted if present (our Aug 2026 slice: $0.48)
[ ] No sentence that says "low fraud" or "high quality" without IVT attached

Publish the window and the coverage caveat next to any number. A share from a partial pull is still useful. A share presented as a category benchmark is not.