TV Best Practices

Having observed the growth of TV (CTV, OTT, Linear) over the past year, BidSwitch conducted a series of consultations and trading analysis with our partners with the goals of unifying how the space is developing.

The following best practices can and should be applied most of the time. There is of course a large divergence from these best practices with some partners and if you have trouble understanding something that’s under-performing, contact your Account Manager for a more detailed assessment of the issue.

Bid Request Signals

Ensure you include the recommended CTV signals in bid requests as they help most with the targeting and validation sets Buyers have built.

  • Include the app.bundle and app.storeurl as these are important as part of app-ads.txt validation, see the BidSwitch and app-ads.txt section for more details.

  • Include the device.ifa, device.lmt, and/or device.ext.ifa_type where appropriate. More details can be found in the IAB Tech Labs OTT IFA guidelines.

  • The (user agent) and device.devicetype fields are important to some buyers trying to find CTV inventory.

Also if you have any niche needs such as only being able to support a limited set of VAST versions or only being able to receive inline VAST, then let Buyers and other parties know about these limitations.

Content Object

Fill out the Content Object values properly as this is highly valued by all Buyers, and currently too many Suppliers use it in a spray and pray manner. Some Buyers have built features to accommodate such behavior but most have not so indiscriminate usage is most likely hurting spend.

  • The content.genre field should be a single string with a single genre. Most Buyers prefer either the Nielsen Content Genre or the Google Curated list of genres.

  • The should be a single category taken from the IAB Content Categories guide.

  • Use the other fields correctly such as content.title. This should contain the title and not have the the title, series, episode, and description all in one string. To pass such supporting data, the content.season and content.episode fields should be used for their explicit purpose.


Given the scope for fraudulent CTV inventory, the larger programmatic Buyers are pushing for greater app-ads.txt compliance and to only buy direct. As part of the latest update to the (app-)ads.txt specification v1.3, support has been added to cater for the needs of TV inventory that is often sold in a different manner to normal web advertising.

The INVENTORYPARTNERDOMAIN directive can be used in ads.txt files and is a pointer to the domain of an entity that is explicitly authorized to monetize ads within the application’s content. The partner’s corresponding (app-)ads.txt file will be hosted at this domain.

This information is passed in bid requests using the site|app.ext.inventorypartnerdomain which indicates where the app-ads.txt file is maintained. Complete details can be found on the IAB’s ads.txt page and its associated links.

Targeting CTV through BidSwitch

  • Currently the majority (79%) of CTV trades through deals, this is broken down into 55% open auction deals, 24% private auction deals, with the remaining 21% open e exchange. To optimise deals setup BidSwitch offers the Deals Management tool.

  • For open exchange CTV the most effective targeting would be a targeting group with whitelisted bundles. Currently the whitelist limit is 5,000 but much greater limits (millions of records) will be available in Q4.

  • You could also set up a targeting group to only pass CTV devices, though this can sometimes filter out OTT TV inventory which plays on phones or other devices and comes through looking like app inventory.


If the delivery of the ad requires the use of SSAI (Server-side Ad Insertion) / DAI (Dynamic Ad Insertion) then ensure that the vendor(s) used have been certified where appropriate. Currently that means being certified with DV360 and a number of other Buyers.

Certification will help to avoid false IVT (invalid traffic) claims and to define the correct process of calling server-side impressions and ensuring that the impression events can also be called from the client. Consult with your Account Manger if you need more details about any particular partners.

IP Address

  • If the inventory is server-side where the content is routed through a vendor’s data centre, then you should ensure that the user’s IP address is being sent in the request and that the impressions are also coming from the same IP address. You can use the x-forwarded-for header to provide the client IP address, see the Server-to-Server (s2s) Calls section for more details.

  • If there is no IP address for privacy reasons or simply unavailable then, the geo object should be populated thoroughly.

Impression Tracking

  • Ensure that the full spectrum of impression events is populated e.g. start, mid, completion etc and that they are sent to the relevant Buyer when they are triggered.

  • If the impression expiry timeout is unspecified by default BidSwitch sets the imp.exp field for CTV ads to 55 minutes. If longer timeouts are needed, you should populate the imp.exp field with the appropriate time to avoid any potential discrepancies with Buyers. You should also check with Buyers in advance what is the longest expiry time they accept for impression events.