---
title: "Paywalls"
description: "Show users what an upgrade includes and let them choose a plan."
search:
  tags: ["Features"]
  keywords: ["upgrade screen", "subscription offer", "RevenueCat", "restore purchases"]
---

A paywall is an Experience that presents a paid offer in your app. It brings together the benefits, plan options, and purchase actions, using your Product catalog for the offer and your checkout integration to complete the purchase. You can change the presentation and when it appears without rebuilding those screens in your app.

## Create a paywall

Tell Nuxie what you're selling and how you'd like to present it:

**Create a paywall for unlimited workout plans. Show monthly and annual options, select annual by default, and include restore and close actions.**

> Create a paywall for unlimited workout plans. Show monthly and annual options, select annual by default, and include restore and close actions.

Select the resulting screen on the Canvas to see its **Paywall** capability and Product placements. To turn another screen into a paywall, choose **Add capability → Paywall**.

## Product placements

A placement is a named option on the paywall, such as Monthly or Annual. Each placement connects the screen's offer to a Product. Choose **Add placement**, then open it to set its **Name** and Product.

### Catalog Products and draft offers

**Choose from catalog** selects a Product from the app you're working with. Use **Draft one** when you want to work on the design first: give the offer a name, displayed price, and period to use on the screen.

A draft offer supplies the content for the design. To sell it through the store, replace it with a catalog Product that has the appropriate store identifier.

### Default selection

Turn on **Selected by default** for the plan you want selected when the paywall opens. The placement needs a Product before it can be the default.

### Replacing and removing Products

**Replace** switches a placement to another Product. **Clear product** keeps the placement but removes its Product, while **Delete placement** removes the option itself.

<span id="connect-the-offer-to-your-catalog" />

## Products and access

Connect each purchasable option to a [Product](/docs/monetization/products-and-prices) with the matching store identifier. Bind its price and purchase action to that Product so the offer shown on the screen matches the one the customer buys.

The Product's [Feature grants](/docs/monetization/features-and-entitlements) determine what the purchase unlocks. For example, monthly and annual subscriptions can both grant `unlimited-exports`. Your app checks that Feature for access, regardless of which plan the customer chose.

### App Store offer settings

**Intro offer** determines whether the placement includes the Product's introductory offer for this customer. **Automatic** is the default: StoreKit checks the customer's eligibility, such as whether they've already used an introductory offer.

Choose **Always eligible** to include the configured introductory offer, or **Never eligible** to use the regular terms. These overrides work with a server-targeted Journey, where Nuxie has selected the published offer for that customer. The [purchase integration](/docs/ios-sdk/purchases#product-fields) carries the eligibility decision into checkout.

**Billing** selects how the customer pays for the subscription. **Store default** uses the Product's usual billing plan. **Up front** and **Monthly** select those plans when the store Product and device support them. The displayed price, billing period, and any commitment terms follow the selected plan.

Configure the underlying offers and billing plans in App Store Connect. These placement settings select from those terms; they don't create a trial or a new price. StoreKit supplies the localized Product information in the integrated app.

<span id="choose-who-owns-checkout" />

## Checkout

On iOS, Nuxie uses native StoreKit by default. If your app uses another purchase provider, configure a purchase delegate. The integration steps are covered in [iOS purchases](/docs/ios-sdk/purchases), [Google Play setup](/docs/integrations/google-play), and your [SDK guide](/docs/sdks).

A purchase can complete, fail, or be cancelled. Connect each result to what should happen next. You might close the paywall after completion and keep it open after cancellation so the customer can still choose a plan.

Restore has its own results: purchases restored, no purchases found, or failure. Connect those paths too, so the Experience can respond to what the store returns.

<span id="put-it-at-the-upgrade-moment" />

## Delivery

Use an app event such as `export_limit_reached` to request the paywall at a relevant moment. Its [audience and re-entry settings](/docs/guides/delivery) decide who can receive it and how often it can appear.

The app checks Feature access separately from displaying the paywall. Closing the screen or cancelling checkout returns the customer to the app without granting the paid Feature.

<span id="verify-a-real-purchase" />

## Purchase testing

[Preview](/docs/guides/preview#simulated-purchases) lets you try success, cancellation, failure, and restore paths. Use a store test account in the integrated app for actual checkout, pending payments, restoration, and the access granted by a purchase.

If a Product doesn't load, check the app and store identifier on its placement. If checkout succeeds but access stays locked, check purchase synchronization and the Product's Feature grants. The [iOS purchase walkthrough](/docs/monetization/verify-ios-purchases) covers that setup from end to end.

<span id="improve-the-offer" />

## Experiments

Use [Experiments](/docs/guides/experiments) to compare offers or different presentations of the same offer. Choose a confirmed purchase outcome as the conversion goal when you're measuring sales. A tap on the purchase button tells you someone was interested, but doesn't mean they bought the plan.
