Inquiry Pipeline — Fall 2027 (Monitoring)
Definition
Section titled “Definition”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.
Summary
Section titled “Summary”Same-point inquiry trajectory
Section titled “Same-point inquiry trajectory”| Cohort | Inquiries at ~14 months out |
|---|---|
| Fall 2024 | 117,321 |
| Fall 2025 | 193,045 |
| Fall 2026 | 160,805 |
| Fall 2027 | 79,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”| Vendor | F26 Names | F27 Names | Inquiry Rate F26 | Inquiry Rate F27 |
|---|---|---|---|---|
| College Board (Student Search) | 389,130 | 259,765 (−33%) | 11.5% | 7.8% |
| Appily (EAB/Cappex) | 124,400 | 231,927 (+86%) | 6.9% | 3.4% |
| Encoura | 39,214 | 55,361 (+41%) | 24.8% | 8.4% |
| Total | 552,744 | 547,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 Board | 5.1% → 5.7% ↑ | 11.5% → 7.8% |
| Encoura | 5.3% → 5.8% ↑ | 24.8% → 8.4% |
| Appily | 3.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.
Key Insight
Section titled “Key Insight”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.
Why This Is Important
Section titled “Why This Is Important”“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.
Methodology
Section titled “Methodology”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).
Same-Point Inquiry Trajectory
Section titled “Same-Point Inquiry Trajectory”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 termORDER 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_rateFROM pool pJOIN origin o ON p.person_id = o.person_idGROUP BY 1, 2ORDER BY 1, 2;Email Reach by Vendor (Time-Bounded)
Section titled “Email Reach by Vendor (Time-Bounded)”-- Reuses pool + origin from the previous query, with a per-term cutoffWITH 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_clickedFROM vpLEFT JOIN msg ON vp.person_id = msg.person_id AND vp.term = msg.termGROUP BY 1, 2ORDER 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 queryWITH 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_statusFROM pool pJOIN origin o ON p.person_id = o.person_idLEFT JOIN frm f ON p.person_id = f.person_id AND p.term = f.termGROUP BY 1, 2ORDER BY 1, 2;Appily Load Campaign Coverage
Section titled “Appily Load Campaign Coverage”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_emailedFROM origin oJOIN pool p ON o.person_id = p.person_idLEFT JOIN reached r ON o.person_id = r.person_idGROUP BY 1ORDER 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_promotionsFROM promosWHERE changed_at >= CASE term WHEN 'Fall 2026' THEN TIMESTAMP '2024-01-01' ELSE TIMESTAMP '2025-01-01' ENDGROUP BY 1ORDER 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, folderFROM rulesWHERE type = 'person_status'ORDER BY active DESC, updated DESC;