Countdown timers in abandoned cart emails

In short

A countdown in an abandoned cart email only makes sense when something really expires, such as a coupon with an end date. Use a per-recipient evergreen timer (Starter plan): each person's first open sets the start. On the free plan, an evergreen timer restarts on every open, so it can't mark a real deadline.

Updated on · AP Agency

An abandoned cart email goes to someone who already picked a product and left without paying. A countdown tells them how long they have for something specific: a coupon that expires, a price that goes back up, stock you've set aside for them. If none of that exists, the timer is making up a deadline.

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.

    The generator comes set to a 24-hour evergreen timer. Change it to your offer's real length before you copy the code.

    When it works and when it doesn't

    It works when the deadline exists outside the email:

    It doesn't work when the cart never expires. In many stores the cart is still saved days later at the same price. If you write "your cart expires in 24 hours" and the next day it's still there at the same price, the customer learns your deadlines aren't real, and they'll remember during your next sale.

    It also adds nothing to a first reminder with no incentive. An email showing what they left behind doesn't need a clock.

    Before you add a timer, check how your discount expires. According to Shopify's help center, a code with no end date never expires. In Klaviyo, unique coupons in a flow can expire after the hours or days you choose. You set the expiration in your platform; the timer only displays it.

    Fixed or evergreen timer

    Every person abandons their cart at a different moment, so a fixed date rarely fits. The natural choice is an evergreen timer, which counts a duration (say, 48 hours) instead of running to a date.

    When that evergreen timer starts depends on your plan:

    On the free plan you have two honest options. Write the expiration date in the copy, with no timer. Or, if the offer ends at the same moment for everyone, use a fixed-date timer, which is free. Plans are on the pricing page.

    The coupon and the timer start at different times

    A discount code counts from when your platform generates it, and a per-recipient timer counts from when the person opens the email. If someone opens the email a day after it was sent, the timer shows more time than the coupon has left.

    Klaviyo's help center says unique coupons are assigned at send time and always expire 24 hours later than the expiration you set, to cover delivery delays. With a 48-hour coupon, the code is good for 72 hours after sending in practice. A 48-hour timer stays within that if the person opens the email during the first day. If late openers worry you, set the timer a little shorter than the coupon.

    In Shopify, a discount's end time follows the store's time zone. If you use one code with the same end date for everyone, a fixed-date timer in that zone fits better.

    Sample sequence

    This is a suggestion. Adjust the timing to your store and to how long your offer really lasts.

    Email When Timer Why
    Reminder A few hours after the cart is abandoned None There's no offer yet; showing what they left is enough
    Incentive The next day, if they haven't bought Per-recipient evergreen, as long as the coupon The coupon is created with this email and the timer starts at the first open
    Last call When the coupon has a few hours left The same timer as the previous email Because it runs per recipient, it shows what that person has left instead of starting over

    When the coupon expires, the GIF shows the message you choose, such as "Your discount has expired," or a 1-pixel transparent image if you'd rather it disappear. After the last call, stop emailing about that cart.

    Things worth knowing

    Apple Mail. With Mail Privacy Protection on, Apple downloads images in the background when the email arrives, whether or not it's opened. For a per-recipient timer, that download sets the start at delivery rather than at reading. For the coupon this is the safest case, because the timer and the code start at about the same time.

    Editor preview. If your platform's preview loads the image with a real customer's ID, their window starts right then. Use a test profile of your own. If the tag arrives unreplaced, the engine ignores it and counts from that moment.

    Repeat customers. The start is stored per timer and per recipient. Once 30 days have passed since their deadline ended, the next open starts a fresh countdown. If the same person abandons another cart a week later, they're still inside that margin and will see the timer as expired. For carts, a short margin works better: the generator lets you pick 1 or 7 days. You can also put a cart-specific variable in rid if your platform offers one.

    Outlook. According to Microsoft, Outlook for Microsoft 365, 2021 and 2024 animate the GIF unless Windows animations are turned off. Then they show the first frame, which in our GIF already shows the time left.

    Privacy. Put the customer ID in rid, not their email address. We store the value as a hash, never in plain text.

    How to set it up in your ESP

    The timer goes into the same block you'd use in a campaign. What changes is where the flow lives:

    Each guide covers how to test the timer before you turn the flow on. If your offer ends at the same time for everyone, see the flash sale use case.

    Common questions

    How long should the timer run?

    As long as your offer. If the coupon is good for 48 hours, the timer counts 48 hours. If nothing expires, leave the countdown out.

    Can I use the free plan for abandoned cart emails?

    You can create a free evergreen timer, but without a recipient it counts from every open: someone who opens the email the next day sees the full window again. A real per-customer deadline needs the Starter plan.

    Does the timer end at the same time as a Klaviyo coupon?

    Not exactly. The coupon is assigned when the email is sent and the timer starts at the first open. According to Klaviyo's help center, coupons stay valid 24 hours past the expiration you set, which covers anyone who opens the email on the first day.

    Can I use the same timer in every email of the flow?

    Yes, and you should. With the recipient tag, the first open sets the start and later emails show what that person has left.

    What happens if the same person abandons another cart weeks later?

    The start is stored per timer and per recipient. If their deadline ended more than 30 days ago, the new open starts a fresh countdown; if not, they'll see the timer as expired. You can shorten that margin to 1 or 7 days in the generator, or put a cart-specific variable in rid if your platform has one.

    Why does the window start before the customer reads the email in Apple Mail?

    With Mail Privacy Protection, Apple downloads images when the email arrives, whether or not it's opened. That download counts as the first open, so the timer starts at about the same time as the coupon.

    Does it work in Outlook?

    According to Microsoft, Outlook for Microsoft 365, 2021 and 2024 animate GIFs unless Windows animations are turned off. In that case readers see the first frame, which already shows the time left.

    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. Klaviyo unique coupons: in flows they can expire after a number of days or hours; assigned at send time; actual expiration is always 24 hours after the one you set. help.klaviyo.com, accessed on
    3. Shopify: if you don't choose an end date, the discount doesn't expire. help.shopify.com, accessed on
    4. Shopify: discount start and end times follow the time zone selected in the admin. help.shopify.com, accessed on
    5. Custom Liquid in abandoned checkout, abandoned cart and abandoned browse automations; customer.id variable. help.shopify.com, accessed on
    6. Klaviyo: countdown with an HTML block, also in flows; Apple Mail may not render countdowns correctly because of preloading; Outlook 2007, 2010 and 2013 show the first frame. help.klaviyo.com, accessed on
    7. {{ person.KlaviyoID }} returns the profile's Klaviyo ID. help.klaviyo.com, accessed on
    8. *|UNIQID|* returns the contact's unique ID. mailchimp.com, accessed on
    9. HubSpot automated emails require Marketing Hub Professional or Enterprise. knowledge.hubspot.com, accessed on
    10. Apple Mail Privacy Protection downloads remote content in the background, whether or not the email is opened. apple.com, accessed on
    11. Outlook for Microsoft 365, 2021 and 2024 play animated GIFs by default; with animations off, only the first frame. support.microsoft.com, accessed on
    12. Engine: evergreen with rid on a paid plan, first open sets the start, stored per timer and hashed rid with no expiry; on the free plan it counts from each request; unreplaced tag ignored; expired state as text or 1x1 transparent. Kauntodaun technical documentation, accessed on
    13. Per-recipient evergreen from Starter up. Kauntodaun technical documentation, accessed on
    Code copied