First Touch Application Rate
Definition
Section titled “Definition”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.
Summary
Section titled “Summary”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 Group | People | Applicants | App Rate | Lift |
|---|---|---|---|---|
| organic search | 25,767 | 7,389 | 28.7% | 2.96x |
| direct / unknown | 38,783 | 8,264 | 21.3% | 2.20x |
| ai referral | 164 | 34 | 20.7% | 2.14x |
| paid search | 1,316 | 221 | 16.8% | 1.73x |
| 1,267 | 210 | 16.6% | 1.71x | |
| paid display | 1,259 | 179 | 14.2% | 1.47x |
| organic social | 1,036 | 144 | 13.9% | 1.43x |
| other | 253 | 32 | 12.6% | 1.30x |
| vendor / purchased list | 36 | 4 | 11.1% | 1.15x |
| paid / carnegie | 2,022 | 135 | 6.7% | 0.69x |
| paid social | 844 | 11 | 1.3% | 0.13x |
| no engagement touch | 103,525 | 535 | 0.5% | 0.05x |
Key Insight
Section titled “Key Insight”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.
Why This Is Important
Section titled “Why This Is Important”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 / carnegiereaches 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 touchgroup (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
Methodology
Section titled “Methodology”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 lCROSS JOIN overall o
GROUP BY l.source_group, o.overall_application_rate
ORDER BY application_rate DESC;