> ## Knowledge Base Index
> Fetch the complete knowledge base index at: https://knowledge.flightcast.com/sitemap.xml
> Use this file to discover available pages before exploring further.
> Pure-Markdown content can be obtained by appending a '.md' suffix to the content URLs listed in the sitemap (without the trailing slash).

# Ad Decisioning Explainer


## What You Can Control
### Campaign Settings
* Flight Dates – Set when your campaign starts and ends
* Download Goals – Set a target number of impressions; the campaign automatically stops when it hits the goal
* Priority – Higher priority campaigns get placed first when there's competition for ad slots
### Targeting Options
Geographic:
* Target by country, city, or postal/zip code
* Can target multiple locations (e.g., "US and Canada" or "New York and Los Angeles")
Content:
* Run across your entire podcast network, or
* Target specific shows only
* Exclude specific episodes if needed
Ad-Level Overrides:
* Individual ads within a campaign can have their own targeting rules
* Useful when one ad creative is region-specific but the campaign is broader
### Ad Slot Types
* Pre-roll – Plays before the episode content
* Mid-roll – Plays at a specific timestamp during the episode
* Post-roll – Plays after the episode ends
Each slot can hold multiple ads, and you control whether each slot accepts your host-read ads, programmatic (VAST) ads, or both.

## How We Decide Which Ads Play
When a listener requests an episode, here's what happens:
### 1. We Check What's Eligible
* Is the campaign active and within its flight dates?
* Has the campaign already hit its download goal?
* Is the campaign on track with pacing, or running too hot?
### 2. We Apply Targeting
* Does this campaign target this specific podcast?
* Is this episode excluded from the campaign?
* Does the listener's location match the geographic targeting?
### 3. We Prioritize
* Campaigns are ranked by priority level
* Campaigns that are behind on pacing get a boost to help them catch up
* Campaigns that are ahead of pace get temporarily deprioritized to spread delivery evenly over time
* When campaigns have equal priority, we randomize to ensure fair distribution
### 4. We Fill the Slots
For each ad slot in the episode:
1. First, we try to fill with your host-read ads (dynamic ads)
2. If there's still room and programmatic is enabled, we fill remaining space with VAST ads
3. If nothing's available, the slot stays empty (no awkward silence – we just don't insert anything)

## Custom VAST Support
You can bring your own programmatic ad provider by setting custom VAST URLs for each slot position (pre-roll, mid-roll, post-roll). We support template variables so your provider gets the right context:
* Podcast and episode identifiers
* RSS feed URL
* Media file URL
* Cache-busting parameters
If you don't set a custom provider, we use our default programmatic partner.
You can reach out to us to setup custom VAST tags per podcast.

## Tracking & Measurement
We follow IAB Podcast Measurement 2.2 standards:
* Downloads only count when enough of the episode is actually downloaded (60+ seconds worth)
* We filter out bots, crawlers, and duplicate requests
* Each unique listener is only counted once per episode within a 24-hour window
* Ad impressions are tracked with pixel firing and VAST event callbacks
NOTE: We are not yet IAB-Certified, but we do follow the specification.

## When Ads Don't Play
### Campaign Reasons
* Campaign is paused or still in draft mode
* Outside the flight dates
* Already hit the download goal
* Running ahead of pace (we'll serve it again soon, just spreading it out)
* Targeting doesn't match this podcast, episode, or listener location
### Slot Configuration
* No ad slots configured on the episode
* The slot doesn't allow the type of ad you're trying to serve
* The slot is already full from higher-priority campaigns
### No Available Ads
* All eligible campaigns were filtered out by targeting
* VAST provider returned no ads (common during low-demand periods)

