For the complete documentation index, see llms.txt. This page is also available as Markdown.

Seasonal campaigns

Ship a time-bound campaign — Black Friday, World Cup, app anniversary — by activating and cancelling a dashboard campaign on a planned calendar.

Use this when the promotion has a clear start and end date and you want to avoid shipping two app releases around it. Don't use this when the offer is permanent; evergreen offers belong in the default paywall, not a campaign.

Goal

Seasonal promos historically mean a rushed release the week before, a second release to take the banner down, and a third if the end date slips. This recipe replaces the release cycle with a single dashboard campaign that an operator activates on the start date and cancels on the end date — no code ships between the two dates.

Setup

In the dashboard

  • Create a campaign bf-2026-annual-50off and keep it in Draft state while you prepare it.

  • Trigger: session start, plus a second campaign triggered on CheckoutOpened so the user sees the banner both passively and at intent.

  • Audience: free users in markets where the offer is valid (country in ["US", "CA", "GB", "DE"]).

  • Action: fire yourapp://paywall/black-friday pointing to a holiday-themed paywall with the 50%-off annual SKU.

  • Frequency: once per session, capped at four sessions total.

  • On the planned start date, move the campaign to Active. On the end date, move it to Cancel. The default paywall campaign stays running throughout and reclaims every session once the seasonal campaign is cancelled.

In the app (engineering hand-off)

  • Ship the seasonal paywall screen in a release before the start date. Remote scheduling cannot introduce new screens.

  • Ensure the correct SKU is approved in App Store Connect and Google Play well before the start date.

  • Register the yourapp://paywall/black-friday deeplink.

  • Set region on the user so targeting works:

    await Amply.setCustomProperty('country', deviceCountry);

How it runs

  1. Before November 24, the campaign sits in Draft. The default paywall runs normally.

  2. On the morning of November 24, the operator moves the campaign to Active. Users in the target markets who open the app from then on see the seasonal paywall.

  3. During the window, users can hit the paywall up to four times across sessions. After that, the frequency cap silences it and the default paywall returns for that user.

  4. A user outside the target countries never matches. They continue to see the default paywall throughout.

  5. On December 2, the operator moves the campaign to Cancel. The default paywall immediately reclaims every session.

  6. The team reviews the campaign report in the dashboard and decides whether to re-run the same campaign with tweaks for Cyber Monday next year.

Metrics to watch

  • View-to-purchase rate during the window versus the default paywall in the same window a year prior.

  • Share of revenue from the seasonal SKU — cannibalization matters. If monthly revenue drops as annual-50off rises, check whether you pulled forward demand.

  • Post-window cancel rate at day 30 and day 60. Discount-led cohorts often churn earlier.

  • Regional split. If one country converts dramatically worse, the creative or the localization is off.

Last updated