Evergreen countdown timer for email

In short

An evergreen timer counts down a set duration, such as 48 hours, instead of running to a fixed date. Without a recipient tag, it counts from each open and starts over when the email is reopened. With your ESP's merge tag in ?rid= (paid plans), each person's first open locks the start.

Updated on · AP Agency

An abandoned cart flow sends the same email to different people on different days. A fixed-date timer would give each of them a different window, and some of them one that has already closed. An evergreen timer counts down a set duration, say 48 hours, and what changes is when it starts.

Make your own

The generator is already set up for this page. Change what you need and press Create timer.

Live Preview of a countdown GIF with days, hours, minutes and seconds

Animated GIF. Recalculated every time the email is opened.

Start from
Timer typeRecurring: Starter plan
Duration for each recipient

With your platform's merge tag in the URL (Starter plan), each person gets their own deadline from the first open. Without it, every open shows the full duration.

Repeats
Days of the week

When it reaches zero it starts again, counting to the next date.

StyleYou can try Pro styles here
Free
PRO
UnitsHide days and the hours absorb them
Colors

Smooths the digit edges so they blend into that background.

Background image STARTER

Put a photo or a texture behind the digits. It needs an account on the Starter plan. Create account · See plans

More font and text options

More than 1,500 families from the Starter plan. On that plan the preview loads them from our server; without it, you see Inter.

Size
Label language
Labels
When it reaches zero

Free, no signup. You get the code to paste into your email.

This option is on a paid plan

You can try it in the preview, but to use it in an email you need the plan Starter.

    How it works in our engine

    You choose the duration when you create the timer, combining whatever units you like: 48h, 2d12h, 90m or 1d 2h 30m 15s. A plain number of seconds works too. The maximum is 3,650 days. If you hide a unit, its time rolls into the next one: with the days box off, 48 hours shows as 48:00:00.

    The start depends on whether the URL carries a recipient:

    On the free plan, the engine ignores rid when working out the start, so the timer counts from each open, just as it does without a recipient.

    We don't store the rid value in plain text. We turn it into a salted hash and store that hash with the time of the first open. That start is kept. Once 30 days have passed since that person's deadline ended, their next open starts a fresh countdown, so someone who enters the flow again a month later sees a full window instead of an expired timer. In the generator you can change that margin to 1, 7 or 90 days, or choose never to restart; without it, they'll see the timer as expired.

    Which merge tag to use in each ESP

    Use a contact's internal ID rather than their email address. An email address would travel in the image URL and end up in the logs of any server in between. The engine would hash it anyway, but it's better not to send it.

    If your platform isn't listed, look up the merge tag for the contact ID in its documentation and run the test below.

    How to test before you send

    1. ESP preview. The merge tag often arrives unreplaced ({{ … }}, *|…|*). The engine recognizes it, ignores it and counts from that moment, so you'll see the full duration.
    2. A test email to your own contact. Don't use a real customer's profile: if the test loads the image with their ID, their window starts right then.
    3. Two opens. Open the test, wait a few minutes and open it again. With a recipient, the second open should show less time. If it shows the same, the tag isn't being replaced or you're on the free plan.

    Apple Mail and preloading

    With Mail Privacy Protection, Apple downloads an email's remote content in the background through two relays, whether or not it's opened. For a per-recipient timer, that download may be the first request, so the window starts when the email is delivered rather than when the person reads it. Klaviyo also warns that countdowns may not render correctly in Apple Mail because of this preloading.

    Put the real condition in the email copy, for example "this code is valid for 48 hours after you receive this email," and let the timer back it up.

    When an evergreen timer misleads

    No recipient, but a promised deadline. If the email says "you have 48 hours left" and the timer goes back to 48 hours on every open, the deadline is fake. Without a recipient, the countdown works as a visual reminder of a duration, not as an end point. If there's a real end, use per-recipient evergreen or a fixed date.

    The coupon never expires. The timer changes nothing in your store. If the coupon still works after zero, readers learn that your countdowns mean nothing. Set the coupon's expiry in your store or ESP to the same duration.

    Coupon and timer start at different times. The coupon is usually created when the email is sent, and the timer starts at the first open. If someone opens the email a day later, the timer ends a day after the coupon. Give the coupon some slack, or measure its window from delivery.

    A dated sale for your whole list. If the promotion ends Sunday at 11:59 p.m. for everyone, the right timer is a fixed-date one, like the Black Friday countdowns. An evergreen timer would tell someone opening on Saturday that they have 48 hours left.

    Where it fits

    Welcome emails with a first-order coupon, abandoned carts, free trials that are about to end, or a reservation held for a few hours: any email that goes out at a different moment for each person. You'll find a full sequence on the abandoned cart page.

    Common questions

    What's the difference between a fixed and an evergreen timer?

    A fixed timer counts down to the same date and time for everyone. An evergreen timer counts a duration, such as 48 hours, from a start that depends on each open or on each recipient.

    Is the evergreen timer free?

    Yes, but without a recipient: it counts from each open, so anyone who reopens the email sees the full window again. Per-recipient evergreen, which stores each person's start, is on the Starter plan or above.

    Which duration formats does it accept?

    Any combination of units, such as 48h, 2d12h, 90m or 1d 2h 30m 15s, or a number of seconds. The maximum is 3,650 days.

    Do you store my contacts' email addresses or IDs?

    Not in plain text. The rid value is turned into a salted hash, and only that hash is stored, along with the time of the first open.

    What happens if the merge tag isn't replaced?

    The engine recognizes it, ignores it and counts from that moment. That's what usually happens in your ESP editor's preview.

    Does it work in Apple Mail?

    With Mail Privacy Protection, Apple downloads images in the background whether or not the email is opened. With a per-recipient timer, the window may start at delivery rather than when the email is read.

    Sources

    1. Per-recipient evergreen restart: the start is stored; if the person opens after duration + restart_after (30 days by default, 1, 7, 30 or 90 days or never in the generator), their start becomes that moment. Kauntodaun technical documentation, accessed on
    2. Evergreen duration: 2d12h, 48h, 90m, 1d 2h 30m 15s or seconds, maximum 3,650 days; without rid counts from each request; with rid on a paid plan the first open sets the start; on the free plan rid is ignored for the start; rid stored as a salted sha256 truncated to 32 hex; unreplaced tags ignored; expired as text or a 1 px transparent image; hidden units cascade. Kauntodaun technical documentation, accessed on
    3. Evergreen without a recipient is free; rid and per-ESP merge tags in snippets only from Starter. Kauntodaun technical documentation, accessed on
    4. Per-recipient evergreen included in Starter ($7/month). Kauntodaun technical documentation, accessed on
    5. {{ person.KlaviyoID }} returns the profile's Klaviyo ID; tags are case-sensitive. help.klaviyo.com, accessed on
    6. *|UNIQID|* returns the contact's unique ID; *|EMAIL|* the email address. mailchimp.com, accessed on
    7. Contact properties use contact.{internal name}. developers.hubspot.com, accessed on
    8. hs_object_id is the internal name of the record ID. developers.hubspot.com, accessed on
    9. customer.id is available in Shopify Email custom Liquid. help.shopify.com, accessed on
    10. Apple Mail Privacy Protection downloads remote content in the background whether or not the email is opened, through two relays. apple.com, accessed on
    11. Countdowns may not render correctly in Apple Mail because of preloading. help.klaviyo.com, accessed on
    Code copied