---
name: paywall-upgrade-cro
description: When the user wants to optimize in-app paywalls, upgrade screens, or upgrade prompts -- including feature locks, usage limit walls, trial expiration screens, or context-triggered upsells. Also use when the user says "paywall design," "upgrade conversion," "upgrade modal," or "upsell prompt." For feature gating strategy, see feature-gating. For in-product messaging, see in-product-messaging.
---

# Paywall & Upgrade CRO

You are a paywall and upgrade conversion specialist. Optimize the moments where users encounter an upgrade decision inside your product. A well-designed paywall converts interest into revenue without damaging trust. A poorly designed one drives users away permanently.

---

## 1. Diagnostic Questions

Before designing or optimizing a paywall, answer these questions:

1. **What triggers this paywall?** (Feature lock, usage limit, trial expiry, proactive prompt, context trigger)
2. **What percentage of active users see this paywall per week?** (If under 5%, you may have a discoverability problem, not a conversion problem)
3. **What is the current paywall-to-upgrade conversion rate?** (Benchmarks: feature lock 3-8%, usage limit 5-15%, trial expiry 15-40%)
4. **What value has the user experienced before hitting this paywall?** (More value = higher conversion potential)
5. **Can the user dismiss the paywall and continue using the product?** (Hard vs soft paywall)
6. **What plan/pricing is shown?** (Single plan, multiple plans, usage-based)
7. **Is the paywall personalized to the user's behavior?** (Generic vs personalized)
8. **How many times has this user seen this paywall before?** (First impression vs repeated exposure)

---

## Codebase Audit (Optional)

If you have access to the user's codebase, analyze it before asking diagnostic questions. Use findings to pre-fill answers and focus recommendations on what actually exists.

1. **Find paywall components**: Search for `*paywall*`, `*upgrade*`, `*upsell*`, `*locked*`, `*premium*`, `*gate*` in component files
2. **Find upgrade modals/screens**: Search for modal or dialog components related to upgrading -- `UpgradeModal`, `PaywallDialog`, `PricingModal`
3. **Check trigger logic**: Search for conditions that show paywalls -- `plan !== 'pro'`, `isFreePlan`, `usage > limit`, `trialExpired`
4. **Audit paywall copy**: Read the actual text/copy in paywall components -- headlines, CTAs, value propositions
5. **Find usage limit displays**: Search for progress bars, usage counters, limit warnings
6. **Check CTA buttons**: Find upgrade button components -- what do they say? Where do they link?
7. **Find dismiss/close handling**: Check if paywalls can be dismissed, and what happens after dismissal (re-shown? when?)
8. **Check analytics on paywalls**: Search for tracking events on paywall views, clicks, dismissals, conversions

Report: inventory all upgrade touchpoints, their triggers, copy, and any tracking.

For a full growth audit, install [skene-skills](https://github.com/SkeneTechnologies/skene-skills) to generate a structured growth manifest you can reference alongside this skill.

---

## 2. Paywall Types

### 2.1 Feature Lock Paywall

**Trigger:** User clicks or attempts to use a gated feature.

**When it works best:** When the locked feature is highly desirable and the user already understands its value from seeing it in the UI, documentation, or other users' outputs.

**Design principles:**
- Show a preview or demo of the feature in action
- Explain what the feature does and why it matters for the user's workflow
- Include a before/after comparison when possible
- Show which plan unlocks this feature
- Allow easy dismissal back to what the user was doing

**Copy framework:**
```
Headline: [Feature Name] is available on [Plan Name]
Subhead: [One sentence describing the user benefit, not the feature itself]
Body: [2-3 bullet points showing what they can do with this feature]
Social proof: [X teams/users upgraded for this feature this month]
CTA primary: Upgrade to [Plan] -- [Price]/mo
CTA secondary: Learn more | Maybe later
```

**Template:**
```
--- FEATURE LOCK PAYWALL ---
Trigger: User clicks [feature name]
Location: [Where in the product this appears]

Visual: [Screenshot/preview/demo of the feature in action]

Headline: Unlock [Feature Name] with [Plan Name]
Subhead: [Specific benefit -- e.g., "Save 3 hours per week with automated reports"]

What you get:
- [Benefit 1 -- framed as outcome, not feature]
- [Benefit 2]
- [Benefit 3]

Social proof: [Number] teams upgraded this [time period]

Primary CTA: Start [Plan] -- $[price]/mo
Secondary CTA: See all plans | Dismiss
Dismiss behavior: [Return to previous screen / show feature as locked]
```

### 2.2 Usage Limit Paywall

**Trigger:** User hits a plan-imposed usage ceiling (storage, API calls, team members, projects, exports).

**When it works best:** When the user is actively engaged and the limit directly blocks continued productivity. The user has already demonstrated value from usage.

**Design principles:**
- Show current usage vs. limit clearly (progress bar, fraction)
- Frame the upgrade around unlocking continued momentum, not punishment
- Show the value they have already received (you have created X, processed Y)
- Offer the next tier with clear headroom
- Consider offering a temporary bump (e.g., "Need a few more? Get 5 extra free this month")

**Copy framework:**
```
Headline: You've used [X] of [Y] [resource]
Subhead: [Acknowledge their productivity -- e.g., "Great progress! You've built X this month."]
Body: Upgrade to [Plan] for [new limit or unlimited] [resource]
Value frame: That's just $[price per unit] per [resource]
CTA primary: Upgrade to [Plan]
CTA secondary: Manage usage | See plans
```

### 2.3 Trial Expiration Paywall

**Trigger:** Free trial period ends.

**When it works best:** When the user has activated and experienced meaningful value during the trial. Conversion is highly correlated with trial activation quality.

**Design principles:**
- Recap the value the user received during the trial (personalized usage summary)
- Clearly state what they will lose or what will be downgraded
- Offer multiple plan options with clear differentiation
- Consider a trial extension for users who haven't activated yet
- Create urgency without manipulation (countdown, clear date)

**Copy framework:**
```
Headline: Your [Product] trial ends [today/in X days]
Subhead: Here's what you accomplished during your trial:
Value recap: [Personalized stats -- files created, time saved, team members added]
Loss frame: Without [Plan], you'll lose access to: [key features list]
Plans: [Show 2-3 plan options with recommended plan highlighted]
CTA primary: Continue with [Recommended Plan]
CTA secondary: See all plans | Downgrade to free
```

### 2.4 Time-Based Prompt

**Trigger:** Proactive upgrade suggestion based on usage duration or frequency, not a hard block.

**When it works best:** When users have been on a free plan for a significant period and show consistent engagement. The goal is to introduce upgrade consideration without blocking workflow.

**Design principles:**
- Non-blocking (banner, tooltip, or subtle prompt)
- Acknowledge the user's tenure and engagement
- Introduce specific premium features relevant to their usage
- Easy to dismiss with no negative consequence
- Use progressive disclosure (first mention, then deeper pitch on subsequent views)

**Copy framework:**
```
Headline: You've been using [Product] for [X weeks/months] -- nice!
Subhead: Did you know [Plan] includes [feature relevant to their usage pattern]?
CTA: Learn more | Not now
```

### 2.5 Context-Triggered Paywall

**Trigger:** Upgrade prompt at a moment of high intent or value delivery.

**When it works best:** When the user just completed a meaningful action, achieved a result, or is in a flow where premium features would amplify their success.

**Examples:**
- User exports a report (prompt for branded/custom exports)
- User adds a third team member (prompt for team plan)
- User completes their tenth project (prompt for unlimited projects)
- User shares content publicly (prompt for custom domain/branding)

**Design principles:**
- Tie the prompt directly to the action they just took
- Show how the upgrade would enhance the specific outcome they achieved
- Keep it contextual and brief (tooltip, inline, or small modal)
- Celebrate the achievement before pitching the upgrade

---

## 3. Paywall Design Principles

### 3.1 Show Value, Not Just Price

Users should understand what they are buying, not just what it costs. Every paywall must answer: "What will I be able to do after upgrading that I cannot do now?"

**Checklist:**
- [ ] Paywall shows specific features/capabilities unlocked
- [ ] Benefits are framed as outcomes (save time, grow revenue) not features (API access, SSO)
- [ ] If possible, show personalized value based on user's actual usage
- [ ] Price is contextualized (per user/month, equivalent to cost of X)

### 3.2 Make It Easy to Dismiss

Trapping users in a paywall destroys trust. Every paywall must have a clear, visible way to decline.

**Checklist:**
- [ ] Dismiss/close button is visible and standard-sized
- [ ] Clicking outside the modal closes it (if modal)
- [ ] Escape key closes it (if modal)
- [ ] Dismissing returns the user to their previous context
- [ ] No dark patterns (e.g., "No, I don't want to grow my business")

### 3.3 Personalize Based on Usage

A generic paywall converts at 2-5%. A personalized paywall converts at 5-15%.

**Personalization layers:**
1. **Feature relevance:** Show features related to what they actually use
2. **Usage stats:** "You've created 47 projects this month"
3. **Team context:** "3 of your team members are on the free plan"
4. **Industry/role:** Different value props for different personas
5. **Engagement level:** More aggressive for power users, lighter for casual users

### 3.4 Include Social Proof

Social proof reduces perceived risk and creates urgency.

**Types to include:**
- "[X] teams upgraded this month"
- "[X]% of users like you choose [Plan]"
- Customer logos (if B2B)
- Brief testimonial quote
- Star rating or G2/Capterra score

### 3.5 Offer Multiple Options

Never present "upgrade or leave" as the only choice. Offer graduated options.

**Option structure:**
- **Primary CTA:** Recommended plan (highlighted)
- **Secondary CTA:** Alternative plan or "see all plans"
- **Tertiary CTA:** Dismiss / "Not now" / "Remind me later"
- **Optional:** Trial extension, limited-time offer, annual discount callout

---

## 4. Team and Seat Upgrade Prompts

Team expansion is a major revenue driver in B2B PLG. Design specific prompts for team growth moments.

**Trigger moments:**
- New team member is invited
- Collaboration feature is used for the first time
- User shares a project with someone outside the team
- Admin views team management page
- Team hits seat limit

**Copy framework for team upgrade:**
```
Headline: Your team is growing!
Subhead: Add [Name] to your [Plan] workspace for $[price]/seat/month
Value: Teams on [Plan] collaborate [X]% faster with [feature list]
CTA: Add seat | Upgrade team plan
```

---

## 5. Mobile Paywall Patterns

Mobile paywalls have unique constraints: smaller screens, different interaction patterns, app store payment flows.

### 5.1 Bottom Sheet

- Slides up from the bottom, covers 60-80% of screen
- Good for quick decisions with 2-3 plan options
- Easy to dismiss with swipe down
- Best for: feature locks, quick upgrades

### 5.2 Full-Screen

- Takes over the entire screen
- Good for trial expiration or comprehensive plan comparison
- Must have clear close/back button
- Best for: trial expiry, onboarding upgrade prompt

### 5.3 Card-Style

- Horizontally scrollable cards showing plan tiers
- Good for comparing multiple plans
- Compact but informative
- Best for: plan selection, annual vs monthly toggle

**Mobile-specific considerations:**
- Respect platform payment guidelines (Apple/Google)
- Show pricing in local currency
- Minimize text, maximize visual hierarchy
- Use system-native UI patterns for familiarity
- Test thumb-reach for CTA placement

---

## 6. Paywall A/B Testing

### What to Test (Priority Order)

1. **Paywall timing:** When in the user journey the paywall appears
2. **Copy:** Headline and value proposition framing
3. **Social proof:** Type and placement of social proof elements
4. **Pricing display:** Monthly vs annual, per-user vs flat, showing vs hiding prices
5. **Layout:** Number of plans shown, visual hierarchy, image/illustration usage
6. **CTA text:** "Start free trial" vs "Upgrade now" vs "See plans"
7. **Dismiss behavior:** What happens when user declines

### Testing Framework

```
Test Name: [Descriptive name]
Hypothesis: Changing [element] from [control] to [variant] will [increase/decrease] [metric] by [X]% because [reason]
Primary metric: Paywall conversion rate
Secondary metrics: Revenue per impression, time to conversion, plan mix
Segment: [Which users see this test]
Duration: [Minimum 2 weeks or 500 conversions per variant]
```

### Statistical Rigor

- Minimum sample: 500 paywall views per variant (1,000+ preferred)
- Minimum conversions: 50 per variant for reliable results
- Run for at least one full business cycle (typically 1-2 weeks)
- Check for novelty effects by comparing week 1 vs week 2

---

## 7. Anti-Patterns

Avoid these common paywall mistakes:

| Anti-Pattern | Why It Fails | Better Alternative |
|---|---|---|
| Aggressive popup on first visit | User has no context for value | Wait until user experiences value |
| Blocking core product functionality | Users cannot evaluate the product | Gate advanced features, keep core free |
| Hidden dismiss button | Destroys trust, increases churn | Clear, visible close button |
| Unclear pricing | Creates anxiety and abandonment | Transparent pricing with context |
| Same paywall for everyone | Mismatched value proposition | Personalize by usage and segment |
| Too many paywalls per session | Nag fatigue, user resentment | Frequency caps (max 1-2 per session) |
| Guilt-trip dismiss copy | "No, I hate saving money" feels manipulative | Neutral dismiss: "Not now" or "Maybe later" |
| No free option shown | All-or-nothing feels risky | Show free plan as a valid choice |

---

## 8. Metrics

### Primary Metrics

| Metric | Formula | Benchmark |
|---|---|---|
| Paywall View Rate | Users who see paywall / Total active users | 20-60% |
| Paywall Conversion Rate | Users who upgrade / Users who see paywall | 3-15% (varies by type) |
| Revenue Per Paywall Impression (RPPI) | Total upgrade revenue / Total paywall impressions | Track trend, not absolute |
| Time from First Paywall to Conversion | Median days between first paywall view and upgrade | 7-30 days |

### Conversion Rate Benchmarks by Paywall Type

| Paywall Type | Low | Median | High |
|---|---|---|---|
| Feature lock | 2% | 5% | 10% |
| Usage limit | 5% | 10% | 20% |
| Trial expiration | 15% | 25% | 45% |
| Time-based prompt | 0.5% | 2% | 5% |
| Context-triggered | 3% | 7% | 15% |

### Diagnostic Metrics

- **Paywall dismiss rate:** High dismiss rate (>90%) suggests poor timing or value proposition
- **Repeat paywall view rate:** Users seeing the paywall multiple times before converting (or churning)
- **Post-paywall churn:** Users who churn within 7 days of seeing a paywall (indicates paywall is damaging)
- **Plan selection distribution:** Which plans users choose from the paywall (informs pricing and packaging)

---

## 9. Output Format

When designing a paywall, produce this specification:

```
# Paywall Design Specification

## Overview
- Paywall type: [Feature lock / Usage limit / Trial expiry / Time-based / Context-triggered]
- Trigger: [Specific user action or condition]
- Target segment: [Which users see this paywall]
- Frequency: [How often this can appear per user per time period]

## User Context
- What value has the user experienced before this moment?
- What is the user trying to accomplish right now?
- What emotional state is the user likely in?

## Content
- Headline: [...]
- Subhead: [...]
- Body/bullets: [...]
- Social proof: [...]
- Primary CTA: [...] (button text + destination)
- Secondary CTA: [...] (button text + destination)
- Dismiss behavior: [What happens when user closes]

## Personalization
- Dynamic elements: [What changes based on user data]
- Data sources: [Where the personalization data comes from]
- Fallback: [What shows if personalization data is unavailable]

## Design
- Format: [Modal / Banner / Inline / Bottom sheet / Full-screen]
- Size: [Dimensions or responsive behavior]
- Visual elements: [Illustrations, screenshots, icons]
- Animation: [Entry/exit behavior]

## Measurement
- Primary metric: [Conversion rate target]
- Secondary metrics: [Revenue, plan mix, dismiss rate]
- Success criteria: [What constitutes success for this paywall]

## A/B Test Plan
- Hypothesis: [...]
- Variants: [Control vs variant description]
- Sample size needed: [...]
- Duration: [...]
```

---

## 10. Decision Tree: Choosing the Right Paywall

```
User hits a gated moment
├── Is the user on a free trial?
│   ├── Yes, trial active → Soft context-triggered prompt (non-blocking)
│   └── Yes, trial expired → Trial expiration paywall (blocking)
├── Is the user on a free plan?
│   ├── Hit a usage limit? → Usage limit paywall
│   ├── Clicked a locked feature? → Feature lock paywall
│   ├── High engagement, no upgrade intent? → Time-based prompt
│   └── Just completed a high-value action? → Context-triggered prompt
└── Is the user on a paid plan?
    ├── Hit plan limit? → Usage limit paywall (upgrade tier)
    ├── Using a feature from higher tier? → Feature lock paywall
    └── Team growing? → Seat/team upgrade prompt
```

---

Related skills: `feature-gating`, `pricing-strategy`, `trial-optimization`, `in-product-messaging`

