skills/paywall-upgrade-cro/SKILL.md
When building or optimizing in-app paywalls, upgrade modals, feature gates, usage limit screens, or trial expiration flows. Also when diagnosing why upgrade conversion is low despite product engagement. For public pricing pages use page-cro instead. For non-upgrade popups use popup-cro instead. For form field optimization use form-cro instead. For onboarding-to-aha flows use onboarding-cro instead. For experiment infrastructure use ab-test-setup instead.
npx skillsauth add sharkitect-solutions/sharkitect-claude-toolkit paywall-upgrade-croInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
| Scenario | This skill | Use instead | |---|---|---| | In-product upgrade modal after user hits feature gate | YES | -- | | Trial expiration screen with usage summary | YES | -- | | Usage limit reached, prompting tier change | YES | -- | | Mobile app subscription paywall (iOS/Android) | YES | -- | | Plan comparison shown inside authenticated product | YES | -- | | Public pricing page on marketing site | NO | page-cro | | Generic popup for email capture or announcement | NO | popup-cro | | Optimizing form fields on checkout page | NO | form-cro | | First-run onboarding driving to aha moment | NO | onboarding-cro | | Signup form optimization for new account creation | NO | signup-flow-cro | | Setting up A/B test infrastructure for experiments | NO | ab-test-setup |
Key distinction: this skill handles moments where the user is ALREADY inside the product and has experienced value. The conversion psychology differs fundamentally from cold-visitor pricing pages.
| File | Purpose | When to Load | |---|---|---| | SKILL.md | Trigger diagnosis, upgrade psychology, pricing gotchas, measurement, anti-patterns | Always (auto-loaded) | | platform-compliance.md | Apple App Store review criteria, StoreKit 2 vs 1, Google Play billing lifecycle, EU DSA requirements, regional compliance | When implementing mobile paywalls or preparing for app store submission | | pricing-experiments.md | A/B test design for paywalls, sample size estimation, statistical mistakes, experiment templates, cohort analysis, RPPI attribution | When designing paywall experiments or analyzing test results | | upgrade-copy-guide.md | CTA copy by trigger type, value proposition structure, social proof hierarchy, urgency calibration, dismiss button copy, localization gotchas | When writing paywall copy, CTAs, or value propositions |
Follow this sequence for every paywall optimization request. The order matters.
Key mindset: The highest-converting paywalls don't feel like paywalls. They feel like the natural next step in a workflow the user is already engaged in. If the upgrade prompt breaks flow rather than continuing it, the trigger timing is wrong regardless of copy or pricing quality.
First-match decision table. Use the FIRST row where all signals match.
| Signal pattern | Trigger type | Urgency | Non-obvious timing | |---|---|---|---| | User clicked locked feature 3+ times in 7 days | Feature intent gate | High -- they want this specific thing | Show 2-3 seconds AFTER the blocked click, not during. Cognitive processing time means immediate interruption reads as punishment, not opportunity | | Usage at 80-95% of limit, accelerating consumption rate | Graduated limit warning | Medium -- preview scarcity before hard wall | Show at 80% with soft banner, 95% with modal. Never surprise at 100% -- the "sudden wall" kills trust permanently | | Trial day 10 of 14, user has created stored data | Loss-framed trial reminder | High -- created data = switching cost | Lead with THEIR data ("12 projects, 47 files") not your features. Data hostage anxiety converts, feature lists don't | | Power user (top 20% engagement) on free tier for 30+ days | Habituated free user | Low -- wrong urgency backfires here | These users have rationalized "free is enough." Urgency fails. Instead: show what power users at their usage level DO with Pro (peer comparison) | | User invited 2+ teammates to free workspace | Team expansion signal | Medium -- organizational budget unlocks | Frame as team capability, not individual upgrade. "Your team can..." shifts from personal expense to business tool | | First session, no meaningful actions yet | DO NOT SHOW | None | Any paywall before aha moment has 60-80% dismiss rate AND poisons future paywall response for 30+ days (negative priming) |
The Hook Model inversion (Nir Eyal): showing paywalls at PEAK engagement feels logical but interrupts the reward phase of the habit loop. The user is in flow state -- interruption creates resentment, not purchase intent. Optimal trigger is during the TRANSITION between sessions or between tasks (natural cognitive breaks), not during peak activity. Exception: hard usage limits where the block IS the natural break.
Override rule: If the user's product has a monetization model that doesn't match these patterns (usage-based billing, enterprise contracts, marketplace fees), adapt the trigger logic to their model rather than forcing a freemium/trial pattern match. The signals above assume freemium-to-paid or trial-to-paid models.
The 2-3 second delay rule: when a user clicks a locked feature, their brain needs processing time to shift from "doing the task" to "evaluating a purchase." Immediate paywall display (under 500ms) gets processed as an error state. A brief delay (2-3 seconds) with a subtle transition animation lets the cognitive shift happen naturally. RevenueCat A/B data shows 12-18% higher conversion with delayed presentation vs instant modal.
Nunes & Dreze (2006): people given a 10-stamp card with 2 stamps pre-filled complete at higher rates than those given an 8-stamp card with none filled. Apply to upgrades: show users their "progress toward Pro" based on features they already use. "You're using 4 of 6 Pro features on your free plan -- unlock the remaining 2." This reframes the upgrade from "buying something new" to "completing something started." Effective lift: 15-25% over standard feature comparison.
Loss framing ("you'll lose X") works ONLY when the user has created irreplaceable value:
Ariely's Economist study: a deliberately unattractive middle option pushes selection toward premium. The specific math that practitioners use:
For trial-to-paid conversions: frame the upgrade as MAINTAINING their current experience, not buying something new. "Continue with Pro" outperforms "Upgrade to Pro" by 8-12% in trial expiration contexts. The user's mental model is "I already have this" -- the CTA should reinforce that frame rather than breaking it.
Five proration modes for subscription upgrades/downgrades, each with different billing behavior:
Default to mode 1 for upgrades and mode 4 for downgrades unless business logic requires otherwise.
RevenueCat, Superwall, and Adapty all enable server-side paywall changes without app updates. Key decision factors:
Annual-first default increases annual plan selection by 15-22% (Profitwell data across 2,100+ SaaS companies). The anchoring effect means whichever price users see FIRST becomes their reference point. Monthly-first makes annual feel expensive ("that's $X more commitment"). Annual-first makes monthly feel wasteful ("I'd save $Y per year").
$29 vs $30 matters far less than $99 vs $100. Psychological thresholds in SaaS cluster at $10, $50, $100, $250, and $1000. Crossing a threshold boundary costs 15-30% conversion compared to staying just below. Within a threshold band ($31 vs $39), the effect is minimal (2-4%). Implication: price at $49 or $99, never $51 or $101.
"Per user/month, billed annually" creates 4 common misunderstandings:
Three failures practitioners see repeatedly:
Paywall-to-upgrade conversion rates (industry medians from RevenueCat, Baremetrics, ProfitWell aggregated data):
Upgrade timing follows a bimodal distribution, not a normal curve. Peak 1: within 48 hours of first paywall view (impulse converters). Peak 2: 14-21 days later (deliberate evaluators). The gap between peaks is a dead zone where almost nobody converts. Implication: median time-to-upgrade is far more useful than mean. A mean of 10 days hides the reality that users convert in 2 days or 18 days, rarely 10.
Conversion rate alone is misleading. A paywall that converts 20% but those users churn at 40% within 30 days is worse than one that converts 10% with 5% churn. Track 30-day retention of upgraded users by paywall variant. If a variant shows conversion above 15% but 30-day retention below 70%, the paywall is creating "regret purchases" -- likely through false urgency or misleading feature promises.
Revenue Per Paywall Impression (RPPI) = total revenue from upgrades / total paywall impressions. This single metric captures conversion rate, plan selection (which tier), AND billing frequency (monthly vs annual) in one number. A paywall that converts fewer users but into annual plans can have higher RPPI than one with higher conversion to monthly. Typical RPPI ranges: $0.02-0.08 for freemium SaaS, $0.15-0.50 for mobile apps with hard paywalls.
| Name | Pattern | Why it fails | Quantified impact | |---|---|---|---| | The Premature Ask | Paywall before aha moment | 60-80% dismiss rate, negative priming poisons future paywall response for 30+ days | Users shown premature paywalls convert 40% less on subsequent paywalls vs users who saw no early paywall | | The Hostage Screen | Blocking critical workflow with no escape route | Drives support tickets and app store complaints, not upgrades | 1-star reviews mentioning "paywall" or "forced upgrade" increase 3-5x | | The Feature Fog | 20+ features in comparison table | Cognitive overload causes decision paralysis -- users defer instead of choosing | Reducing features shown from 15+ to 5-7 most relevant increases conversion 18-25% | | The Silent Paywall | Lock icon with no explanation of WHY this feature is paid | Feels arbitrary and punitive, user thinks it should be free | Adding a single sentence explaining the value ("used by teams processing 1000+ items/month") lifts conversion 10-15% | | The Guilt Trip Close | Manipulative dismiss text ("No, I don't want to grow my business") | EU Digital Services Act compliance risk, brand damage, social media backlash potential | Short-term 2-3% lift, but NPS drops 8-12 points and support complaints increase | | The Frequency Nag | Same paywall shown 3+ times per session | Conversion drops 40% after 3rd impression in same session, annoyance compounds | Cap at 2 per session with 24-hour cooldown after dismiss. Escalating urgency across sessions (not within) | | The Bait Downgrade | Making free tier progressively worse to force upgrades | Accelerates churn instead of conversion -- users leave rather than pay when they feel manipulated | Free-tier degradation correlates with 2-3x increase in churn vs stable free tier with clear upgrade path |
Verify before shipping any paywall to production:
| Check | Why | Fail = | |---|---|---| | Close/dismiss button visible and accessible | Apple/Google reject hidden or delayed close buttons | App store rejection | | Subscription terms shown (price, duration, renewal) | Legal requirement on iOS, Google Play, and EU markets | App rejection or legal violation | | "Restore Purchases" accessible on iOS | Apple specifically checks during review | App rejection | | Paywall frequency capped at 2 per session | Conversion drops 40% after 3rd impression | Annoyance-driven churn | | Loss framing only for users with stored data | Loss framing without investment backfires | Lower conversion than no paywall | | RPPI tracking implemented before launch | Cannot optimize what you cannot measure | Flying blind on ROI | | Platform-specific billing tested end-to-end | StoreKit 2 / Google Play Billing edge cases | Failed payments, refund storms | | Dismiss text is neutral ("Not now" or "Maybe later") | Guilt-trip text violates EU DSA and damages NPS | Legal risk and brand damage |
development
When the user wants help with paid advertising campaigns on Google Ads, Meta (Facebook/Instagram), LinkedIn, Twitter/X, or other ad platforms. Also use when the user mentions 'PPC,' 'paid media,' 'ad copy,' 'ad creative,' 'ROAS,' 'CPA,' 'ad campaign,' 'retargeting,' or 'audience targeting.' This skill covers campaign strategy, ad creation, audience targeting, and optimization.
testing
--- name: using-sharkitect-methodology description: Use when starting any conversation in a Sharkitect workspace OR before any task involving NEW pricing, positioning, proposal, strategy, plan-execution, or schema-design work — mandates invocation of Sharkitect-specific methodology skills (pricing-strategy, marketing-strategy-pmm, smb-cfo, hq-revenue-ops, executing-plans, brainstorming) under the same anti-rationalization discipline as using-superpowers. Documentation has failed 4 times across H
testing
Use when user says 'end session', 'wrap up', 'stop for the day', 'done for today', 'close out', 'save session', 'wrapping up', or invokes /end-session. Runs the full 9-step end-of-session protocol: resource audit, MEMORY.md update, lessons capture, plan status, pending items, workspace checklist, .tmp/ audit, git commit+push, Supabase brain sync, session brief, summary. Final step schedules a detached self-kill of the current session ONLY (3s delay) so the window closes cleanly. Other claude.exe processes (active workspaces) are NOT touched -- orphan cleanup is handled separately by Claude-Orphan-Cleanup-Hourly with proper age safeguards. Do NOT use for: mid-session quick saves (use session-checkpoint), skill syncing (use sync-skills.py), brain memory queries (use supabase-sync.py pull), document freshness reviews (use document-lifecycle), resource gap detection (use resource-auditor).
testing
Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague attributions, em dash overuse, rule of three, AI vocabulary words, passive voice, negative parallelisms, and filler phrases.