Generated banner for Paywalls
Generated logo for Paywalls

Paywalls

Corey HainesCommunityCreated by Corey Haines

  • Skill
  • Workflow
  • Business and productivity
  • MIT
  • No issues found

From the author

When the user wants to create or optimize in-app paywalls, upgrade screens, upsell modals, or feature gates. Also use when the user mentions "paywall," "upgrade screen," "upgrade modal," "upsell," "feature gate," "convert free to paid," "freemium conversion," "trial expiration screen," "limit reached screen," "plan upgrade prompt," "in-app pricing," "free users won't upgrade," "trial to paid conversion," or "how do I get users to pay," "mobile app paywall," "subscription app paywall," or "App Store subscription pricing." Use this for any in-product moment where you're asking users to upgrade. Distinct from public pricing pages (see cro) — this focuses on in-product upgrade moments where the user has already experienced value. For pricing decisions, see pricing.
— the description by Corey Haines

AutoGineer summary

Written by AutoGineer from the skill’s own files, not by the author

This skill provides a structured approach to designing in-app upgrade moments, such as paywalls, feature gates, and trial expiration screens. It emphasizes the 'Value Before Ask' principle, ensuring that users are prompted to upgrade only after they have experienced the product's core value. The skill covers the entire lifecycle of an upgrade flow, from identifying the right trigger points and designing effective screen components to A/B testing strategies and avoiding common anti-patterns like dark patterns.

What it does

  • Provides frameworks for timing upgrade prompts after user 'aha moments'.
  • Offers design patterns for feature locks, usage limits, and trial expiration screens.
  • Guides the creation of clear, value-oriented upgrade copy and CTA messaging.
  • Suggests A/B testing strategies for trigger timing, pricing presentation, and layout.
  • Outlines best practices for mobile subscription apps, including store-specific considerations.
  • Helps identify and remove conversion-killing friction in the payment path.

When to use it

  • When designing or refining in-app paywalls, upsell modals, or feature gates.
  • When free-to-paid conversion rates are low or users are not upgrading after trial periods.
  • When planning experiments to optimize the timing and frequency of upgrade prompts.
  • When transitioning from a free-only product to a freemium or subscription model.
  • When you need to balance monetization goals with maintaining user trust and retention.

Advantages

  • Focuses on user-centric conversion by prioritizing value demonstration.
  • Reduces user frustration by providing clear paths to continue using the free version.
  • Provides actionable, data-driven patterns for both SaaS and mobile app contexts.
  • Helps avoid dark patterns that can damage long-term brand reputation.
  • Includes specific guidance on mobile-first subscription mechanics and store-related constraints.

Usage examples

“Our users hit a usage limit on our project management tool, but they aren't upgrading. How should we design the limit-reached screen?”
The agent will provide a structure for a usage-limit paywall that clearly shows the current limit, the value of the Pro tier, and a frictionless path to upgrade, while ensuring the user isn't abruptly blocked.
“We are building a mobile fitness app. Should we use a hard paywall or a freemium model?”
The agent will compare the two approaches, referencing industry data on conversion and retention, and help you decide based on your app's specific value proposition and target audience.
“What should we test to improve our trial-to-paid conversion rate?”
The agent will suggest a list of A/B test ideas, such as varying trial lengths, testing different headline copy, or optimizing the timing of expiration reminders.

Install

  1. Download the skill as a ZIP:

    https://autogineer.com/agent-skills/coreyhaines31/paywalls/download
  2. Unzip it into the cross-client skills folder of your project:

    mkdir -p .agents/skills && unzip paywalls.zip -d .agents/skills

Documentation by Corey Haines

Paywall and Upgrade Screen CRO

You are an expert in in-app paywalls and upgrade flows. Your goal is to convert free users to paid, or upgrade users to higher tiers, at moments when they've experienced enough value to justify the commitment.

Initial Assessment

Check for product marketing context first: If .agents/product-marketing.md exists (or .claude/product-marketing.md, or the legacy product-marketing-context.md filename, in older setups), read it before asking questions. Use that context and only ask for information not already covered or specific to this task.

Before providing recommendations, understand:

  1. Upgrade Context - Freemium → Paid? Trial → Paid? Tier upgrade? Feature upsell? Usage limit?

  2. Product Model - What's free? What's behind paywall? What triggers prompts? Current conversion rate?

  3. User Journey - When does this appear? What have they experienced? What are they trying to do?


Core Principles

1. Value Before Ask
  • User should have experienced real value first

  • Upgrade should feel like natural next step

  • Timing: After "aha moment," not before

2. Show, Don't Just Tell
  • Demonstrate the value of paid features

  • Preview what they're missing

  • Make the upgrade feel tangible

3. Friction-Free Path
  • Easy to upgrade when ready

  • Don't make them hunt for pricing

4. Respect the No
  • Don't trap or pressure

  • Make it easy to continue free

  • Maintain trust for future conversion


Paywall Trigger Points

Feature Gates

When user clicks a paid-only feature:

  • Clear explanation of why it's paid

  • Show what the feature does

  • Quick path to unlock

  • Option to continue without

Usage Limits

When user hits a limit:

  • Clear indication of limit reached

  • Show what upgrading provides

  • Don't block abruptly

Trial Expiration

When trial is ending:

  • Early warnings (7, 3, 1 day)

  • Clear "what happens" on expiration

  • Summarize value received

Time-Based Prompts

After X days of free use:

  • Gentle upgrade reminder

  • Highlight unused paid features

  • Easy to dismiss


Paywall Screen Components

  1. Headline - Focus on what they get: "Unlock [Feature] to [Benefit]"

  2. Value Demonstration - Preview, before/after, "With Pro you could..."

  3. Feature Comparison - Highlight key differences, current plan marked

  4. Pricing - Clear, simple, annual vs. monthly options

  5. Social Proof - Customer quotes, "X teams use this"

  6. CTA - Specific and value-oriented: "Start Getting [Benefit]"

  7. Escape Hatch - Clear "Not now" or "Continue with Free"


Specific Paywall Types

Feature Lock Paywall
[Lock Icon]
This feature is available on Pro

[Feature preview/screenshot]

[Feature name] helps you [benefit]:
• [Capability]
• [Capability]

[Upgrade to Pro - $X/mo]
[Maybe Later]
Usage Limit Paywall
You've reached your free limit

[Progress bar at 100%]

Free: 3 projects | Pro: Unlimited

[Upgrade to Pro]  [Delete a project]
Trial Expiration Paywall
Your trial ends in 3 days

What you'll lose:
• [Feature used]
• [Data created]

What you've accomplished:
• Created X projects

[Continue with Pro]
[Remind me later]  [Downgrade]

Timing and Frequency

When to Show
  • After value moment, before frustration

  • After activation/aha moment

  • When hitting genuine limits

When NOT to Show
  • During onboarding (too early)

  • When they're in a flow

  • Repeatedly after dismissal

Frequency Rules
  • Limit per session

  • Cool-down after dismiss (days, not hours)

  • Track annoyance signals


Upgrade Flow Optimization

From Paywall to Payment
  • Minimize steps

  • Keep in-context if possible

  • Pre-fill known information

Post-Upgrade
  • Immediate access to features

  • Confirmation and receipt

  • Guide to new features


A/B Testing

What to Test
  • Trigger timing

  • Headline/copy variations

  • Price presentation

  • Trial length

  • Feature emphasis

  • Design/layout

Metrics to Track
  • Paywall impression rate

  • Click-through to upgrade

  • Completion rate

  • Revenue per user

  • Churn rate post-upgrade

For comprehensive experiment ideas: See references/experiments.md

For consumer iOS/Android subscription apps (paywall inside onboarding, yearly-first plans, trials and reminders, store fees, web checkout, revenue per download): See references/mobile-subscription-paywalls.md


Anti-Patterns to Avoid

Dark Patterns
  • Hiding the close button

  • Confusing plan selection

  • Guilt-trip copy

  • Fake countdowns or "limited" offers with no real deadline

Conversion Killers
  • Asking before value delivered

  • Too frequent prompts

  • Blocking critical flows

  • Complicated upgrade process


Task-Specific Questions

  1. What's your current free → paid conversion rate?

  2. What triggers upgrade prompts today?

  3. What features are behind the paywall?

  4. What's your "aha moment" for users?

  5. What pricing model? (per seat, usage, flat)

  6. Mobile app, web app, or both?


  • churn-prevention: For cancel flows, save offers, and reducing churn post-upgrade

  • cro: For public pricing page optimization

  • onboarding: For driving to aha moment before upgrade

  • ab-testing: For testing paywall variations

Files

evals/evals.json

{
  "skill_name": "paywalls",
  "evals": [
    {
      "id": 1,
      "prompt": "Help me design the upgrade paywall for our project management tool. Free users can have 3 projects, and we want to show an upgrade screen when they try to create a 4th project.",
      "expected_output": "Should check for product-marketing.md first. Should identify this as a usage limit trigger point. Should apply the paywall screen components: headline (communicate the value of upgrading, not just the limit), value demonstration (show what they get with paid plan), plan comparison (free vs paid), social proof, CTA (specific and action-oriented), and escape hatch (option to go back). Should provide specific copy recommendations. Should address the emotional state of the user at this moment (frustrated by the limit). Should warn against anti-patterns.",
      "assertions": [
        "Checks for product-marketing.md",
        "Identifies as usage limit trigger",
        "Applies paywall screen components framework",
        "Includes headline, value demo, comparison, social proof, CTA",
        "Provides specific copy recommendations",
        "Addresses user's emotional state at the limit",
        "Includes escape hatch option",
        "Warns against anti-patterns"
      ],
      "files": []
    },
    {
      "id": 2,
      "prompt": "Our free trial expires in 14 days and users see a generic 'Your trial has expired' screen. Upgrade rate from this screen is only 2%. How do we improve it?",
      "expected_output": "Should identify this as a trial expiration trigger. Should apply the trial expiration paywall type guidance. Should recommend: show what they've built/accomplished during the trial (endowment effect), highlight specific features they used, show the value they'd lose, provide clear plan options, include social proof from similar users who upgraded. Should diagnose why 2% is low: likely a weak value prop, no personalization, no urgency or loss framing. Should provide specific redesign recommendations.",
      "assertions": [
        "Identifies as trial expiration trigger",
        "Applies trial expiration paywall guidance",
        "Recommends showing user's accomplishments during trial",
        "Uses loss framing (what they'd lose)",
        "Provides clear plan options",
        "Includes social proof",
        "Diagnoses why current 2% rate is low",
        "Provides specific redesign recommendations"
      ],
      "files": []
    },
    {
      "id": 3,
      "prompt": "when should we show upgrade prompts? we don't want to be annoying but we also need to convert free users to paid.",
      "expected_output": "Should trigger on casual phrasing. Should apply the timing and frequency rules. Should recommend trigger points from the skill: feature gates (when they try a paid feature), usage limits (when they hit a threshold), value moments (when they've just experienced success), and natural transition points. Should address frequency capping to avoid being annoying. Should recommend the anti-patterns to avoid (blocking basic functionality, too frequent popups, dark patterns). Should provide a balanced approach that respects user experience while driving upgrades.",
      "assertions": [
        "Triggers on casual phrasing",
        "Applies timing and frequency rules",
        "Recommends specific trigger points",
        "Addresses frequency capping",
        "Warns against anti-patterns",
        "Balances user experience with conversion goals",
        "Provides specific recommendations for each trigger type"
      ],
      "files": []
    },
    {
      "id": 4,
      "prompt": "Design a feature gate paywall. When free users click on 'Advanced Analytics' in our dashboard, we want to show them an upgrade prompt.",
      "expected_output": "Should identify this as a feature gate trigger. Should apply the feature lock paywall type guidance. Should recommend: show a preview or screenshot of the advanced analytics feature, explain the specific benefit (not just 'this is a paid feature'), include a plan comparison relevant to analytics, provide a clear CTA to upgrade, and include an escape hatch to go back to basic analytics. Should recommend showing what insights they're missing. Should provide copy recommendations for the paywall screen.",
      "assertions": [
        "Identifies as feature gate trigger",
        "Applies feature lock paywall guidance",
        "Recommends showing preview of the feature",
        "Explains specific benefit of the feature",
        "Includes relevant plan comparison",
        "Provides clear CTA and escape hatch",
        "Provides copy recommendations"
      ],
      "files": []
    },
    {
      "id": 5,
      "prompt": "What are common mistakes to avoid with in-app paywalls? I don't want to be pushy or make users feel tricked.",
      "expected_output": "Should apply the anti-patterns section. Should cover: dark patterns (making it hard to find the close button, confusing opt-out language), conversion killers (blocking basic functionality, showing paywalls too early before value is demonstrated, no escape hatch), frequency issues (too many prompts, showing the same paywall repeatedly). Should provide positive alternatives for each anti-pattern. Should emphasize that good paywalls feel helpful, not pushy.",
      "assertions": [
        "Applies anti-patterns section",
        "Covers dark patterns to avoid",
        "Covers conversion killers",
        "Covers frequency issues",
        "Provides positive alternatives for each",
        "Emphasizes helpful over pushy approach"
      ],
      "files": []
    },
    {
      "id": 6,
      "prompt": "Can you help me optimize our public pricing page? We want more visitors to choose the Pro plan over the Basic plan.",
      "expected_output": "Should recognize this is a public pricing page optimization task, not an in-app paywall task. Should defer to or cross-reference the cro skill for pricing page CRO. Paywall-upgrade-cro specifically handles in-app upgrade prompts for existing users, not public-facing pricing pages.",
      "assertions": [
        "Recognizes this as public pricing page optimization",
        "References or defers to cro skill",
        "Explains that paywalls is for in-app upgrade prompts",
        "Does not attempt public pricing page optimization"
      ],
      "files": []
    },
    {
      "id": 7,
      "prompt": "We're launching an AI calorie-tracking iOS and Android app. Where should the paywall go, how should we price it, and how much can we afford to pay per install?",
      "expected_output": "Should load references/mobile-subscription-paywalls.md. Should place the paywall after onboarding produces a personalized result, not on first launch; lead with a yearly plan shown with a per-week equivalent while keeping the billed amount clear, with at most one shorter option; offer a trial with a reminder before it ends and treat trial length as a test; allow one abandon offer shown once. Should explain store fees as dated and to be checked (Apple Small Business Program 15%; Google Play's 10% service fee plus 5% billing in the US, UK and EEA, with the 10% still applying on web links; US iOS link-out commission still being set in court). Should compute revenue per download as trial start × trial-to-paid × yearly price × (1 − fee) and say to replace any starting estimate with the app's own numbers before setting install bids. Should name paywall testing tools as options, not pick one as best.",
      "assertions": [
        "Places the paywall after a personalized result in onboarding",
        "Leads with a yearly plan and keeps the billed amount clear",
        "Includes a trial with a pre-renewal reminder and treats trial length as a test",
        "Limits the abandon offer to one showing",
        "Presents store fees as dated and to be verified, including Google's 10% applying to web-link purchases",
        "Gives a revenue-per-download formula net of store fees and says to use the app's own rates",
        "Does not recommend one paywall tool as the best"
      ],
      "files": []
    }
  ]
}

Requirements and compatibility

Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta

“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.

Security

No issues found by our static scan· No issues found

A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.

Attribution and licence

Created by
Corey Haines
Publisher
Corey Haines (Community)
Source
coreyhaines31/marketingskills · skills/paywalls · commit 96798cf
Licence
MIT License (redistribution allowed)
  • LICENSE (added by AutoGineer from LICENSE)
  • ATTRIBUTION.md (written by AutoGineer)
Synced

AutoGineer is not affiliated with or endorsed by Corey Haines or Corey Haines.

Download ZIP

The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download paywalls.zip