Skip to content

Touch Volume Application Rates

How many marketing touches it takes to meet or surpass our standard application rate.

This analysis groups people by the total number of marketing touches they received and compares each group’s application rate to the overall application rate. The goal is to identify the point at which touch volume appears to be associated with application behavior at or above our baseline.

Rather than evaluating a single message, channel, or campaign, this view looks at cumulative exposure. It helps answer a practical planning question: how much marketing contact is typically needed before a population begins to perform at or above the standard application rate?

Touch BucketPeopleApplicantsApp RateLift
0126,84312,91610.2%0.60x
1–215,9566063.8%0.22x
3–57,1234706.6%0.39x
6–107,5704255.6%0.33x
11–2011,7296445.5%0.32x
21–3510,2061,01810.0%0.59x
36–505,9951,24820.8%1.23x
51–755,9562,15136.1%2.14x
76–1004,0622,20854.4%3.22x
101–1505,3523,71169.3%4.10x
151–2505,9624,92882.7%4.89x
250+6,3065,66689.9%5.32x

The threshold bucket — where application rate first exceeds the overall baseline of 16.9% — is 36–50 touches at 20.8% (1.23x lift).

The application rate crosses the overall baseline at 36–50 engagement touches. Below that threshold, even persons with 20+ touches convert well below average. Above it, rates climb steeply and consistently — reaching 89.9% at 250+ touches. A person with 36 or more recorded engagement touches is meaningfully more likely to apply than the average prospect in the funnel.

Touch volume is one of the clearest ways to evaluate whether a prospective student population has received enough marketing exposure to reasonably expect application behavior.

This metric helps us:

  • Understand whether low-performing populations may be under-touched
  • Identify the touch-volume range where application behavior begins to normalize
  • Compare lightly touched and heavily touched audiences
  • Inform campaign planning, audience prioritization, and communication strategy
  • Avoid assuming that a single touch or small number of touches is enough to influence behavior

This analysis should not be interpreted as proof that touches alone caused applications. Higher-touch audiences may differ from lower-touch audiences in important ways, including inquiry source, intent level, geography, academic interest, or stage in the funnel. However, the metric is useful for understanding the relationship between cumulative marketing activity and application outcomes.

The query first counts the total number of marketing touches associated with each person. It then identifies whether each person has an applied status tag.

Each person is assigned to a touch-volume bucket based on their total number of touches:

  • 0
  • 1-2
  • 3-5
  • 6-10
  • 11-20
  • 21-35
  • 36-50
  • 51-75
  • 76-100
  • 101-150
  • 151-250
  • 250+

For each bucket, the query calculates:

  • The number of people in the bucket
  • The number of applicants in the bucket
  • The application rate for the bucket
  • The overall application rate across all people
  • The lift compared to the overall application rate

The vs_overall_lift value shows how each bucket performs relative to the overall baseline. A value of 1.00 means the bucket is performing exactly at the overall application rate. A value above 1.00 means the bucket is outperforming the overall average, while a value below 1.00 means it is underperforming.

The key threshold is the first touch bucket where application_rate is greater than or equal to overall_application_rate, or where vs_overall_lift is at least 1.00.

WITH touch_counts AS (
SELECT
person_id,
COUNT(*) AS total_touches,
COUNT(CASE WHEN touch_category = 'engagement' THEN 1 END) AS engagement_touches,
COUNT(CASE WHEN touch_category = 'exposure' THEN 1 END) AS exposure_touches,
COUNT(CASE WHEN touch_type = 'ping' THEN 1 END) AS pageview_count,
COUNT(CASE WHEN touch_type = 'form_response' THEN 1 END) AS form_response_count
FROM person_touches
GROUP BY person_id
),
applied AS (
SELECT DISTINCT
person_id
FROM person_tags
WHERE tag_type = 'applied'
AND tag_value = 'Yes'
),
labeled AS (
SELECT
p.id AS person_id,
COALESCE(tc.total_touches, 0) AS total_touches,
COALESCE(tc.engagement_touches, 0) AS engagement_touches,
COALESCE(tc.exposure_touches, 0) AS exposure_touches,
COALESCE(tc.pageview_count, 0) AS pageview_count,
COALESCE(tc.form_response_count, 0) AS form_response_count,
CASE
WHEN a.person_id IS NOT NULL THEN 1
ELSE 0
END AS applied
FROM persons p
LEFT JOIN touch_counts tc
ON p.id = tc.person_id
LEFT JOIN applied a
ON p.id = a.person_id
),
bucketed AS (
SELECT
person_id,
applied,
total_touches,
engagement_touches,
exposure_touches,
pageview_count,
form_response_count,
CASE
WHEN engagement_touches = 0 THEN '0'
WHEN engagement_touches BETWEEN 1 AND 2 THEN '1-2'
WHEN engagement_touches BETWEEN 3 AND 5 THEN '3-5'
WHEN engagement_touches BETWEEN 6 AND 10 THEN '6-10'
WHEN engagement_touches BETWEEN 11 AND 20 THEN '11-20'
WHEN engagement_touches BETWEEN 21 AND 35 THEN '21-35'
WHEN engagement_touches BETWEEN 36 AND 50 THEN '36-50'
WHEN engagement_touches BETWEEN 51 AND 75 THEN '51-75'
WHEN engagement_touches BETWEEN 76 AND 100 THEN '76-100'
WHEN engagement_touches BETWEEN 101 AND 150 THEN '101-150'
WHEN engagement_touches BETWEEN 151 AND 250 THEN '151-250'
ELSE '250+'
END AS touch_bucket
FROM labeled
),
overall AS (
SELECT
ROUND(
SUM(applied) * 1.0 / COUNT(*),
3
) AS overall_application_rate
FROM labeled
)
SELECT
b.touch_bucket,
COUNT(*) AS people,
SUM(b.applied) AS applicants,
ROUND(
SUM(b.applied) * 1.0 / COUNT(*),
3
) AS application_rate,
o.overall_application_rate,
ROUND(
(
SUM(b.applied) * 1.0 / COUNT(*)
)
/
NULLIF(o.overall_application_rate, 0),
2
) AS application_rate_lift,
ROUND(AVG(b.total_touches), 1) AS avg_total_touches,
ROUND(AVG(b.engagement_touches), 1) AS avg_engagement_touches,
ROUND(AVG(b.exposure_touches), 1) AS avg_exposure_touches,
ROUND(AVG(b.pageview_count), 1) AS avg_pageviews,
ROUND(AVG(b.form_response_count), 1) AS avg_form_responses
FROM bucketed b
CROSS JOIN overall o
GROUP BY
b.touch_bucket,
o.overall_application_rate
ORDER BY
CASE b.touch_bucket
WHEN '0' THEN 1
WHEN '1-2' THEN 2
WHEN '3-5' THEN 3
WHEN '6-10' THEN 4
WHEN '11-20' THEN 5
WHEN '21-35' THEN 6
WHEN '36-50' THEN 7
WHEN '51-75' THEN 8
WHEN '76-100' THEN 9
WHEN '101-150' THEN 10
WHEN '151-250' THEN 11
ELSE 12
END;