⚠ 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
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)
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.
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.
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.
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.
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.
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.
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.
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%).
| Status | Count | % |
| PENDING_WAITING_DELIVERY | 3,258 | 91.2% |
| REJECTED_NOT_ENOUGH_CREDITS | 160 | 4.5% |
| EXPIRED_EXPIRED | 74 | 2.1% |
| DELIVERED_TO_HANDSET | 63 | 1.8% |
| UNDELIVERABLE | 15 | 0.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
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.
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.
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.