Start with the fill-rate equation
The practical view is simple: if Google Ad Manager receives ad requests but does not return a paid ad often enough, the publisher has unsold inventory. The reporting workflow must keep the demand signal and the missing fill signal side by side.
In an MCP workflow, ask for ad requests, ad server impressions, unfilled impressions, fill rate, revenue, and eCPM grouped by DATE, AD_UNIT_NAME, device category, and country.
- High ad requests with high unfilled impressions usually point to demand, pricing, targeting, or technical setup issues.
- Low ad requests are a traffic or tagging question, not primarily an unsold inventory problem.
- A stable fill rate with falling revenue may indicate lower yield rather than more unsold inventory.
Segment before you optimize
Network-wide averages hide the real problem. A 93% fill rate can still contain one homepage ad unit with a broken bidder, one mobile placement with invalid sizes, or one country excluded by a campaign rule.
The first useful report should segment by ad unit, device, country, and date. Add Line Item or Order only when you need to understand which demand source filled the request.
- Use
AD_UNIT_NAMEorAD_UNIT_CODEto locate the inventory surface. - Use device and country dimensions to catch demand gaps that are invisible in total rows.
- Compare yesterday, last 7 days, and the same weekday last week before changing price floors.
Turn the report into an action queue
The goal is not to admire a table. The goal is to create a short action queue: ad units to inspect, floors to review, campaigns to add, and tagging paths to test.
Claude or Codex can use MCP output to rank issues by lost opportunity: unfilled impressions multiplied by historical eCPM, filtered to placements where traffic volume is high enough to matter.
- Send technical issues to engineering when ad requests disappear or sizes are inconsistent.
- Send demand issues to monetization when requests exist but fill rate or eCPM falls.
- Keep a saved template so the same checks run after every GAM trafficking change.
