Skip to content

In-Platform Lead Quality

Application behavior of persons acquired through Meta in-platform lead ads — form completions that happen entirely within Facebook or Instagram and are imported into Slate via Zapier (a Carnegie-managed channel). These are tagged in_platform = 'Yes' in persons_dashboard. This page isolates their conversion performance from the rest of the funnel.

In-platform leads convert at 1.01% — roughly one-seventeenth the rate of every other person in the funnel (17.6%). The population is large and has grown every year, making it a material drag on blended funnel metrics.

Fiscal YearIn-Platform PeopleApplicantsApplication Rate
20231,547181.16%
20242,937190.65%
20254,805320.67%

The channel is not inherently broken — the problem is what the lead form captures. Breaking the population down by subsequent engagement reveals the mechanism:

Engagement After LeadPeopleApplicantsApplication Rate
0 engagement touches8,849110.12%
1–5 touches34610.29%
6–35 touches21794.15%
36+ touches1287558.59%

93% of in-platform leads (8,849 of 9,540) never generate a single engagement touch after the lead form — they convert at 0.12%. But the 128 who did reach 36+ engagement touches convert at 58.6% — statistically identical to the engaged pipeline rate for the funnel as a whole.

In-platform lead ads capture contact information without capturing intent. A person tapping a pre-filled form inside Facebook or Instagram has expressed far less than someone who navigated to the institution’s site and submitted an inquiry. The result is a large population that enters the CRM and then goes inert — 93% never return.

Crucially, the failure is not in the source but in the engagement that follows. When an in-platform lead does engage — reaching the same 36-touch threshold that predicts conversion everywhere else — they apply at 58.6%, right in line with the rest of the engaged funnel. The channel’s near-zero blended rate is a nurture and re-engagement problem, not a proof that these prospects are worthless. But at current re-engagement rates (7% reach any meaningful touch count), the channel delivers almost no applicants for the volume it generates.

This population distorts every blended funnel metric it touches. It inflates total person counts, suppresses the overall application rate, and — because it grew from 1,547 to 4,805 persons across three years — a growing share of the funnel is effectively inert. The source group mix page shows the no-engagement-touch population doubling in FY2025; in-platform leads are a significant component of that growth.

For budget decisions, this is the clearest reallocation candidate in the dataset:

  • The channel generates volume that does not convert — 9,540 leads for 96 applicants over three years
  • The cost-per-applicant is therefore extremely high relative to organic search or engaged nurture
  • The one lever that would change the math is re-engagement: the 128 who engaged prove the prospects can convert, but the channel produces them at a 1.3% rate

The strategic question for a CMO is whether in-platform lead spend is better redirected toward channels that generate self-directed, higher-intent prospects — or whether a dedicated re-engagement program could lift the 93% inert segment enough to justify continued acquisition.

Persons are identified by the in_platform = 'Yes' tag in persons_dashboard, derived from the Zapier source format in Slate (see person tags). Application rate is applicants divided by total in-platform persons per fiscal year. The engagement breakdown joins to person_touches to count engagement touches accumulated after the lead was captured.

SELECT
fiscal_year,
COUNT(*) FILTER (WHERE in_platform = 'Yes') AS in_platform_people,
SUM(CASE WHEN in_platform = 'Yes' AND applied = 'Yes' THEN 1 ELSE 0 END) AS applicants,
ROUND(
SUM(CASE WHEN in_platform = 'Yes' AND applied = 'Yes' THEN 1 ELSE 0 END) * 100.0
/ NULLIF(COUNT(*) FILTER (WHERE in_platform = 'Yes'), 0),
2
) AS application_rate
FROM persons_dashboard
GROUP BY fiscal_year
ORDER BY fiscal_year;
WITH touch_counts AS (
SELECT
person_id,
COUNT(CASE WHEN touch_category = 'engagement' THEN 1 END) AS engagement_touches
FROM person_touches
GROUP BY person_id
)
SELECT
CASE
WHEN COALESCE(tc.engagement_touches, 0) = 0 THEN '0 engagement touches'
WHEN tc.engagement_touches BETWEEN 1 AND 5 THEN '1-5'
WHEN tc.engagement_touches BETWEEN 6 AND 35 THEN '6-35'
ELSE '36+'
END AS engagement_bucket,
COUNT(*) AS people,
SUM(CASE WHEN pd.applied = 'Yes' THEN 1 ELSE 0 END) AS applicants,
ROUND(SUM(CASE WHEN pd.applied = 'Yes' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) AS application_rate
FROM persons_dashboard pd
LEFT JOIN touch_counts tc ON pd.person_id = tc.person_id
WHERE pd.in_platform = 'Yes'
GROUP BY 1
ORDER BY MIN(COALESCE(tc.engagement_touches, 0));