How to Test Onboarding Price Framing Without an App Store Release
·Paywalls

You can test price framing without an app release by moving pricing display logic to server-controlled configuration that your app fetches at runtime. This approach lets you experiment with trial duration messaging, discount presentation, currency formatting, and value proposition framing while keeping the actual SKU prices unchanged in your App Store configuration.
Because Apple and Google only require review when you modify actual in-app purchase products or their metadata in App Store Connect, changes to how you present those prices in your UI fall outside review requirements. Your app requests its display configuration from your server, renders the paywall accordingly, and still processes purchases through StoreKit or Google Play Billing with the official product identifiers.
Why Price Framing Changes Don't Require Store Review
The App Store review process focuses on changes to your in-app purchase products themselves—the SKUs, their official prices, and their metadata in App Store Connect. When you modify how those prices appear in your interface without changing the underlying product definitions, you're operating within implementation details that don't trigger review requirements.
This distinction means you can experiment with presenting a monthly subscription as "$4.99/month" versus "less than $1 per week" or emphasize "7-day free trial" versus "Start your free week" without submitting a new build. The actual subscription product remains identical; only the presentation layer changes based on configuration your app retrieves.
Moving Display Logic to Server Configuration
The technical implementation requires separating your price display code from your hardcoded UI. Instead of static labels in your storyboard or SwiftUI views, your app fetches a configuration object that specifies which messaging template to use, which duration to emphasize, and how to format the price comparison.
Your app still retrieves the actual SKProduct or ProductDetails objects from StoreKit to get the real localized price, but applies server-controlled formatting rules to that data. One variant might show annual pricing divided by twelve with "per month" language, while another shows the full annual price with "save 40%" messaging, both pulling from the same App Store product.
Testing Trial Duration Emphasis
Trial framing significantly impacts conversion rates, yet most teams guess at the optimal presentation rather than testing it. You might experiment with leading with the trial duration versus the post-trial price, or emphasize the trial's value proposition versus its risk-free nature.
Server-side experiments let you test whether "Start your 7-day free trial" outperforms "$29.99/year after trial" as the primary call-to-action. You can measure which framing reduces premature abandonment while maintaining qualified subscribers who understand the pricing. The actual trial configuration in App Store Connect stays constant while you optimize how users perceive and process that information.
Discount and Comparison Messaging Experiments
Presenting savings requires choosing an anchor point—comparing monthly to weekly costs, annual to monthly pricing, or your paid tier to opportunity costs. Each comparison frame activates different decision-making heuristics, but testing these variations through traditional releases creates month-long feedback cycles.
Remote configuration lets you test anchoring effects in days rather than months. You might compare "Save $36 vs. monthly billing" against "Just $2.49/month when billed annually" or "67% more affordable than monthly" to identify which frame resonates with your audience. The underlying annual and monthly products remain unchanged; you're optimizing the comparative context that helps users evaluate options.
Implementing Sticky Assignment with Revenue Attribution
Effective price framing tests require consistent user experience and accurate conversion tracking. Each user must see the same variant throughout their journey, and you need to attribute subscription revenue to the specific variant that drove the purchase decision.
Tools like Spinosis handle sticky variant assignment by maintaining consistent user experiences across sessions while attributing RevenueCat purchase events when the App User ID matches the experiment user ID. This infrastructure lets you shift new traffic toward winning variants while maintaining a holdout group, ensuring you can measure incremental lift from your price framing optimizations without re-releasing your app for each iteration.
Questions
Does changing price presentation violate App Store guidelines?
Modifying how you display existing in-app purchase prices doesn't violate guidelines as long as the actual products and their official prices remain unchanged in App Store Connect. You're experimenting with presentation and messaging, not creating undisclosed pricing or circumventing the in-app purchase system. The guideline restrictions focus on the transaction mechanism and product definitions, not your UI's formatting choices.
How do you handle localization when testing price framing remotely?
Your server configuration should return messaging templates with placeholder variables for currency-formatted prices that your app populates from StoreKit's localized product data. This approach lets you test messaging structure across regions while respecting local currency formatting. You might test different duration emphasis patterns globally while StoreKit ensures each user sees prices in their local currency with appropriate formatting.
What metrics indicate a price framing test has reached significance?
Focus on conversion rate to paid subscription and revenue per user rather than just paywall view-to-start-trial rates, since framing changes can shift trial quality. You need sufficient purchase events in each variant—typically at least 100 conversions per variant for meaningful results. Also monitor early cancellation rates to ensure a higher-converting frame isn't just attracting users who misunderstood the pricing and cancel immediately.
Turn on auto-optimize for one test.
Create a project, install the SDK, connect RevenueCat. Traffic starts shifting on its own.