Give your customers
offers on a timer.

A first-hour price. A Black Friday window. Early-bird seats. A closing date. Set the deadline once and the countdown, the price and the checkout all move together.

Start your 14-day free trial

No credit card required. No coding required.

Make the work you want to be known for.

$299$149while the timer runs

Tiers

Stack the deal. One promo, several prices.

Half price for the first hour, early-bird until the date, full price on the day. Each tier has its own price and its own page. First active tier wins; expired tiers fall through to the next.

yoursite.com/summit-fa
Creator Summit 2026Three days. Forty sessions. Every replay.40 speakers, live and on replay
50% off ends in
00hrs
29min
47sec
$99$199your first-hour price
Enrol at $99

What Jane sees, 12 minutes after enrolling

Price locks when the checkout session starts. If a tier expires mid-payment they still get the price they started with.

Countdowns

Your brand's clock, on every surface.

Pick a style, then edit every colour, font and label. One design renders on the page, at checkout and as a GIF in email.

Offer ends in

00000000
Cleanvariant: clean

Offer ends in

00DAY00HRS00MIN00SEC
Boxedvariant: boxed
Your cart expires in000000Seats are released back to the waitlist.Checkout now →
Urgentvariant: urgent
4days

Offer ends in

Minimalvariant: minimal

Offer ends in

00DAY00HRS00MIN00SEC
Neonvariant: neon

Offer ends

Fri 19 Sep, 5:00 pm
in 4 days 14 hrs
Purplevariant: purple
Doors close in3 × $99 today, then one payment only
000000Split my payment
Sunsetvariant: sunset

Early bird ends

00days00hrs00min00sec
Mintvariant: mint

Live now

00DAY00HRS00MIN
Oceanvariant: ocean

Offer ends in

00d00h00m
Slatevariant: slate

Flash sale ends

00000000
Cherryvariant: cherry
VIP pricing ends00DAY00HRS00MIN00SEC
Goldvariant: gold

Subscriptions close in

4 days, 14 hours and 22 minutes

Papervariant: paper

$ countdown --tick

[00000000]
Terminalvariant: terminal
$149$299
Price rises in00000000
Rosevariant: rose

Launch pricing ends

00000000
Get 40% off
Midnightvariant: midnight

Email

Send email reminders with the same clock.

Your page and your emails count down together, and every link lands on the live price. Use either, or both.

WebsiteLive on the page
portfolioworkshop.com/founding
Portfolio WorkshopOverviewCurriculumFAQEnroll
Your first-hour price ends in02HRS13MIN41SEC

Make the work you want to be known for.

$299 $149 first-hour price

Get my seat · $149
  • 6 weeksTwo live sessions a week
  • Portfolio review1:1 with Mara at the end
  • Lifetime accessRecordings and templates
© Portfolio WorkshopTerms · Privacy
EmailLive in the inbox
InboxSent with MailerLite
Your first-hour price is held, JaneInbox
PW
Portfolio Workshop <hello@portfolioworkshop.com>to me · 9:02 AM

Hi Jane, thanks for signing up. Because you joined in the last hour the founding price is yours, $149 instead of $299, held while this clock runs.

Your first-hour price ends in02HRS13MIN41SEC
Claim your seat · $149

See you inside,
Mara

ReplyForward

Works with every email platform

  • MailerLite
  • Kit
  • ActiveCampaign
  • Klaviyo
  • Mailchimp
  • HubSpot
  • Drip
  • Flodesk
  • Beehiiv
  • Customer.io
  • Intercom
  • SendGrid
  • Postmark
  • Custom SMTP

What you can do

Black Friday, launch week, evergreen. One promo, whatever the occasion.

Set the deadline once. The countdown, the price and the checkout all move together.

  • Fixed date

    Black Friday window

    One sitewide deadline, the same for everyone. The price and the coupon die at the same second the banner does.

  • Fixed date

    Launch week

    Doors open Monday, close Friday at 9pm. Founding price while they are open, standard price after.

  • Per person

    Evergreen funnel

    Every subscriber gets their own window from the moment they first visit. A March lead sees what a January lead saw.

  • Opt-in window

    Tripwire

    One price for the thirty minutes after the welcome email opens. It never comes back, and they know it.

  • Fixed date

    Webinar or event

    The offer closes 48 hours after the live session. The same countdown ticks in the replay email and on the checkout.

  • Fixed date

    Cohort close

    Enrolment shuts on a date. After that the same link lands on the waitlist page, not a dead offer.

  • First N buyers

    Early-bird seats

    The first hundred get the founding price. Seat 101 sees the next tier, with the count on the page.

  • Every year

    Annual sale

    Same dates every year. It switches itself on, runs, and switches itself off without anyone remembering.

Built into the checkout

Not a widget on top. The price itself.

A countdown script can only count down. Here the active tier picks the price the checkout charges, and bumps, upsells, coupons and split-pay all still work on top of it.

On top of the tier

Bumps, coupons and split-pay still work.

The tier only decides the base price. Everything else in the checkout carries on around it, the same as any other order.

  • Stacks in the right order

    Coupons and bumps apply on the tier price. The buyer sees one total, and it is the one they pay.

  • Any checkout, still

    Using Stripe Checkout, ThriveCart or Shopify? Ask for the tier and pass its price along. Plandalf is the promo brain either way.

Order summarySummit 2026 · hosted checkout
No promo
  • Summit ticketStandard price
    $199.00
  • Add the workshop recordingsOne-time bump, offered after the tier price
    +$29.00
  • LAUNCH10Coupon, stacks with the tier
    -$10.00
Total due today
$199.00
Pay $199.00
A standard order, before the promo.

Results

Who enrolled, who bought, what it made.

Every promo has a live overview, and because the checkout is ours, the revenue is attributed to the promo. Not guessed from a pixel on a thank-you page.

  • Revenue, attributed

    Enrolled, active, converted and revenue for every promo, with the rate between them and the daily trend.

  • Every lead, with where they came from

    Email open, link click, affiliate, automation, API or CSV. Search it, filter it, export it.

Summit early birdDeadline promo · 3 tiers · live since 2 Mar
  • Enrolled1,28484 in the last 24h
  • Active41232% still in play
  • Converted695.4%
  • Revenue$8,631promo-attributed
LeadSourceTierTimer
mara@northstar.studioAutomationFast actionstarted 27m ago
drew@cartwell.coLink clickEarly birdpaid $149
partner_8QLAAffiliateEarly birdstarted 3d ago
e5ba8565-a57f-4c7cLink clickStandardstarted 4mo ago

Controls

Pause, hold back, or open the doors.

A live campaign has two switches, and neither one touches the people already enrolled.

  • Pause without losing leads

    Stop enrolling new people while everyone already in keeps their deadline.

  • Unenrolled visitors, your call

    Send anonymous traffic to the best price, or hold the early-bird tier for confirmed enrolments.

SettingsSummit early bird
Live
StatusEnrolling. Changing this never touches the 412 people mid-deadline.
Unenrolled visitorsSomeone lands on the page with no ref and no cookie. Where do they go?
Send unenrolled visitors to the last tierOn: anonymous visitors get the standard price. Early-bird stays for confirmed enrolments.

For developers

No code required.
All the code you want.

You don't need any of this. A buy button and a countdown tag do the whole job. This is for when you want to route the promo yourself.

  1. 1

    Name the promo on the button

    One attribute on any buy button. The checkout opens at the active tier's price and locks it for the session.

  2. 2

    Put the ref in the link

    Add ?pf_ref= to any link from email or ads. The first visit starts their clock; every visit after finds the same one.

  3. 3

    That's the integration

    Enrolment, tier changes and the redirect to the right page all happen on their own. Most sites stop here.

<!-- The whole integration -->
<a data-plandalf-present="summit"
   data-plandalf-apply-promo="summit_early_bird">Buy</a>
<div data-plandalf-promo="summit_early_bird"></div>

// Optional: read the answer yourself. Try it: press Skip to deadline below.
const promo = await plandalf.promo("summit_early_bird")
promo.activeTier.label         // "early_bird"
promo.activeTier.price_amount  // 9900
promo.remaining                // 1740 (seconds)

// Tier changes stream as events; your page repaints, no reload
for await (const e of promo.events) {
  if (e.type === "tier-change") repaint(e.tier)
}
Preview simulation:early bird ends 29:00

Inbound catch URL

Every promo has one. Any ESP, Zapier, n8n or your own backend can enrol with a POST.

$ curl -X POST app.plandalf.com/hooks/catch/… \
  -H "Content-Type: application/json" \
  -d '{"email":"jane@example.com","ref":"jane@example.com"}'

Enrol from a link

No integration at all: put the ref in the URL and the SDK picks it up on landing. Same person, same clock, every visit.

yoursite.com/summit
  ?pf_ref=jane@example.com

Live tier events

Subscribe once and repaint when the tier flips. No polling.

for await (const e of handle.events) {
  if (e.type === "tier-change") render(e.tier)
}

Integrations

Keep your site. Upgrade how it sells.

Plus a fully documented REST API and webhook layer for whatever’s not in the list.

The team

Built by a team obsessed with conversion.

AarogornBilbertBuildoFoundoLegoli

15+ years building SaaS businesses together. Every part of Plandalf comes from a real checkout problem we’ve had to solve ourselves.

No credit card required. Nothing to migrate.

Feature detail