Enrollments and tuition, not inquiries
Channels are ordered by tuition rather than by volume, which is usually a different list from the one your ad account shows.
Marketing attribution for online education providers
Match paid enrollments, upsells and renewals to the campaigns that produced the learner, past the free trial that hid them.
$504,000 63% of $800,000 paid
The blind spot
Free trials and lead magnets make top-of-funnel look excellent. Paid enrollment rates differ by an order of magnitude between channels, and platform dashboards cannot see it.
What you get
Channels are ordered by tuition rather than by volume, which is usually a different list from the one your ad account shows.
The gap between the inquiry and the enrollment costs you nothing — there is no window to expire and nothing decays.
Nothing is redistributed. If an enrollment cannot be traced to a channel, the report says so instead of improving the attributed share.
A worked example
Not impressions, not leads, not cost per click. Closed revenue, by the channel that produced it, for a period you choose — with the portion we could not trace shown rather than quietly shared out across your paid channels.
| Channel | Sales | Revenue | Share | % |
|---|---|---|---|---|
| Google Ads | 187 | $232,000 | 29% | |
| Meta Ads | 141 | $168,000 | 21% | |
| Affiliates | 86 | $104,000 | 13% | |
| Direct / Unknown | 244 | $296,000 | 37% |
Channels that produce free signups cheaply are frequently the worst at producing paid enrollments. Optimizing to signups therefore actively moves budget toward the weakest channels.
Ranking on paid revenue is the correction. In this category the two rankings commonly disagree completely, which is exactly why the exercise is worth running.
Affiliate and partner networks self-report conversions, and those figures rarely reconcile with the revenue in your own system.
Adding the affiliate lead export to the lead file, each row tagged with the affiliate, and matching it against your own paid enrollments gives an independent count — possibly the first one the business has ever had.
Most online course businesses offer a money-back period, and a meaningful share of enrollments are reversed inside it. That makes an enrollment count a forward-looking estimate rather than a record, and it makes the estimate worst for exactly the channels that sell hardest. A campaign built on urgency converts well and refunds more; a campaign built on a detailed curriculum page converts more slowly and refunds less. Both look identical on the day the enrollment lands, and only one produces revenue the business keeps.
Exporting net revenue after the refund period corrects this without any extra work; the report counts each row's amount as it stands and does not subtract a refund column. The practical consequence is that a channel report should be run on a period that has fully closed rather than on the current month, which is the opposite of how most teams read a dashboard. A month old enough to have settled tells you considerably more than a live one reporting things that may yet be undone.
Chargebacks sit behind the same door and behave the same way. They arrive later, they cluster around certain kinds of acquisition, and they cost the business in operational time as well as in reversed revenue. Where the payment system can export them they belong in the file, for the same reason returns belong in a retailer's: attributing revenue that came back is the fastest way to make a report untrustworthy, and a report nobody trusts stops being used long before anybody admits it.
A great deal of online tuition is sold on installments. Twelve monthly payments, a three-part plan, a subscription with a minimum term. The headline enrollment value assumes every one of them arrives, and some of them do not: cards expire, plans lapse, learners disappear after the second module. A channel ranked on the contracted value of what it sold is being credited for money that has not turned up yet, and the overstatement is largest for channels selling to people least able to commit.
Exporting payments as they are taken, rather than contracts as they are signed, fixes this cleanly. Each installment is a row carrying the learner's contact detail and its own date, and every one of them credits the channel that produced the learner originally, because the match is on the person and nothing expires in between. The ranking then reflects money received and updates itself as the plans run their course, so a channel that sold well and collected badly can no longer hide behind a signature date.
It also gives a straightforward answer to a question these businesses argue about constantly: whether a longer plan at a higher total beats a shorter one at a lower price. That depends entirely on completion of payment, which varies by acquisition source, and it is answerable from the same two files rather than from a spreadsheet somebody maintains by hand. The answer tends to differ by course as well as by channel, which is exactly what a product column is there for.
Online education runs on lists. A webinar registration, a free lesson sequence, a downloadable workbook, a newsletter somebody else owns, an affiliate's audience, a podcast appearance that ends with a link. Each of those is a group of people with an email address attached, which is the only requirement for a lead source, and combined in the lead file with each row tagged by source, each can be ranked on paid tuition beside the advertising accounts on precisely the same terms. Very few of these businesses have ever seen all of them on one page.
The comparison is usually where the strategy changes. A webinar list that converts a small audience at a high rate can out-earn a campaign with ten times the reach and a fraction of the intent, and the ranking says so in revenue rather than in conversion rate, which is the unit that decides where next month's effort goes. It also shows which lists have aged: an audience that produced enrollments two years ago and produces none now is a specific problem with a specific fix.
Affiliate and partner reporting is where this bites hardest, because those partners report their own results and are paid on them. An independent count from your own enrollment file is not an accusation; it is the same question answered from the other side of the table. Where the numbers agree, a partnership becomes easier to defend internally. Where they do not, the conversation is at least about two specific lists of people rather than about methodology, which is a better argument to have.
Why it matters
"We generated 400 leads" invites an argument. "This channel closed $186,400 last quarter, here is the reconciliation" ends one. The teams that can show closed revenue by channel are the teams that get the next increase approved, because they are asking with evidence rather than with conviction.
Killing spend is politically harder than adding it, because someone always owns the channel being cut. A number that reconciles to the sales export takes the argument out of the room — you are not overruling a colleague's judgment, you are reading the same ledger they are.
Platform-reported conversions do not reconcile to revenue, and eventually someone in finance notices. Reporting built from your own closed-sales export starts from the number finance already trusts, which is why it holds up when it is checked.
Because this reconciles exports rather than tracking visitors, it works on months that have already closed. You are not instrumenting now to learn something in ninety days — you can answer for last quarter today, which is usually when the question is being asked.
Honest answers
Which is why paid revenue is the measure. Free signups appear as unmatched leads and cost nothing against your allowance.
Which is precisely what an independent match is for. Upload their lead export and compare it against your own revenue.
Phone country and currency are set per dataset, so a mixed international file is handled correctly.
Pricing
The price here is the price on the invoice, plus any sales tax that applies — no per-call, per-minute or per-form fees. Growth usually fits online course providers and professional certification — thirteen months of history to compare a month to the same month last year, and a PDF you can put in front of whoever holds the budget.
A business scaling ad spend
$49/mo
billed monthly
Questions
Anything else? Talk to us — a person answers, usually the same day.
Paid enrollments: a learner email, the amount, and a date.
Yes — they credit the channel that produced the learner.
Yes — upload their lead export and match it against your revenue.
Yes, with a course column mapped as Product / service, which shows tuition by course with how much of each traces to a channel. Channels are not ranked within each course.
Yes, currency is set per dataset.
Encrypted in transit and at rest, isolated to your workspace, and deletable in one click. A DPA is available, and student details never leave that workspace.
Yes — and it is usually the right place to start, because a completed year already contains every enrollment and the inquiry that produced it.
Enrollment rows analyzed in a calendar month. Free signup rows do not count.
On a period old enough for the refund window to have closed. A live month reports enrollments that may still be reversed, and reversals cluster in exactly the channels that sell hardest.
Export payments as they are taken rather than contracts as they are signed. Each installment credits the channel that produced the learner, so a source that sold well and collected badly cannot hide behind a signature date.
Where your payment system can export them, yes. They arrive late and cluster around certain acquisitions, and attributing revenue that came back is the fastest route to a report nobody trusts.
Yes. Any group of people with an email address can go into the lead file, tagged with its source, and ranks on paid tuition. A small high-intent list can out-earn a campaign with ten times the reach behind it.
Yes, from the same two files. Completion of payment varies by acquisition source and by course, so a product column is worth carrying alongside the installment rows when you look.
It is the same question answered from your side. Where the figures agree the partnership is easier to defend internally; where they do not, at least the disagreement is about two specific lists.
Nearby
Attribute signed training contracts to the channels that produced the first inquiry — months earlier, on a different device, by somebody who has since changed job title.
See how it worksMatch starts and the tuition they generate to the campaigns and events that produced the applicant.
See how it worksMatch matriculated students and the tuition they pay across a degree to the campaigns and events that produced the inquiry.
See how it worksWhere your sales already are
Export your Reddit leads, match them against closed sales over a period that fits the decision, and see the channel where its effect actually lands.
What to exportExport contacts with their original source and deals with their value, and rank on what each channel actually produced.
What to exportFrom the blog
Every attribution tool is built for businesses where the inquiry and the purchase happen in the same quarter. If yours does not, almost every default is wrong: the date ranges, the reporting cadence, the optimization signal and the patience of everyone involved.
Read the articleMeta's instant forms are prefilled from the customer's profile, which is why they convert so well and why so few of the leads match anything later. The phone number was not typed by the person who is about to buy from you — it was copied from a profile they last edited years ago.
Read the articleAdd up what your agencies and platforms claim and you have sold the same thing several times over. Nobody is lying. Here is why double counting is structural, how to run the reconciliation meeting, and what to change in the contracts so it stops recurring.
Read the articleStart today
Upload two exports and see your real revenue by channel in minutes. 14 days free, no card.