Ramp Network Mobile App, Non-EU Markets Mar 16 - Apr 1, 2026

Rewards: Two Weeks In

Two weeks since real launch. Here's what we can see, what we can't, and what we need to set up now.


1
What Rewards Is Designed to Do
The program, the structure, the targeting

An Onboarding Program

Rewards is an onboarding program for the Ramp Network mobile app. Users complete missions across four sections, each driving a first-time action. The end goal: complete all missions to unlock a loyalty bonus (0.25 USDC cashback on every future transaction).

What Users See

SectionMissionsReward
Welcome to Ramp NetworkWALLET (connect wallet)Part of 1.00 USDC
Earn with USDCTOPUP1 (top up $25+), EARN10 (earn 10 days)0.75 USDC
Discover swapsSWAP1 (first swap $50+), SWAP3 (3 swaps)2.75 USDC
Grow your networkINV3 (invite 3), INV7 (invite 7), SEND5 (send to 5)1.00 USDC
Unlock loyalty bonusONBOARD (complete all above)1.00 USDC + ongoing cashback

The reward structure incentivizes the right behavior. Swaps pay the most (2.75 USDC combined) because they're the highest-margin transaction type. The loyalty bonus at the end creates a reason to complete the full journey, not just cherry-pick easy missions.

Targeting

Mobile app only (by design). Non-EU/EEA (regulatory). Release flag (rewards-feature, ID 10188193) at 100% rollout for eligible users. No holdout group. Created by Jakub Jastrzebski, last modified by Marek Rycerski.


2
Stickiness
Adoption, repeat rates, and where users drop off

Adoption

42% of users who land on the app dashboard navigate to rewards within 30 minutes. The loyalty gauge and "Earned" counter create visible progress. "Complete missions in any order" reduces friction.

iOS Penetration
15.7%
1,035 of 6,594 iOS users have visited the rewards screen.
Android Penetration
6.3%
424 of 6,710 Android users. Identical flag targeting, so the gap is behavioral or UX.

Repeat Transaction Rates

We measured how often mission claimers transact again after claiming, and compared it to the organic repeat rate for first-time transactors (users with zero transactions Jan 1 - Mar 15 who completed their first transaction after Mar 16).

Organic Baseline
8.7%
W2 repeat rate for 1,758 first-time transactors who never claimed a mission.
Mission Claimers
24-27%
W2 repeat rate for TOPUP1 (24%) and WALLET (27%) claimers. Nearly 3x the baseline.
SegmentnW2 Repeat RateLift vs Baseline
Organic first-timers (baseline)1,7588.7%-
WALLET claimers4427%3.1x
TOPUP1 claimers2524%2.8x
SWAP1 claimers714%1.6x

By W3, the lift converges to baseline (0-2% vs 1.2%). The effect is real but time-bounded to approximately two weeks post-claim. 78% of TOPUP1 claimers had zero prior transactions, so this is largely new users being activated, not power users farming rewards.

Baseline chart  |  TOPUP1 cohorted retention  |  WALLET cohorted retention

Where Users Drop Off

Return to App (W2)
60%
TOPUP1 claimers who open the app again in week 2.
Transact Again (W2)
24%
TOPUP1 claimers who complete another transaction in week 2.

Users are coming back, likely to check rewards progress, but the next-transaction trigger is missing. The engagement is there. The conversion path after the rewards screen is not.

Caveats

There is no holdout group. The rewards-feature flag is at 100% rollout, so every eligible user sees rewards. We can't run a clean A/B comparison between rewards-on and rewards-off users. The 3x baseline lift is observational: more motivated users may disproportionately claim missions. But the magnitude of the lift (3x, not 1.2x) and the first-timer composition (78%) make pure self-selection an unlikely full explanation.

Next step: Set the flag to 50% for Segment 2 to create a randomized holdout. Two weeks at current volumes is enough for the primary retention metric.

Selection bias verification: Pre-period PVs  |  Pre-period txns  |  Segment sizes  |  Activity cohorts


3
Deposits and Earn
TOPUP1 is converting. EARN10 is not.

Mission Performance

TOPUP1 (top up $25+)
65
Claims in the period. Users are clearly acting on this mission.
EARN10 (earn 10 days)
0
Zero claims across the entire period. Something is wrong.

Section Conversion: 57%

Users are clearly interested in this section. 57% section-to-action conversion is the highest across the board. They click through, they start. But EARN10 has zero claims across the entire period.

Rewards Screen
100%
43% drop
Earn with USDC
57%

From the app: a user at 1/2 progress on "Earn with USDC" has completed TOPUP1 but not EARN10. This is the exact pattern the aggregate data shows.

Why EARN10 Is Failing

EARN10 requires maintaining a $25+ USDC balance for 10 consecutive days. If the balance drops below $25 at any point (withdrawal, price movement), progress is fully deleted. Not decremented. The entire mission event history is wiped via a transactional delete.

Silent destructive resets. From the code (earn-10-days.tracker.ts): the withdrawal handler checks the balance, and if it's below threshold, calls stopTrackingMission. This deletes the MissionEventLogEntity and MissionEntity rows. The backend publishes a user stream event with completedSteps: 0. The frontend receives this and silently refetches. No toast, no message, no explanation. The user's progress bar drops from e.g. 5/10 to 0/10 and they have no idea why.

10 consecutive days is already a high bar for a first-time earn mission. Combined with silent destructive resets, the failure mode is: user deposits, sees progress building over a week, makes a small withdrawal, progress vanishes, user gives up.

What to do

Show users why progress reset. "Your balance dropped below $25 USDC. Keep your balance above $25 to maintain your earning streak."

Evaluate whether 10 consecutive days is the right threshold for an onboarding mission. Watch TOPUP1 weekly trend as a leading indicator of deposit behavior.


4
Swap Behavior
Small numbers, right direction, can't measure what matters yet

Swap Mission Claims

SWAP1 (first swap $50+)
17
Claims in the period. Small but nonzero. Users are engaging with the CTA.
SWAP3 (3 swaps)
2
Effectively dead. Users who do their first swap aren't coming back for a second and third.

17 SWAP1 claims in two weeks. Small. The swap section pays the most (2.75 USDC combined) and has 41% section-to-action conversion, so users are engaging with the CTA. But few complete.

Rewards Screen
100%
59% drop
Discover Swaps
41%

The section bundles SWAP1 and SWAP3 under "Discover swaps - 2.75 USDC" so users see the combined reward without necessarily understanding the breakdown.

The Post-Mission Tracking Gap

The question we can't answer: Do the 17 users who completed SWAP1 go on to swap again organically? This is the whole point. If the mission just rewards a swap that would have happened anyway, it's not driving behavior. If it creates a habit (swap 2, 3, 4 after claiming), it's working. There's no post-mission activity tracking to measure this.

What to do

Instrument post-claim activity: track transactions after mission completion, excluding the completing transaction itself. Once sample grows, compare swap frequency before and after SWAP1 completion for the same users. Consider merging SWAP3 into SWAP1 or auto-completing it when organic swaps accumulate.


5
Social Missions
Zero claims, but it might just be too early

All Zero

MissionClaimsSection Conversion
INV3 (invite 3)0"Grow your network": 49%
INV7 (invite 7)0
SEND5 (send to 5)0
Rewards Screen
100%
51% drop
Grow Your Network
49%

49% section-to-action conversion. Second highest. Users click "Add contacts" but nobody completes. Both INV3 and INV7 use the identical CTA text "Add contacts" (code review confirmed in rewards-actions.use-case.ts), which feels redundant.

Social missions are inherently slower than transactional ones. Getting 3 friends to sign up in 2 weeks is ambitious. 7 is unrealistic at this stage. SEND5 (send to 5 different people) is a high bar for someone who just started.

Give it more time. Social missions may convert on a longer timescale. If INV3 starts converting but INV7 doesn't, consider lowering the INV7 threshold or removing it. SEND5 may need a lower target initially.


6
Measurement Setup
The measurement infrastructure has gaps

What We Can't Measure

What We Can't MeasureWhy It MattersStatus
CausalityThe fundamental question: rewards causes activity vs attracts active usersFlag at 100%, no holdout group
Program costCan't calculate ROI even if we prove impactData is in the rewards DB (designed for aggregation). Needs a SQL query, not a new pipeline
Unclaimed reward rateDon't know if users are earning and not claimingSQL query comparing AWARDED to CLAIMED status in the rewards DB. Nobody has run it yet
Post-mission organic activityCan't answer "does completing X lead to more X?"Not instrumented
Android gap root cause15.7% iOS vs 6.3% Android, identical targetingNeeds UX investigation

Product Issues Found in Code Review

IssueImpact
EARN10 progress resets silently on withdrawalProgress bar drops to 0 with no explanation. Confirmed: no explicit ideation of broken streak UX
MISSION_INCOMPLETE mapped to 'available'Green "available" badge on missions that aren't complete
No post-claim feedback"Reward claim submitted" toast with no timeline, no receipt
Deprecated claim endpoint still in useFrontend uses POST /rewards/claim with rewardIds[]. New POST /rewards/:id/claim has zero consumers

Cashback Status

Cashback is live. Confirmed on in production config. REWARDS_CASHBACK_AWARDING_ENABLED defaults to false in code (as a feature flag should) but is toggled on in the live environment. "Unlock loyalty bonus" in the product UI is the ONBOARD meta-mission: completing all missions unlocks 0.25 USDC cashback on every future transaction.


7
Recommendations
Prove it works, fix what's broken, measure the cost, trim dead weight
Prove It Works

Establish Causality and Habit Formation

1
Run a holdout experiment
P0
Modify flag ID 10188193, Segment 2 from 100% to 50%. The baseline comparison shows a 3x W2 lift, but a holdout is the only way to prove causation definitively.
2
Investigate the app return to transaction gap
P0
60% of TOPUP1 claimers return to the app in W2, but only 24% transact. Users are coming back (possibly to check rewards progress) but not converting. Consider a nudge or next-step suggestion when users visit the rewards screen without starting a transaction.
3
Instrument post-mission activity tracking
P1
After a user claims SWAP1, do they swap again? After TOPUP1, do they top up again? This is the metric that proves (or disproves) habit formation.
Fix What's Broken

Remove Walls Users Can't See

4
Fix EARN10 silent progress reset
P0
Show users why their progress disappeared. Right now the most engaged "Earn with USDC" users (57% section conversion, highest) are hitting a wall they can't see.
5
Investigate the Android gap
P1
15.7% iOS vs 6.3% Android with identical targeting. That's ~630 users we're leaving on the table. Is it navigation placement? App version? Something else?
6
Reconsider EARN10 difficulty
P1
10 consecutive days with a hard reset is aggressive for an onboarding mission. Consider shorter streak, or allow the streak to pause rather than destroying all progress.
Measure the Cost

Build the ROI Picture

7
Run the payout aggregation query
P1
The rewards DB has amountWei on every reward, designed for aggregation. Run a SQL query to get total payouts, cost per user, and payout volume over time. This doesn't need a new pipeline - the data is there.
8
Run the unclaimed ratio query
P2
SQL comparing AWARDED to CLAIMED status in the rewards DB. This tells us how many rewards are earned but sitting uncollected, and whether the claim UX has friction.
Trim Dead Weight

Revisit After 4-6 Weeks of Data

9
Consider dropping INV7 and SEND5
P2
Zero claims, high bars for new users. Or lower their thresholds if the mechanic has potential.
10
Consider merging SWAP3 into SWAP1
P2
2 claims. The stretch goal isn't motivating a second and third swap.

A
Appendix
Data sources, causality charts, related documents, mission claim summary
Data Sources
SourceWhatScope
Amplitude (100017324)page_view, click events, retention, funnels, user propertiesNew Widget - Production
Omnifct_widget_events, transactions_simplifiedMarch 2026
Marek's dashboarde-wbjlpkscLaunch markets, properly filtered
Flag config10188193Targeting rules, rollout %
Code review/packages/backend/src/rewards/, /frontend/widget-2/src/features/rewards/Two independent reviews
Product UIApp screenshotsCurrent production build
Causality Analysis Charts (Saved in Amplitude)
ChartIDWhat
Pre-period page_viewse-25z3qh1eAvg daily PVs, rewards visitors vs all (identical)
Pre-period transactionse-wftul308Avg daily txns, rewards visitors vs all (both zero)
Low-activity post-launche-1yh0mu83Weekly txn uniques, 1-3 pre-PV users
High-activity post-launche-dk8tx7m9Weekly txn uniques, 10+ pre-PV users
Pre-period segment sizese-688g6yppUnique users per segment (identical: 8 Feb, 3038 Mar)
Post-period cohort sizese-ivwibbqlNon-visitor segments are empty (0 users)
Related Documents
Mission Claim Summary (full period)
WALLET
115
TOPUP1
65
TX1
30
SWAP1
17
SWAP3
2
EARN10
0
INV3
0
INV7
0
SEND5
0
MissionClaimsStatus
WALLET115Working
TOPUP165Working
TX130New, needs investigation
SWAP117Small but nonzero
SWAP32Effectively dead
EARN100Blocked (see EARN10 analysis)
INV30Too early to call
INV70Threshold likely too high
SEND50Threshold likely too high