📋Campaign Roster
| # | Campaign | Platform | Channel | Who | Frequency | Status |
|---|---|---|---|---|---|---|
| C1 | Referral — Weekly Push | CleverTap | Push | Active LN1+ · no DPD | 1× / week | ✓ Live (rebuilt) |
| C2 | Referral — Reward Notification | CleverTap | Push | Referrer — friend just borrowed | On event · exempt from cap | ✓ Live |
| C3 | Payday Boost | CleverTap | Push SMS fallback | Eligible · no active loan · no DPD | 1× / month (26th) | ✓ Run monthly |
| C4–C7 | Seasonal Occasions | CleverTap | Push SMS fallback | Eligible · no active loan | Per calendar below | ✓ Scheduled |
| C8 | Eligible → No L0 (post-journey) | CleverTap | Push SMS | Eligible · J03 sunsetted · 30d+ silent | 1× / month | New — build |
| M1 | USSD KYC Users | Infobip Manual | SMS only | Users not in CT who can KYC via USSD | Max 2× / month | Define cadence |
| M2 | Score Reset — Old Users | Infobip Manual | SMS only | LN1+ users with reset score · not auto-notified | One-time batch · then ongoing via automation | Backlog — send ASAP |
Not in this plan (journeys own them): KYC nudges · Eligible → L0 (active journey window) · Repayment reminders · Post-repayment reborrow · Dormant 60-day reactivation
🗑️What We Retired — April Campaigns Killed
7 campaigns paused — journeys own these flows or they were over-firing
| Campaign | Why killed | Replaced by |
|---|---|---|
| Referrals Program - all users V3 | 29/30 days in April · avg 8.4× per user | C1 (1×/week cap) |
| GH Referral - Push - Apr [daily × 14] | Daily one-offs stacked on V3 · users hit 10–15× in April | C1 absorbs this |
| GH KYC Catch All — 6× in April | Journey J01/J08 already owns KYC nudges | Journey only |
| GH KYC No ID — 4× in April | Journey J08 owns KYC drop recovery | Journey only |
| Push - reg completed no L0 - Monthly | Was doubling on top of J03 (double-send guaranteed) | C8 (post-journey only, after 30d sunset) |
| GH Eligible Approved no L0 — Apr 5, 10, 23 | Same — J03 owns the active window | C8 |
| Top-ups - Push after repayment | Journey J06 owns reborrow nudge | Journey only |
🛡️Anti-Spam Rules
Hard caps (CT campaigns)
- Max 3 campaign pushes per user per rolling 7 days
- Max 1 campaign push per user per day
- Max 2 campaign SMS per user per rolling 14 days
- Set in CT: Settings → Campaign Limits
Timing rules
- Send window: 8am – 8pm local time only
- No sends before 10am on Sundays
- 24h minimum gap between any two messages to the same user
Never fire a campaign while…
- User is DPD 1+ (any campaign)
- User is in active KYC journey (J01/J08/J02)
- User is in J03 (eligible → L0) active window
- User is in J06 reborrow window (7d post-repay) — except C2 reward
Exempt from caps
- C2 Referral reward (reactive, friend-disbursement event)
- Transactional messages (OTP, loan confirmation) — not campaigns
- Journey messages — managed by journey frequency rules
- Infobip M1/M2: separate caps (2× / 14d per user)
🎁C1 & C2 — Referral Program
C1
Weekly Referral Push
Who
LN1+ · no DPD · opted in · not in active reborrow or repayment window
Message
Push "Invite a friend, earn GHS [X] — share your code now"
Frequency
Max 1 push/user/week. The old V3 recurring + daily one-offs are replaced by this single weekly campaign. They are not additive.
No SMS
Referral is push-only. SMS is too intrusive for a referral ask — if push is dead (app deleted) we don't chase with SMS for referrals.
Exclusions
DPD 1+ · Active KYC journey · J03 active window · Already 3 converted referrals this month · User received a push today
⏱ Sunset: 0 opens in 4 consecutive weekly sends → remove from referral list for 60 days
C2
Referral Reward Notification
Who
The referrer — fires when their invited friend completes their first disbursement
Message
Push "Your friend borrowed — your GHS [X] reward is on its way 🎉"
Cap note
Reactive event notification. Does not count toward the 3-push/7-day cap.
Always fires — no sunset on reward notifications
💸C3 — Payday Boost
C3
Monthly Payday Boost
Who
Eligible users · no active loan · not DPD · not in J03/J06 active window
Timing
Sent on the 26th of each month (Ghana payday window: 25th–28th)
Push msg
Push "Payday is here — your GHS [X] is ready whenever you need it"
SMS fallback
SMS Only for push-inactive users (no push open in last 30 days — likely deleted app or disabled notifications). Same payday message. CT segment:
push_last_opened > 30 days ago. SMS counts toward the 2/14d SMS cap.Exclusions
DPD 1+ · Active loan · In J03/J06 journey · Received push today · Hit weekly cap
⏱ Sunset: 0 opens in 3 consecutive monthly paydays → skip 2 months
📅C4–C7 — Seasonal Occasions
| # | Occasion | Date | Message Angle | Target | SMS fallback? | Approved |
|---|---|---|---|---|---|---|
| C4 | Back to School | Jan 10 + Sep 1 | "School fees coming — cover it with Fido" | Eligible · no active loan | Yes — push-inactive only | 2× / year |
| C5 | Christmas / Festive | Dec 15–18 | "Christmas is coming — get sorted with Fido" | LN1+ · no active loan | Yes — push-inactive only | Dec only · 1× |
| C6 | New Year | Jan 2 | "New year, fresh start — your limit is ready" | Eligible · no active loan | Yes — push-inactive only | Jan only · 1× |
| C7 | Independence Day | Mar 6 | Brand moment — no hard CTA | All opted-in | No — brand only | Optional · sign-off needed |
- SMS fallback rule: For C4–C6, add a second CT campaign variant targeting users where
push_last_opened > 30 days. These users likely have push disabled or deleted the app. Send the same message via SMS. Counts toward the 2-SMS/14d cap. - Not approved: Valentine's, Easter, Ramadan, ad-hoc product promos (require separate sign-off, not in standing calendar)
💰C8 — Eligible → No L0 (Post-Journey)
C8
Eligible → No L0 — Monthly Campaign (post-journey only)
Who
Users who are still eligible (score ≥270) but never took L0 — AND journey J03 has already sunsetted them (no J03 message in last 30+ days). This is the segment that fell through the journey without converting.
Why needed
J03 gives up after 4 messages over 7 days. Some of these users are still eligible months later — a monthly re-touch with a fresh angle keeps them in play without spamming them while the journey is active.
Frequency
Max 1× per month. This campaign replaces the old "Push - all reg completed but no L0 - Monthly" — same idea, but now with the critical rule: it only fires to users who are outside the journey window.
Push msg
Push Rotate angle monthly: use-case (school fees, emergency, business) or limit reminder ("GHS [X] is still waiting for you")
SMS
SMS For push-inactive users (no push open in 30+ days). Same message, same monthly cadence. SMS counts toward the 2/14d cap.
Key exclusion
Exclude: user received a J03 journey message in the last 30 days. This is the rule that was missing before — the old campaign was firing on top of an active journey.
Exclusions
DPD 1+ · Active loan · In J03 active window (last 30d) · Hard-declined · Score now <270 (re-evaluate)
⏱ Sunset: 0 conversions + 0 opens in 3 consecutive monthly sends → mute 60 days, re-enter on limit increase event only
📱Manual Infobip Campaigns
⚠️
These are outside CleverTap — manual Infobip sends
Users in M1 and M2 are either not in CT at all (USSD segment) or need to be reached before they re-engage with the app (score reset). Push is not an option. These are managed directly in Infobip, not CT journeys or campaigns.
M1
USSD KYC Users
Who
Users who can complete their KYC via USSD (*713#) and are not registered in CleverTap — no app, no push token. They exist in the backend but CT can't reach them.
Goal
Drive them to complete USSD KYC and eventually get to L0. Not about the app — specifically about the USSD flow.
Message
SMS "Complete your Fido verification now — dial *713# from your phone. Takes 2 minutes." Include a short USSD code and a basic benefit hook (your loan limit, quick cash etc.)
Frequency
Max 2× per month per user. Send 1 SMS, wait 7 days, send 1 follow-up if no KYC event. Then stop for 30 days.
List management
Export the segment from Snowflake/backend weekly. Remove users who completed KYC before sending. Upload fresh list to Infobip each send — do not recycle stale lists.
Tracking
No CT attribution possible. Track via backend: count of USSD KYC completions within 48h of send date vs baseline days. Manual report weekly.
⏱ Sunset: User received 4 SMS attempts over 2 months with no USSD KYC completion → remove from list permanently
M2
Score Reset — Old Users (One-Time + Ongoing)
Context
Fido reset the credit score for a cohort of old users. New resets get an automatic SMS via the backend pipeline. Old resets (pre-automation) were never notified — they don't know their score has been reset and there's a fresh opportunity for them in the app.
Who
LN1+ users whose score was reset before the automation was in place. Extract this list from Snowflake: users with a score_reset_date before the automation go-live date, no subsequent disbursement, and no recent CT journey entry.
Goal
Get them back into the app to check their score and take a new loan. The hook is: "Your Fido score has been refreshed — you may have a new limit."
One-time send
SMS "Your Fido credit score has been updated — open the app to check your new limit and borrow today. [deep link]"
Follow-up
If user opens app within 7 days → they re-enter CT and the journey handles the rest (J03 if eligible). No second Infobip SMS needed. If no app open → 1 final SMS after 7 days, then stop.
Ongoing
After the backlog is cleared: new score resets are already auto-notified by the backend. This campaign is one-time for the old cohort only. Monitor that the automation is firing correctly for all new resets going forward.
Priority: send the backlog ASAP — these users have been waiting without knowing. Max 2 SMS per user then remove from manual list.
📲When to Use SMS vs Push
- SMS as fallback (C3, C4–C7, C8): If user hasn't opened a push in 30+ days, switch to SMS for that campaign. Don't send both — pick one. Segment in CT:
push_last_opened > 30 days. - SMS as primary (M1, M2): Users not in CT or users who need to be reached before they re-open the app. USSD KYC and score reset are SMS-first by definition.
- Referral (C1) — push only, no SMS fallback: If a user has deleted the app and disabled notifications, they're unlikely to refer friends. The SMS slot is too valuable to spend on a referral ask to a disengaged user.
- Never send both push and SMS for the same campaign on the same day. Pick the channel based on user state. Push-inactive → SMS. Push-active → push only.
- Total SMS budget per user / month: With the 2/14-day cap, a user can receive at most ~4 campaign SMS per month. Reserve those slots for high-value moments: payday, score reset, C8 eligible re-touch. Don't burn them on referral or brand occasions.
🚫Exclusion Rules — Add to Every CT Campaign
| Filter | How to implement in CT | Applies to |
|---|---|---|
| DPD 1+ | User property: overdue_days ≥ 1 | All campaigns |
| In active KYC journey | Event: "KYC journey step received in last 7 days" | All campaigns |
| In J03 (eligible → L0 active) | Event: "J03 message received in last 30 days" | All campaigns (critical for C8) |
| In J06 reborrow window | Event: "loan repaid in last 7 days AND no new loan" | C1, C3, C4–C8 |
| Received push today | CT Global Limit: 1 push per day per user | All CT campaigns |
| 3+ campaign pushes this week | CT Global Limit: 3 per 7-day rolling window | All CT campaigns |
| 2+ campaign SMS in last 14 days | CT Global Limit: 2 SMS per 14-day window | All CT SMS variants |
| Hard declined / fraud-flagged | User property: blocked = true | All campaigns + Infobip lists |
| Opted out of marketing | CT built-in unsubscribe — never override | All CT campaigns |
🌅Sunset Rules — When to Stop Sending
| Campaign | Sunset trigger | Silence period | Re-entry |
|---|---|---|---|
| C1 Referral | 0 opens in 4 consecutive weekly pushes | 60 days | Auto re-enter once after 60d — then permanent removal |
| C3 Payday | 0 opens in 3 consecutive months | Skip 2 months | Auto re-include after skip |
| C4–C7 Seasonal | 0 opens in last 2 occasions | Skip next occasion | Auto re-include |
| C8 Eligible no L0 | 0 opens + no conversion in 3 months | 60 days | Re-enter only on score increase or limit change event |
| M1 USSD KYC | 4 SMS attempts, no USSD KYC completion | Permanent removal | No re-entry |
| M2 Score Reset | 2 SMS attempts, no app open | Permanent removal from manual list | If they re-engage later, CT journey handles it |
| Any CT campaign (push dead) | 0 push opens in last 6 campaign sends | Switch to SMS variant | If SMS also not opened → 30-day full silence on that campaign |