Step by step
How to add a countdown timer to an Iterable template
Create the timer
Start from Create with AI (Basic and up) with a sentence like "48-hour win-back offer, navy and gold", or set it up in the editor. For journeys, choose Evergreen so each user's window starts at their own first open.
Copy the Iterable embed
Click Embed in the timer editor. For an evergreen timer that starts on open, or a dynamic one, choose Iterable as the email platform there; an evergreen timer's URL then ends in
?vid={{email}}, which Iterable fills from each user's profile at send time. Copy the image URL or the<img>snippet.One click: insert it into a template (Pro and up)
Connect Iterable under Settings → Integrations with an API key. In the timer editor, Send to ESP lists your email templates; pick one and a position, and flashtimer adds the timer to the template's HTML as a table row.
Or paste it (every plan, including Free)
In the WYSIWYG or Side by Side editor, paste the snippet into the HTML where the countdown belongs. In the Drag and Drop editor, add an HTML block and paste the snippet there, or set an image block's source to the timer URL. Never upload the GIF itself: an uploaded copy is frozen.
Preview with a real user and test
Preview the template against a test user so
{{email}}resolves, then send a proof to Gmail, Apple Mail and Outlook. Add a text line with the deadline under the timer.
Why lifecycle teams put countdowns in Iterable emails
Iterable is built for lifecycle messaging: onboarding, trial conversion, browse and cart recovery, win-back. Most of those programs carry a deadline that belongs to one user, not to a calendar date. A static "offer ends soon" line is vague; a countdown that shows 31 hours left is specific, and it is correct whenever the user opens.
Use a timer only where something actually ends. If an offer quietly renews, a countdown that hits zero and resets erodes trust. For daily cutoffs that really do repeat, a recurring countdown timer resets on a wall-clock rule in your time zone and never shows a false zero.
Per-user evergreen timers with {{email}}
Evergreen timers need to tell users apart. For Iterable, flashtimer uses {{email}}, the Handlebars expression for the user profile's email field, and puts it in the URL as ?vid={{email}}. Iterable substitutes each address at send time and flashtimer hashes it before storing anything.
Each user then gets the same duration, for example 72 hours, counted from their first open of that email. Open on Monday, the offer ends Thursday; open on Wednesday, it ends Saturday. That is the core of an evergreen countdown timer email, and it is what makes one template usable in a journey that runs for months.
Countdown timers in Iterable journeys
In a journey, each user reaches the email tile at a different time, so a fixed deadline only fits a program with a hard end date. For everything else pick one of two personal modes. Evergreen starts the clock at the first open. Dynamic (Pro and up) counts to a date already on the user's profile or the triggering event, such as trialEndDate.
For a dynamic timer, type your field name in the embed dialog and flashtimer writes the Iterable tag into the URL, for example ?end={{trialEndDate}}. Iterable field names are case-sensitive, so match the profile exactly. Dates in ISO 8601, a plain date, or Unix seconds all work. A missing or past date shows the expired frame. See personalized countdown timer email for more examples, including a welcome email discount countdown timer.
Gmail, Apple Mail and Outlook behavior
The timer animates in Gmail, Apple Mail, Yahoo, and Outlook on the web, Mac and mobile. Classic Outlook for Windows (2007–2019, and newer versions with Windows animations turned off) shows only the first frame: the correct time left at the moment of opening, without the tick. Always restate the deadline in text.
Apple Mail Privacy Protection pre-fetches images. By default those loads get the live countdown as it stood then; on Pro and up, Apple Mail options can show them a message, your fallback image or nothing instead, so cached opens never show a stale time. Gmail's image proxy is handled with no-cache headers, so a reopen shows the current time.
After the deadline, testing and troubleshooting
When a user's time runs out they see your expiry message, or your own fallback image on Basic and up. For a journey, that means a user who opens a week late sees "This offer has ended" rather than a broken promise.
Teams on Business and Enterprise can A/B test countdown timer designs to see which layout gets more clicks. If every user shares one countdown, open a sent proof and check the image URL: {{email}} should have become an address. If it did not, the snippet sits somewhere Iterable does not render Handlebars.
Questions
Answered before you ask.
Keep reading
- Evergreen timersEvergreen countdown timer for email: a personal deadline for every readerGive every reader their own deadline with an evergreen countdown timer email: starts on open or on send, built for flows. Set up in minutes. Start free.
- Dynamic timersPersonalized countdown timer email: every reader counts to their own dateSend a personalized countdown timer email where each reader counts down to their own date: trial end, renewal or appointment, from a merge field. Try it free.
- Braze integrationBraze countdown timer for email campaigns and CanvasAdd a live Braze countdown timer to email campaigns and Canvas steps. Copy a ready-made snippet, count to each user's date with Liquid. Free plan, no card.
- SendGrid integrationSendGrid countdown timer for dynamic templates and campaignsAdd a live SendGrid countdown timer to Dynamic Templates or Single Sends. Per-recipient timers via {{email}}, one-click template insert, REST API. Start free.
- PricingSimple pricing for email countdown timersStart free with 20,000 views a month. Upgrade as you grow.
