Klaviyo is unusually direct about this one. Its help article on countdown timers opens by saying Klaviyo does not have a built-in countdown timer feature and that you’ll need a third-party tool. The HTML block is even described as being there for “third-party features like countdown timers”.
That honesty makes a Klaviyo countdown timer easy to reason about. There’s no native option to weigh up, so the questions are practical: which block, which variables, and how do you preview it. This guide answers all three with an Alterable countdown timer, and gives flows the attention they deserve, because that’s where Klaviyo users get the most out of a per-recipient deadline.
Step 1: Create the timer in Alterable
1. Open the Alterable countdown timer page.
2. Choose the type. Standard is one deadline for the whole send. Evergreen starts a private window for each recipient on their first open. Merge tag reads the deadline from the image URL, which is the natural fit for a flow triggered by an event that already knows when the offer ends.
3. Set the date, time and timezone, then match the fonts and colours to your template.


Step 2: Add the countdown timer to your Klaviyo email
1. Open the template, campaign or flow email in the editor.
2. From the sidebar’s Basic blocks, drag the HTML block into the layout.
3. Paste the Alterable embed into the block.
4. Save, then use Preview & test to check the render.

If you’ve been pasting code through the source view of a text block, move it to the HTML block. Klaviyo is retiring source-code editing in text, table and split blocks and migrating existing templates to the HTML block, so that’s where this belongs anyway. Image URLs must be https, which Alterable’s are.
Per-recipient deadlines with Klaviyo variables
Standard timers need no variables. The other two take one on the image URL.
An evergreen timer needs to know who’s opening so it can start and keep that person’s clock. Pass the email:
<img src="https://next.alterable.com/countdown-timers/YOUR-TIMER-ID.png?uid={{ email }}" />
A merge tag timer takes the deadline itself, as an ISO date like 2026-10-01T18:00:00Z. In a campaign, that comes from a profile property. In a flow, it can come from the triggering event, which is the more interesting case. A checkout-started flow already knows when the cart was abandoned, and a custom event from your back end can carry an expires_at field of its own:
<!-- campaign: a profile property holding the ISO date -->
<img src="https://next.alterable.com/countdown-timers/YOUR-TIMER-ID.png?d={{ person.offer_expiry }}" />
<!-- flow: a field on the event that triggered it -->
<img src="https://next.alterable.com/countdown-timers/YOUR-TIMER-ID.png?d={{ event.expires_at }}" />
Event variables only resolve in a flow triggered by that event, so they don’t belong in a campaign. If the property is a real date rather than text, Klaviyo’s date filter can format it, but storing the ISO string as text is simpler and I’ve seen fewer things go wrong that way.
Previewing a Klaviyo countdown timer
Klaviyo’s preview is better than most, provided you use it properly. In Preview & test, choose a real profile, and for a flow email choose one of the recent events too. The variables in the image URL then resolve and the timer draws with that person’s deadline. Skip that step and you’ll see a broken image, because there’s nothing to fill {{ email }} with.
Klaviyo’s own timer article carries two warnings that apply to every countdown tool. Apple Mail can preload images before the real open, so the first render may run slightly early. And old desktop Outlook doesn’t animate GIFs, which is one reason Alterable draws a still image at open time rather than a looping animation. Once the deadline passes, the timer holds at zero, or shows the text or image you set as its expiry placeholder in Alterable.