What Are Programmatic Ads?
Programmatic advertising is the automated process by which advertising inventory is bought and sold in real time through technology platforms.
Instead of manually negotiating each campaign, ads are assigned through an automatic auction where different advertisers compete to display their creative to a specific user at a specific moment.
The decision on which ad is served depends on multiple variables such as:
User’s geographic location
Device type
Domain where the ad is displayed
Audience segmentation
Available budget
Priority rules configured in the Ad Server
Real-time competition
The result is dynamic: every time an ad is requested, an auction runs in milliseconds.
What is Google Ads, and how is it managed?
It is important to differentiate between two products that are often confused:
Google Ads: Platform used by advertisers to create campaigns and buy inventory.
Google Ad Manager (GAM): Platform used by publishers (media companies, apps, websites) to manage their advertising inventory.
In the context of Terrific, what matters is Google Ad Manager, since it is the system that determines:
Which ad is served
Under what priority
Under what conditions
Whether there is fill or not
Terrific does not manage advertising campaigns directly; it executes the tag configured by the client in their Ad Manager.
General Types of Ads in Google
Broadly speaking, there are two main categories relevant to our environment:
A) Display (Banners): Served via GPT (Google Publisher Tag). These are graphic ads, images, or interactive HTML creatives.
B) Video (VAST): Served via a VAST tag. These are video-format ads that play within a video player.
What is GPT?
GPT (Google Publisher Tag) is the JavaScript library used to load Display ads (banners) from Google Ad Manager.
It is integrated via a script that defines:
The Ad Unit
Allowed sizes
The container ID (div)
Configurations such as Single Request Architecture
Simplified GPT Script Example
<script async src="https://securepubads.g.doubleclick.net/tag/js/gpt.js"></script>
<div id="div-gpt-ad-1"></div>
<script>
window.googletag = window.googletag || {cmd: []};
googletag.cmd.push(function() {
googletag.defineSlot(
'/123456/site/placement',
[[300,600],[320,480]],
'div-gpt-ad-1'
).addService(googletag.pubads());
googletag.pubads().enableSingleRequest();
googletag.enableServices();
googletag.display('div-gpt-ad-1');
});
</script>
Key GPT Concepts
Ad Unit: Inventory identifier within GAM.
Slot: Physical space where the ad is rendered.
SRA (Single Request Architecture): Bundles multiple requests into a single call.
Refresh: Allows requesting a new ad in the same slot.
What is VAST?
VAST (Video Ad Serving Template) is a standard that returns an XML containing all necessary information to play a video ad.
A VAST tag is a URL that:
Is executed.
Returns XML.
Contains the video URL and tracking events.
Is interpreted by a compatible player (IMA).
Example VAST Tag
https://pubads.g.doubleclick.net/gampad/ads iu=/123456/site/video&output=vast&...
Important Web Considerations
Autoplay depends on browser policies.
If autoplay with sound is blocked, the ad must start muted.
The IMA tester is not equivalent to a real production environment.
Relevant Parameters for Web
In a Web environment, important VAST parameters typically include:
description_url → Recommended to send the real site URL (encoded).
vpos → Ad position (preroll, midroll, postroll).
vid_d → Expected content duration.
vpmute → Indicates whether it starts muted.
vconp → Indicates continuous content (e.g., social feed).
plcmt → Placement type.
ott_placement → Internal placement classification.
wta → Web Targeting Allowed.
tfcd → Child-directed treatment flag.
npa → Non-Personalized Ads.
VAST: Testing Environments vs. Production
It is important to understand that ad behavior may vary between testing environments and production environments.
What Is IMA (Testing Environment)?
IMA (Interactive Media Ads SDK) is Google’s library used to play VAST ads in web environments.
The IMA Video Suite Inspector (Google’s tester) is a tool designed to technically validate a VAST tag:
That the XML responds correctly
That the video loads properly
That tracking events function as expected
This is a controlled environment and does not replicate all real traffic conditions.
Why Ads May Appear in the Tester but Not in Production
The tester:
Does not always replicate domain restrictions
Does not simulate real targeting conditions
Does not necessarily reflect budget limitations
May not apply the same eligibility rules as the production environment
In production, the Ad Server evaluates:
Real domain
Real device
Real user
User consent
Targeting rules
Remaining campaign budget
Therefore, a VAST tag may return an ad in the tester but fail to serve in real traffic conditions.
Common Restrictions
The most frequent causes of discrepancies between testing and production include:
Unauthorized domain
Restrictive targeting
Campaign budget exhausted
Incorrect parameters
Browser autoplay restrictions
How to Properly Validate
Real validation should be performed:
On the final domain where the Timeline will be published
With real traffic conditions
By verifying the Ad Server response in the browser console or network tab
The tester is useful for validating technical structure, but it does not guarantee fill in production.
How do Programmatic Ads Work?
When an ad slot becomes visible:
A request is sent to the Ad Server.
The Ad Server evaluates:
Active campaigns
Targeting rules
Priorities
Domain restrictions
Device
User consent
A real-time auction (RTB) is executed.
The winning creative is returned.
The player renders the ad.
If no campaign is eligible: The slot may remain empty (no-fill), unless a fallback such as House Ads is configured.
Inventory Types in Google Ad Manager
Every campaign in Google Ad Manager is set up as a line item. A line item holds the instructions for one campaign: which creative to show, where, to whom, for how long, and at what price.
How winning works
Every line item type is tied to a priority number between 1 and 16. The lower the number, the higher the priority.
When a slot becomes available, Ad Manager first discards every campaign that isn't eligible (wrong country, wrong device, budget spent, domain not allowed, and so on). Among the campaigns that are left, the lower priority number usually wins, even if another campaign was willing to pay more.
Price only breaks ties within the same priority level.
This is why a low-paying Sponsorship campaign can beat a high-paying auction bid. It's not a bug; it's the publisher keeping a promise they sold.
The two families
Guaranteed line items are volume the publisher promised to an advertiser in a contract. Ad Manager must deliver them, so they get the top priorities.
Non-guaranteed line items have no promise attached. They fill whatever is left over and compete mainly on price.
The types
Type | Priority | What it does | Typical use |
Sponsorship | 4 | Takes a percentage of all available impressions between a start and end date | "You own 50% of the homepage for two weeks" |
Standard | 8 (can be set 6–10) | Delivers a fixed number of impressions or clicks, spread evenly across the flight | "Deliver 2 million impressions in March" |
Preferred Deal | 12 | Takes a percentage of whatever is left over | Third-party ad networks |
Bulk | 12 | Takes a fixed number of impressions from whatever is left over, as fast as possible | Burn through remaining volume quickly |
Price Priority | 12 | Competes purely on price against other leftover demand: highest value wins | Header bidding, ad networks, most non-guaranteed demand |
House | 16 | Always last. Serves only when nothing else can | Self-promotion, fallback creative |
Two more exist but are usually created automatically rather than by hand: Ad Exchange / AdSense line items (priority 12), which let Google's open auction compete against everything else, and Click Tracking line items, which only count clicks and never show a creative.
Things that are often confused
Programmatic Guaranteed is not its own type. It's a deal negotiated programmatically, but in Ad Manager it is trafficked as a Sponsorship or Standard line item. It behaves like whichever one it was set up as.
Open Auction is not a line item. It's a source of demand. It enters the competition through dynamic allocation and effectively competes at the priority 12 level, against Network, Bulk and Price Priority.
"Remnant" and "Direct" are industry slang, not settings. Direct usually means Sponsorship or Standard. Remnant usually means Network, Bulk or Price Priority. You won't find either word in the Ad Manager interface.
What this means for your ad slots
Terrific doesn't manage your campaigns or decide which ad wins. We load the tag you configured in your own Ad Manager, and Ad Manager returns whatever its own rules select. That means anything you change in Ad Manager: priorities, targeting, budgets, takes effect in Terrific without any change on our side.
If an ad you expect isn't appearing, work through these in order:
1. Is a higher-priority line item absorbing the inventory? A Sponsorship at a high share of voice will crowd out everything below it.
2. Is the line item eligible right now? Check the domain, geography, device, schedule, and whether the budget is still available.
3. Is there anything configured to fill the gap? If nothing is eligible, the slot stays empty.
Protect your fill rate with House line items
House line items sit at the bottom of the priority stack, so they can never take an impression away from a paid campaign. They only appear when nothing else can.
Setting them up costs nothing and turns an empty slot into a branded one: your own promotion, a newsletter signup, an upcoming live event. Without them, unsold inventory simply renders blank.
