For my $5.50 lifetime ScsDriver WebDAV mount tool, I have a 7-day free trial. The trial converts at 14% to paid. After 8 months I tried a tiny change — adding a "trial features used: 3 of 3" cap visible to the user.
Result: trial-to-paid conversion jumped from 14% to 22%. +57% lift. Zero other changes.
The setup
ScsDriver trial gives full access for 7 days. Three feature areas: mount, sync, automation. Before the cap, users could do whatever they wanted during the trial. After the cap, users see:
Trial features used: 3 / 3
Upgrade to use unlimited
Three features. Three caps. After three uses of any feature, you have to upgrade to use more.
What changed
I added a counter on the dashboard showing "trial features used: 3 / 3". When the count hits 3, the user can no longer trigger any feature without upgrading. The counter increments per-feature, not globally.
What I learned
Visible usage creates urgency. Users who can see "3/3" want to keep using. Users who don't see usage drift through the trial and forget about it.
Per-feature caps are friendlier than global caps. A global "3 actions total" feels punitive. A per-feature "you've used the trial for Mount 3 times" feels informational.
Countdown timers don't work. Usage counters do. "Trial ends in 3 days" is abstract. "You've used 3 of 3 trial mounts" is concrete.
The cap should be small. 3 is the sweet spot for a single-feature product. For multi-feature products, 3 per feature works.
Reset the counter on upgrade. When the user pays, the counter goes away. They never see it again. The cap is purely a trial-state signal.
Why this works
Behavioral economics: users are loss-averse. "You've used 3 of 3" triggers loss aversion — they don't want to lose access. Without the counter, they don't know they're approaching a wall.
The counter is also informative without being aggressive. It doesn't say "upgrade now!" It says "you've used 3 of 3". The user can do the math themselves.
What I tried that didn't work
- Trial countdown timer: 7% lift (too abstract)
- Email reminders at day 5: 4% lift (too late)
- Upgrade button on every page: -2% lift (annoying)
- "Premium features" lock screen: 8% lift (users thought it was a bug)
- Visible usage counter (this!): 57% lift
The visible counter wins by a huge margin.
The implementation
class TrialUsageCounter:
def __init__(self, user):
self.user = user
self.feature_caps = {'mount': 3, 'sync': 3, 'automation': 3}
def get_count(self, feature):
return self.user.trial_usage.get(feature, 0)
def can_use(self, feature):
if self.user.is_paid:
return True
return self.get_count(feature) < self.feature_caps[feature]
def increment(self, feature):
if self.user.is_paid:
return
self.user.trial_usage[feature] = self.get_count(feature) + 1
def visible_message(self, feature):
if self.user.is_paid:
return None
used = self.get_count(feature)
cap = self.feature_caps[feature]
return f"Trial features used: {used} / {cap}"
The visible message is shown on the dashboard. After 3 uses of any feature, the feature is locked until upgrade.
What I'd add if I had more data
- Personalized caps based on usage pattern. Some users need 5 mounts to evaluate, others need 1.
- Per-feature upgrade prompts when the user is locked out of one specific feature.
- A "trial summary" at the end showing what they used and what they didn't.
The takeaway
Visible usage counters > countdown timers > email reminders > aggressive upgrade prompts.
The cheapest onboarding trick I ever shipped was a single counter on the dashboard. Cost: 30 lines of code. Reward: +57% conversion.
For tiny SaaS products, this is one of the highest-ROI changes you can make. Most products have it backwards — they hide usage information, then wonder why trials don't convert.
The information asymmetry between the user and the product is the problem. Close it. Show usage. Show it cleanly. Conversion follows.
Top comments (0)