Why FlowPilot paywalls pass review
The compliance rules are enforced in three places, so you do not have to remember them: the Offers blocks carry the right structure, the publish validator blocks a non-compliant paywall, and the SDK enforces the runtime behavior.- Prices and trials come from the device. Plan cards read the live, localized price and trial terms from StoreKit through RevenueCat. Typing a price into paywall copy is a publish error, so what the user sees is always what they will be charged.
- The disclosures are present. The legal footer block renders your Terms and Privacy links and the auto-renewal disclosure, and publishing is blocked if the links are missing.
- Restore is available and user-initiated. A restore action is required in the flow, and the SDK only restores when the user taps, never on its own.
- Trial copy matches eligibility. A “free trial” line is bound to real eligibility, so it only shows to users who are actually eligible.
- Grace-period users are left alone. RevenueCat reports billing-grace and retry users as entitled, so
skipIfEntitleddoes not paywall someone who is already paying.
Pre-submission checklist
The paywall shows the full billed price most prominently
The paywall shows the full billed price most prominently
The price the user will be charged, including the renewal price after any trial, must be the most prominent price on the screen. Bind your primary plan card and CTA to the
paywall price variables, and do not bury the real price under a per-month breakdown.Auto-renewal terms and a trial disclosure are visible
Auto-renewal terms and a trial disclosure are visible
The legal footer covers auto-renewal. If you offer a trial, state its length and the price after it, and keep that copy bound to trial eligibility so it only appears for eligible users.
Terms and Privacy links work
Terms and Privacy links work
Both links must be present and must open. Set them in the paywall’s monetization settings; the legal footer renders them and the validator enforces them.
Restore works
Restore works
There is a restore control, and restoring on a fresh install returns the user’s active entitlement. Test this by deleting and reinstalling with a sandbox account that already purchased.
The reviewer can get past the paywall
The reviewer can get past the paywall
The single most common rejection is a reviewer who cannot complete or dismiss the paywall to see the app. Make sure a sandbox purchase succeeds, or the paywall is dismissible, or your review notes explain exactly how to proceed. See the template below.
Hard paywalls
A hard paywall, one the user cannot dismiss without subscribing, is allowed by Apple. The practical risk is that a reviewer must still be able to evaluate your app. If you ship a hard paywall:- Provide a working sandbox account in your review notes, and confirm a sandbox purchase actually unlocks the app.
- Consider a soft gating mode during review, or a reviewer-only bypass, if a sandbox purchase is unreliable.
- Remember that gating mode is reported to your app on the result. FlowPilot controls the close affordance; your app decides what a dismissal means for feature access.