jetstream/higher-placement-phase-3-relaunch.toml (370 lines of code) (raw):
[experiment]
start_date = "2025-01-14"
end_date = "2025-02-18"
enrollment_period = 13
[experiment.exposure_signal]
name = "exposed_session"
friendly_name = "Exposed"
description = "The set of clients that typed 5+ characters to trigger an AMP result"
select_expression = "COALESCE(exposed_session, false)"
data_source = "urlbar_search_sessions"
window_end = "analysis_window_end"
[metrics]
overall = [
# Legacy SERP
"legacy_serps_with_ads",
"legacy_ad_clicks",
"adm_impressions",
# Glean
"adm_clicks",
"adm_impression_rate",
"adm_ctr",
"serp_impressions_tagged",
"serp_impressions_with_ads",
"serp_has_ad_click",
"serp_ad_clicks",
"serp_ad_impression_rate",
"serp_ad_ctr",
"serp_ad_click_rate",
# Glean session-based
"urlbar_sessions",
"urlbar_clicks_per_session",
"serps_per_session",
"serps_with_ads_per_session",
"ad_clicks_per_session",
"adm_impressions_per_session",
"adm_clicks_per_session",
]
#----------------------------------------------
# Legacy SERP metrics
[metrics.legacy_serps_with_ads]
select_expression = """{{agg_sum("CASE WHEN normalized_engine = 'Google' THEN search_with_ads ELSE 0 END")}}"""
data_source = "search_clients_engines_sources_daily"
friendly_name = "Legacy SERPs with ads"
description = "Tagged Google SERP page loads with ads loaded from Legacy Telemetry"
[metrics.legacy_serps_with_ads.statistics.bootstrap_mean]
[metrics.legacy_serps_with_ads.statistics.deciles]
[metrics.legacy_ad_clicks]
select_expression = """{{agg_sum("CASE WHEN normalized_engine = 'Google' THEN ad_click ELSE 0 END")}}"""
data_source = "search_clients_engines_sources_daily"
friendly_name = "Legacy ad clicks"
description = "Ad clicks on tagged Google SERPs from Legacy Telemetry"
[metrics.legacy_ad_clicks.statistics.bootstrap_mean]
[metrics.legacy_ad_clicks.statistics.deciles]
#----------------------------------------------
# Glean metrics: sponsored sugestions
[metrics.adm_impressions]
select_expression = "COUNT(DISTINCT IF(is_terminal AND result.product_result_type = 'admarketplace_sponsored', event_id, NULL))"
data_source = "urlbar_events_unnested_results"
friendly_name = "Sponsored suggestion impressions"
description = "Number of sponsored suggestion impressions at engagement time"
[metrics.adm_impressions.statistics.bootstrap_mean]
[metrics.adm_impressions.statistics.deciles]
[metrics.adm_clicks]
select_expression = """COUNTIF(
is_terminal
AND event_action = 'engaged'
AND product_selected_result = 'admarketplace_sponsored'
)"""
data_source = "urlbar_events"
friendly_name = "Sponsored suggestion clicks"
description = "Number of clicks on sponsored suggestion results"
[metrics.adm_clicks.statistics.bootstrap_mean]
[metrics.adm_clicks.statistics.deciles]
[metrics.adm_impression_rate]
depends_on = ["adm_impressions", "urlbar_impressions"]
friendly_name = "Sponsored suggestion impression rate"
description = "Proportion of urlbar sessions with a sponsored suggestion impression"
[metrics.adm_impression_rate.statistics.population_ratio]
numerator = "adm_impressions"
denominator = "urlbar_impressions"
[metrics.adm_ctr]
depends_on = ["adm_clicks", "adm_impressions"]
friendly_name = "Sponsored suggestion CTR"
description = "Proportion of urlbar sessions with a sponsored suggestion impression where a sponsored suggestion was clicked"
[metrics.adm_ctr.statistics.population_ratio]
numerator = "adm_clicks"
denominator = "adm_impressions"
#----------------------------------------------
# Glean metrics: SERP
[metrics.serp_impressions_tagged]
select_expression = "COUNT(DISTINCT impression_id)"
data_source = "tagged_google_serp_events"
friendly_name = "Google SERP loads"
description = "Tagged Google SERP page loads"
[metrics.serp_impressions_tagged.statistics.bootstrap_mean]
[metrics.serp_impressions_tagged.statistics.deciles]
[metrics.serp_impressions_with_ads]
select_expression = "COUNT(DISTINCT IF(component is not null AND num_loaded > 0, impression_id, NULL))"
data_source = "tagged_google_serp_events"
friendly_name = "SERPs with ads"
description = "Tagged Google SERP page loads with ads loaded"
[metrics.serp_impressions_with_ads.statistics.bootstrap_mean]
[metrics.serp_impressions_with_ads.statistics.deciles]
[metrics.serp_has_ad_click]
select_expression = "COUNT(DISTINCT IF(component is not null AND num_visible > 0 AND num_clicks > 0, impression_id, NULL))"
data_source = "tagged_google_serp_events"
friendly_name = "SERPs with ad clicks"
description = "Tagged Google SERP page loads where an ad was clicked"
[metrics.serp_has_ad_click.statistics.bootstrap_mean]
[metrics.serp_has_ad_click.statistics.deciles]
[metrics.serp_ad_clicks]
select_expression = "SUM(IF(component is not null AND num_visible > 0, num_clicks, 0))"
data_source = "tagged_google_serp_events"
friendly_name = "SERP ad clicks"
description = "Ad clicks on tagged Google SERPs"
[metrics.serp_ad_clicks.statistics.bootstrap_mean]
[metrics.serp_ad_clicks.statistics.deciles]
[metrics.serp_ad_impression_rate]
depends_on = ["serp_impressions_with_ads", "serp_impressions_tagged"]
friendly_name = "SERP ad impression rate"
description = "Proportion of tagged Google SERP page loads with loaded ads"
[metrics.serp_ad_impression_rate.statistics.population_ratio]
numerator = "serp_impressions_with_ads"
denominator = "serp_impressions_tagged"
[metrics.serp_ad_ctr]
depends_on = ["serp_has_ad_click", "serp_impressions_with_ads"]
friendly_name = "SERP ad CTR"
description = "Proportion of tagged Google SERP page loads with ads loaded that had an ad click"
[metrics.serp_ad_ctr.statistics.population_ratio]
numerator = "serp_has_ad_click"
denominator = "serp_impressions_with_ads"
[metrics.serp_ad_click_rate]
depends_on = ["serp_ad_clicks", "serp_impressions_tagged"]
friendly_name = "SERP ad click rate"
description = "Number of ad clicks per tagged Google SERP page load"
exposure_basis = ["enrollments"]
[metrics.serp_ad_click_rate.statistics.population_ratio]
numerator = "serp_ad_clicks"
denominator = "serp_impressions_tagged"
#----------------------------------------------
# Session-based Glean metrics
[metrics.urlbar_sessions]
select_expression = "COUNTIF(new_session_start)"
data_source = "urlbar_search_sessions"
friendly_name = "Urlbar search sessions"
description = "Number of urlbar search sessions combining urlbar and serp events"
[metrics.urlbar_sessions.statistics.bootstrap_mean]
[metrics.urlbar_sessions.statistics.deciles]
[metrics.urlbar_clicks_per_session]
select_expression = """SAFE_DIVIDE(
COUNTIF(urlbar_fields.event_action = 'engaged'),
COUNTIF(new_session_start)
)"""
data_source = "urlbar_search_sessions"
friendly_name = "Urlbar clicks per search session"
description = "Per-client proportion of urlbar search sessions with a click on any urlbar result"
[metrics.urlbar_clicks_per_session.statistics.bootstrap_mean]
[metrics.urlbar_clicks_per_session.statistics.deciles]
[metrics.serps_per_session]
select_expression = """SAFE_DIVIDE(
COUNTIF(is_serp),
COUNTIF(new_session_start)
)"""
data_source = "urlbar_search_sessions"
friendly_name = "SERP impressions per search session"
description = "Per-client rate of tagged Google SERP impressions per urlbar search session"
[metrics.serps_per_session.statistics.bootstrap_mean]
[metrics.serps_per_session.statistics.deciles]
[metrics.serps_with_ads_per_session]
select_expression = """SAFE_DIVIDE(
COUNTIF(serp_fields.has_ads_loaded),
COUNTIF(new_session_start)
)"""
data_source = "urlbar_search_sessions"
friendly_name = "SERP impressions with ads per search session"
description = "Per-client rate of tagged Google SERP impressions with ads loaded per urlbar search session"
[metrics.serps_with_ads_per_session.statistics.bootstrap_mean]
[metrics.serps_with_ads_per_session.statistics.deciles]
[metrics.ad_clicks_per_session]
select_expression = """SAFE_DIVIDE(
COALESCE(SUM(serp_fields.num_ad_clicks), 0),
COUNTIF(new_session_start)
)"""
data_source = "urlbar_search_sessions"
friendly_name = "Ad clicks per search session"
description = "Per-client rate of SERP ad clicks per urlbar search session"
[metrics.ad_clicks_per_session.statistics.bootstrap_mean]
[metrics.ad_clicks_per_session.statistics.deciles]
[metrics.adm_impressions_per_session]
select_expression = """SAFE_DIVIDE(
COUNTIF(urlbar_fields.has_sponsored_impression),
COUNTIF(new_session_start)
)"""
data_source = "urlbar_search_sessions"
friendly_name = "Sponsored suggestion impressions per search session"
description = "Per-client rate of sponsored suggestion impressions per urlbar search session"
[metrics.adm_impressions_per_session.statistics.bootstrap_mean]
[metrics.adm_impressions_per_session.statistics.deciles]
[metrics.adm_clicks_per_session]
select_expression = """SAFE_DIVIDE(
COUNTIF(urlbar_fields.event_action = 'engaged' AND urlbar_fields.product_selected_result = 'admarketplace_sponsored'),
COUNTIF(new_session_start)
)"""
data_source = "urlbar_search_sessions"
friendly_name = "Sponsored suggestion clicks per search session"
description = "Per-client rate of sponsored suggestion clicks per urlbar search session"
[metrics.adm_clicks_per_session.statistics.bootstrap_mean]
[metrics.adm_clicks_per_session.statistics.deciles]
[data_sources]
[data_sources.tagged_google_serp_events]
from_expression = """(
SELECT
* EXCEPT(ad_components)
FROM
`moz-fx-data-shared-prod.firefox_desktop.serp_events` s
, UNNEST(ad_components) a
WHERE
submission_date BETWEEN '2025-01-27' AND '2025-02-18'
AND mozfun.map.get_key(experiments, 'higher-placement-phase-3-relaunch') IS NOT NULL
AND search_engine = 'google' AND is_tagged
)"""
client_id_column = "legacy_telemetry_client_id"
experiments_column_type = "native"
submission_date_column = "submission_date"
friendly_name = "Glean Google tagged SERP events"
description = "Glean SERP events aggregated by impression, component for tagged Google search"
[data_sources.urlbar_search_sessions]
friendly_name = "Urlbar search sessions"
description = "Search sessions initiated in the urlbar including urlbar and tagged Google serp Glean events"
client_id_column = "legacy_telemetry_client_id"
submission_date_column = "submission_date"
experiments_column_type = "native"
from_expression = """(
WITH urlbar AS (
-- terminal urlbar events (urlbar sessions)
SELECT
*
FROM
`mozdata.firefox_desktop.urlbar_events`
WHERE
is_terminal
AND submission_date BETWEEN '2025-01-27' AND '2025-02-18'
AND mozfun.map.get_key(experiments, 'higher-placement-phase-3-relaunch') IS NOT NULL
),
urlbar_with_exposed AS (
SELECT
glean_client_id,
seq,
event_timestamp,
(select logical_or(r.product_result_type = 'admarketplace_sponsored') from unnest(results) as r) as exposed,
urlbar.* EXCEPT (glean_client_id, seq, event_timestamp)
FROM
urlbar
),
serp AS (
-- serp events, aggregated to 1 row per impression_id
-- only keep tagged Google searches
SELECT
glean_client_id,
ping_seq AS seq,
event_timestamp,
sap_source,
legacy_telemetry_client_id,
impression_id,
submission_date,
ANY_VALUE(experiments) AS experiments,
LOGICAL_OR(component is not null AND num_loaded > 0) AS has_ads_loaded,
LOGICAL_OR(component is not null AND num_visible > 0 AND num_clicks > 0) AS has_ad_click,
SUM(IF(component is not null AND num_visible > 0, num_clicks, 0)) AS num_ad_clicks,
FROM (
SELECT
* EXCEPT(ad_components)
FROM
`moz-fx-data-shared-prod.firefox_desktop.serp_events` s
, UNNEST(ad_components) a
WHERE
submission_date BETWEEN '2025-01-27' AND '2025-02-18'
AND mozfun.map.get_key(experiments, 'higher-placement-phase-3-relaunch') IS NOT NULL
)
WHERE
search_engine = 'google'
AND is_tagged
GROUP BY
1, 2, 3, 4, 5, 6, 7
),
combined AS (
-- combine urlbar and serp events into single table
-- keep only relevant fields from each
SELECT
glean_client_id,
seq,
event_timestamp,
legacy_telemetry_client_id,
submission_date,
experiments,
FALSE AS is_serp,
STRUCT(
exposed,
event_action,
product_selected_result,
(
SELECT
COUNTIF(product_result_type = 'admarketplace_sponsored') > 0
FROM
UNNEST(results)
) AS has_sponsored_impression
) AS urlbar_fields,
NULL AS serp_fields,
FROM
urlbar_with_exposed
UNION ALL (
SELECT
glean_client_id,
seq,
event_timestamp,
legacy_telemetry_client_id,
submission_date,
experiments,
TRUE AS is_serp,
NULL AS urlbar_fields,
STRUCT(
sap_source,
has_ads_loaded,
has_ad_click,
num_ad_clicks
) AS serp_fields
FROM
serp
)
),
sessions AS (
-- group events into 'search sessions'
-- sessions start with either a urlbar event or a SAP-sourced serp load
-- and include subsequent follow-on-type serp loads
SELECT
*,
COUNTIF(new_session_start) OVER (
PARTITION BY glean_client_id ORDER BY seq, event_timestamp
) AS client_session_id,
FROM (
SELECT
*,
NOT is_serp OR serp_fields.sap_source IN ('searchbar', 'contextmenu', 'webextension', 'system') AS new_session_start
FROM
combined
)
),
urlbar_sessions AS (
-- restrict to sessions starting from the urlbar
SELECT
*,
-- add session-level exposure indicator
FIRST_VALUE(urlbar_fields.exposed IGNORE NULLS) OVER (
PARTITION BY glean_client_id, client_session_id ORDER BY seq, event_timestamp
) AS exposed_session
FROM
sessions
WHERE
-- drop partial sessions at the start of a window
client_session_id > 0
QUALIFY
COUNTIF(new_session_start AND NOT is_serp) OVER (
PARTITION BY glean_client_id, client_session_id
) > 0
)
SELECT
*
FROM
urlbar_sessions
)"""