Uganda Leadership View
01 Executive Summary
⚠ Critical Gap — Strategy Overhaul Required
Uganda's campaign setup cannot deliver the repayment targets.
The data shows a systemic contact failure at every DPD band.
The current campaign infrastructure — across both call and SMS channels — is not structured to achieve a 105% DPD-30 principal repayment rate or 20% recovery at DPD 31–180. Call campaigns are running with answer rates as low as 5–7% in the high-DPD buckets where recovery is most needed. The automated SMS system (Mambu) is firing thousands of messages across DPD 3, 4, 6, 8, 18, 38, 42 — but showing 0% delivery on every tag. No named Infobip broadcast campaigns exist for Uganda. The pre-due call campaign (the one working asset) achieves a 34% answer rate but has no SMS complement for DPD 1–2. The result: a 45.7% DPD-30 principal recovery rate versus a 105% target — a 59 percentage-point gap.
DPD 30 Principal Recovery
45.7%
Target: 105% · Gap: 59pp
DPD 31–180 Recovery
~8%
Target: 20% · Gap: 12pp
Overall SMS Delivery
0%
All DPD reminders undelivered
Best Call Answer Rate
35%
Pre-Due campaign only
02 Performance Overview
DPD 30 Principal Recovery
45.7%
Target 105% — 59pp short
DPD 31–180 Recovery
~8%
Target 20% — ~12pp short
Pre-Due Call Answer Rate
34%
Best performing channel
SMS Delivery (All Reminders)
0%
Full system failure
Waiver Campaign Answer Rate
6.6%
2,397 loans, DPD 31–180
DPD 31–90 Campaign Answer Rate
7.8% / 6.9%
Legal & DPD 31–90 queues
Active Portfolio by DPD Band — Outstanding Principal (UGX)
Pre-Due (<DPD 0)
3.5B
DPD 1–7
30M
DPD 8–30
419M
DPD 31–60
578M
DPD 61–90
477M
DPD 91–180
1.59B
Pre-Due (performing)
Early DPD (recoverable)
At-risk (needs action)
Loan Count by DPD Band
DPD Band Loans Principal (UGX) Avg DPD Risk
Pre-Due 11,609 3.54B -22d OK
DPD 1–7 382 30M +1d Low
DPD 8–30 2,093 419M +18d Medium
DPD 31–60 2,419 578M +45d High
DPD 61–90 1,922 477M +80d High
DPD 91–180 6,007 1.59B +131d Critical
DPD 180+ 49 3.5M +183d Write-Off
UGX 2.65B (10,397 loans) are DPD 31–180. At current recovery trajectory (~8%), that's UGX 2.4B at risk. Target 20% requires UGX 530M recovered — a 150% uplift from current run-rate.
03 Current Call Campaign Audit
XCALLY DISPOSITION field is blank for 99.9% of Uganda calls — dispositions are captured via STATE_DESC only. Answer rate calculated from STATE_DESC = 'Answer'. Last 30 days: 20 Feb – 20 Mar 2026.
UG_QUEUE_COLLECTIONS_PRE_DUE_CAMPAIGN
Pre-due reminder · DPD <0 · 4,047 unique loans · 6,867 calls
Best Performer Keep & Expand
34.1%
Answer Rate
2,341
Answered
1,639
No Answer
399
No Such Number
771
Busy
1,617
Congestion
Strengths
Best answer rate in the portfolio at 34%. Targets borrowers before due date when intent to repay is highest. Reaches 4,047 loans per cycle — solid coverage. Sequencing is correct: pre-empt before DPD escalates.
Gaps & Recommendations
No SMS complement for DPD 1–2 (Mambu cannot fire at these stages). Congestion (24% of calls) suggests over-dialing specific number segments — throttle and spread call windows. Recommendation: add WhatsApp/OBD fallback for no-answer loans. Add D-1 SMS via workaround channel.
UG_QUEUE_COLLECTIONS_DPD_31_90_CAMPAIGN
Collections · DPD 31–90 · 7,610 unique loans · 14,480 calls
Partially Effective Restructure Urgently
35.1%
Answer Rate
5,083
Answered
3,617
No Answer
3,617
No Such Num
3,617
Busy
1,000
Actual Answers
Key Issue
Answer rate appears reasonable at 35% by call count, but the campaign covers both DPD 31–60 and DPD 61–90 in one queue — masking significant variation. NoSuchNumber (4,060 calls to dead numbers) is a critical waste. These loans need number refresh or suppression. 26 calls were abandoned — agents not picking up routed calls.
Recommendations
Split into DPD 31–60 and DPD 61–90 separate queues with differentiated scripts. Suppress NoSuchNumber loans after 3 failed attempts — redirect effort to alternate contact (reference number). Add waiver offer script to DPD 61–90 sub-segment. Target: push DPD 31–60 answer rate to 40%+ with better number hygiene.
UG_QUEUE_LEGAL
Legal threat · High DPD · 4,733 unique loans · 9,489 calls
Low Performance Change Strategy
7.8%
Answer Rate
737
Answered
2,769
No Answer
607
No Such Num
3,026
Congestion
4,733
Unique Loans
Assessment
7.8% answer rate on 9,489 calls yields only 737 contacts. Congestion (32% of calls) indicates heavy network blocking — these loans likely have phone numbers that never pick up. Legal framing may trigger further avoidance from known defaulters. The throughput is too low for the volume of effort.
Recommendations
Stratify loans: separate loans with >10 prior no-answer attempts into a suppression/reference-number follow-up queue. For the 7.8% that do answer, ensure script escalates to PTP commitment with specific amount and date. Consider alternative channels (SMS, WhatsApp, field) for persistent no-answers. Stop recycling dead numbers into this queue.
UG_QUEUE_COLLECTIONS_WAIVER_CAMPAIGN_31_180
Waiver offer · DPD 31–180 · 2,397 unique loans · 7,382 calls
Critically Underperforming Redesign Required
6.6%
Answer Rate
486
Answered
2,033
No Answer
967
No Such Num
2,661
Busy
3.1x
Calls per Loan
Assessment
967 calls to NoSuchNumber = phone numbers are stale. Only 486 contacts from 7,382 attempts (6.6%). The waiver offer — designed to be the key recovery lever for DPD 31–180 — is not reaching borrowers. This campaign is burning agent capacity with minimal output. UGX 578M + 477M at DPD 31–90 needs a functional contact strategy, not recycled dead numbers.
Recommendations
Immediate: clean loan list — remove NoSuchNumber, replace with reference phone numbers where available. Redesign targeting: DPD 31–60 vs DPD 61–90 separate lists with different waiver thresholds. Pair every call with an SMS sent within 1hr of no-answer (requires SMS fix). The waiver offer only works if it reaches the borrower — contact is the blocker.
UG_QUEUE_DISCOUNT
Discount offer · High DPD · 1,877 unique loans · 6,506 calls · Ended Mar 9
Inactive / Low Performance Evaluate Before Restart
7.2%
Answer Rate
470
Answered
1,556
No Such Num
2,551
Busy
Feb 20 –
Start Date
Mar 9
End Date
Assessment
23.9% of calls hit NoSuchNumber — the stale number problem is the same as the Waiver campaign. Campaign ended Mar 9 — unclear if outcome was measured or if it was stopped due to poor performance. 470 contacts from 6,506 attempts = unsustainable contact cost.
Recommendations
Do not restart without number hygiene fix and a clear conversion metric (how many of 470 contacts made a PTP or paid?). If restarting, combine with WAIVER campaign under a unified DPD 31–180 recovery offer strategy with cleaner segmentation and tracking.
UG_QUEUE_SPECIAL_CAMPAIGN
Special segment · 1,077 unique loans · 1,789 calls
Poor Performance Clarify Purpose
5.5%
Answer Rate
98
Answered
724
Busy
267
Congestion
171
No Such Num
1,077
Unique Loans
Assessment
Purpose unclear from campaign name alone. 5.5% answer rate — worst of active call campaigns. Busy signals (40% of calls) suggest numbers exist but borrowers are actively avoiding. 98 contacts from 1,789 attempts is an extremely poor ROI on agent time.
Recommendations
Clarify segmentation logic and intended outcome. If this is a write-off recovery or ghost borrower list, consider SMS or field follow-up instead of agent calls. High busy rate = borrowers know the number. Try withheld/different CLI number or WhatsApp.
UG_QUEUE_TELLESALES
Telesales/Activation · 15 unique loans · 4,388 calls — Anomaly
Data Anomaly Investigate
19.9%
Answer Rate
872
Answered
15
Unique Loans
4,388
Total Calls
292x
Calls per Loan
872
Answered
Assessment
Only 15 unique loans but 4,388 calls = 292 calls per loan on average. This is either a data mapping issue (LOAN_ID not populated for telesales calls) or a runaway dialer configuration. Needs immediate investigation — this pattern should not exist in a healthy campaign.
Recommendation
Audit XCALLY campaign configuration. Verify if LOAN_ID mapping is correct for telesales contacts. If configuration error: fix and re-map. If intentional: define a call cap per contact. This is likely masking the true scale of telesales operations.
04 Current SMS Campaign Audit
🚨
CRITICAL: Uganda SMS system is not delivering. All DPD-triggered Mambu reminders — DPD 3, 4, 6, 8, 18, 38, 42 — show 0% delivery in COMMUNICATION_RESULT over the last 30 days. Combined volume: ~16,000+ messages sent, 0 delivered. Infobip broadcast data shows 1.8% delivery on 3,573 sends with no named campaign. This is a full channel failure.
Mambu DPD Automated Reminders — Last 30 Days
Tag Sent Delivered Status
DPD_3_REMINDER 3,033 0 0% Delivery
DPD_4_REMINDER 2,929 0 0% Delivery
DPD_8_REMINDER 2,539 0 0% Delivery
DPD_38_REMINDER (MAMBU) 3,054 0 0% Delivery
DPD_42_REMINDER 1,777 0 0% Delivery
DPD_6_REMINDER 980 0 0% Delivery
DPD_18_REMINDER 793 0 0% Delivery
TOTAL 15,105+ 0 System Failure
Infobip Broadcast (INFOBIP_SMS) — Last 30 Days
No named broadcast campaigns in INFOBIP_SMS for Uganda. All 3,573 messages have NULL campaign name. Delivery rate: 1.8% (63 delivered). The remaining 98.2% are stuck as PENDING_WAITING_DELIVERY (91%) or REJECTED_NOT_ENOUGH_CREDITS (4.5%), or EXPIRED (2%).
StatusCount%
PENDING_WAITING_DELIVERY3,25891.2%
REJECTED_NOT_ENOUGH_CREDITS1604.5%
EXPIRED_EXPIRED742.1%
DELIVERED_TO_HANDSET631.8%
UNDELIVERABLE150.4%
💳
Root cause hypothesis: insufficient Infobip credits for Uganda. 160 messages rejected for credits; 91% still pending. This requires immediate confirmation with the Infobip account team.
SMS Coverage Gap by DPD — What Should Be Running vs. What's Actually Reaching Borrowers
DPD Stage Intended SMS Can Mambu Send? Delivery Rate Workaround Available? Priority
DPD -5 to -1 (Pre-Due) Pre-due reminder Yes (FidoBiz) Unknown High
DPD 1–2 Day 1/2 nudge No — Mambu Blocked N/A Infobip manual broadcast / WhatsApp Critical
DPD 3–4 DPD_3_REMINDER, DPD_4_REMINDER Yes 0% Fix Infobip credits/routing Critical
DPD 6–8 DPD_6_REMINDER, DPD_8_REMINDER Yes 0% Fix Infobip credits/routing Critical
DPD 18 DPD_18_REMINDER Yes 0% Fix Infobip credits/routing High
DPD 38 / 42 DPD_38_REMINDER, DPD_42_REMINDER Yes (double-sends) 0% Fix credits; deduplicate sends High
05 Future-State Call Campaign Strategy
Recommended Call Campaign Architecture
Campaign Name DPD Band Trigger Cadence Approach Expected Impact Owner Risk
UG_PRE_DUE_D3
D-3 pre-due
DPD -3 to -1 3 days before due date 1x per loan Reminder + payment link. Short, friendly. 60-sec max. +3–5pp DPD30 recovery Collections Ops Low — already works. Expand timing window.
UG_EARLY_DPD_1_7
Early intervention
DPD 1–7 Day 1 after due date D1, D4, D7 Soft reminder. Confirm payment intent. Escalate if D4 no answer. +5–8pp DPD30 recovery Collections Ops Low. High intent borrowers at this stage.
UG_MID_DPD_8_30
Mid-stage recovery
DPD 8–30 DPD 8 Every 5 days; max 5 attempts Firm tone. PTP commitment required. Suppress after 3 no-answers → SMS fallback. +8–12pp DPD30 recovery Collections Lead Medium. Must pair with SMS for no-answers.
UG_COLLECTIONS_DPD_31_60
Early arrears recovery
DPD 31–60 DPD 31; fresh split from current DPD 31–90 Every 4 days; max 8 attempts Firm + consequence. Waiver offer at DPD 45+. Number hygiene: suppress dead numbers after attempt 3. +5–7pp DPD31–180 recovery Senior Collections Agent Medium. Requires number refresh before launch.
UG_COLLECTIONS_DPD_61_90
Late arrears — escalated
DPD 61–90 DPD 61 Every 3 days; escalate to legal framing at DPD 75 Legal consequence framing. Reference number contact. Waiver offer prominent. +3–5pp DPD31–180 recovery Collections Lead High. Low answer rates expected — need SMS paired.
UG_WRITE_OFF_RESCUE
Last-chance before write-off
DPD 91–180 DPD 91; from current LEGAL/SPECIAL queues Weekly; reference numbers; alternate CLI Heavy waiver / settlement offer. Try all contact points. Consider field. +2–4pp DPD31–180 recovery Manager oversight High. Very low answer rates. Viable for loans > UGX 200K only.
📞
Pre-DPD 0 call recommended: A D-3 pre-due call (before due date) is strategically the highest-leverage touchpoint. Borrowers at D-3 have the highest intent and lowest resistance. The current PRE_DUE campaign runs in this window and delivers the best answer rate (34%) — expanding its volume and pairing it with D-1 SMS should be the #1 priority for DPD-30 recovery.
06 Future-State SMS Strategy
🚨
Step Zero — Fix SMS infrastructure before designing campaigns. All current Mambu-triggered reminders are sending to a broken delivery pipeline. Fix Infobip credits/routing for Uganda first. Without this, no SMS strategy can work.
Recommended SMS Campaign Architecture
Campaign Name DPD Band Message Angle Mambu? If Not — Workaround Expected Impact
UG_SMS_D1
Day 1 nudge
DPD 1 "Your loan is due today. Tap to pay: [link]" — short, direct, payment link prominent. No — Mambu blocked Infobip broadcast scheduled daily via API or XCALLY no-answer trigger +4–7pp DPD30 recovery if paired with pre-due call
UG_SMS_D2
Day 2 follow
DPD 2 "Still outstanding. Avoid fees — pay now: [link]" — adds urgency, no threats. No — Mambu blocked Same as DPD 1 — Infobip API/manual daily batch +2–4pp incremental recovery
UG_SMS_DPD_3_4
Early warning
DPD 3–4 "Your account is overdue. Late charges apply. Pay now." — fee consequence added. Yes — Mambu (fix delivery) +3–5pp if delivery fixed
UG_SMS_DPD_8_18
Mid-stage
DPD 8–18 "Urgent: [name], UGX [amount] overdue. Call us or pay at [link] to avoid escalation." Yes — Mambu (fix delivery) +4–6pp if delivery fixed
UG_SMS_WAIVER_OFFER
Recovery offer
DPD 31–90 "Special offer: repay your outstanding principal and we'll waive all fees. Offer valid until [date]." Yes — Mambu (fix DPD 38/42) Infobip broadcast for DPD 31–37 (before Mambu fires) +3–5pp DPD31–180 recovery if paired with calls
UG_SMS_LEGAL_WARNING
Last escalation
DPD 91–180 "Final notice: your account is being reviewed for legal action. Contact us immediately." Partially — Mambu (need config) Infobip broadcast for segments not in Mambu trigger +1–2pp. Primarily activation for contacts that pick up calls
DPD 1–2 SMS: No Mambu Workaround
Mambu cannot fire at DPD 1 and DPD 2. This is a confirmed system constraint. The best workaround is a daily Infobip broadcast batch: pull all loans that entered DPD 1 or DPD 2 the previous day from Snowflake, send a targeted SMS via Infobip API. This can be automated via n8n or a scheduled script. Estimated implementation: 2–3 days once Infobip routing is fixed.
DPD 38/42 Double-Send Bug
Both MAMBU and APP sources fire on DPD 38 and DPD 42, resulting in approximately 2x sends per loan per day. This inflates costs and risks borrower experience degradation (spam perception). Fix: deduplicate in Mambu trigger config, or suppress APP-source sends for DPD 38 and 42 specifically. Must fix before scaling up delivery.
07 Immediate Actions Required
🔴 Must Do Now
1
Fix Infobip Uganda SMS delivery. Confirm credit balance and routing configuration with Infobip team. 15,000+ messages sent, 0 delivered — this is costing money with zero output. Estimated fix time: 1 day.
2
Clean call campaign number lists. Export all LOAN_IDs from Waiver, Discount, and Legal queues where STATE_DESC = NoSuchNumber for 3+ consecutive attempts. Suppress from dialer. Attempt reference phone numbers instead.
3
Split DPD 31–90 into two queues. Separate DPD 31–60 from DPD 61–90 in XCALLY. Different scripts, different waiver thresholds, different call cadence. This is the highest-value structural fix in the call stack.
4
Investigate TELESALES loan_ID anomaly. 292 calls per loan is a dialer misconfiguration. Fix immediately — it's burning agent capacity on 15 contacts.
🟡 Should Do Next (This Week)
1
Build DPD 1–2 SMS workaround. Automated daily Infobip batch for loans entering DPD 1 and DPD 2. Pull from Snowflake, send via Infobip API. This is the highest-gap channel not currently running at all.
2
Set up waiver offer SMS for DPD 31–60. Once Infobip delivery is fixed, launch a named broadcast targeting DPD 31–37 borrowers with the waiver offer. Pair with the split DPD 31–60 call queue.
3
Add call-cadence cap to all queues. Maximum 10 attempts per loan per campaign period. Suppress after 10 with no answer — route to alternate contact or SMS. Ghost-borrower suppression is already a known gap.
4
Clarify SPECIAL_CAMPAIGN purpose. Document target segment, script, and expected outcome. If purpose is unclear, pause until defined.
⚪ Later Opportunities
1
WhatsApp channel for no-answer loans. When call + SMS both fail, WhatsApp is the next highest-reach channel in Uganda. Pilot with DPD 31–60 no-answer segment once call/SMS basics are fixed.
2
Field collection for DPD 91–180 > UGX 200K. High-balance long-delinquent loans where no remote channel is working. Economic only above a threshold. Explore partnership or internal field team.
3
Propensity scoring for call prioritization. Use XCALLY answer rate history + behavioral features to rank loans by contact probability. Dial highest-probability loans first each day.
4
Fix DPD 38/42 double-send bug. Currently sending 2x per loan per day. Deduplicate in Mambu trigger config. Not urgent while delivery is at 0% — fix post-infrastructure recovery.
08 Leadership Priorities This Week
The Two Questions Leadership Must Answer This Week
Question 1: Why is SMS not working?
The data shows 15,000+ messages sent with 0% delivery. This is either an Infobip credit issue, routing misconfiguration, or account suspension. Leadership needs to escalate to Infobip Uganda account management today. Until this is resolved, SMS is not a channel — it's a cost center with zero output.
Question 2: Is the 105% DPD-30 target realistic?
Current performance: 45.7%. Target: 105%. This is a 59pp gap. Achieving 105% means recovering more than the principal disbursed by DPD 30 — which typically requires collecting arrears from prior periods in addition to current. Leadership must clarify the metric definition and set a credible path: what would need to change in underwriting, product, or operations to close a 59pp gap?
Decision Matrix — What to Stop, Change, Add, Prioritize
Decision Item Rationale Impact on Targets
STOP Recycling dead numbers in Waiver/Legal/Discount queues NoSuchNumber on 15–24% of calls = confirmed dead numbers. Continuing wastes agent time and suppresses answer rate metrics. Frees capacity for higher-probability contacts. +3–5% effective coverage.
STOP Running SMS campaigns while delivery is 0% Sending 15K messages that go nowhere is pure cost. Pause Mambu triggers until delivery is confirmed working. Cost reduction. No loss in borrower impact (0% was reaching them anyway).
CHANGE DPD 31–90 single queue → split into DPD 31–60 and DPD 61–90 Different borrower risk profiles, different scripts needed. Current blended queue masks performance and allows poor targeting. Targeted waiver offers at right DPD = higher PTP conversion. +5–7pp DPD31–180 recovery.
CHANGE UG_QUEUE_TELLESALES dialer config 292 calls per loan is a misconfiguration. Fix immediately. Recovers ~200–300 agent calls/day for productive use.
ADD DPD 1–2 daily SMS batch (Infobip API) No channel touches borrowers at DPD 1 and DPD 2. This is the highest-ROI gap to fill — highest intent borrowers, lowest cost to convert. +4–7pp DPD30 recovery rate if SMS is operational.
ADD Reference number dialing for no-answer loans Borrowers with 5+ no-answer attempts on primary number need alternate contact. Reference numbers exist in USERS table. Unlocks contact for ~30–40% of currently unreachable loans.
PRIORITIZE Fix Infobip Uganda delivery — TODAY Single highest-leverage action. SMS at 0% means an entire channel is offline. Restoring it unlocks the entire SMS strategy. Could add 8–15pp to DPD30 recovery if all DPD 1–18 reminders start delivering.
PRIORITIZE Pre-due campaign expansion + DPD 1–7 call queue The pre-due campaign works (34% AR). Expand volume. Add a dedicated DPD 1–7 queue for early intervention — currently no dedicated resource here. +5–8pp DPD30 recovery if early-stage campaign is staffed properly.
Trade-Offs — Where Resources, Systems, or Operations Limit Execution
Staffing vs. Coverage
Adding DPD 1–7 and expanding pre-due queues requires more agents. If headcount is fixed, the DPD 31–180 queues must accept lower intensity to fund early-stage calls — which have higher ROI on the DPD-30 target.
SMS Fix Dependency
The entire SMS strategy is blocked on infrastructure. All recommendations involving SMS are conditional on fixing Infobip delivery. Do not build campaigns on a broken pipe.
DPD 91–180: Low ROI per Effort
UGX 1.59B sits in DPD 91–180 but with the lowest contact rates. Each call here has significantly lower expected return than a DPD 1–7 call. Leadership should consider whether field collection or settlement offers are more efficient for this cohort.