Skip to content

Channel Concentration Risk

The percentage of total applicants and touched persons whose first engagement came from each source group, with attention to how dependent the applicant pipeline is on any single channel. High concentration in a paid vendor means application volume is exposed to contract changes, budget cuts, or vendor performance shifts.

FY2023 — 15,034 touched persons

Source GroupPeopleApplicants% of Touched% of Applicants
direct / unknown9,2462,09461.5%54.7%
organic search4,1571,60927.7%42.0%
paid / carnegie1,061337.1%0.9%
email276531.8%1.4%
organic social116240.8%0.6%
other108100.7%0.3%
paid display5140.3%0.1%
vendor / purchased list1000.1%0.0%
paid search900.1%0.0%

FY2024 — 22,264 touched persons

Source GroupPeopleApplicants% of Touched% of Applicants
direct / unknown12,6962,90257.0%53.5%
organic search7,8642,27635.3%42.0%
organic social473652.1%1.2%
paid / carnegie401521.8%1.0%
email305701.4%1.3%
paid display205240.9%0.4%
paid social15210.7%0.0%
paid search101230.5%0.4%
other5460.2%0.1%
vendor / purchased list1320.1%0.0%

FY2025 — 22,543 touched persons

Source GroupPeopleApplicants% of Touched% of Applicants
direct / unknown10,8432,08048.1%44.6%
organic search9,2522,31241.0%49.6%
paid display543842.4%1.8%
paid / carnegie510422.3%0.9%
paid social41171.8%0.2%
email395601.8%1.3%
organic social329411.5%0.9%
paid search189240.8%0.5%
other3670.2%0.2%
ai referral2540.1%0.1%
vendor / purchased list1020.0%0.0%

The channel mix is diversifying over time. Direct/unknown shrank from 61.5% to 48.1% of touched persons as organic search grew from 27.7% to 41.0%. In FY2025, organic search overtook direct/unknown as the largest single source of applicants (49.6% vs. 44.6%).

All paid channels combined represent less than 5.5% of touched persons in any year, and less than 3.5% of applicants. No single paid channel exceeds 2.4% of touched persons.

This funnel is not exposed to paid channel concentration risk. Paid vendors are individually too small to materially move application volume up or down — which also means budget cuts to any single vendor would not crater the pipeline.

The real concentration is in brand channels — organic search and direct/unknown together account for 90%+ of applicants in every year. This is structurally healthy: the institution is not dependent on any external vendor for pipeline. The shift underway (direct/unknown declining, organic search growing) is the right direction — it replaces weakly-attributed volume with clearly self-directed demand.

A diversified channel mix is more resilient than one dependent on a single vendor or tactic. If a large share of applicants traces back to one paid channel, a budget cut, contract change, or platform policy shift can materially impact enrollment pipeline with little warning.

This metric is particularly relevant for board-level risk conversations because it quantifies exposure. It also identifies over-reliance on channels that convert below baseline — paying for volume that doesn’t convert is a different risk than paying for volume that does.

Source group classification uses the same CASE logic as the first-touch application rate page. Concentration is measured two ways: share of all touched persons (funnel dependency) and share of applicants only (conversion dependency). The Herfindahl-Hirschman Index (HHI) is included as a single summary concentration score — higher values mean greater concentration.

WITH first_touch AS (
SELECT
person_id,
utm_source,
utm_medium,
ROW_NUMBER() OVER (
PARTITION BY person_id
ORDER BY touched_at ASC
) AS rn
FROM person_touches
WHERE touch_category = 'engagement'
),
source_groups AS (
SELECT
person_id,
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 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
),
cohort AS (
SELECT
pd.person_id,
pd.fiscal_year,
pd.applied,
sg.source_group
FROM persons_dashboard pd
JOIN source_groups sg ON pd.person_id = sg.person_id
WHERE pd.fiscal_year IN ('2023', '2024', '2025')
),
totals AS (
SELECT fiscal_year, COUNT(*) AS touched_persons
FROM cohort
GROUP BY fiscal_year
),
by_group AS (
SELECT
c.fiscal_year,
c.source_group,
COUNT(*) AS people,
SUM(CASE WHEN applied = 'Yes' THEN 1 ELSE 0 END) AS applicants,
t.touched_persons
FROM cohort c
JOIN totals t ON c.fiscal_year = t.fiscal_year
GROUP BY c.fiscal_year, c.source_group, t.touched_persons
)
SELECT
fiscal_year,
source_group,
people,
applicants,
ROUND(people * 100.0 / touched_persons, 1) AS pct_of_touched,
ROUND(applicants * 100.0 / NULLIF(SUM(applicants) OVER (PARTITION BY fiscal_year), 0), 1) AS pct_of_applicants
FROM by_group
ORDER BY fiscal_year, people DESC;