How to add a countdown timer to Klaviyo emails

In short

Klaviyo doesn't have a built-in countdown; its help center says to use an outside tool and paste the code into an HTML block. Create the timer here, copy the HTML from the Klaviyo tab and paste it into an HTML block in your campaign or flow email. For a per-person deadline, add ?rid={{ person.KlaviyoID }} to the URL.

Updated on · AP Agency

Klaviyo doesn't have a countdown block of its own. Its help center says so and points you to an outside tool: you build the timer elsewhere and paste its code into an HTML block. That's what this page does. The generator below already has the Klaviyo output selected.

Based on Klaviyo's official documentation, reviewed on October 1, 2026.

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.

    Which block to use

    HTML block. This is the method Klaviyo documents and the one we recommend. You paste a table holding the timer image, which is requested from our server every time someone opens the email. Klaviyo's guide doesn't mention any plan restriction for this block.

    Image block. Klaviyo supports dynamic images through a "Dynamic variable or dynamic URL" field, meant for profile or event variables. Klaviyo's documentation only shows profile and event variables in that field, not an external URL. If an image ends up stored as a copy in Klaviyo's library, that copy never updates and the timer freezes. Use the HTML block.

    Step by step in a campaign

    1. Build the timer in the generator with your end date and time zone. If your template is 600 px wide, keep the width at 600 or less.
    2. Copy the code from the Klaviyo tab.
    3. In Klaviyo, open the campaign and go into the email editor.
    4. Drag an HTML block to where you want the timer. Right below the header or just above the main button usually works.
    5. Delete the code that comes in the block and paste yours.
    6. Click the back arrow to apply the change, then save.

    The code already has its & escaped and the background color set on the table, so you won't get white gaps around the GIF.

    In a flow

    Flow emails use the same HTML block. Open the flow, click the email, go into the editor and repeat steps 4 to 6.

    With a fixed date, the flow can send the email on any day: the GIF is rendered at open and shows what's left until that date. If the email goes out after the deadline, the reader sees your expired message.

    For flows where each person gets their own window (abandoned cart, a welcome email with a 48-hour coupon), create an evergreen timer and add the recipient tag, as described next.

    Per-recipient countdowns

    An evergreen timer counts a duration, say 48 hours. The question is when it starts:

    For the second option, add the profile ID to the image URL:

    https://kauntodaun.com/t/k3x9q2m7ab.gif?rid={{ person.KlaviyoID }}
    

    According to Klaviyo's tag guide, {{ person.KlaviyoID }} returns the profile's Klaviyo ID. It's case-sensitive. Don't use {{ person.id }}: that's the external ID, which many profiles don't have. On the Starter plan, the Klaviyo tab in the generator already includes the tag in the code.

    We store the ID as a hash, never in plain text. If the tag arrives empty or unreplaced, the engine ignores it and counts from that moment.

    How to test before you send

    1. Preview. In the editor, open the preview and pick a profile to see how tags are replaced. For a per-recipient timer, use your own test profile: if the preview loads the image with a real customer's ID, their window starts right then.
    2. Test email. Send yourself a test. Klaviyo fills it with the selected profile's data. Open it twice a few minutes apart: with a per-recipient timer, the second open should show less time.
    3. Live send to a test list. Klaviyo warns that some dynamic content doesn't behave the same as in a live send. If the timer is per recipient, send the campaign to a list with two or three of your own addresses.
    4. Outlook. Open the test in desktop Outlook. Microsoft says Outlook for Microsoft 365, 2021 and 2024 animate the GIF when Windows animations are on; otherwise you'll see the first frame, which already shows the time left.

    Known issues

    Other platforms

    If you also send from another tool, see the guides for Mailchimp, HubSpot and Shopify Email. For dated campaigns, the Black Friday and Cyber Monday countdowns are ready to go.

    Common questions

    Does Klaviyo have its own countdown block?

    No. Klaviyo's help center says it doesn't have a built-in countdown timer and that you need an outside tool, pasting its code into an HTML block.

    Does it work in Klaviyo flows?

    Yes. The HTML block is in the same editor for campaigns, templates and flow emails. The GIF is rendered when the email is opened, so the flow can send it on any day.

    Which tag do I use for a per-recipient timer?

    {{ person.KlaviyoID }}, which Klaviyo's tag guide says returns the profile's Klaviyo ID. Tags are case-sensitive, so type it exactly as shown.

    Can I use {{ email }} instead of the ID?

    It works, but the email address would travel in the image URL and end up in the logs of any server in between. Our engine hashes it anyway, but it's better not to send it. Use the ID.

    Why does the timer start from the top in Klaviyo's preview?

    If the tag arrives unreplaced, the engine ignores it and counts from that moment. When you preview with a profile selected, the tag does get replaced.

    Do I need a paid Klaviyo plan for the HTML block?

    Klaviyo's countdown guide doesn't mention any plan restriction for the HTML block. We haven't checked it on a free account.

    Will it show in Outlook and Apple Mail?

    Klaviyo notes that Outlook 2007, 2010 and 2013 show only the first frame, and that countdowns may not render correctly in Apple Mail because it preloads images. Put the deadline in the copy too.

    Sources

    1. Klaviyo has no built-in countdown; steps: open the email (template, unsent campaign or flow email), add an HTML block, delete the code, paste the timer code, click the back arrow; Outlook 2007, 2010 and 2013 show the first frame; Apple Mail may render it incorrectly because of preloading; no plan restriction mentioned. help.klaviyo.com, accessed on
    2. {{ person.KlaviyoID }} returns the Klaviyo ID; {{ person.id }} the external unique ID; {{ email }} the email address; tags are case-sensitive; |default filter. help.klaviyo.com, accessed on
    3. Dynamic image: Select image > Dynamic Image, paste the tag into the Dynamic variable or dynamic URL field; campaigns can only use profile properties. help.klaviyo.com, accessed on
    4. Preview with a profile, test emails rendered with that profile's data, live send to a preview list; some dynamic content doesn't behave the same as in a live send. help.klaviyo.com, accessed on
    5. Outlook for Microsoft 365, 2021 and 2024 play animated GIFs by default; with animations off only the first frame shows. support.microsoft.com, accessed on
    6. Apple Mail Privacy Protection downloads remote content in the background whether or not the email is opened. apple.com, accessed on
    7. Engine: rid hashed, empty or unreplaced tag ignored, rid ignored on the free plan, first request with a rid sets the start. Kauntodaun technical documentation, accessed on
    8. API snippets (Klaviyo tab; rid only from Starter). Kauntodaun technical documentation, accessed on
    Code copied