All VAST error codes
303Wrapper errors · VAST 2.0+

VAST Error 303: Empty VAST response (no ad)

The wrapper chain resolved successfully but ended with no ad — a no-fill. The most common VAST error, and an economics signal more than a technical one.

Error 303 means every request in the chain worked — valid XML, no timeouts — but the final response contained no <Ad> element. Demand simply didn't fill the impression: no bid met the floor, targeting excluded the user, or the demand source was out of budget.

Because it's the code for "nothing wrong, nothing sold," a baseline 303 rate is normal on any inventory that isn't 100% sold. It becomes a problem when the rate spikes or sits far above comparable inventory.

Why error 303 happens

Price floor set too high

Bids exist but none clear the floor, so the auction returns empty. The most common self-inflicted cause of a high 303 rate.

Demand budget exhausted

Campaigns pace out during the day. A 303 rate that climbs toward midnight and resets in the morning is budget pacing, not breakage.

Targeting excludes the impression

Geography, device, content category, or missing consent signals disqualify the impression before any bid is placed.

A mid-chain hop has no demand

One intermediary in the chain responds with an empty VAST rather than declining, terminating a chain that other paths could have filled.

Missing or invalid request signals

Requests without proper consent strings, app identifiers, or content metadata get filtered by buyers who require them, silently shrinking demand.

How to fix VAST error 303

  1. 1

    Find where the chain goes empty

    Resolve the chain and identify which hop returns the ad-less response. The fix belongs to that hop's demand configuration, not yours.

  2. 2

    Test the floor

    Temporarily lower the price floor on a slice of traffic. If 303s drop sharply, the floor is mispriced against actual demand.

  3. 3

    Correlate the rate with time of day

    Chart 303s hourly. Budget-pacing patterns (climbing through the day, reset at midnight) point to demand-side pacing, not configuration.

  4. 4

    Audit request completeness

    Confirm consent strings, app/site identifiers, and content signals are present in the ad request — missing signals quietly disqualify large pools of demand.

  5. 5

    Add fallback demand

    Configure a passback or house-ad tag at the end of the chain so an unsold impression renders something rather than nothing.

Free VAST validator

Seeing error 303 on a live tag?

Paste the tag URL or XML — the validator resolves the full wrapper chain, validates the schema, downloads every media file, and shows exactly which stage fails.

Validate your VAST tag

VAST error 303 — frequently asked questions

Is VAST error 303 actually an error?+

Technically it's a delivery failure code; practically it means "no ad was available." Some 303 volume is inherent to any auction-based demand. Treat the rate — and changes in it — as the signal, not individual events.

What's a normal 303 rate?+

It depends entirely on demand density for your inventory type and geography. Well-sold web video might see single digits; niche CTV or low-CPM geos can run far higher. Benchmark against your own history, then investigate deviations.

Why did my 303 rate spike after I changed nothing?+

Demand moved: a large campaign ended, a buyer paused spend, a partner changed their filtering, or seasonal budgets rotated. Resolve the chain to confirm which hop stopped filling, then ask that partner what changed.

Related error codes

Keep reading