Skip to content

First Touch Application Rate

The application rate for each first-touch source group — the channel or medium that produced a person’s earliest recorded engagement touch. Groups with a lift above 1.0 are converting above the overall baseline; below 1.0 means underperforming.

Organic search is the highest-converting tracked channel at 28.7% (2.96x lift), and the second largest group by volume. Direct and unknown traffic is the largest group and also converts well at 21.3% — together these two groups account for the majority of high-intent first touches and point to strong unaided demand.

Paid and Carnegie-sourced channels consistently convert below the overall baseline from first touch, which is consistent with their role as awareness and top-of-funnel channels. Paid social in particular converts at near-zero (1.3%) — it reaches a large number of people who are not yet ready to apply.

Source GroupPeopleApplicantsApp RateLift
organic search25,7677,38928.7%2.96x
direct / unknown38,7838,26421.3%2.20x
ai referral1643420.7%2.14x
paid search1,31622116.8%1.73x
email1,26721016.6%1.71x
paid display1,25917914.2%1.47x
organic social1,03614413.9%1.43x
other2533212.6%1.30x
vendor / purchased list36411.1%1.15x
paid / carnegie2,0221356.7%0.69x
paid social844111.3%0.13x
no engagement touch103,5255350.5%0.05x

Organic search is the highest-converting tracked channel and the clearest signal of high-intent self-directed demand. Paid and Carnegie-sourced channels convert well below baseline from first touch — they are top-of-funnel awareness channels and should not be evaluated on first-touch application rate alone. AI referral (164 persons, 20.7% rate) is an emerging channel worth monitoring.

First-touch attribution reveals which channels are attracting prospects who eventually apply, regardless of what happens in between. It answers a different question than last-touch or multi-touch models: who showed up first, and did they end up applying?

This matters for channel investment decisions:

  • Channels with high first-touch lift (organic search, direct) attract self-directed, high-intent prospects — protecting or growing those audiences has compounding value
  • Channels with low first-touch lift (paid social, paid display, Carnegie) may still play an important role in the funnel as awareness drivers, but should not be held to a first-touch conversion standard
  • paid / carnegie reaches 2,022 people but converts at only 6.7% from first touch — below baseline, suggesting Carnegie is effective at top-of-funnel reach but requires substantial nurturing before conversion
  • The no engagement touch group (103,525 people, 0.5% rate) is a large population with almost no conversion — this is primarily list imports and name buys with no subsequent digital engagement

The query assigns each person their first engagement touch using ROW_NUMBER() ordered by touched_at. That touch’s utm_source and utm_medium are used to classify the person into a source_group via a CASE statement. Persons with no engagement touch in person_touches fall into the no engagement touch group.

Application rate is calculated across all persons, not just applicants, so the denominator includes everyone in each source group regardless of whether they applied. Lift is the ratio of a group’s application rate to the overall application rate (9.7% across FY2023–2026).

WITH first_touch AS (
SELECT
person_id,
touched_at,
touch_type,
touch_category,
utm_source,
utm_medium,
utm_campaign,
ROW_NUMBER() OVER (
PARTITION BY person_id
ORDER BY touched_at ASC, touch_type ASC
) AS rn
FROM person_touches
WHERE touch_category = 'engagement'
),
source_groups AS (
SELECT
person_id,
touched_at AS first_touch_at,
touch_type AS first_touch_type,
utm_source AS first_touch_utm_source,
utm_medium AS first_touch_utm_medium,
utm_campaign AS first_touch_utm_campaign,
CASE
WHEN lower(utm_source) IN ('google', 'bing', 'yahoo', 'yahoo!', 'duckduckgo', 'ecosia', 'yandex', '360.cn', 'baidu')
AND lower(utm_medium) IN ('organic', 'organic_search', 'search')
THEN 'organic search'
WHEN lower(utm_source) IN ('google', 'bing')
AND lower(utm_medium) IN ('cpc', 'paid', 'paid_search', 'ppc')
THEN 'paid search'
WHEN lower(utm_source) IN ('googlead', 'mediately')
OR lower(utm_medium) IN ('mediately', 'display', 'lightbox', 'banner')
THEN 'paid display'
WHEN lower(utm_source) IN ('carnegie-digital', 'carnegie', 'carnegie_digital')
AND lower(utm_medium) IN ('ppc', 'paid-social', 'paid_social', 'cpc', 'display', 'lightbox', 'discovery', 'custom-content', 'video')
THEN 'paid / carnegie'
WHEN lower(utm_source) IN ('facebook', 'instagram', 'linkedin', 'youtube', 'tiktok', 'snapchat', 'twitter', 'reddit', 'meta')
AND lower(utm_medium) IN ('paid', 'paid-social', 'paid_social', 'cpc')
THEN 'paid social'
WHEN lower(utm_source) IN ('facebook', 'instagram', 'linkedin', 'youtube', 'tiktok', 'snapchat', 'twitter', 'reddit')
OR lower(utm_medium) IN ('social')
THEN 'organic social'
WHEN lower(utm_source) IN ('slate', 'gmail', 'miami-matters', 'mass_mailer', 'inbound-email', 'notifier', 'email', 'newsletter')
OR lower(utm_medium) IN ('email')
THEN 'email'
WHEN lower(utm_source) IN ('nrccua', 'encoura', 'collegeboard', 'cappex', 'niche', 'niche.com', 'qs', 'usnews_studentconnect', 'hotcoursesinternational', 'idp', 'ziprecruiter')
THEN 'vendor / purchased list'
WHEN lower(utm_source) IN ('chatgpt.com', 'perplexity', 'claude', 'gemini', 'copilot.com')
THEN 'ai referral'
WHEN lower(utm_source) IN ('miami university calendar')
THEN 'calendar widget'
WHEN lower(utm_medium) IN ('referral')
THEN 'referral'
WHEN utm_source IS NULL
OR utm_source = ''
OR utm_source = '(none)'
THEN 'direct / unknown'
ELSE 'other'
END AS source_group
FROM first_touch
WHERE rn = 1
),
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(sg.source_group, 'no engagement touch') AS source_group,
sg.first_touch_at,
sg.first_touch_type,
sg.first_touch_utm_source,
sg.first_touch_utm_medium,
sg.first_touch_utm_campaign,
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 source_groups sg
ON p.id = sg.person_id
LEFT JOIN touch_counts tc
ON p.id = tc.person_id
LEFT JOIN applied a
ON p.id = a.person_id
),
overall AS (
SELECT
ROUND(
SUM(applied) * 1.0 / COUNT(*),
3
) AS overall_application_rate
FROM labeled
)
SELECT
l.source_group,
COUNT(*) AS people,
SUM(l.applied) AS applicants,
ROUND(AVG(l.total_touches), 1) AS avg_total_touches,
ROUND(MEDIAN(l.total_touches), 1) AS median_total_touches,
ROUND(AVG(l.engagement_touches), 1) AS avg_engagement_touches,
ROUND(MEDIAN(l.engagement_touches), 1) AS median_engagement_touches,
ROUND(AVG(l.exposure_touches), 1) AS avg_exposure_touches,
ROUND(AVG(l.pageview_count), 1) AS avg_pageviews,
ROUND(AVG(l.form_response_count), 1) AS avg_form_responses,
ROUND(
SUM(l.applied) * 1.0 / COUNT(*),
3
) AS application_rate,
o.overall_application_rate,
ROUND(
(
SUM(l.applied) * 1.0 / COUNT(*)
)
/
NULLIF(o.overall_application_rate, 0),
2
) AS application_rate_lift
FROM labeled l
CROSS JOIN overall o
GROUP BY
l.source_group,
o.overall_application_rate
ORDER BY
application_rate DESC;