10 templates
Trial timeline, annual first, feature hero, free vs pro, minimal, story pages, limited offer, tiers, reviews and web checkout.
Feature
RevenueDot's paywall builder makes native paywalls for iOS and Android in the format the RevenueCat SDKs already render. Pick one of ten templates, edit it in the visual editor, translate it, and publish it to an offering. Your app shows it with one view, PaywallView, and you ship no app release to change it.
Free up to $10,000 a month in tracked revenue. Works with the RevenueCat SDK you already ship.
Trial timeline, annual first, feature hero, free vs pro, minimal, story pages, limited offer, tiers, reviews and web checkout.
Text, image, icon, stack, package, purchase button, timeline, tabs, carousel, countdown, video and more, all editable.
The server validates each paywall the way the iOS SDK decodes it and refuses to publish one the SDK could not render.
Apps fetch offerings at launch and when they return to the foreground, so a change reaches users within one session.
Steps
Open Paywalls in the dashboard. A paywall belongs to one offering, and an offering has at most one paywall.
Choose a template from the gallery, start from scratch, or describe the app and the offer and let Generate with AI draft it. Filter templates by number of screens, purchase method, packages and tiers.
Choose the offering, add your app name, an accent color, and your Terms and Privacy links, then select Create paywall.
Select any layer or click it in the phone preview. Change text, images, colors, spacing and package cards in the properties panel. Switch between light and dark, and between customers who are and are not eligible for an intro offer.
Open the Localizations tab, add a language and fill in its strings. Empty cells show the default language, so a paywall is never blank.
Select Publish. RevenueDot checks the paywall first and then sends it to apps in the offerings response. Save draft keeps your work private until then.
The gallery has ten layouts. Each one uses your offering's real packages in the preview.
| Template | What it does |
|---|---|
| Trial timeline | Explains the free trial day by day, then shows two plans with yearly selected |
| Annual first | Benefits, then yearly and monthly plans with a savings badge |
| Feature hero | A full-width image, five benefits with icons and plans side by side |
| Free vs Pro | A short comparison table, then two plans |
| Minimal | A headline, your plans and one button |
| Story pages | Three swipeable value pages before the plans |
| Limited offer | A countdown to the end of an offer, one plan, dark theme |
| Tiers | Two tiers in tabs (Plus and Pro) with two plans each |
| Reviews | A rating, a user count and one review, then two plans |
| Web checkout | The button opens web checkout instead of the store sheet (iOS) |
The editor has three columns: layers on the left, the phone preview in the middle and properties on the right. The preview shows the exact JSON your app receives.
{{ product.price_per_period }} and {{ product.relative_discount }}, so prices always show the store's local currency.Add the RevenueCat UI library next to the SDK and present the paywall. PaywallView() shows the current offering's paywall, and you can pass an offering to show another one. Android uses PaywallDialog, React Native uses RevenueCatUI.presentPaywall() and Flutter uses RevenueCatUI.presentPaywall() from purchases_ui_flutter.
import RevenueCatUI
struct HomeView: View {
@State private var showPaywall = false
var body: some View {
Button("Go Pro") { showPaywall = true }
// Shows the paywall you published for the current offering.
.sheet(isPresented: $showPaywall) { PaywallView() }
}
} Everything the editor does is in REST API v2. Check a paywall without saving it with POST /v2/projects/{project_id}/paywalls/validate, which returns errors and warnings. Publishing answers 422 with the first problem when the SDK could not render the paywall.
curl -s -X POST "$REVENUEDOT_URL/v2/projects/$PROJECT_ID/paywalls/$PAYWALL_ID/actions/publish" \
-H "Authorization: Bearer $SECRET_KEY" FAQ
Open Paywalls in the RevenueDot dashboard, choose a template, pick your offering and publish. The paywall is served in the format the RevenueCat SDKs render natively, so your app only calls PaywallView on iOS, PaywallDialog on Android, or presentPaywall in React Native and Flutter. You write no layout code.
Yes. Apps fetch offerings, which carry the published paywall, at launch and when they return to the foreground. A change you publish reaches users within one session. The app needs a RevenueCat SDK version that renders paywall components, which for iOS is 5.83 or later.
Yes, by testing two offerings. Give each offering its own paywall, then run an offering experiment that splits a share of customers between them and reports conversion, revenue and the chance the new offering wins. See the experiments feature page for the steps.
Yes. The Localizations tab holds one set of strings per language. Missing strings fall back to the default language. The SDK also fills in the words around prices, such as month and days, in English, Spanish, French, German, Italian, Portuguese, Dutch, Russian, Japanese, Korean and Chinese.
Not yet. You can build several pages inside one screen with a carousel or tabs. A paywall with separate screens and navigation between them is served for its first screen only, so build multi-step onboarding as a web funnel instead.
Get started
Start free on RevenueDot Cloud, free up to $10,000 a month in tracked revenue, or move an existing RevenueCat app with one line of code.
Already have an account? Sign in · Prefer your own servers? Self-host free