
Paywalls
Design high-converting upgrade paywalls when free users hit usage limits, trial expiry, or feature gates in a self-serve SaaS.
Overview
Paywalls is an agent skill most often used in Grow (also Validate, Build) that structures upgrade screens, copy, and emotional framing when users hit freemium limits or trial expiry.
Install
npx skills add https://github.com/coreyhaines31/marketingskills --skill paywallsWhat is this skill?
- Maps trigger moments such as usage limits, trial expiry, and feature gates before you write copy
- Applies a six-part paywall screen framework: headline, value demonstration, plan comparison, social proof, CTA, and esca
- Checks alignment with product-marketing.md so upgrade messaging matches positioning
- Recommends specific copy and addresses emotional state at the limit (frustration, loss aversion)
- Warns against anti-patterns that tank upgrade rate on generic expired-trial screens
- Six paywall screen components: headline, value demonstration, plan comparison, social proof, CTA, and escape hatch
Adoption & trust: 14.3k installs on skills.sh; 32.4k GitHub stars; 3/3 security scanners passed (skills.sh audits).
What problem does it solve?
You gate features with a generic limit or expired-trial screen and almost nobody upgrades because the moment feels punitive instead of valuable.
Who is it for?
Self-serve SaaS with a free tier, trial, or metered limits where upgrade happens inside the product UI.
Skip if: Teams with no in-app upgrade path, pure sales-led enterprise deals with no self-serve paywall, or builders who only need Stripe price IDs without UX or messaging.
When should I use this skill?
Designing or improving in-app upgrade paywalls for usage limits, trial expiry, feature gates, or low-converting generic upgrade screens.
What do I get? / Deliverables
You get a trigger-aware paywall spec with component-level copy, social proof, comparison, CTA, escape hatch, and anti-pattern guards ready to implement or A/B test.
- Trigger-classified paywall screen structure
- Headline, comparison, CTA, and escape-hatch copy recommendations
- Anti-pattern checklist for the specific gate moment
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Paywalls matter most at monetization and retention touchpoints after people are using the product, so lifecycle is the canonical shelf even though pricing and UI work happen earlier. Trial expiry, project limits, and upgrade modals are lifecycle conversion moments—not one-off launch assets—so lifecycle fits better than distribution or pure pricing docs alone.
Where it fits
Define three free projects and paid unlimited tiers before you commit frontend work on the fourth-project gate.
Implement the upgrade screen when create-project returns a limit error, using the six-component layout instead of a one-line alert.
Replace a 2% converting generic trial-expired page with value-led copy, comparison, and social proof.
Redesign a feature-gate paywall for a premium export so the headline sells outcome, not restriction.
How it compares
Use this for conversion-oriented paywall UX and copy frameworks, not for choosing payment APIs or running SEO landing pages.
Common Questions / FAQ
Who is paywalls for?
Solo and indie builders running freemium or trial SaaS who own upgrade messaging and modal or full-screen paywall design without a dedicated growth team.
When should I use paywalls?
Use it in Validate when defining free-vs-paid limits and trial rules; in Build when implementing the fourth-project or feature-gate screen; and in Grow when fixing low conversion on trial-expired or usage-limit flows.
Is paywalls safe to install?
It is editorial and workflow guidance with no runtime access; review the Security Audits panel on this skill’s Prism page before installing any package from the repo.
Workflow Chain
Requires first: product marketing
SKILL.md
READMESKILL.md - Paywalls
{ "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 th