Skip to content

Inquiry Pipeline — Fall 2027 (Monitoring)

Why are Fall 2027 inquiries running behind Fall 2026 — and is anything broken? Fall 2027 is a forming cohort, so every comparison on this page is same point in cycle: Fall 2027 as of June 30, 2026 vs Fall 2026 as of June 30, 2025 (~14 months before each cohort matriculates). Raw whole-cohort comparisons against a completed cycle are meaningless and are not used here.

Two different metrics get called “inquiries are down,” and they have different answers:

  • Inquiry counts — persons in status Inquiry/Applicant. Down ~50% at same point.
  • Prospect → inquiry conversion — the share of purchased search names (status Prospect) who convert to inquiry status. This is the metric in the enrollment team’s vendor ROI reporting — and it has roughly halved at every vendor.
CohortInquiries at ~14 months out
Fall 2024117,321
Fall 2025193,045
Fall 2026160,805
Fall 202779,898 (−50% vs F26)

Unlike the Fall 2025 → Fall 2026 story — where the comparison year was inflated and the engaged pool grew — Fall 2027 trails every recent cohort at the same point. Web-engaged inquiries (time-bounded to each cutoff) are down a modest −12%; the never-engaged name population accounts for ~92% of the gap.

The prospect pool is flat — conversion is what collapsed

Section titled “The prospect pool is flat — conversion is what collapsed”
VendorF26 NamesF27 NamesInquiry Rate F26Inquiry Rate F27
College Board (Student Search)389,130259,765 (−33%)11.5%7.8%
Appily (EAB/Cappex)124,400231,927 (+86%)6.9%3.4%
Encoura39,21455,361 (+41%)24.8%8.4%
Total552,744547,053 (≈flat)

College Board volume fell a third, but larger Appily and Encoura buys fully offset it. The names are there; they are not converting to inquiries at the historical rate. These same-point rates closely match the enrollment team’s vendor ROI reporting (their CB figures: 11.3% → 8.4%), which validates that both analyses are seeing the same phenomenon.

What’s driving the conversion drop — findings

Section titled “What’s driving the conversion drop — findings”

1. Nothing failed to go out. Email reach is 97%+ at every vendor (Appily 97.8%, College Board 97.7%, Encoura 94.5%), and average emails per name is up substantially (CB 18.3 → 23.0; Encoura more than doubled, 7.7 → 16.6). All Appily loads, including June 2026 (45,878 names, 96.8% mailed), enrolled in campaigns normally.

2. Student behavior held; status promotion collapsed. The decisive comparison — form submissions vs inquiry status, same point in cycle:

Vendor% Submitted Form F26 → F27% Reached Inquiry Status F26 → F27
College Board5.1% → 5.7% ↑11.5% → 7.8%
Encoura5.3% → 5.8% ↑24.8% → 8.4%
Appily3.2% → 2.7% ≈6.9% → 3.4%

Names are clicking (Encoura’s click rate actually rose, 7.4% → 8.0%; CB 10.1% → 8.3% and Appily 7.6% → 5.6% are modestly down) and submitting forms at flat-to-higher rates — yet inquiry-status conversion halved. In Fall 2026, inquiry rates ran 2–5x the form rate, meaning most promotions came through non-form paths (event and fair registrations, questionnaire feeds, files loaded with inquiry status). In Fall 2027, inquiry rates have converged down toward the bare form rate — the non-form promotion paths stopped firing.

3. The promotion paths are identified — confirmed from the status change history and rules table.

Aligning each cohort’s month-by-month promotions to Inquiry status (from the statuses change history), the Fall 2026 cohort received ~115K same-point promotions vs ~64K for Fall 2027. The gap decomposes into named causes:

  • A one-day bulk promotion (April 11, 2024) worth ~26K inquiries. The March 2024 States/Zips name orders (~25K purchased names) were loaded and then batch-promoted to Inquiry status in a single operation. This alone is 56% of the promotion gap. No equivalent order was purchased or promoted for Fall 2027 — so the Fall 2026 “inquiry” baseline includes ~25K cold names with inquiry status that this cycle simply doesn’t have.
  • The inquiry status rules were rebuilt on November 11, 2025 — mid-cycle for Fall 2027. Legacy rules dating to 2014 (Search Ping — any website ping promoted a search name to Inquiry) and 2020 (Search Interaction) were deactivated and replaced by stricter rules (Search Click, RFI form, visits, events, behavioral score 6+). Fall 2026 inquiries were counted under the loose regime; Fall 2027 is being measured under the strict one. Cross-cycle inquiry rates are therefore not comparing like with like.
  • Athletics Questionnaire: feed dead since 2024. Zero new athletics-questionnaire persons created in 2025 or 2026 (vs 94K in 2023, 17K in 2024), no renamed successor source. Worth ~18K same-point records for F26. Verify with athletics whether the feed moved systems.
  • College Board name volume −33% — CB still delivers F27 names, so treat College Board’s restructuring of Search licensing as a partial-volume explanation to verify with the account owner, not a settled cause.

Fall 2027’s inquiry deficit is a measurement-regime story, not a demand story — and it is now fully attributed. Three things produced Fall 2026’s higher inquiry counts that are absent this cycle: (1) a one-day bulk promotion of ~25K purchased state-order names to Inquiry status in April 2024, (2) legacy status rules (in place since 2014) that promoted search names on a mere website ping — deactivated and replaced with stricter rules on November 11, 2025, and (3) the Athletics Questionnaire feed, dead since 2024. Student behavior is stable: email reach and volume are up, form submissions are flat-to-up, and web-engaged inquiries are only −12%. The comparison isn’t apples-to-apples and cannot be until the team either restates the Fall 2026 baseline under the new rules or annotates dashboards with the November 2025 regime change.

“Inquiries are down 50%” invites either panic or an expensive reflex (buy more names). The same-point decomposition shows more names would not fix this — the pool is already flat, and the students in it are behaving normally. The leverage is an operational audit: identify every stream and rule that promoted Prospects to Inquiry status last cycle (questionnaire feeds, event and fair list loads, status rules) and confirm which are still running. Restoring stopped promotion paths is far cheaper than buying volume — and until the audit is done, year-over-year inquiry comparisons will overstate any real change in demand.

This page also flags a permanent measurement shift: with College Board restructuring name licensing and vendor mix changing, raw inquiry counts will not be comparable to the Search-era baseline. The durable KPIs are web-engaged inquiries and prospect → inquiry conversion by vendor — both defined here and re-runnable as the cycle progresses.

Same point in cycle: Fall 2026 records with created_at <= '2025-06-30' vs Fall 2027 records with created_at <= '2026-06-30'. Web touches and email messages are time-bounded to the same cutoffs, so neither cohort gets credit for activity after its comparison date.

Cohort assignment: COALESCE(application_term, intended_term). Inquiry: status Inquiry or Applicant. Prospect pool: all persons assigned to the term regardless of status. Vendor origin: earliest Slate source record, classified by format name / summary (Student Search Service = College Board; %encoura%/%nrccua% = Encoura; %cappex%/%appily%/%eab% = Appily).

SELECT term, COUNT(*) AS same_point_inquiries FROM (
SELECT COALESCE(application_term, intended_term) AS term, created_at
FROM persons_dashboard
WHERE status IN ('Applicant', 'Inquiry')
)
WHERE (term = 'Fall 2024' AND created_at <= '2023-06-30')
OR (term = 'Fall 2025' AND created_at <= '2024-06-30')
OR (term = 'Fall 2026' AND created_at <= '2025-06-30')
OR (term = 'Fall 2027' AND created_at <= '2026-06-30')
GROUP BY term
ORDER BY term;

Vendor Prospect → Inquiry Conversion (Same Point)

Section titled “Vendor Prospect → Inquiry Conversion (Same Point)”
WITH pool AS (
SELECT person_id, COALESCE(application_term, intended_term) AS term, status
FROM persons_dashboard
WHERE ((COALESCE(application_term, intended_term) = 'Fall 2026' AND created_at <= '2025-06-30')
OR (COALESCE(application_term, intended_term) = 'Fall 2027' AND created_at <= '2026-06-30'))
),
origin AS (
SELECT person_id, vendor FROM (
SELECT
sr.record_id AS person_id,
CASE
WHEN COALESCE(sf.name, s.summary) = 'Student Search Service' THEN 'College Board'
WHEN COALESCE(sf.name, s.summary) ILIKE '%encoura%'
OR COALESCE(sf.name, s.summary) ILIKE '%nrccua%' THEN 'Encoura'
WHEN COALESCE(sf.name, s.summary) ILIKE '%cappex%'
OR COALESCE(sf.name, s.summary) ILIKE '%appily%'
OR COALESCE(sf.name, s.summary) ILIKE '%eab%' THEN 'Appily'
ELSE NULL
END AS vendor,
ROW_NUMBER() OVER (PARTITION BY sr.record_id ORDER BY s.created_at ASC) AS rn
FROM source_records sr
JOIN pool ON sr.record_id = pool.person_id
JOIN sources s ON sr.source_id = s.id
LEFT JOIN source_formats sf ON s.format_id = sf.id
) WHERE rn = 1 AND vendor IS NOT NULL
)
SELECT
o.vendor,
p.term,
COUNT(*) AS names,
SUM(CASE WHEN p.status IN ('Inquiry', 'Applicant') THEN 1 ELSE 0 END) AS became_inquiry,
ROUND(SUM(CASE WHEN p.status IN ('Inquiry', 'Applicant') THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 1) AS inquiry_rate
FROM pool p
JOIN origin o ON p.person_id = o.person_id
GROUP BY 1, 2
ORDER BY 1, 2;
-- Reuses pool + origin from the previous query, with a per-term cutoff
WITH pool AS (
SELECT person_id, COALESCE(application_term, intended_term) AS term,
CASE COALESCE(application_term, intended_term)
WHEN 'Fall 2026' THEN TIMESTAMP '2025-06-30'
ELSE TIMESTAMP '2026-06-30' END AS cutoff
FROM persons_dashboard
WHERE ((COALESCE(application_term, intended_term) = 'Fall 2026' AND created_at <= '2025-06-30')
OR (COALESCE(application_term, intended_term) = 'Fall 2027' AND created_at <= '2026-06-30'))
),
origin AS (
SELECT person_id, vendor FROM (
SELECT
sr.record_id AS person_id,
CASE
WHEN COALESCE(sf.name, s.summary) = 'Student Search Service' THEN 'College Board'
WHEN COALESCE(sf.name, s.summary) ILIKE '%encoura%'
OR COALESCE(sf.name, s.summary) ILIKE '%nrccua%' THEN 'Encoura'
WHEN COALESCE(sf.name, s.summary) ILIKE '%cappex%'
OR COALESCE(sf.name, s.summary) ILIKE '%appily%'
OR COALESCE(sf.name, s.summary) ILIKE '%eab%' THEN 'Appily'
ELSE NULL
END AS vendor,
ROW_NUMBER() OVER (PARTITION BY sr.record_id ORDER BY s.created_at ASC) AS rn
FROM source_records sr
JOIN pool ON sr.record_id = pool.person_id
JOIN sources s ON sr.source_id = s.id
LEFT JOIN source_formats sf ON s.format_id = sf.id
) WHERE rn = 1 AND vendor IS NOT NULL
),
vp AS (
SELECT p.person_id, p.term, p.cutoff, o.vendor
FROM pool p JOIN origin o ON p.person_id = o.person_id
),
msg AS (
SELECT vp.person_id, vp.term, vp.vendor,
COUNT(*) FILTER (WHERE m.status IN ('sent', 'open', 'click', 'delivered')) AS emails,
COUNT(*) FILTER (WHERE m.status = 'click') AS clicks
FROM vp
JOIN messages m ON vp.person_id = m.person_id AND m.delivered_at <= vp.cutoff
GROUP BY 1, 2, 3
)
SELECT
vp.vendor,
vp.term,
COUNT(*) AS names,
ROUND(COUNT(msg.person_id) FILTER (WHERE msg.emails > 0) * 100.0 / COUNT(*), 1) AS pct_reached,
ROUND(AVG(COALESCE(msg.emails, 0)), 1) AS avg_emails,
ROUND(COUNT(msg.person_id) FILTER (WHERE msg.clicks > 0) * 100.0 / COUNT(*), 1) AS pct_clicked
FROM vp
LEFT JOIN msg ON vp.person_id = msg.person_id AND vp.term = msg.term
GROUP BY 1, 2
ORDER BY 1, 2;

Form Submission vs Inquiry Status (the decisive comparison)

Section titled “Form Submission vs Inquiry Status (the decisive comparison)”
-- Reuses pool + origin from the vendor conversion query
WITH pool AS (
SELECT person_id, COALESCE(application_term, intended_term) AS term, status,
CASE COALESCE(application_term, intended_term)
WHEN 'Fall 2026' THEN TIMESTAMP '2025-06-30'
ELSE TIMESTAMP '2026-06-30' END AS cutoff
FROM persons_dashboard
WHERE ((COALESCE(application_term, intended_term) = 'Fall 2026' AND created_at <= '2025-06-30')
OR (COALESCE(application_term, intended_term) = 'Fall 2027' AND created_at <= '2026-06-30'))
),
origin AS (
SELECT person_id, vendor FROM (
SELECT
sr.record_id AS person_id,
CASE
WHEN COALESCE(sf.name, s.summary) = 'Student Search Service' THEN 'College Board'
WHEN COALESCE(sf.name, s.summary) ILIKE '%encoura%'
OR COALESCE(sf.name, s.summary) ILIKE '%nrccua%' THEN 'Encoura'
WHEN COALESCE(sf.name, s.summary) ILIKE '%cappex%'
OR COALESCE(sf.name, s.summary) ILIKE '%appily%'
OR COALESCE(sf.name, s.summary) ILIKE '%eab%' THEN 'Appily'
ELSE NULL
END AS vendor,
ROW_NUMBER() OVER (PARTITION BY sr.record_id ORDER BY s.created_at ASC) AS rn
FROM source_records sr
JOIN pool ON sr.record_id = pool.person_id
JOIN sources s ON sr.source_id = s.id
LEFT JOIN source_formats sf ON s.format_id = sf.id
) WHERE rn = 1 AND vendor IS NOT NULL
),
frm AS (
SELECT p.person_id, p.term
FROM pool p
JOIN person_touches pt ON p.person_id = pt.person_id
AND pt.touch_type = 'form_response'
AND pt.touched_at <= p.cutoff
GROUP BY 1, 2
)
SELECT
o.vendor,
p.term,
COUNT(*) AS names,
ROUND(COUNT(f.person_id) * 100.0 / COUNT(*), 1) AS pct_submitted_form,
ROUND(SUM(CASE WHEN p.status IN ('Inquiry', 'Applicant') THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 1) AS pct_inquiry_status
FROM pool p
JOIN origin o ON p.person_id = o.person_id
LEFT JOIN frm f ON p.person_id = f.person_id AND p.term = f.term
GROUP BY 1, 2
ORDER BY 1, 2;
WITH pool AS (
SELECT person_id, created_at
FROM persons_dashboard
WHERE COALESCE(application_term, intended_term) = 'Fall 2027'
AND created_at <= '2026-06-30'
),
origin AS (
SELECT person_id FROM (
SELECT
sr.record_id AS person_id,
COALESCE(sf.name, s.summary) AS lbl,
ROW_NUMBER() OVER (PARTITION BY sr.record_id ORDER BY s.created_at ASC) AS rn
FROM source_records sr
JOIN pool ON sr.record_id = pool.person_id
JOIN sources s ON sr.source_id = s.id
LEFT JOIN source_formats sf ON s.format_id = sf.id
) WHERE rn = 1
AND (lbl ILIKE '%cappex%' OR lbl ILIKE '%appily%' OR lbl ILIKE '%eab%')
),
reached AS (
SELECT DISTINCT m.person_id
FROM messages m
JOIN origin o ON m.person_id = o.person_id
WHERE m.status IN ('sent', 'open', 'click', 'delivered')
AND m.delivered_at <= '2026-06-30'
)
SELECT
date_trunc('quarter', p.created_at) AS created_quarter,
COUNT(*) AS appily_names,
ROUND(COUNT(r.person_id) * 100.0 / COUNT(*), 1) AS pct_ever_emailed
FROM origin o
JOIN pool p ON o.person_id = p.person_id
LEFT JOIN reached r ON o.person_id = r.person_id
GROUP BY 1
ORDER BY 1;

Inquiry Promotions by Cohort, Aligned Month (requires statuses history)

Section titled “Inquiry Promotions by Cohort, Aligned Month (requires statuses history)”
WITH cohort AS (
SELECT person_id, COALESCE(application_term, intended_term) AS term
FROM persons_dashboard
WHERE COALESCE(application_term, intended_term) IN ('Fall 2026', 'Fall 2027')
),
promos AS (
SELECT c.term, st.changed_at
FROM statuses st
JOIN cohort c ON st.record_id = c.person_id
WHERE st.status = 'Inquiry'
AND ((c.term = 'Fall 2026' AND st.changed_at <= '2025-06-30')
OR (c.term = 'Fall 2027' AND st.changed_at <= '2026-06-30'))
)
SELECT
CASE term
WHEN 'Fall 2026' THEN date_trunc('month', changed_at + INTERVAL 12 MONTH)
ELSE date_trunc('month', changed_at)
END AS aligned_month,
COUNT(*) FILTER (WHERE term = 'Fall 2026') AS f26_promotions,
COUNT(*) FILTER (WHERE term = 'Fall 2027') AS f27_promotions
FROM promos
WHERE changed_at >= CASE term
WHEN 'Fall 2026' THEN TIMESTAMP '2024-01-01'
ELSE TIMESTAMP '2025-01-01' END
GROUP BY 1
ORDER BY 1;

Spikes on a single day are batch operations. To identify who a batch promoted, filter statuses to the spike date and join the promoted record_ids to their origin source (see the intake-source query pattern above). The April 11, 2024 spike resolves to the MiamiU-States-Order and Zips-order files.

Person Status Rules Audit (requires rules table)

Section titled “Person Status Rules Audit (requires rules table)”
SELECT
name,
active,
CAST(created AS DATE) AS created,
CAST(updated AS DATE) AS updated,
folder
FROM rules
WHERE type = 'person_status'
ORDER BY active DESC, updated DESC;