Skip to content

OfferBanner for launches

Your discount code stops working when your cart closes, because Stripe enforces it.

You run four or five launches a year, the same shape every time: doors open, early-bird price, the price steps up on a named day, the cart closes Sunday night. The banner, the emails and the discount code all have to agree about when that is. What goes wrong is that they disagree by a few hours, and someone gets the early-bird price on Monday.

The code printed on your banner is a real Stripe promotion code in your own account, created when the campaign starts and expired in Stripe when it ends. Not a cookie, not a redirect. If a customer enters it after the cart closes, Stripe refuses it, so you do not have to.

01The mechanism

The countdown reads the discount code’s expiry

When a banner has a discount code attached, the countdown reads that code’s expiry from Stripe, and any date typed into the design is ignored. The countdown ends at the code’s actual expiry.

A banner that carries a code has no separate deadline of its own. And where the countdown is per-visitor, OfferBanner will not save a banner whose countdown and whose code expiry are two different numbers, so there is no setting that lets a banner with a code count down to a deadline the checkout will not honour.

The code is in your Stripe dashboard with its expiry on it. Enter it at your own checkout a minute after the close and Stripe refuses it.

02The launch

Early bird to full price, scheduled in one step

A launch is not a holiday. A holiday is a date somebody else picked; a launch is a sequence you repeat. Built by hand it is two banners, two offer plans, two date windows and four dates typed twice each. The two values that have to match are the two nobody checks: when the early-bird code expires and when the full-price window opens.

Early birdBIRD-7QK2

Mon 9:00 AM → Thu 11:59 PM, your time
30% off · expires at 11:59:59.999 PM Thursday

Full priceLAST-3M8V

Fri 12:00 AM → Sun 11:59 PM, your time
15% off · expires when the cart closes

You enter three dates and two percentages. You get two banners, two date windows and two Stripe promotion codes. Early bird ends one millisecond before full price begins, so there is no minute when both codes work and no minute when the site advertises nothing.
  1. Type three dates and two percentages

    Open the launch drawer on your site’s calendar: the name of the launch, when doors open, the day the price steps up, when the cart closes, and the discount at each step. Each date takes a time of day in your timezone: “Friday 11:59 PM” can be typed directly, with no conversion.

  2. Press create

    Two banners are designed, two date windows are scheduled back to back, and two offer plans are attached. The early-bird code’s expiry and the full-price window’s start are the same instant, because they are the same number, written once and read twice.

  3. The codes appear in your Stripe account

    A window opening inside the next two days creates its code straight away. A launch booked for November creates it 48 hours before doors open, which is deliberate: a promotion code sitting live in your account since August is a code somebody can guess and use in August. It exists before you need to write an email about it, and not months before.

    Look in your Stripe dashboard under Coupons and Promotion codes. The coupon is labelled so you can tell which banner it belongs to, the promotion code is the exact string shown on the banner, and its expiry is the instant your cart closes.

  4. Extend the cart and the code is updated

    Every launch gets extended. Move the window and the promotion code behind it is deactivated and created again against the new close date, so the banner, the countdown and the checkout all change in one edit. Without this, the banner would say “one more day” while the code had already expired at the old time.

03No end date

Per-visitor deadlines, enforced at checkout

For a mini course with no end date, you want the offer to end a fixed number of hours after this visitor found it. Most tools do that with a cookie and a timer: clear the cookie and the deadline is gone.

Here, the visitor presses the gift badge and a single-use promotion code is created for that visitor alone, with an expiry of their claim time plus the hours you set, written onto the Stripe object rather than into their browser. The countdown they see and the expiry their checkout enforces are the same number of hours, because the banner will not save if the two disagree. The claim is remembered, so coming back tomorrow shows the same code and the same countdown, still running; when it reaches zero, the banner says the offer has ended rather than issuing a new code with a new deadline.

Two limits apply and the earlier one wins: the visitor’s own hours, and your campaign’s end date. A 72-hour claim on a campaign that closes tomorrow expires tomorrow. A code never outlives the campaign that advertised it.

04Your emails

Subscribe to your launch schedule as a calendar feed

The mismatch happens when you write the emails. You schedule a week of broadcasts by hand, days in advance, against whatever your launch calendar says; if that calendar and the code disagree, the email is already wrong before it sends.

So each site publishes its schedule as a calendar feed: an ICS URL with a token in it, which you subscribe to once from Google Calendar, Apple Calendar or any other app that supports ICS. There is one event per scheduled window, with the banner’s name, the code, the discount and whether the code has been created yet, shown by your calendar in your own timezone. You write “the code expires Friday at 11:59” while looking at the entry that says so.

It is read-only and refetched by your calendar’s servers, not your browser, so the token in the URL is the whole of the authentication. Treat the link like a password; it can be reissued.

05Comparison

Compared with Deadline Funnel

Deadline Funnel is the tool most launch creators are comparing this to, and it is good at the thing it was built for. The difference is where the deadline is enforced — on the page a visitor lands on, or on the code at checkout — and everything else follows from that.

Deadline FunnelOfferBanner
PriceSubscription. Published plans run from $39/month to $199/month as of 2026, billed for as long as you use it.$49 once, for the account. No renewal, no per-launch fee.
What ends the offerA timer, plus a redirect: when the visitor’s deadline passes, the page or link they arrive on is sent somewhere else. The enforcement is on the page.expires_at on a Stripe promotion code. The enforcement is at checkout, on Stripe’s side of the transaction.
Discount codesNot created for you — you make the code in your store or payment processor and it stays valid on its own schedule.Created in your own Stripe account when the window is booked, expiring at the instant the window closes.
Campaign calendarCampaigns are configured one at a time; a per-site schedule of booked windows is not something they document as of 2026.One calendar per site. Schedule the whole year in one sitting, each entry naming a banner, a date window and optionally the countries it runs in. Available as an ICS feed.
Per-visitor deadlinesYes — this is the product they are known for.Yes, and each visitor’s deadline is written onto their own single-use Stripe code rather than stored in a cookie.
If the vendor goes awayThe deadline logic runs on their service, so the deadlines run for as long as the service does.The codes are objects in your Stripe account and keep working. The banner stops appearing.
Their column is drawn from Deadline Funnel’s own published pricing and documentation as of 2026 and describes what they say about themselves; where we could not confirm something, the cell says so rather than assuming. Prices and features change — check theirs before you cancel anything, and tell us if a row here has gone stale.

06The price

Why one payment is enough, and what happens if we shut down

One payment of $49 is a low price, and the reason is structural rather than generous. Your codes live in your Stripe account, so there is almost nothing for us to run per customer. The banner is a small script served from the edge; the coupons, the promotion codes and the redemptions are objects in your account, on Stripe’s infrastructure.

That also answers what happens if we shut down: your codes keep working, because they are in your Stripe account, not ours. The banner stops appearing on your site, and your November launch still has a working early-bird code with the right expiry on it.

There is no refund window because there is no need for one: all sales are final, and you can build your whole launch on the Free plan and see it on the calendar before you pay. The pricing page spells that out.

07Questions

Common questions

Which timezone do the dates use?

Yours, to the minute. You pick a window edge as a day plus a time of day, in the timezone of the browser you are picking it in. It is converted to a UTC instant before it is sent, and the panel shows the instant it is about to store, so you can check the conversion. “Ends Friday 11:59 PM Eastern” can be entered, and the code’s expiry is that same instant.

Everything is stored in UTC, and the calendar grid is drawn in UTC days, so an entry on the 24th is on the 24th for everyone. The conversion happens when you set the date, where you can see it, not when the page is displayed, where you cannot.

Exactly what Stripe permissions do you take?

A restricted key with write access to Coupons and Promotion codes, and nothing else. You create it in your own Stripe dashboard, so the scopes are chosen by you and visible to you on the key’s page forever.

It cannot charge a card, read a customer, issue a refund or move money, because those are separate permissions you never granted. We store it encrypted and show you only its last four characters afterwards. You can revoke it in Stripe at any time: the banner keeps running, and only code creation stops.

Can somebody farm my per-visitor codes?

Here are the limits. Every code we create is single-use, forced at max_redemptions: 1 by the server, so a code posted to a coupon site has already been used.

Claims are limited to 5 per IP address per banner per hour, checked before anything reaches Stripe. The limiter fails closed: if it cannot answer, nobody gets a code. The claim endpoint also checks that the request came from the site the banner is installed on, so nobody can create codes in your Stripe account from a page of their own. There is also a daily cap per banner — 200 by default, and you can change it — after which the banner says today’s codes have all been claimed rather than handing out a code that will not work.

Does $49 include features you release later?

Yes. That is what the licence covers. One payment covers unlimited live banners, every effect, scheduled design changes and every paid feature after this one. The price goes up when the next paid feature is released; the price you already paid does not. The pricing page lists both plans in full.

Can I run a launch on the free plan?

Mostly yes. A launch ladder is two dated windows — early-bird price, then full price — and the free plan runs both: dates are free, and back to back windows never overlap, so the one-banner-at-a-time limit is never reached. Book them, and each takes the bar on its own day. What the free plan will not do is make the code: a discount that expires when the early-bird window closes has to be created on your Stripe account, and that is Pro. On free you type in a code you made yourself and turn it off in your own checkout. Pay the $49 before your cart opens and the code is created and retired for you too. That is one payment against one launch, and it does not come back next launch.

Do I need Stripe at all?

Only to have the codes made for you. Without a key you can still run every banner, build the whole calendar, type a discount code in by hand and count the clicks; the banner accepts any code. What you lose is the subject of this page: only Stripe can make a code stop working when your cart closes, and having OfferBanner create that code and retire it on the day is part of Pro.

Put your next launch on a calendar

Free plan · No card