Convert engaged readers into paying subscribers with data-driven paywall optimization.
Info
Sample business figures, conversion ranges and scoring thresholds in this guide are illustrative. They are not industry benchmarks, Zenovay customer results or measured causal effects. Define events for your product and compare observed cohorts before adopting a target.
Subscription Funnel Overview
The Conversion Journey
Visitor → Reader → Registered → Engaged → Subscriber → Retained
100% 40% 15% 8% 2% 1.5%
Key Subscription Metrics
| Metric | Formula | Illustrative range |
|---|---|---|
| Visitor-to-Sub | Subscribers ÷ Visitors | 0.5-2% |
| Paywall Conversion | Subs ÷ Paywall Hits | 2-5% |
| Trial Conversion | Paid ÷ Trials | 40-60% |
| Annual Retention | Renewed ÷ Eligible | 70-85% |
| Monthly Retention | Active ÷ Start | 92-96% |
Paywall Strategy
Paywall Types
| Type | Description | Best For |
|---|---|---|
| Hard | All content behind paywall | Premium brands |
| Metered | X free articles/month | Growing audience |
| Freemium | Some free, premium locked | Broad reach |
| Dynamic | AI-based access decisions | Optimization |
Track Paywall Hits
// Track meter status
zenovay('track','meter_status', {
user_id: userId,
articles_read_period: 3,
limit: 5,
period: 'month',
is_registered: false
});
// Track paywall shown
zenovay('track','paywall_shown', {
user_id: userId,
article_id: 'art_12345',
trigger: 'meter_limit',
articles_read: 5,
user_segment: 'engaged_anonymous',
paywall_variant: 'offer_50_off'
});
Paywall Placement
| Trigger | Conversion Rate | Notes |
|---|---|---|
| After 3 articles | 2.1% | Aggressive |
| After 5 articles | 3.5% | Standard |
| After 10 articles | 4.2% | Conservative |
| Mid-article | 1.8% | Frustrating |
| End of article | 2.8% | Less friction |
Registration Wall
Track Registration
// Registration wall shown
zenovay('track','regwall_shown', {
user_id: userId,
articles_read: 2,
trigger: 'article_limit',
variant: 'value_prop_newsletter'
});
// Registration completed
zenovay('track','user_registered', {
user_id: userId,
method: 'email',
source: 'regwall',
articles_before_reg: 2,
newsletter_opted_in: true
});
Registration Conversion
| Variant | Shown | Registered | Rate |
|---|---|---|---|
| Value prop | 10K | 1,800 | 18% |
| Newsletter focus | 10K | 2,100 | 21% |
| Social login | 10K | 2,400 | 24% |
| Minimal fields | 10K | 2,600 | 26% |
Subscription Page Optimization
Track Subscription Page
// Subscription page viewed
zenovay('track','subscription_page_viewed', {
user_id: userId,
source: 'paywall',
previous_page: 'art_12345',
plan_shown: ['monthly', 'annual'],
offer_active: 'summer_50_off'
});
// Plan selected
zenovay('track','plan_selected', {
user_id: userId,
plan: 'annual',
price: 99,
original_price: 199,
discount: 50
});
Pricing Page A/B Tests
Test these elements:
- Number of plans shown
- Annual vs monthly prominence
- Price anchoring
- Discount presentation
- Feature comparison
| Test | Variant A | Variant B | Winner |
|---|---|---|---|
| Plans | 2 options | 3 options | A (+15%) |
| Default | Monthly | Annual | B (+22%) |
| Discount | % off | $ saved | B (+8%) |
Checkout Optimization
Track Checkout Flow
// Checkout started
zenovay('track','checkout_started', {
user_id: userId,
plan: 'annual',
price: 99,
currency: 'USD'
});
// Payment method selected
zenovay('track','payment_method_selected', {
user_id: userId,
method: 'credit_card' // apple_pay, google_pay, paypal
});
// Checkout completed
zenovay('track','subscription_started', {
user_id: userId,
plan: 'annual',
price: 99,
trial_days: 7,
payment_method: 'credit_card',
offer_used: 'summer_50_off',
source: 'paywall',
articles_before_sub: 12
});
Checkout Drop-off
| Step | Users | Drop-off |
|---|---|---|
| Pricing page | 1,000 | - |
| Plan selected | 450 | 55% |
| Payment info | 320 | 29% |
| Completed | 280 | 13% |
Focus: Plan selection has highest drop-off.
Trial Optimization
Track Trial Users
// Trial started
zenovay('track','trial_started', {
user_id: userId,
trial_length: 7,
plan: 'annual',
source: 'paywall_offer'
});
// Trial engagement
zenovay('track','trial_engagement', {
user_id: userId,
trial_day: 3,
articles_read: 8,
features_used: ['newsletter', 'archive', 'app'],
engagement_score: 75
});
// Trial converted
zenovay('track','trial_converted', {
user_id: userId,
trial_length: 7,
days_to_convert: 5,
articles_during_trial: 15,
plan: 'annual',
price: 99
});
// Trial cancelled
zenovay('track','trial_cancelled', {
user_id: userId,
trial_day: 6,
articles_during_trial: 2,
reason: 'not_enough_value',
engagement_score: 25
});
Trial Conversion by Engagement
| Trial Engagement | Conversion Rate |
|---|---|
| 0-2 articles | 15% |
| 3-5 articles | 35% |
| 6-10 articles | 55% |
| 11+ articles | 72% |
Insight: Encourage 6+ articles during trial.
Offer Optimization
Track Offers
// Offer shown
zenovay('track','offer_shown', {
user_id: userId,
offer_id: 'summer_50_off',
discount_percent: 50,
offer_type: 'first_year',
location: 'paywall',
user_segment: 'high_engagement'
});
// Offer accepted
zenovay('track','offer_accepted', {
user_id: userId,
offer_id: 'summer_50_off',
discount_value: 100,
final_price: 99
});
Offer Performance
| Offer | Shown | Converted | Rate | Revenue |
|---|---|---|---|---|
| No discount | 5K | 125 | 2.5% | $24,875 |
| 25% off | 5K | 200 | 4.0% | $29,850 |
| 50% off | 5K | 350 | 7.0% | $34,650 |
| Free month | 5K | 280 | 5.6% | $52,080* |
*Free month has higher LTV due to annual lock-in.
Propensity Scoring
Predict Conversion Likelihood
// Calculate propensity score
function calculatePropensityScore(userId) {
const factors = {
visit_frequency: getVisitFrequency(userId),
article_depth: getScrollDepth(userId),
content_variety: getCategoriesRead(userId),
registration_age: getDaysSinceReg(userId),
paywall_hits: getPaywallHits(userId),
newsletter_engagement: getNewsletterScore(userId)
};
const score = predictConversion(factors);
zenovay('track','propensity_score', {
user_id: userId,
score: score, // 0-100
factors: factors,
recommended_action: getRecommendedAction(score)
});
}
Score-Based Actions
| Propensity | % Users | Action |
|---|---|---|
| 80-100 | 5% | Direct ask, full price |
| 60-79 | 15% | Soft ask, small discount |
| 40-59 | 25% | Nurture, newsletter |
| 20-39 | 30% | Engagement focus |
| 0-19 | 25% | Awareness building |
Churn Prevention
Track Cancellation
// Cancellation page viewed
zenovay('track','cancel_page_viewed', {
user_id: userId,
subscription_age_days: 180,
plan: 'annual',
renewal_date: '2025-02-15'
});
// Cancellation reason
zenovay('track','cancel_reason', {
user_id: userId,
reason: 'too_expensive',
secondary_reason: 'not_reading_enough',
feedback: 'Great content but budget tight'
});
// Save offer shown
zenovay('track','save_offer_shown', {
user_id: userId,
offer: 'pause_3_months',
alternative: '50_percent_off_3_months'
});
// Subscription cancelled
zenovay('track','subscription_cancelled', {
user_id: userId,
reason: 'too_expensive',
tenure_days: 180,
ltv: 99,
save_offer_declined: true
});
Save Offers Performance
| Offer | Shown | Saved | Rate |
|---|---|---|---|
| Pause subscription | 500 | 120 | 24% |
| Downgrade to cheaper | 500 | 95 | 19% |
| 50% off 3 months | 500 | 180 | 36% |
| Switch to annual | 500 | 85 | 17% |
Attribution
Subscription Source
| Source | Subscribers | % | CAC |
|---|---|---|---|
| Organic search | 1,200 | 35% | $15 |
| Direct | 800 | 23% | $0 |
| Newsletter | 650 | 19% | $8 |
| Social | 400 | 12% | $45 |
| Paid ads | 350 | 10% | $85 |
Content Attribution
Track which content drives subscriptions:
// Track content before subscription
zenovay('track','subscription_started', {
user_id: userId,
articles_before_sub: articleList,
converting_article: 'art_12345',
days_as_reader: 45,
// ...other fields
});
| Content Type | Subs | Conversion Rate |
|---|---|---|
| Exclusive investigation | 180 | 8.2% |
| Breaking news | 420 | 1.5% |
| Expert analysis | 280 | 5.1% |
| How-to guides | 150 | 3.8% |
Subscriber Health
Track Subscriber Engagement
// Weekly subscriber health
zenovay('track','subscriber_health', {
user_id: userId,
subscription_age_days: 90,
articles_this_week: 5,
features_used: ['newsletter', 'app'],
health_score: 72,
renewal_risk: 'low'
});
Health Score Actions
| Score | Risk Level | Action |
|---|---|---|
| 80+ | Very Low | Upsell, referral ask |
| 60-79 | Low | Maintain engagement |
| 40-59 | Medium | Re-engagement campaign |
| 20-39 | High | Personal outreach |
| <20 | Critical | Save offer preemptively |
Reporting
Daily Subscription Report
- New subscribers
- Trials started
- Cancellations
- Net change
- Revenue
Weekly Analysis
- Conversion rate by source
- Offer performance
- Paywall optimization
- Trial engagement
Monthly Deep Dive
- Cohort analysis
- LTV calculations
- Churn analysis
- Content attribution
Subscription Goals
Set Conversion Goals
// Track against goals
zenovay('track','subscription_goal_progress', {
period: '2025-01',
target_subs: 500,
current_subs: 320,
target_revenue: 50000,
current_revenue: 32000,
days_remaining: 15
});
Example Goals
| Goal | Target | Current | Status |
|---|---|---|---|
| Monthly subs | 500 | 320 | 64% |
| Trial conversion | 50% | 48% | On track |
| Churn rate | <5% | 4.2% | Good |
| LTV | $180 | $165 | Focus |
Best Practices
Conversion Optimization
-
Know your audience
- Segment by engagement
- Different offers for different segments
-
Reduce friction
- Simple checkout
- Multiple payment options
- Clear value proposition
-
Test everything
- Paywall placement
- Pricing
- Offers
- Messaging
-
Track the full journey
- First visit to subscription
- All touchpoints
Common Mistakes
-
Aggressive paywall too early
- Let readers fall in love first
- Build habit before asking
-
Ignoring engagement
- Subscribers who don't read churn
- Monitor ongoing engagement
-
One-size-fits-all
- Personalize offers
- Segment messaging
-
Focusing only on new subs
- Retention is cheaper than acquisition
- Monitor subscriber health
Next Steps
Use this workflow in Zenovay
Create a subscription funnel in Open the dashboard from paywall view to confirmed payment. Keep trial signup and paid conversion as separate steps.