One ad slot on a page can fire four ad calls, load four creatives, and paint three of them directly behind the one on top. All four get counted as served impressions, and the invoice reflects all four. Ad stacking fraud works because nothing in that sequence breaks.
Pixel stuffing is the same idea compressed. A creative loads inside a frame sized at one pixel by one pixel, renders correctly, fires its impression tracker, and vanishes into a page nobody inspects. From a buying-side view, the first thing reporting shows is nothing unusual: impressions delivered, no discrepancy against the seller’s count, CTR (click-through rate) soft but not absurd. Both schemes survive on arithmetic rather than stealth, because a served impression report counts completed ad calls and both complete them honestly.
Contents
- An Impression Counted Is Not an Impression Seen
- How Ad Stacking Works Inside a Single Slot
- How Pixel Stuffing Hides a Creative in One Pixel
- Why the Served Impression Report Cannot Tell the Difference
- Viewability Is the Layer Where Both Schemes Surface
- Stacked Versus Stuffed in Measurement Data
- Stacked Versus Stuffed: What Each Leaves Behind
- Where the Rules Put Hidden Ads, and Where the Risk Sits
- The Signals Worth Pulling First
- Where These Signals Break Down
- FAQ
- What to Do When the Numbers Look Fine
Key Takeaways:
- A served impression records a completed ad call. The count is genuine; the value is not.
- A clean discrepancy check against the seller’s numbers proves the counting is consistent.
- Viewability separates the two schemes: a stacked slot lets the top creative pass while the layers beneath fail, and a stuffed slot fails on render size alone.
- Non-measurable impressions hide both, so viewable rate taken over measured rather than served impressions deletes the evidence.
- Hidden ads sit in the sophisticated invalid traffic category, where no single signal settles the question.
An Impression Counted Is Not an Impression Seen
A served impression fires when the ad call completes, and the creative is delivered to the browser. That event says nothing about geometry: where the creative landed, at what size, whether anything sat on top of it, or how long it stayed on screen. Two more states sit between counted and seen, and buyers routinely collapse all three into one.
| State | What Actually Fires | What It Proves | What It Does Not Prove |
|---|---|---|---|
| Served impression | Ad call completed, creative reached the browser | Delivery worked | Position, size, or time on screen |
| Measurable impression | Code could read slot size and position | The placement can be assessed | That geometry passed anything |
| Viewable impression | Enough pixels in view long enough to clear the standard | A user had the chance to see it | That anything behind it was visible |
| Non-measurable impression | Ad served, geometry unreadable | Nothing either way | Clean or dirty inventory |
How Ad Stacking Works Inside a Single Slot
The mechanics are ordinary page code. One container holds several ad calls, each in its own frame, all positioned at the same coordinates through absolute positioning and layer order. The frame drawn last, or given the highest layer value, is the one the browser paints on top. Every frame underneath renders in full, fires its own impression tracker, and is never visible to a human being. Variants swap one ingredient, using zero opacity on the lower frames or a parent element that clips everything below the first creative.
Building it costs almost nothing, and running it costs a little. Four creatives instead of one burns bandwidth and slows the page, which is why stacks in the wild stay shallow. That constraint is also the fingerprint: several impressions sharing one page URL, one viewport size, one session, and a timestamp cluster too tight for a human to have triggered them in sequence.
How Pixel Stuffing Hides a Creative in One Pixel
Stuffing does not bother with layers. The creative goes into a frame one pixel by one pixel, or a full-size frame shrunk by a scale transform, or a frame positioned at negative coordinates so it sits outside the visible page. The ad genuinely renders and the tracker genuinely fires. These are invisible ad impressions in the literal sense: the pixels exist, the user’s eye never had access to them.
What stuffing leaves behind is easy to overlook: the reported render dimensions do not match the size that was bought. One honest complication sits next to that. Genuine one-pixel elements are everywhere in ad tech, because measurement and conversion pixels are supposed to be invisible, so any impression fraud detection rule built on dimensions has to know whether it is reading a creative slot or a tracking call.
Why the Served Impression Report Cannot Tell the Difference
Most buyers reconcile impressions by comparing their own ad server count against the seller’s count and investigating the gap. That check is worth running, and it cannot see either scheme. Both numbers derive from the same event, the completed ad call, observed from two ends of the same pipe.
This is the part worth sitting with: a clean discrepancy report is not evidence of clean inventory, only evidence that two systems counted the same event the same way. In a stacked slot, both are correct that four impressions were served, and both are silent on the fact that three were painted behind a fourth. Click data does not rescue the report either, since the missing clicks from buried layers and stuffed slots dissolve into a blended CTR the top creative is still holding up.
Here is what the two cases look like in cross section, with the ad server’s record set against what a person at the screen could have seen.
Schematic comparison. Layer offsets and the one-pixel marker are enlarged for readability.
One slot, four ad calls, four creatives
- Creative 1: seen
- Creative 2: hidden
- Creative 3: hidden
- Creative 4: hidden
One ad call, one creative rendered at 1 × 1
300 × 250 creative squeezed into a 1 × 1 nested frame
Both cases keep the served count clean.
Viewability Is the Layer Where Both Schemes Surface
Viewability measurement asks a different question: not whether the ad was delivered, but whether enough of it stayed on screen long enough to be seen. The MRC Viewable Ad Impression Measurement Guidelines set the display threshold at a minimum of 50% of the ad’s pixels in view for at least one continuous second. For video the requirement is 50% of pixels for at least two continuous seconds, and for large ads above 242,500 pixels the threshold drops to 30% of pixels for one second.
Those thresholds are geometric, which is why they catch both schemes. A creative covered by three others and a creative rendered at one pixel fail on the same arithmetic: not enough pixels, not long enough. Viewability fraud is less a separate attack than the monetization of that gap.
If your reporting stops at delivered impressions and cost per mille, no column exists where either scheme can appear.
Stacked Versus Stuffed in Measurement Data
The two schemes leave different fingerprints. A stacked slot shows acceptable viewable rates on the top creative and in-view durations for the buried layers that are zero or absent, while a stuffed placement shows a collapse in measured impressions with render dimensions that contradict the size bought.
Now the part that catches experienced teams. With only one measurement vendor in the chain, that vendor’s code measures the layer it is attached to and nothing else. If the tag rides on the top creative of a stacked slot, the report comes back clean for that creative and silent about the three underneath. Silence reads like a pass, and it is not one.
The same trap has an arithmetic version. Viewable rate is often calculated over measured impressions, and stuffing pushes impressions into the non-measurable bucket, so that denominator removes exactly the impressions carrying the evidence. Viewable rate can improve while inventory gets worse. Keep the denominator at served impressions.
The matrix below sets both schemes against the axes a buyer can check.
Stacked Versus Stuffed: What Each Leaves Behind
Read each row across. This is an illustrative pattern, not measured data.
| What You Compare | Ad Stacking | Pixel Stuffing |
|---|---|---|
| Served Impression Report | Looks normal. Every layer is recorded as one served impression. | Looks normal. One ad call produces one count, with no served-report discrepancy to chase. |
| Viewability Measurement | The top layer can pass. Lower layers fail or return as non-measurable. | It fails outright or lands in the non-measurable bucket. |
| Signal That Exposes It | Slot overlap, layer order, and time in view for each creative. | Reported render width and height, plus frame-nesting depth. |
| Main False Positive Risk | Consent screens, sticky headers, and legitimate overlays can cover ads. | Small legitimate units and slots that collapse when a page fails to fill. |
| With One Vendor in the Chain | Only the layer carrying the vendor’s tag is measured. Silence from lower layers is not a pass. | The non-measurable rate rises while served impressions remain unchanged. |
Served Impression Report
Looks normal. Every layer is recorded as one served impression.
Looks normal. One ad call produces one count, with no served-report discrepancy to chase.
Viewability Measurement
The top layer can pass. Lower layers fail or return as non-measurable.
It fails outright or lands in the non-measurable bucket.
Signal That Exposes It
Slot overlap, layer order, and time in view for each creative.
Reported render width and height, plus frame-nesting depth.
Main False Positive Risk
Consent screens, sticky headers, and legitimate overlays can cover ads.
Small legitimate units and slots that collapse when a page fails to fill.
With One Vendor in the Chain
Only the layer carrying the vendor’s tag is measured. Silence from lower layers is not a pass.
The non-measurable rate rises while served impressions remain unchanged.
Where the Rules Put Hidden Ads, and Where the Risk Sits
The IAB and MRC invalid traffic detection and filtration guidelines split invalid traffic into GIVT (general invalid traffic), which routine filters remove, and SIVT (sophisticated invalid traffic), which they do not. Hidden ads and falsified ad requests sit in SIVT, and the guidelines are explicit that this category needs advanced analytics and corroboration across multiple points rather than a single check.
Risk concentrates where nobody is looking at the page. Unfiltered open programmatic supply, unverified exchanges, and long chains with opaque resellers share one property: each hop puts the buyer further from the page where the creative lands and reduces what can be verified. The scheme belongs to whoever writes the page code, not to the format bought or the channel it came through.
The surrounding waste is documented, even if this scheme is not counted separately. The ANA Programmatic Media Supply Chain Transparency Study first look, published in 2023 by the Association of National Advertisers, tracked 123 million dollars of ad spend across 35.5 billion impressions from 21 marketers between September 2022 and January 2023. The study found that made-for-advertising websites took 21% of the impressions and 15% of the ad spend it examined, and put total waste in the $88 billion open-web programmatic market at as much as $20 billion, or 23% of it.
The Signals Worth Pulling First
Start with render dimensions, broken out by seller and by placement rather than blended. A creative bought at one size and reported at another is the fastest read available, and the one signal that resolves stuffing on its own most of the time.
Non-measurable rate deserves its own column, also by seller, because a blended number hides one bad seller inside a large buy. Sellers whose non-measurable share runs far above the rest of the buy, with served impressions holding steady, are worth pulling for review regardless of whether anyone can prove intent.
In-view duration works better as a distribution than an average. Honest inventory produces a spread, while a placement where in-view time clusters at exactly the minimum, or where buried creatives report no duration at all, is describing machinery rather than people. Time to first scroll makes a useful pair, since a viewable impression logged before a user could have scrolled that far deserves review. Frame nesting depth closes the set, because creatives arriving several frames deep with the innermost frame far smaller than the unit bought describe a slot never meant to be seen.
Where These Signals Break Down
Every signal above has an honest explanation competing with it. Consent screens, sticky headers, and chat widgets cover ads legitimately, so overlap alone cannot separate a stacked slot from a normal page. Slots also collapse to near-zero dimensions when a page fails to fill, and high non-measurable rates come from app webviews with poor geometry reporting or from privacy tools that block measurement scripts.
Analysts who work these cases describe the same sequence: one signal raises a seller for review, a second independent signal decides whether it is a pattern, and a human still looks before money moves. The strongest evidence is consistency over time on one seller rather than severity in a single day.
One capability gap is worth stating plainly. A standard buying report does not expose the layer order of a page, so a buyer cannot see stacking directly. Getting there needs either a measurement vendor that reports overlap and obstruction, or manual inspection of a disclosed placement. Where placements are not disclosed, page-level diagnosis is unavailable and the realistic action is exclusion at the seller or path level. That is narrower than most buyers would like, and pretending otherwise produces worse decisions.
FAQ
What is ad stacking fraud?
Ad stacking is when several ads load into one slot, layered so only the topmost creative is visible. Every layer fires its own impression tracker, so the advertiser pays for creatives no user could see.
What is pixel stuffing in advertising?
Pixel stuffing places an ad inside a frame roughly one pixel by one pixel, or shrinks and repositions it so it cannot be perceived. The tell is that the reported render size does not match the creative size bought.
Why don’t standard impression reports show ad stacking?
Because a served impression records that an ad call completed. Your ad server and the seller measure the same event, so their numbers agree and nothing there describes overlap, render size, or time on screen.
Does viewability measurement catch pixel stuffing?
Usually yes, either as a failed viewable impression or a non-measurable one. The catch is that non-measurable impressions are often left out of the viewable rate calculation, which hides the problem instead of showing it.
What does a non-measurable impression mean?
The ad served, but measurement code could not read the slot’s size or position, so viewability is unknown rather than good or bad. Legitimate causes include app webviews and blocked measurement scripts, which is why a high non-measurable share is worth investigating seller by seller.
What to Do When the Numbers Look Fine
The useful reflex is to stop asking whether impressions were delivered and start asking what happened to them after delivery. Two ratios do most of that work: measured over served, and viewable over served. Read both by seller, never blended, and never let the second one quietly switch to a measured-impression denominator.
The uncomfortable part is that a report with no discrepancies and no obvious anomaly is exactly what both schemes are built to produce. Clean plumbing and clean inventory are different claims, and only one of them shows up in a delivery report.



