Near, far, wherever you are

How we work with location.

Our individual location is a very powerful signal to use for personalisation. We all feel connected to where we live, where we work, where we grew up, and ads that can smartly use our location have the opportunity to really connect with us. In its most basic form, an ad that simply mentions which city or town we are closest to can feel more familiar to us. How about the ad that mentions a nearby landmark that everybody knows: your closest train station, monument, park or motorway?

To give audio producers and creatives the flexibility to use any of these techniques we have built location in to our Studio as one of the rules.


When you select this rule, you can choose a centre point and a radius within which to locate each user. Use the search box over the map to quickly find places using Google Maps, and we automatically suggest a radius based on the city boundaries.


To consider whether a user is within this radius, we have to consider the accuracy of the user's location.

Location accuracy

We get approximate location of the user from their IP address (the unique address that each internet-connected device is given) that discloses the rough location of that device, along with an accuracy score of how confident we are about that location. This is called the accuracy radius (lower is more accurate).

So, to consider the user to be within a location, we take the distance between the location's centre point and the user's centre point and add the accuracy radius. If that is less than the location's radius, then we consider this user within that location.

The illustration below shows this. Nottingham is the location's centre point with a location radius of 12km. Only the Yellow point is matched because both it's centre point and it's accuracy radius is within Nottingham's area.


We check each user against each location in a script using the above calculation and, if the user is not within any of the locations, we return the default. If the user can be located in more than one radius then we pick the closest distance. If the distance is exactly the same, we pick the smallest radius.

When we look at the accuracy radius of a sample set of IP addresses for impressions served in the UK, we can plot the proportion of those IPs and the accuracy. As the chart below shows, approximately 55% of users have an accuracy radius of 20km or less.


Radii can overlap or be concentric to create nice effects like a waterfall of city to region to country.

For script writers, we recommend not trying to get too micro with location - city level is best. This can be great for a retailer whose has one or two stores per city - see the map below that shows the centre points and radii of a well known UK store chain.


This way of working with location inherently means that there are some users on some connections whose location we just don't know, or their accuracy is so low that it is useless. In these instances we revert to the default.

In the future more devices will report their location more accurately using the GPS or aGPS of their device and we will be able to achieve more creative executions, such as navigation and location history.

There are some great tools online to help understand location and convert between post codes, addresses and lat,long coordinates. We really like BatchGeo, Doogal and Batch Postcode Finder.

Greater than, less than

Rules are processed in order, from the top down.


In an option block you can up to four rules that all have to be true for that element to be chosen. For example, in the image above, the rules are Day of Week, Weather and Impression.

We process the option block from the top down and stop processing as soon as we find an element where all rules are true. So, for the "Its another Monday morning" line to be chosen in the above example, Day of Week would need to equal Monday, Weather equal Cloud and Impression less than 2. If these rules are all true, then this line will be chosen and we will not continue down the list. If any of the rules are not true then we move on to the next element in the list ("Its a sunny Monday afternoon").

For numerical and date rules, this can have a neat outcome by using less than or greater than rules.

Example 1: Age

If you have messages for listeners of different ages, then you can use the less than rule to always evaluate the first in the list. As the table below shows, for ages bands less than 18, less than 30, less than 50 and default, the yellow marker shows which message would be returned for different user ages.

Age rule Age = 17 Age = 27 Age = 51
> 18 Yes No No
> 30 Yes Yes No
> 50 Yes Yes No
Default Yes

Where Age = 17, the rule is true, but we pick the first in the list, so the <18 message is returned.

Example 2: Date

You may have time bound messages, for example over the Christmas period where you need different messages up to Christmas Day, then up to New Years Eve, then after 1 Jan. The table below shows how that would be evaluated, again, taking the first "Yes" in the list as the message returned.

Date rule 21 Dec 28 Dec 4 Jan
Before 25 Dec Yes No No
Before 31 Dec Yes Yes No
Default Yes

Are you ignoring me?

Ignore rules to reduce the number of options.


Sometimes when writing a script you want to have a specific line for one option only but not the others. For example, if you have a line that changes by day part (morning, afternoon or evening) and you want to talk about the weather only in the morning line, the Ignore check box lets you avoid having to create lines for every possible combination.

Without ignore, you would need to have 12 lines in the script:

Snow Rain Cloud Sun
Morning 1 2 3 4
Afternoon 5 6 7 8
Evening 9 10 11 12

With ignore, you can ignore weather for some of the day parts (for example Afternoon and Evening) and so end up with 6 lines:

Snow Rain Cloud Sun
Morning 1 2 3 4
Afternoon 5 (with Weather set to ignore)
Evening 6 (with Weather set to ignore)

You could take this even further if you only wanted to call out a snowy morning and not mention the weather in any other morning line.

Snow Rain Cloud Sun
Morning 1 2 (with Weather set to Ignore)
Afternoon 3 (with Weather set to Ignore)
Evening 4 (with Weather set to Ignore)

And as long as the Morning - Snow line (1) comes before the Morning / Ignore line (2) then a snowy morning will trigger that line. This is because we process rules from the top down and stop at the first true rule. (See the Greater Than post for more)

Locked in time

Using Fixed or Relative offsets in the audio timeline


When you first switch into the audio view of a script, the audio files are laid out end-to-end, using the length of the default option as the guide. As you move the mouse over each audio file, the cursor changes to the move icon and you can drag each audio clip left and right in time.


As you move audio, the audio to the right of the one you are moving will move relative to the previous item in the script. Given that you can move items before or after each other by dragging left and right, it is the order in the script (not the timeline) that dictates the relative positioning.

To check what is relative to what, click and start a drag on one item. All of the descending items relative to that item will move.


Relative positioning is useful to keep the flow of sentences sounding natural even when there are differences in length between the elements.

As the screenshot below shows, the "Here in London" clip is unlocked, so if the "Its another monday afternoon" clip plays before it, it will move back in time, to keep the gap between the two clips the same.


Absolute positioning will fix that audio item to that exact point on the timeline, irrespective of what has happened before it.

The illustration below shows the "Here in London" clip again, but now it is locked so the gap between this and the previous item will contract.


This is really useful when you need audio to match to the beat of music, or perhaps a tag line at the end of an ad that always hits the 30s mark.

Change for the better

Workflow to make changes to a live campaign

When a script is ready to go live, before the tag can be trafficked, it needs to be published.

This all happens in the publish window that pops up from the green button in the script editor view.


If your script contains any validation errors you will see them here.


When you have fixed all of the validation errors, you are ready to publish:


Each script is published under a unique publication key. This does not become active until publishing is complete (and will return an error if the tag is called before publication).

Once a script is published it is locked for editing - you cannot change any of the rules, the audio or the sequencing.

But what if there is a mistake or the client has requested a change? It is possible to un-publish a script but this risks stopping impressions being served and would require the campaign to be paused in the ad server.

Instead, we recommend creating a copy of the script within the campaign.

In the Create Script box, choose the Advanced tab and check "Copy from script".


In the text box that appears, search for the script you would like to base the copy on and hit next to create a new script that is a clone of the original.

Now make the required changes to the copy and then publish this version, but using the existing publication key of the previous version:


This allows you to seamlessly update or fix a script, publish it and switch over the publication key, all without needing to change the tag, or make any changes at the ad server.

Running on empty

"No match?" option controls how scripts are processed


The "No match?" option controls what to do when no rules for an option are matched. You find the setting in the advanced controls of each option panel (shown as 1 in the screenshot above).

The options are:

  • Default: choose the option marked with "Use as default option?"
  • First: choose the first item in the list (also chosen if no Default is specified). Elements in the rule block can be reordered by dragging:
  • Skip: skip this option block all together and move on to the next
  • Empty: stop processing this script and return an empty VAST response (or Null JSON response)

Empty VAST response

The VAST standard specifies (Page 9, Para 5) that any ad server in the response chain that does not want to respond, or has no ad to respond with, can return an empty tag:


This option is useful if you want to not serve anything if rules are not matched. We use this for things like accurate location targeting where we don't want to serve an ad to any user with inaccurate location information.

Be aware that returning an empty VAST response is an expensive processing task and also relies on the upstream ad servers being able to replace the missed ad with another so that the opportunity to serve an ad is not missed.

Script Annotations

Most of the time our scripts contain information about audio: voice over, sound effects or music. But, often our ads are consumed on a platform that can show additional media, such as a companion image along with a click-through web link. We have released a new feature to allow the choice of companion image and link to be determined by rules, in the same way we do with audio, and we call it Annotations.

Annotations can contain images, links and also impression trackers and allow users to dynamically change a companion image for a richer UI experience. For example, if the ad is talking about sunny weather, then now the companion image can be a sunny picture, and the tracker fired can tell a third party system that the sun creative was played.

Creating an annotation is just as easy as creating any other type of element: select the “Convert to multiple annotations” paperclip icon in the pop-up control:


And then choose the annotation type: companion (image and/or link) or third party impression tracker:


If you selected Companion, the familiar script config panel will appear allowing you to upload a companion image and/or enter a companion link. Here we can configure rules as we normally would:


Based on this configuration the companion image and link would be used if it was a sunny Monday morning and of course we could have multiple annotations with different rules. One for a rainy Tuesday afternoon, for example (Note: Be sure to select an image with the correct width and height depending on where the image will be placed as these dimensions will be used in the tag).  If none of the rules are matched, the companion image/link selected on the script level will be used which provides a nice fall back.

Annotations work the same way if a Tracker annotation type is selected. You would enter a URL and an ID and configure the desired rules:


The tracker URL will appear as an impression tag in the VAST response XML. Below you can see how the configuration above affects the response

This new feature enables us to write scripts which are truly personalised: from the lines in the audio through to companion banners. We hope to help users create highly dynamic and imaginative ads!


Volume Controls in Timeline Editor

As part of our continued improvement of the Timeline Editor, our newest feature allows producers to control the volume (technically, the attenuation) of lists of options and individual audio elements. This makes our producers’ lives much easier, removing the need to switch between our platform and audio editing software for simple changes, such as dropping the volume of bed music, or boosting an individual piece of voice over.

When you hover on a set of options or audio element, the new control appears at the right hand end of the audio. Untouched audio has an attenuation of 0dB, and the scale stretches to ±20dB:

 The new volume control appears at the right of the audio track when your mouse rolls over

The new volume control appears at the right of the audio track when your mouse rolls over

As with their positioning on the timeline, the volume of each option is relative to the group. So, if all the options need to be turned up a bit, you can simply adjust the master volume, and this will affect all the options:

 All options in a list can be adjusted by changing the master volume for the whole list

All options in a list can be adjusted by changing the master volume for the whole list

Once you’ve done this, the volume of individual elements can be tweaked relative to the change you just made. The thin black line on the scale shows the group volume; options with no adjustment will sit on this line, while options that have been turned up or down relative to the group will sit above/below:

 Adjust individual options by moving the volume up/down relative to the master (black line). In this example, the first option has been turned down relative to the master

Adjust individual options by moving the volume up/down relative to the master (black line). In this example, the first option has been turned down relative to the master

You can see which audio has been adjusted at a glance by looking at the waveforms themselves, or by looking for the volume icons in each title bar. A “loud” icon shows that the volume has been increased, whereas a “quiet” icon shows that - you guessed it - the volume has been decreased. No icon means that the audio is untouched:

 See which audio has been adjusted by looking at the waveforms and volume icons

See which audio has been adjusted by looking at the waveforms and volume icons

By clicking on the volume icon, you can quickly remove the adjustment from a piece of audio, or the master adjustment from the parent of a list of options. When you reset the master volume of a list of options, all adjustments on options in the list will return to being relative to 0dB. For example:

Screenshot (18).png

When you reset an option in a list, it will return to the master adjustment (if any). Resetting an individual audio element will just return it to 0dB.

Another point of note: the appearance of the default option in a list has been changed slightly, to avoid confusion with the parent on the timeline. You can now find the default option by looking for the star and the coloured border on the option title, as well as the coloured background when you roll over:

 The default option is now denoted by a star and a coloured border on the option title, and a coloured background when you roll over

The default option is now denoted by a star and a coloured border on the option title, and a coloured background when you roll over

The default option behaves in the same way as other options; its volume is relative to the list master.

Coming soon to the timeline editor: we’ll be adding trim controls to adjust the length of audio, and controls to fade the audio in and out. Watch this space!