Discounts
RevenueCat Web Billing supports discounts: a flexible way to reduce the price of subscriptions and one-time purchases, with shareable customer-facing discount codes. This page covers how Discounts work in Web Billing, including how they fit alongside standard pricing, trials, and introductory offers.
A discount applies a percentage-based reduction in price when a customer purchases your product. It applies for the duration you configure, then reverts to the base price.
You control how each discount applies — which products it covers, how long it lasts, and which customers are eligible.
Discount approaches
We offer two different features for discounting Web Billing products:
- Introductory Offers allow you to configure a lower price (per currency) for a period at the beginning of a subscription (see Product Setup)
- Discounts offer a more flexible way to apply percentage-based discounts across multiple products, with shareable customer-facing discount codes (covered on this page).
Compatibility
| Feature | Compatibility |
|---|---|
| Web SDK | ✅ Supported |
| Web Purchase Links | ✅ Supported |
| Web Paywalls | ✅ Supported |
| Redemption Links | ✅ Supported |
| Charts & Analytics | ✅ Supported (discount code filters coming soon) |
| Free trials | ⚠️ Cannot be combined with discounts (see Limitations) |
| Introductory offers | ⚠️ Cannot be combined with discounts (see Limitations) |
| Web Funnels | ❌ Not yet supported (see Limitations) |
Limitations
Discounts don't yet support the following:
- Free trials and introductory offers can't be combined with discounts. Any applied discount overrides them. Don't combine free trials or introductory offers with discounts.
- Fixed-amount discounts. Only percentage-based discounts are supported.
- Bulk-adding or generating discount codes in the dashboard. Add codes one at a time, or create them in bulk via the RevenueCat API.
- Using discounts in web funnel purchases. Discounts can't be applied to purchases inside a Web Funnel. Support is coming soon.
Creating discounts
In the RevenueCat dashboard
To create a discount, go to the Web overview in your RevenueCat dashboard, and choose Create discount, then complete the following fields:
- Name: The customer-facing name for the discount. This is presented in the checkout, on invoices and anywhere else the discount is represented.
- Identifier: Internal-only field, used to identify discounts in the dashboard
- Percentage: The percentage amount to discount the price by. Any value from 1% to 100%.
- Apply to: Limits the products that the discount can apply to. This can be used to make sure specific products cannot be discounted, or specific discounts can only apply to certain products.
- Duration: Choose between Once (the discount applies only to the initial purchase), Multiple months (applies to every invoice created within a fixed number of months), Forever (applies indefinitely).
- Eligible customers: Choose whether the discount should apply to everyone, or only customers who didn't yet make a purchase or have a subscription.
- Codes: Add one or more customer-facing codes that can be used to redeem the discount (see Discount codes).
Customer eligibility can't be checked when using Redemption Links to handle anonymous purchases. If it's important to restrict eligibility for discounts, your purchases should use identified app user IDs, which allow us to assess the purchase history for a user.
In the RevenueCat API
You can create and manage discounts and discount codes via the RevenueCat API. See the API documentation.
Discount codes
Discount codes are individual codes (e.g. BLACKFRIDAY20) that your customers can use to redeem a given discount. You can distribute them by:
- Linking directly to a checkout with a code pre-applied (e.g. from an email campaign)
- Sharing the code and asking users to enter it in the checkout (e.g. through a video or podcast campaign)
- Sharing a web purchase link configured to allow the code
A discount code can be used to redeem a discount in a number of ways:
- By including a discount code as a URL parameter when linking to the checkout
- By providing a discount code when initializing a purchase in the Web SDK
- By having customers enter the discount code in the checkout
Discount codes are case-insensitive — BLACKFRIDAY20 and blackfriday20 resolve to the same code.
Discount code benefits
Discount codes can be useful because they give you control over the distribution of discounts (each code can be independently disabled). This means that if a specific code leaks or is shared more widely than you'd like, you can prevent further use.
They can also be used to segment reporting. For example, different partners in a campaign can have unique discount codes, allowing you to report on revenue and other metrics per partner.
Managing discounts
Manage existing discounts from the Web overview in your RevenueCat dashboard. Click View all in the Discounts section to see the full list, and filter by Active or Inactive to narrow it down.
Deactivating a discount
Deactivate a discount to prevent any further redemptions. Use this to retire a campaign, stop a leaked code from being redeemed, or take a discount out of circulation without deleting its record.
To disable only a specific code (for example, a single partner's code that has been shared more widely than intended), disable the individual code on the discount instead — the discount stays redeemable through its other codes.
Using a discount
Once you've created a discount, you can apply it to a customer's purchase in one of the following ways:
Applying a discount in a web purchase link via URL parameter
Prerequisites:
- A configured web purchase link (see web purchase links)
- A configured discount which applies to one or more of the products in your offering
- A discount code for your chosen discount
Steps:
- Go to the Web overview page for your project, in the RevenueCat dashboard
- Select the web purchase link
- Click Share URL, and copy either the sandbox URL (for testing) or production URL (for customer use)
- append
?discount_code=<YOUR_CODE>to the copied URL
When loading the URL with the discount code specified, any relevant discounts will be reflected in the package selection and checkout pages for a given product.
Configuring discount codes on a web purchase link
Each web purchase link has its own controls for how discount codes are handled. From the web purchase link's settings:
- Allow discount codes on this link: Enables discount-code redemption on the link. When off, codes attached via URL parameter, checkout input, or auto-apply are rejected.
- Show the discount code input in the checkout: Adds a customer-facing Promo code field to the checkout. Leave this off if you aren't actively running a discount campaign — exposing the field can hurt conversion when most customers don't have a code.
- Automatically apply a discount code: Pre-applies a specific code for every customer who lands on the checkout through this link, without needing the customer to enter it or share a URL parameter. Useful for evergreen partner links or static campaign URLs.
These controls layer on top of each discount's own eligibility and product rules. A customer who isn't eligible for the discount won't receive it, even when the code is auto-applied.
Entering a discount code in the checkout
When Show the discount code input in the checkout is enabled on a web purchase link, customers see a Promo code field in the checkout. The customer enters a code and clicks Apply; if the code is valid and the customer is eligible, the discount is reflected in the price summary and applied to the purchase.
The customer can remove the discount from the same field to return to the base price.
Discounts with express checkout and wallet payments
To enter a discount code, the customer needs to reach the full checkout. Express checkout buttons on a paywall — for example, Apple Pay or Google Pay — take the customer straight to the wallet's payment sheet, skipping the page where the Promo code field appears.
To enter a code, the customer should choose Pay with card from the paywall instead, which routes them through the full checkout.
Auto-applied discounts work in any checkout flow. If the web purchase link is configured to Automatically apply a discount code, and the customer is eligible and the product qualifies, the discount applies to wallet and express checkout payments without the customer doing anything. Use this configuration when you want discounts to reach customers who pay through Apple Pay, Google Pay, or another wallet method.
Discounts in receipts and the customer portal
After a customer completes a purchase with a discount, the discount appears in:
- The redemption confirmation summary.
- The purchase receipt email and downloadable PDF receipt.
- The Customer Portal, alongside the corresponding payment record.
The discount's Name (the customer-facing name you set when creating the discount) is what appears in these surfaces.
Discounting logic and subscriptions
When a discount is applied to a subscription, it applies for a specific duration, starting from its redemption. The duration of a discount is independent from a subscription's cycle.
A discount applies to every invoice (and charge) created during its active period. There's no proration or consideration of the subscription cycle in the discounting logic.
For example:
- You create a 50% discount with a 3-month Duration.
- When applied to a monthly subscription product, the first 3 monthly payments are discounted by 50%.
- When applied to a yearly subscription product, the initial payment is discounted by 50%, with no further discounted charges. This effectively discounts the first year by 50%.
Align discount durations with your products' billing cycles to avoid confusing behavior when discounts apply across different products.
For discounting that's tied to a product's billing cycle, use Introductory Offers. They're configured as part of a web product's pricing.