School Ad Attribution: The 18-Month Model That Connects Spend to Enrollments

The short answer
Standard ad attribution fails private schools because the enrollment journey runs 12-18 months, gets decided offline by two parents, and ends in a SIS the ad platforms never see. The fix is making your inquiry record (not Meta) the system of record, tagged with source at first touch and carried through to enrolled.
On this page⌄
A real attribution model for private school paid media starts with a hard admission: Meta and Google will never tell you which ads enrolled which students. They can't. The decision happens 12 to 18 months after the click, gets made by two parents talking over dinner, and ends in your student information system that no ad platform can see. So if you're judging spend by the conversion numbers in Ads Manager, you're optimizing toward a number that has almost nothing to do with butts in seats.
The model that actually works flips the system of record. Your inquiry form, not Meta, becomes the source of truth. You capture the traffic source the moment a family raises a hand, write it onto the inquiry record, and carry that tag all the way through tour, application, and enrolled. The ad platform is just one input you reconcile against. When you do this, you stop asking "what was my ROAS this month" and start asking "what did one enrolled student from Google Search cost me this cohort." That second question is the only one your board cares about.
This isn't a pixel problem and it won't be solved by a better tracking tool. It's a data-ownership problem. Below is what the working version looks like, and how to build it without buying enterprise attribution software.
Why do Meta and Google report conversions that never match my actual enrolled student count?
Two reasons, and both are baked into how the platforms work.
First, the platforms count events they can see inside a short window: a form-fill, a button click, a landing-page view. None of those are an enrollment. A family that downloads your viewbook is a "conversion" in Ads Manager and a stranger in your SIS. The platform is honest about what it measures; it's measuring the wrong finish line.
Second, a growing share of what the platforms report is modeled, meaning estimated. After privacy changes like iOS App Tracking Transparency and the death of third-party cookies, both Google and Meta fill gaps with statistical guesses about conversions they can no longer directly observe. That's fine for a retailer doing thousands of same-week purchases. For a school doing a few dozen enrollments a year on an 18-month cycle, the model has almost no real signal to learn from. So it inflates early events and invents the rest.
The core mismatch
Should I trust platform-reported ROAS, or build my own attribution?
Build your own. Not because the platforms lie, but because they're scoring a different game.
Platform ROAS optimizes for the cheapest form-fill. Left alone, the algorithm will happily flood you with low-intent inquiries from families that will never tour, because those families fill out forms cheaply. Your cost-per-inquiry drops, your dashboard turns green, and your enrolled count stays flat. I've watched schools celebrate a "great" ad month that produced zero applications.
The math that matters is downstream. We walk through it in the enrollment conversion math every school should run: inquiry to tour, tour to application, application to enrolled. Once you know those rates by source, you can tell the algorithm which inquiry sources actually become students and bid accordingly. That's the difference between buying clicks and buying enrollments.
How do I track a paid lead through a 12-18 month decision cycle into the SIS?
Three pieces, none of them expensive.
-
A UTM convention. Every ad link carries source, medium, and campaign tags. Tighten the convention and never break it:
utm_source=google&utm_medium=cpc&utm_campaign=kindergarten-spring. Sloppy or inconsistent UTMs are the single most common reason schools can't trace anything. -
A hidden source field on your inquiry form. When a family submits, JavaScript reads the UTM (and the landing page, and the referrer) and writes it into a hidden field that posts straight into your CRM or SIS. Now the source is attached to the human, not floating in an ad dashboard that forgets them in 28 days.
-
One status column you actually maintain. Inquiry, Tour, Applied, Enrolled, Withdrawn. The source field rides alongside that status the whole way. When a family enrolls in the next cycle, you can pull every enrolled record, group by source, and divide spend by enrolled count. That's cost-per-enrolled by channel, the number you've been missing.
This is the backbone of a real school marketing and enrollment system. The tooling matters far less than the discipline of capturing source once and never losing it.
One field
A hidden source field on the inquiry form is the highest-leverage attribution change most schools can make
SML enrollment playbook
What's the difference between an inquiry, a tour, an application, and an enrollment for attribution purposes?
They're four different finish lines, and conflating them is how schools misread their funnel.
- Inquiry: a hand raised. Easy to generate, easy to fake interest. Ad platforms love to call this a conversion.
- Tour: real intent. The family showed up. This is the first event correlated with enrolling.
- Application: commitment and usually money. A strong predictor.
- Enrollment: the only one that pays your bills.
Attribute at every stage, not just the last. A channel that produces cheap inquiries but few tours is a leak. A channel with expensive inquiries that convert to tours and applications is a bargain, even if its cost-per-inquiry looks ugly. Most schools that fix their lead generation for schools discover their "best" channel by volume was their worst by enrolled student.
How do I attribute enrollment when both parents research separately and the final decision happens offline?
You accept that you'll never get to 100% certainty, and you build a system that's honest about the gap instead of pretending it isn't there.
Most enrollment decisions involve two or more adults, and the final yes happens at a kitchen table you'll never see. In a Niche survey of parents whose child had just started college, 91% said they were involved in their child's college search, showing that most enrollment decisions involve two or more decision-makers rather than the student alone Niche, 2020. One parent clicks the Instagram ad on their phone; the other Googles your name three weeks later on a laptop; the choice gets made in a conversation with no tracking on it at all. No pixel survives that.
So do two things. First, add a "How did you hear about us?" free-text or dropdown field to the inquiry form. Second, reconcile that self-reported answer against your tracked UTM source. When they agree, you're confident. When a tracked Google click also says "a friend told me," you've found your word-of-mouth halo: paid media that warmed the family before a referral closed them. Treat that overlap as evidence your ads are working upstream, not as a failure of attribution.
Attribute by cohort, not by click date. Pull every family that enrolled for fall 2025, look at where they entered the funnel, and compute cost-per-enrolled by source across the whole cycle. Monthly ROAS is noise on an 18-month journey. Cohort-level cost-per-enrolled is the truth.
The takeaway
Stop trying to make the ad platform tell you something it structurally can't know. Make your inquiry record the system of record: tag source at first touch, carry it through every funnel stage, and measure cost-per-enrolled by source per cohort. A UTM convention, a hidden form field, and one status column will get you most of the way before you spend a dollar on software. Do that and your next board meeting has real numbers instead of a green dashboard that means nothing.
If you want a second set of eyes on where your funnel leaks between click and enrolled, book a discovery call.
Want this mapped to your school's enrollment funnel?
We'll spend 20 minutes on your funnel — where inquiries come in, where they stall, and the one or two fixes that move enrollment. It's a working session, not a sales call.
Book a discovery callFrequently asked questions
- Why do Meta and Google report more conversions than I actually enrolled?
- Platforms count form-fills and modeled (estimated) conversions inside a short attribution window. Schools enroll on a multi-month cycle, so the platform inflates the early-funnel events it can see and guesses at the rest. The numbers will never match your enrolled count.
- What should be my single source of truth for attribution?
- The inquiry record in your CRM or SIS, captured with source data at first touch and carried forward to enrolled. The ad platform loses sight of the family right after the click, so it can't be the system of record for a year-long decision.
- Do I need expensive attribution software to do this?
- No. A consistent UTM convention, a hidden source field on your inquiry form, and one column in your SIS get most schools about 80% of the answer before you buy any tooling.
- How do I handle the long gap between ad click and enrollment?
- Attribute by cohort and enrollment season, not by click date. Measure cost-per-enrolled by inquiry source over the full cycle instead of chasing monthly ROAS.
- What about families who never click an ad but were influenced by one?
- Add a 'How did you hear about us?' field and reconcile it against your tracked source. Treat the gap as your offline and word-of-mouth halo, not a failure of attribution.

Clint Townsend
Founder of Six Minutes Late. We build enrollment-marketing systems for schools — independent, Montessori, faith-based, and language programs — turning inquiries into enrolled families with faster follow-up and tighter funnels.
Work with us →Get the next one in your inbox
Practical, no-fluff plays on filling seats and building enrollment demand — a couple of times a month. Built for people who actually run schools and programs.


