EmailTimer.App

MailerLite

Countdown timers and personalized images for MailerLite email

Your subscribers see how long is left on the offer, counted from the moment they open the message, and it goes into the MailerLite campaign you have already built. One snippet, in the merge syntax MailerLite already uses.

Animated countdown in the digital style, reading 02 days 03 hours 34 minutes 12 seconds and counting down
A render from the engine at 600 by 200, the size that goes into a MailerLite image block.

MailerLite merge syntax

The tags you already use, around the image

The same merge fields that put a subscriber's name in your subject line go in the link and the alt text around the image, where MailerLite fills them in as it sends. They never go inside the image address, for the reason in the warning further down. A name or a deadline drawn inside the image itself comes from an address signed for each subscriber, held in a contact field.

First name
{$name}
Coupon code
{$coupon_code}
Deadline
{$offer_end_date}
Email address
{$email}

The snippet to paste into MailerLite

Put it in code block, in the special tab of the drag and drop editor. There are two shapes, and which one you want depends on whether every subscriber gets the same deadline or their own. The editor generates whichever you pick, already filled in with your ids.

One thing to know before you paste anything. A merge tag cannot go inside the image address. The address is signed, and the signature covers every part of it, so if MailerLite swaps a name into it after signing, the signature no longer matches and every subscriber gets the fallback graphic instead of your timer. It happens quietly, because the image service always answers with a valid picture rather than an error. Both snippets below put the merge tags in the link and the alt text, where they belong and where they work.

One image for the whole send

On every plan, including the free one. Everybody requests the same address, and the clock is worked out at the moment each person opens, which is what lets one address show a different time to every reader. The name and the code go in the link and the alt text.

<a href="https://yourstore.com/sale?code={$coupon_code}" target="_blank" rel="noopener">
  <img src="https://img.emailtimer.app/i/k7mQ2pXd.gif?w=w_8ha3fq&v=3&sig=YOUR_SIGNATURE" alt="{$name}, your 25% off ends at midnight tonight" width="600" height="200" border="0" style="display:block; width:100%; max-width:600px; height:auto; border:0;" />
</a>

A different image for each subscriber

On Growth and Agency. Generate one signed address per subscriber, import the column into MailerLite as a contact field called et_image_url, and point the snippet at that field. This is the only way a deadline that differs per subscriber can work, because the deadline is inside the signature too. A contact whose field is empty gets no image, so check the field is filled across the whole segment before you send.

<a href="https://yourstore.com/sale?code={$coupon_code}" target="_blank" rel="noopener">
  <img src="{$et_image_url}" alt="{$name}, your 25% off ends at midnight tonight" width="600" height="200" border="0" style="display:block; width:100%; max-width:600px; height:auto; border:0;" />
</a>

The addresses come from the batch endpoint in the REST API, or from a CSV export if you would rather not write code.

Setting it up in MailerLite

Four steps, and the longest one is deciding what the timer should look like.

  1. 1

    Build the image in EmailTimer.App

    Set the timer style and the deadline, and decide which subscriber fields you want drawn into the graphic.

  2. 2

    Copy the snippet

    The image tag comes out in the dollar sign form MailerLite uses, so {$name} and a custom field tag resolve normally in the link and the alt text.

  3. 3

    Drag in a Code block

    Open the campaign in the drag and drop editor, find the Special tab in the left sidebar, and drag a Code block into the layout. An image tag is allowed there; JavaScript, iframes and form elements are not.

  4. 4

    Send a test, then check the field in the editor

    A test email arrives with [TEST] in the subject and does not run dynamic content blocks, so confirm the value of any custom field in the editor rather than inferring it from what lands.

Things that only matter in MailerLite

MailerLite writes a variable as {$name}, with a default inline as {$name|default('Friend')}. Every field has an accompanying Tag listed in the Tag column, including the fields you created yourself, and the {x} button in a text area inserts the exact tag. A field with no value renders blank, so a custom field holding a per-subscriber image URL has to be populated before the automation reaches the email step.

What your MailerLite subscribers will actually see

MailerLite documents that its own timer does not count down on Outlook 07, 10 and 13, and the same is true of later classic Outlook builds on Windows, where a GIF is reduced to its first frame. Apple Mail with Mail Privacy Protection fetches at about delivery time, and Gmail can serve a copy its proxy already holds.

What each client is documented to do

Email client Fetch moment Cache lifetime GIF animation What EmailTimer.App does Basis
Apple Mail (iOS 15+, macOS Monterey+) Apple Mail Privacy Protection (MPP) Delivery time (pre-fetched by Apple server) Testing reports 2 to 3 days Full 30-second live animation The timer counts down from the time remaining at delivery. A fixed deadline, such as 23:59 UTC, is still the right deadline. Documented by Apple
Gmail (web, iOS, Android) Google image proxy First open by recipient Not published by Google Full 30-second live animation First open displays a real-time countdown. A re-open can be served from the copy the proxy already holds. Documented by Google
Outlook on Windows (2016 to 2024) Word rendering engine Open time Not documented First frame only (static image) Frame 1 is a complete image with the time left at the fetch, so a reader who sees only that frame sees a correct still countdown. Expected, not yet documented or tested
Outlook on the web and mobile (iOS, Android) Native browser or app engine Open time Not documented Full 30-second live animation Expected to play the animation, 30 frames at one frame per second by default. Expected, not yet documented or tested
Yahoo Mail and AOL Yahoo image proxy Open time Not documented Full 30-second live animation Expected to fetch the image when the message is opened and play the animation. Expected, not yet documented or tested

The Apple and Gmail rows rest on Apple's and Google's published documentation and on third-party testing. Neither company publishes a cache lifetime: Apple documents the prefetch, Google documents the proxy, and the two to three days is FreshInbox's 2021 testing. The Outlook and Yahoo rows are what we expect those clients to do, with no vendor document behind them. No row comes from a test by us yet, and we will publish dated screenshots when we have them. Sources: Apple on Mail Privacy Protection, Google on the Gmail image proxy, FreshInbox on Mail Privacy Protection image caching.

MailerLite in practice

MailerLite countdown timer guide

By Danish Mohammed, founder. 5 min read

MailerLite documents its own countdown block more honestly than most platforms document theirs. Two sentences in that help article decide whether the block is right for your campaign, and both are easy to miss.

Does MailerLite have its own countdown timer

Yes. The Countdown block sits in the Special tab of the drag-and-drop editor, alongside the survey, signature, accordion and code blocks. MailerLite’s help article gives the click path plainly: open the draft campaign in the drag-and-drop editor, find the Special tab in the left sidebar, then drag the Countdown block into the campaign.

Three documented behaviours define what it is. It “will play on a 90-second loop when a subscriber opens your newsletter”. It “uses your account time zone to calculate the expiry date”. And on old Outlook, MailerLite writes: “While countdown timers are compatible across all mailboxes, the timer will not count down if your subscriber is using Outlook 07/10/13. The countdown timer will instead appear as a static image.”

The time zone line is the one to stop at. An account set to Vilnius sends a deadline computed in Vilnius, so a subscriber in Los Angeles sees a countdown to a moment that is not the one they would have calculated. That is correct behaviour for a launch with a single global cut-off. It is wrong for anything framed as “ends at midnight your time”.

The 90-second loop is a design decision rather than a defect, and it has a consequence. A timer that restarts is a timer that shows the same number twice, which is the pattern people describe on forums as a frozen countdown.

Where the snippet goes

A server-rendered image goes into the Code block, in the same Special tab as the countdown. MailerLite’s drag-and-drop reference names the restriction that makes this the only viable route: “JavaScript and codes such as embed, frame, iframe, form, input, object, and textarea are not allowed.” An image tag is none of those.

For a message built entirely from markup, MailerLite’s custom HTML editor takes code written from scratch or an HTML import as a ZIP file, and its sidebar inserts personalization variables into either.

Variables use a dollar sign inside braces. MailerLite documents {$name} for a first name and {$email} for the address. Custom fields work the same way: “Every field in MailerLite has an accompanying Tag, including the fields you created yourself”, listed in the Tag column. Defaults are written inline as {$name|default('Friend')}, and without one the space “will appear blank unless you add a default value”.

A per-subscriber deadline cannot travel as a variable in the image URL. Every query parameter is inside the signature, so a value substituted after signing invalidates the URL for the whole send. Create a custom field to hold a pre-signed URL and use its tag as the source:

<img src="{$et_image_url}" width="600" height="200" border="0" alt="Your offer ends soon" />

In the drag-and-drop editor, variables are inserted with the {x} button that appears when you double click into a text area, which is a faster way to get the exact tag than typing it.

What breaks in automations and flows

An automation email runs for as long as the workflow does. A native countdown with a fixed expiry date inside a welcome sequence is accurate for a while and misleading afterwards, and nothing in the workflow will tell you when it crossed over.

The account time zone compounds this in an automation. A fixed deadline in your time zone, delivered to a list spread across several, produces a countdown that is arithmetically correct and rhetorically wrong for most readers. A deadline anchored to each subscriber’s own entry instant avoids the problem, because the duration is the same wherever they are.

Test emails hide part of the picture. MailerLite’s test email article lists what stops working in one, and dynamic content blocks are on that list along with the unsubscribe link, forward links, survey blocks and event blocks. A test send is therefore a check on layout rather than a full rehearsal of personalization.

The ordinary field problem applies as well. A custom field with no value renders blank, so an image source built from an empty field becomes an empty attribute. Populate the field before the automation reaches the email step.

What your recipients will see

MailerLite is unusually candid about one client, and its candour generalises. Outlook 2007, 2010 and 2013 show a still image rather than an animation, which MailerLite states outright. The same thing happens on later classic Outlook builds on Windows, where HTML is drawn by the Word engine and a GIF is reduced to its first frame. Apple Mail with Mail Privacy Protection fetches remote images at about the time the message is delivered, so the figure reflects delivery. Gmail proxies images and can serve a copy it already holds when the same reader opens the message again.

That is documented client behaviour rather than a render I have photographed, and the full version is on the email client support page. Put it beside the 90-second loop and one rule falls out for both timers. Frame one has to be a finished picture carrying a correct number, because for a large share of any list frame one is all there is.

Test before you send

Click Preview and test in the top right of the campaign editor and choose Send a test email, then enter the address you want it at. The message arrives with [TEST] in the subject line, which your subscribers never see.

Send to Gmail and to Outlook in the same pass, and remember what the test cannot tell you. Dynamic content blocks do not function in a test email, so confirm the value of any custom field in the editor rather than inferring it from what arrives. MailerLite also warns that test emails land in spam more often than real ones, because of the label added to the subject.

Questions and answers

Does the MailerLite countdown use the subscriber’s time zone?

No. MailerLite documents that the countdown timer “uses your account time zone to calculate the expiry date”, so every subscriber counts down to the same instant expressed in your zone.

Why does the MailerLite timer restart?

Because the block plays on a 90-second loop when the newsletter is opened. Once the loop completes it begins again, which reads as a stuck counter to anyone watching closely.

Does the native block work in Outlook?

Not as an animation on Outlook 2007, 2010 and 2013, where MailerLite says it “will instead appear as a static image”. Later classic Outlook builds on Windows behave the same way for the same reason.

Where do I paste custom timer code in MailerLite?

Into the Code block in the Special tab of the drag-and-drop editor, or into the custom HTML editor for a fully coded campaign. JavaScript is rejected in both.

Can I run a deadline per subscriber?

Yes, by writing a pre-signed image URL to a custom field and using {$et_image_url} as the image source. The deadline sits inside the signed URL, so it is fixed for that subscriber wherever they open the mail. Minting those addresses is a Growth feature, and the tiers are on pricing.

Sources

Related

Campaigns to build in MailerLite

Each playbook says which timing model the campaign needs, which snippet it takes, and what to get right before you send it.

Setting this up on another platform

The snippet is the same everywhere. Only the merge syntax changes, and each page below carries the exact syntax that platform expects.

All 21 platform setup guides

Put a timer in your next MailerLite send

Free for 5,000 opens a month, $19 for 250,000, and the snippet above is the whole integration.