What are custom parameters?
These are additional query string parameters added to tracking URLs, for example:
utm_source
utm_campaign
CID
These will help you organise and analyse performance at a granular level.
How do they work?
Custom parameters can be static or dynamic. A static parameter uses a hardcoded value, whereas a dynamic parameter uses search specific values, populated by a macro. For example:
Static
utm_campaign=summer2025
Dynamic
utm_content=LHR-JFK (populated using a route code macro)
Parameters are split into names and values. In the XML you’ll see a ‘param_pname’, followed by a ‘pvalue’ (utm_campaign and summer2025 respectively).
When you’re using a dynamic value, you’ll have a ‘query_param pname' followed by 'pvalue’. The value will be a macro rather than a static value. Macros values can be found below.
How to append custom parameters in Skyscanner Ad Manager
We use XML to build tracking strings in SAM. See an example below:
Static Values
<tracking> <add_params action="UPDATE"><original_request/> <param pname="partner" pvalue="XXXXX"/> <param pname="utm_source" pvalue="Skyscanner"/> <param pname="utm_medium" pvalue="ItineraryInlinead"/> <param pname="utm_campaign" pvalue="alwayson"/> </add_params> </tracking>
Dynamic Values
<tracking> <add_params action="UPDATE"><original_request/> <param pname="partner" pvalue="XXXXX"/> <param pname="utm_source" pvalue="Skyscanner"/> <param pname="utm_medium" pvalue="ItineraryInlinead"/> <param pname="utm_campaign" pvalue="alwayson"/> <query_param pname="utm_content" pvalue="from_place.iata_city_id-to_place.iata_city_id"/> </add_params> </tracking>
These macros are only used in the construction of dynamic XML strings. For example, passing route information in something like 'utm_content'. Please note that you need use "" on all values / names. For example:
Dynamic Route Tracking
<query_param pname="utm_content" pvalue="from_place.iata_id-to_place.iata_id"/>
Purpose | Value | Description |
Origin | from_place.iata_id | 3 letter IATA code of an origin airport |
Destination | to_place.iata_id | 3 letter IATA code of a destination airport |
Origin Country | from_place.country_id | 2 letter IATA code of an origin country |
Destination Country | to_place.country_id | 2 letter IATA code of a destination country |
Start Date | date_out.day | Departure date day |
Start Month | date_out.month | Departure date month |
Start Year | date_out.year | Departure date year |
User Market | user.country_id | 2 letter code of a user market, as selected on Skyscanner website |
User Language | user.language_id | Code of a user language, as selected on Skyscanner website |
Origin Skyscanner City | from_place.iata_city_id | 3 letter IATA code of an origin city |
Destination Skyscanner City | to_place.iata_city_id | 3 letter IATA code of a destination city |
Return Date | date_back.day | Return date day |
Return Month | date_back.month | Return date month |
Return Year | date_back.year | Return date year |
How to verify the tracking links and parameters are appended correctly
First we need to check if the ad deeplinks to the landing page correctly. Open a preview of your ad.
Click on the ad and check that the redirect functions as expected.
Now we want to make 100% sure we’re appending the UTMs.
Click the CTA of the ad
Hit ESC to stop the redirect when you see this URL structure
https://www.skyscanner.co.in/transport_deeplink/4.0/IN/en-GB/INR/........
Amend the URL to look like this (adding ‘g/redirect_api/’)
https://www.skyscanner.co.in/g/redirect_api/transport_deeplink/4.0/IN/en-GB/INR/........
You will now see the deeplink in a debug view. This should show you the UTMs or other custom parameters appended to the end of the URL. Check that any macros are passing the expected values.