Cohort Conversion Curves
Definition
Section titled “Definition”For each fiscal year cohort, the percentage of persons who had applied within 30, 60, 90, 180, and 365 days of their first recorded marketing touch. This shows whether application behavior is fast or slow, and whether cohorts are still converting or have plateaued.
Summary
Section titled “Summary”All three cohorts follow a similar shape: roughly half of total conversions happen within the first 30 days, and ~80% are in by 90 days. The incremental gain from 90 days to final is modest (5–6 points), meaning most people who are going to apply do so relatively quickly after first contact.
FY2025 is the weakest cohort at every interval — not just at final rate. The gap is consistent from day 30 onward, which rules out a timing explanation. FY2025’s lower application rate is a real demand or quality-of-funnel issue, not a cohort that hasn’t had time to convert.
| Fiscal Year | Persons | Applicants | 30d | 60d | 90d | 180d | 365d | Final |
|---|---|---|---|---|---|---|---|---|
| 2023 | 15,034 | 3,827 | 13.0% | 16.5% | 19.5% | 22.3% | 23.9% | 25.5% |
| 2024 | 22,264 | 5,421 | 13.8% | 17.2% | 19.7% | 22.0% | 23.3% | 24.3% |
| 2025 | 22,543 | 4,663 | 11.3% | 14.1% | 16.7% | 19.0% | 20.3% | 20.7% |
Key Insight
Section titled “Key Insight”FY2025 is a genuinely weaker cohort, not a slow one. The conversion gap vs. FY2023 and FY2024 appears immediately at 30 days and holds consistently through 365 days — by which point most conversion has already happened. The question is what drove the change in cohort quality, not whether more time would close the gap.
Why This Is Important
Section titled “Why This Is Important”A lower application rate in a given fiscal year may not mean lower demand — it may mean the cohort is still converting. Cohort conversion curves distinguish between a demand problem and a timing problem.
This matters for:
- Interpreting year-over-year rate declines — FY2025’s lower rate may reflect a slower-converting cohort, not a weaker one
- Setting expectations for when in the cycle most applications arrive
- Identifying cohorts that plateau early vs. those that keep converting over time
- Informing the timing of nurture campaigns relative to when conversion is most likely
Methodology
Section titled “Methodology”Each person is assigned to a fiscal year cohort based on persons_dashboard.fiscal_year. First touch date comes from the earliest record in person_touches. Days to apply is the difference between first touch and application date.
Cumulative conversion is calculated at fixed intervals: 30, 60, 90, 180, and 365 days from first touch. Persons with no recorded first touch are excluded. Only FY2023–2025 are included as complete-year cohorts with reliable pipeline data.
WITH first_touch AS ( SELECT person_id, MIN(touched_at) AS first_touch_at FROM person_touches GROUP BY person_id),
applied AS ( SELECT person_id, MIN(tag_date) AS applied_at FROM person_tags WHERE tag_type = 'applied' AND tag_value = 'Yes' GROUP BY person_id),
cohort AS ( SELECT pd.person_id, pd.fiscal_year, ft.first_touch_at, a.applied_at, datediff('day', CAST(ft.first_touch_at AS DATE), CAST(a.applied_at AS DATE) ) AS days_to_apply FROM persons_dashboard pd JOIN first_touch ft ON pd.person_id = ft.person_id LEFT JOIN applied a ON pd.person_id = a.person_id WHERE pd.fiscal_year IN ('2023', '2024', '2025'))
SELECT fiscal_year, COUNT(*) AS total_persons, SUM(CASE WHEN applied_at IS NOT NULL THEN 1 ELSE 0 END) AS total_applicants, ROUND(SUM(CASE WHEN days_to_apply <= 30 THEN 1 ELSE 0 END) * 1.0 / COUNT(*), 3) AS rate_30d, ROUND(SUM(CASE WHEN days_to_apply <= 60 THEN 1 ELSE 0 END) * 1.0 / COUNT(*), 3) AS rate_60d, ROUND(SUM(CASE WHEN days_to_apply <= 90 THEN 1 ELSE 0 END) * 1.0 / COUNT(*), 3) AS rate_90d, ROUND(SUM(CASE WHEN days_to_apply <= 180 THEN 1 ELSE 0 END) * 1.0 / COUNT(*), 3) AS rate_180d, ROUND(SUM(CASE WHEN days_to_apply <= 365 THEN 1 ELSE 0 END) * 1.0 / COUNT(*), 3) AS rate_365d, ROUND(SUM(CASE WHEN applied_at IS NOT NULL THEN 1 ELSE 0 END) * 1.0 / COUNT(*), 3) AS rate_finalFROM cohortGROUP BY fiscal_yearORDER BY fiscal_year;