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
Early signals are strong but unproven

Retention: 7.4x Multiplier

Rewards visitors show dramatically different behavior from the general population:

Rewards Visitors
59.7%
W1 rolling retention. Rewards visitors return at nearly 60% in the first week.
All Users
8.1%
General population W1 retention. The gap is 7.4x.
MetricRewards VisitorsAll UsersMultiplier
W1 rolling retention59.7%8.1%7.4x
W2 rolling retention69.8%5.6%12.4x
Weekly transaction rate33.1%10.4%3.2x

Transaction Rate: 3.2x

33.1% of rewards visitors completed a transaction in the week of March 23, compared to 10.4% of the general population.

Rewards Visitors
33.1%
226 of 682 rewards visitors transacted in the week of Mar 23.
All Users
10.4%
6,420 of 61,659 total users transacted that same week.

Dashboard-to-Rewards: 42%

42% of users who land on the app dashboard navigate to rewards within 30 minutes (Marek's funnel). That's strong discoverability. iOS penetration is 15.7% (1,035 of 6,594 users). Android is 6.3% (424 of 6,710) with identical flag targeting, so the gap is behavioral or UX, not configuration.

The product design supports return visits. The loyalty gauge (3/10) and "Earned" counter create visible progress. "Complete missions in any order" reduces friction. Users see their journey status every time they open rewards.

The causation gap. Whether this is causation or selection bias is unknown. We ran the causality analysis (next section). The answer is clear: the data cannot separate the two, and the structure of the experiment makes it impossible without a holdout.

What to do: Modify the rewards-feature flag (Segment 2) from 100% to 50% to create a randomized holdout. Two weeks of data at current volumes should be enough for the primary retention metric. This is the single most important thing to set up.


3
Causality Analysis
The 7.4x retention multiplier is selection bias

We ran four tests. All four point the same way: there is no natural control group, so we cannot attribute any behavioral lift to rewards.

Test 1: Were Rewards Visitors Already More Active Before Launch?

We measured average daily page_views per user in the pre-period (Feb 14 - Mar 15) for two segments: (1) users who later visited the Rewards screen after Mar 16, and (2) all eligible users.

SegmentFeb Unique UsersMar Unique UsersDaily Avg Page Views
Future rewards visitors83,038Identical to below
All eligible users83,038Identical to above

The two segments are literally the same users. Every user who was active in the pre-period later visited rewards. There is no group of "active users who skipped rewards" to compare against.

Pre-period transactions per user: zero for both segments across every day. The experiment was too new for baseline transaction behavior.

Chart: pre-period page_views  |  Chart: pre-period transactions  |  Chart: segment sizes

Test 2: Does Rewards Activate Low-Activity Users?

We split users by pre-period activity (1-3 page_views = low, 10+ = high) and compared post-launch transaction rates for rewards visitors vs non-visitors within each group.

CohortRewards Visitors (Weekly Txns)Non-Visitors (Weekly Txns)Non-Visitor Segment Size
Low-activity (1-3 pre-period PVs)1, 2, 50, 0, 00 users
High-activity (10+ pre-period PVs)135, 157, 780, 0, 00 users

The "non-visitor" segments are empty. Zero users. Every previously-active user found and visited rewards. There is no control group to compare against.

Chart: low-activity  |  Chart: high-activity  |  Chart: cohort sizes

What This Means

The 7.4x retention multiplier is not measuring the effect of rewards. It's measuring the difference between users who come back to the app (and inevitably find rewards) and users who don't come back at all. Rewards visitors are more retained because they're the users who return, not because rewards made them return.

This is a structural problem, not a data gap. The rewards-feature flag is a release flag at 100% rollout. Every eligible user sees rewards. There is no randomly withheld group. Any comparison between "visitors" and "non-visitors" is comparing returning users to churned users.

The only way to measure causal impact is a randomized holdout. Set the flag to 50% for Segment 2. Two weeks at current volumes gives enough power for the retention metric. Without this, every retention and engagement number in this report (and Marek's dashboard) carries an asterisk.


4
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.


5
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.


6
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.


7
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.


8
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%. This is the only way to answer whether rewards causes increased activity. Every other analysis will have caveats.
2
Instrument post-mission activity tracking
P0
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

3
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.
4
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?
5
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

6
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.
7
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

8
Consider dropping INV7 and SEND5
P2
Zero claims, high bars for new users. Or lower their thresholds if the mechanic has potential.
9
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