Pulse campaign delivery and setup FAQ

This FAQ is designed to answer frequently asked questions regarding campaign, goal, and ad delivery and their setup.

How do I check which campaigns are currently being delivered?

In order to check which of your campaigns are currently being delivered by the Pulse distribution engine (based on priorities, campaigns/goals lagging behind, and so on), follow these steps:
  1. Go to Account and set the today's date, for example from May 15th until May15th. This gives you the today's data so far.
  2. Click to expand the node in your account tree that you want to check.
    Note: If your account tree is still not configured, expand the "Unassigned" node.
  3. Scroll down to the listing of your distributed campaigns.
  4. Check which of your campaigns got the most impressions today. Those campaigns are likely to "need" your inventory most on this specific node and they are probably prioritized higher, or they are lagging behind their configured goal.
Category day overviewCampaign delivery specification per category

If you are uncertain in which order campaigns/goals/ads are being picked, see Pulse distribution and prioritization rules.

Why is Pulse returning more ads than expected?

For example, you have configured an insertion policy in Pulse that says the ad server should always return only one pre-roll upon an ad request. However, upon an ad request, Pulse returns two ads in the ticket response, and two ads are shown in the player.

The most common explanation for this is that you have a sponsor goal in your account that has been incorrectly targeted, allowing it to run anywhere. Sponsor ads are always shown in addition to the normal ads configured in your insertion policy. This means that if you set an insertion policy to one pre-roll, Pulse picks one normal goal for that position, but it also picks a sponsor pre-roll. A sponsor pre-roll ad is delivered before or after that one normal pre-roll ad on what is called the "sponsor ad position". The insertion policies for linear ad breaks are not affected by sponsors, with the exception of the Time based frequency cap setting, and possibly the Time-based breaks setting. For more information on sponsor goals and ads, see Sponsor ads.

Why is my campaign not receiving impressions?

To understand why a campaign is not delivering as expected, it is important to understand how our distribution engine works when selecting a campaign for delivery. For more information on that, see Pulse Distribution Engine.

Go through the following checklist to see if any of the listed settings are causing the issue:
  • Is the campaign active?
  • Are the ads active?
  • What are the start/end dates on goal and ad level?
  • Is the campaign correctly configured with an ad capable of being shown? Is the destination URL properly entered (http:// needs to be included)?
  • Does the campaign use a third-party ad source? If so, are these capable of supplying ads?
  • Do the targeting rules on campaign and goal level match the metadata sent in the ad request that is expected to return an ad for the campaign?
  • Is there another campaign with higher priority that is “stealing” all impressions?

See Delivery issues checklist for more information.

Why is my campaign lagging after its goal?

Go through the following checklist to see if any of the listed settings are causing the issue:
  • Is there enough inventory available on the specific segment that the campaign targets? Look carefully at device group targeting and other targeting settings for the campaign.
  • Is the campaign frequency capped?
  • Are their higher priority campaigns that are “stealing” all inventory?

See Delivery issues checklist for more information.

Why is my fill rate not 100% when all my campaigns are lagging after their goals?

Almost everything, from your player, user behavior, third-party timeouts, targeting, campaign pacing, and so on, affects the fill rate. Go through the following checklist to see if any of the listed settings are causing the issue:
  • Are the campaigns that are lagging after their goals really targeted against the segment where spare inventory is available?
  • Could part of the spare inventory come from a certain ad format that is not present in the campaigns? For example, post-roll inventory not being used because no post-roll campaigns have been booked.
  • Do campaigns booked with third-party ad sources fail to answer with an ad every time?
  • Are ad blockers a problem on the client's site?

The most common reason for having unused inventory is that you unknowingly create "pockets" of inventory that can not be reached by any campaigns. For example, an insertion policy set to deliver 5 mid-roll ads requires you to always have 5 separate goals ready to deliver at every request. The users also need to watch all the 5 mid-rolls so as to not cause inventory with no associated impressions.

If you look at the fill rate on separate segments, such as device and format type, you see that it can actually be higher on some segments and lower on others. It is very likely that the campaigns targeted to these segments are not enough to fill all the inventory.

Even if there are campaigns to fill all "pockets" of inventory, you can still have issues with the campaigns using third-party ad sources because these do not return ads every time, or return them too slowly, which causes the player to time out. Having passbacks enabled for your account only helps when third parties return empty responses, so you can try another one. If the third party returns a VPAID ad that takes too long to load, it does not matter if there are passbacks in the chain because the player needs to skip all ads and move to content.

The best approach to solve these situations is to look at real examples where you see no ads delivering. Try pointing out an example where you can see that you are not always getting ads as you would expect. Technical support can then check what goes on during these instances.

Why is my campaign delivering too fast?

When you experience premature delivery for campaigns (spikes in delivery), please check the following:
  • Frontload setting
    • By using frontload, you can instruct Pulse that a certain share of a goal should be treated differently – served as soon as possible if there is spare room in current inventory that would otherwise be unused and wasted. For example, if a goal is booked to 100 000 impressions and the frontload is set to 30%, it means the goal should deliver 30,000 impressions "ahead of schedule". After 30,000 impressions are delivered, the goal slows down and starts to deliver as evenly as possible.
  • Inventory Forecast setting
    • Go to Pulse - Settings - Inventory Forecast and make sure you have not checked the box "Override" and entered a manual value. That causes the campaigns to over-deliver.
    • Manual Inventory Forecast override should only be activated on new accounts that do not have as much inventory, in order to set an approximate inventory for the Forecasting tool. Other than that, it should never be activated.
    • If used, the manual inventory figure (the number represents inventory per week) should be as similar as possible to the real inventory figure.
  • Considerable increased inventory
    • If you see a difference in the amount of inventory for the latest period, for example you see spikes on the days when the issue was reported, that could be the cause of premature delivery.

Why are my targeting rules not being enforced?

Check if there are global targeting rules set under the general account settings. If so, make sure that the override global/campaign targeting is selected on campaign/goal level. For more information on adding and overriding targeting rules, see Targeting rules.

Where do you get city and area definitions for geotargeting rules?

Pulse uses a third-party provider called Digital Elements for geo lookups. How is a city defined by Digital Elements? According to Wikipedia, there are more urban centers in Sweden than on Pulse's list.

Answer from our third-party provider

"Our country/region responses are defined by the ISO 3166 standardization. Our city names are determined by a number of various sources that we subscribe to: USPS, Canadian Post, GeoPostcodes, Google Maps, and so on. However, we do not define these city names ourselves, but instead we trust the sources above and their definitions of city locations.

As for the example you listed, the only reason your client sees less Swedish cities in our city db is because, to this point, we have only been able to accurately tie those cities to IP addresses over the years. The remaining cities that may exist in Sweden have never been conclusively tied to an IP address, therefore they have never been added to our city db.

There are thousands of city locations worldwide that you do not see in our city db for the very same reason mentioned. There are many locations that simply get rolled into neighbouring locations and it is those neighbouring locations that we have in our city db and tie to an IP address. However, the moment we do determine an IP address should be targeted to one of those remaining cities in Sweden, we will add that city to our city db and you will see it tied to an IP address in our latest Geo release."

What should I consider before serving ads to mobile devices?

Before serving ads to mobile devices, please consider the following:
  • Media Files: ensure that your third-party ad providers are using mobile-friendly media files.
    • mp4=good
    • flv=bad
  • CORS Headers: ensure that your third-party ad providers support CORS headers.

Why do ads fail on iPhone/iPad/Android/Tablets/PC?

Go through the following checklist to see if any of the listed settings are causing the issue:
  • Is your ad request picked up by the correct device container?
  • Is the ad targeted against the corresponding device group?
  • Are you using the Asset Factory (our automatic transcoding feature)? By using the Asset Factory, you can generate video assets that work on any device you wish to target.
  • If you are not using the Asset Factory, do the pre-transcoded video files you uploaded follow the specification for the device you want to target?
  • Are you using third-party ad sources? If so, are they returning the necessary assets for the targeted device? Our iOS SDK is very strict when it comes to VAST validation so it might be that the ad is working fine in an Android integration while not working on iPhone/iPad.

Is anamorphic source material supported?

We do support anamorphic input, and our transcoders determine the output ratio according to the file's display aspect metadata. For example, a 1440x1080 file with a display aspect of 16:9 outputs the following:
  • If the output 640x360 is requested: 640x360.
  • If the output width of 640 is requested with no height specified: 640x360.

Why do some video ads take a long time to start?

Slow or uneven connection speeds

If the viewer has a slow connection, it can take a few seconds for the video to buffer enough to start playing. Also, if you depend on third-party providers for ads or video distribution, heavy traffic or great physical distance to their servers, and other technical issues can all contribute to a slow start.

Large video file sizes

Large video files need greater connection speed to deliver a seamless viewing experience. The ad player has to buffer a portion of the ad so that it plays as seamlessly a possible. If video file sizes are too large, the viewer may experience a delay in video start and the viewing experience may be "choppy" (starting and stopping). We recommend a maximum file size of no more then 4 Mb for your video ads.

Metadata (moov atom) is at end of H.264 files (.mp4 or .f4v)

This problem can be harder to diagnose but the result is always a delayed video start.

Flash needs information about the video file, for example the duration of the clip, size, codec, and so on, before it can start playing. If this information or "metadata" is at the end of the file, our ad player has to download the entire file before it can read the information and start playing. If the information is at the beginning of the file, the ad player can start playing almost immediately while the rest of the file is being downloaded in the background, so called "progressive downloading".

Fortunately, there is a great tool called QTIndexSwapper that can fix video files with this problem. QTIndexSwapper is a platform independent program that moves the metadata from the end of the file to the beginning of the file. If the metadata is already at the beginning of the file, QTIndexSwapper does not modify the file in any way, so running a video file through this program is non-destructive and perfectly harmless.

You can read more about the problem here. If you are tech savvy, you can open the video file in a Hex editor and check to see if the encoding information is at the beginning or end of the file.

Is displaying in-stream overlay after specific pre-roll supported?

This is not an available feature at the moment, but you can try a workaround:
  • Set the pre-roll to 100% Share of Voice and 'last position only'
  • Set the overlay to 100% Share of Voice and 'first position only'

This way you may be able to sync them somewhat. It is not ideal if you want to allocate a certain amount of impressions, but 100% Share of Voice goals always get priority over impression goals.

Why are player controls hidden when displaying pause ads?

This is expected behavior. The viewer has to close the pause ad by clicking the Close Ad button in the top right corner of the ad, and then click play to resume content. The reason behind the behavior is to give the ad additional exposure, so the viewer cannot immediately click play to resume content.

Why is an ad muted after clicking on it?

This behavior is built into the player and is the intended design behind clicking an ad.
  • When the user clicks the ad, he ends up at the destination URL to navigate the site. The ad video continues to play on mute so it does not disturb the user while navigating through the destination site (the ad video keeps playing but the user does not need to see the video since they already opted in to see the actual site).
  • When the ad video is done playing, the player pauses until the user gets back from visiting the destination page. The user can then click play and the next pre-roll is shown or the actual content, depending on the amount of pre-rolls configured.

Why does companion banner click-through fail?

The companion banners are placed on the page in sandbox mode in order to hinder it from making any external JavaScript calls. This precaution is taken to avoid a situation where the banner breaks other functionality. Some banners are built in such a way that they have to make external JavaScript calls to navigate the user to the destination page (using ExternalInterface).

The solution is to add the param allowScriptAccess="always" to both the object and the embed in the "Code template" of the banner.

Companion code template

How do I prevent caching of third-party tracking requests?

Depending on which VAST version third parties use, we handle tracking URIs a bit differently:
  • VAST 1.11, 2.0, or 3.0 tracking URI with [CACHEBUSTING]: replace [CACHEBUSTING] with an 8-digit number
  • VAST 3.0 tracking URI without [CACHEBUSTING]: do not add rnd=8-digit number.
  • VAST 1.11 or 2.0 tracking URI without [CACHEBUSTING]: add rnd=8-digit number.
  • accept both [ ] and %5B %5D (URL encoded) as brackets

What are the requirements for uniqueness tracking?

If Pulse can keep track of a unique user, it can use this information to, for example, report on the number of unique impressions, achieve frequency capping, and do goal sequencing. To allow Pulse to keep track of unique users:.
  • Your integration needs to provide a Persistent identifier (PID) to Pulse within the ad request:
    • For desktop: Whenever a user makes an ad request, Pulse returns a cookie containing a PID which is set and then read for all consequent ad requests. This means that uniqueness for users on desktop works "automatically" and is handled by Pulse. However, if you want to guarantee uniqueness across all devices, you need to go with the solution for the "cookieless" environments described in the next point.
    • For mobile, apps, or other "cookieless" environments: If a cookie cannot be saved on the user's device, your integration must manually include a PID as a query parameter in the ad request. For example, an app must first make sure to track a user that is using login and then pass this information on to Pulse using the PID query parameter. If this PID is not sent with an ad request, no functionality based on uniqueness works.
    • The persistent ID can also not be equal the nil UUID (00000000-0000-0000-0000-000000000000). If you send this through as the PID, then the ad request is considered under the same conditions as when the viewer has set 'Do Not Track' in their browser. See 'Do Not Track' setting in browsers for more information.
  • The viewer must not have set 'Do Not Track' in their browser
  • If you have opted to use the IAB Consent Framework to implement the GDPR regulations, then the viewer must have agreed to targeted ad delivery in your applications

How do I add CORS headers to third-party ads played in HTML5?

CORS issues can be the cause why HTML5 player refuses to play a third-party ad even though it is returned. In HTML5, all modern browsers require CORS headers to specify explicitly that they allow a cross domain request. It should look as follows:

Access-Control-Allow-Origin: http://yourdomain.com

Access-Control-Allow-Credentials: true

In many cases you find that third-party ad servers respond with something like this instead:

Access-Control-Allow-Origin: *

Access-Control-Allow-Credentials: true

Using a wildcard to allow all domains is no longer something browsers let you do. You need to contact the third-party ad provider and ask them to make sure they respond with the above mentioned CORS headers.

Note: The requirement for CORS is not something that comes with our technology. This is a requirement from Chrome, Safari, and so on.

For more information, see Testing Pulse third-party tags for CORS issues.

How do I troubleshoot slow third-party/VPAID tag timeouts with throttling?

Often third-party/VPAID tags take some time to load which can cause timeouts. When it times out (if the customer has passbacks enabled), it also breaks the passback chain because there is no time for passbacks to be delivered instead of the third-party ad. This causes a lower fill rate.

In Pulse, the ad timeout setting in the backend is set to 2 seconds by default. If the time of loading the ad exceeds 2 seconds, there is no time to serve any ads and content playback starts.

To check if the third-party tag is possibly causing the low fill rate, you can test "throttle" the behavior from different connections.
  1. Go to the location where you expect to see the VPAID/third-party ad.
  2. Toggle "Device mode" in the Developer tools in the browser (Chrome) to emulate, for example, 3G or 4G connection.
  3. Monitor the distribution request using the Developer Tools in Chrome. Enable the HTML5 Debug mode by following the steps described at HTML5 Debug Mode and look for any errors.
If you see that the ad is not delivered or is causing problems on slower connections, you can corner the problem to how many seconds it takes, and the next steps would be:
  1. Contact the third-party ad provider and notify them that it takes time to load the ad (more than X amount of seconds).
  2. If the third party cannot speed up the delivery, it is possible to change the ad timeout setting to, for example, 3 or 4 seconds. Note that this affects all ads and overall user experience.
  3. If this does not help, you should use another third-party provider with faster delivery or use locally booked ad assets.