Skip to main content
Solved

Using a single paywall/offering for different text or imagery

  • March 4, 2026
  • 3 replies
  • 42 views

Forum|alt.badge.img

I have a scenario where I would like to have one Offering and Paywall general design, but be able to customize the text and header imagery depending on some user chosen option or paywall trigger.

Examples:

  • The user has chosen a preference (favorite type of sport). I would like to display an image related to that specific sport for him.
  • The Paywall trigger is specific to a feature. User clicks a locked feature (ie. offline-mode, dark-mode, etc). I would like to display a specific image and text header for each of these.

In this example, the header differs for those cases, but the rest of the Paywall visual and structure is the same. Offering/Package choices, Feature list, boutons in the footer, etc.
All these options also share the same offering for example.

In my understanding, right now, with the 1:1 Offering/Paywall model, it seems that I would need to have a dozen different Offerings and Paywalls for this. 
Meaning that changing the Offering choices, or changing a logo or colour in my Paywall would need to be done across all of them. It would be time consuming and prone to errors.

I’m wondering if I fully understand the options that are available? Maybe I’m missing another mechanic to make this work?


In my ideal scenario, I would create a Paywall design, where some fields can be dynamic. Text, images, etc.
Even better, this one Paywall design would not be linked to any Offerings.
Displaying a paywall would follow these steps:

  1. Choose a Paywall base design.
  2. Choose an offering. (this changes the available packages, but not visual design)
  3. If necessary, change some dynamic content, to personnalise the Paywall. (Header text, Header image)

Another option would be to have re-usable building block across different Paywalls. Not as flexible, and would still need a lot of Offerings, but would help with maintenance.

Best answer by guilherme

Hey ​@JFBeaulieu - the limitations you described are real with the current model. But there are tools available today (and more coming soon!) that address exactly this.

The main thing to look at right now is Custom Variables. These let you pass dynamic text into your paywall at presentation time from your app, using the {{ custom.variable_name }} syntax. So for your use case, you could have one paywall, one offering, and pass in different header text based on the trigger or user preference.

You'd create a custom variable in the paywall editor (e.g., header_text), give it a default value, then pass the actual value from your app when presenting the paywall. The docs walk through the setup here: https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls/variables#custom-variables

For the image swapping part (showing a football image vs. a basketball image based on context), we have an upcoming feature that will allow you to conditionally show, hide, or override paywall components based on conditions (including the value of a custom variable). This is coming soon and will work together with Custom Variables to get you closer to that ideal scenario you described.

On the reusable building blocks thought you added, true reusable components (edit once, update everywhere) are on the roadmap but not yet available (nor any ETA on these as it stands). For now, copy/paste between paywalls is the closest thing. But for your specific use case, Custom Variables today + the upcoming conditional features should remove the need for all those duplicate paywalls in the first place!

3 replies

guilherme
RevenueCat Staff
Forum|alt.badge.img+6
  • RevenueCat Staff
  • Answer
  • March 6, 2026

Hey ​@JFBeaulieu - the limitations you described are real with the current model. But there are tools available today (and more coming soon!) that address exactly this.

The main thing to look at right now is Custom Variables. These let you pass dynamic text into your paywall at presentation time from your app, using the {{ custom.variable_name }} syntax. So for your use case, you could have one paywall, one offering, and pass in different header text based on the trigger or user preference.

You'd create a custom variable in the paywall editor (e.g., header_text), give it a default value, then pass the actual value from your app when presenting the paywall. The docs walk through the setup here: https://www.revenuecat.com/docs/tools/paywalls/creating-paywalls/variables#custom-variables

For the image swapping part (showing a football image vs. a basketball image based on context), we have an upcoming feature that will allow you to conditionally show, hide, or override paywall components based on conditions (including the value of a custom variable). This is coming soon and will work together with Custom Variables to get you closer to that ideal scenario you described.

On the reusable building blocks thought you added, true reusable components (edit once, update everywhere) are on the roadmap but not yet available (nor any ETA on these as it stands). For now, copy/paste between paywalls is the closest thing. But for your specific use case, Custom Variables today + the upcoming conditional features should remove the need for all those duplicate paywalls in the first place!


Forum|alt.badge.img
  • Author
  • New Member
  • March 10, 2026

Hey Gui, Thanks for the answer. It’s some great workarounds for now. Not quite what I would like, but I’ll check with my developper if we can make this work, thank you.

Does the image or video block support an external source url that could be a Custom Variable? I’ll have to double check. That would be nice, and probably easier to work with than duplicating/hiding content. But that could work too. Just wondering how it will look in the paywall editor.

Nice to hear for the reusable blocks, that would be a neat addition.


I think Custom Variables + the upcoming conditional features will help a lot to reduce the amount of paywalls and offerings, but I’d still like to see a separation of the link between those at some point :)

 

Thanks again.


guilherme
RevenueCat Staff
Forum|alt.badge.img+6
  • RevenueCat Staff
  • March 13, 2026

Hey ​@JFBeaulieu!

Custom Variables currently only support text content, so image/video blocks don't accept a URL passed through a custom variable as their source. The image source is set inside the editor itself.

For dynamic images to work like that, the workaround would be to add all the image variants you need as separate components in the paywall, and then duplicate/manage visibility manually (which is not ideal, we know).

The conditional feature I mentioned in my previous reply however (to show/hide components based on custom variable values) is coming very soon. Once available, you'd be able to add all your images as separate components and then automatically show only the right one based on what your app passes in - for your sports example, you could add a football image and a basketball image, and a condition controls which one displays based on a variable like sport_type.

Combined with Custom Variables for the text, that will get you to a single paywall + single offering that swaps both text and images based on context, which is pretty close to your ideal scenario.