Programme healthLast 30 days
₦412,000Owed this run
31 referrers
31 referrers
19%Of new enrolments
+6 pts
+6 pts
₦8,900Cost per enrolment
vs ₦21,400 paid ads
vs ₦21,400 paid ads
7Voided for fraud
of 168 credited
of 168 credited
Cost per enrolment is the number that decides the budget. At ₦8,900 against ₦21,400 on paid social, every naira moved from ads into referral payouts buys more than twice as many learners, and the learner arrives already trusting somebody.
September payout runCredited on or before 31 Aug
| Referrer | Friends | Owed | Bank | Status |
|---|---|---|---|---|
| Chidera Okonkwo | 9 | ₦148,000 | GTBank ···4471 | Ready |
| Ibrahim Sule | 6 | ₦82,000 | Kuda ···9038 | Ready |
| Blessing Etim | 4 | ₦64,000 | Moniepoint ···2210 | Ready |
| Amina Yusuf | 1 | ₦20,000 | Not provided | Awaiting bank details |
| Kelechi Nwodo | 3 | ₦24,000 | Access ···7712 | Name mismatch |
A name mismatch between the bank account and the learner record holds the payout rather than failing it. Most are a middle name, a few are somebody paying into an account that is not theirs.
Where referrals come fromClicks to enrolment
ChannelClicksConv
WhatsApp2,14011.4%
Copied link8807.2%
Telegram4956.8%
X3022.1%
Instagram bio1883.6%
WhatsApp converts at five times the rate of X, because it is a message from someone you know rather than a post to strangers. Put the WhatsApp button first everywhere, and do not spend effort optimising the others.
Fraud checksRun nightly, before any payout is calculated
Self-referralMatched on WhatsApp number, email domain, device and payment instrument. Voided, not merely unpaid, so the account is flagged if it happens twice.
4 voidedCircular pairsTwo accounts referring each other, usually created minutes apart. Both sides voided.
2 voidedBrand biddingReferral traffic arriving from a paid ad on our own brand terms. It raises our acquisition cost and adds nothing, so it earns nothing.
1 voidedRefund reversalA refund inside the policy window reverses the referral payment. Stated on the learner page so it is never a surprise.
AutomaticFirst-touch attributionThe first code a friend used wins, permanently. No last-click stealing and no disputes to arbitrate by hand.
EnforcedPayouts require a verified bank accountName on the account must match the learner record. Mismatches hold rather than fail, and go to a human.
EnforcedFor the developerWhat the backend owns
The code is captured at first touch and stored, not read at checkout
Required?ref=CODE writes to a first-party cookie and to the profile on registration. Reading it at checkout would lose everyone who arrives, leaves and returns.Payouts are computed server-side from the payment recordNever from a client figure, for the same reason as the promo discount and VAT.
RequiredTables
Requiredreferral_codes, referrals (referrer, friend, first_touch_at, enrolment, state, amount_kobo), payouts. RLS: a learner reads only their own rows.Bank details never touch the browser after entryWritten once through an Edge Function, returned only as a masked last four.
Required