EmailTimer.App

Countdown timers and personalized images for Mailchimp email

Your subscribers see how long is left on the offer, counted from the moment they open the message, and it goes into the Mailchimp campaign you have already built. One snippet, in the merge syntax Mailchimp 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 Mailchimp image block.

Mailchimp 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 Mailchimp 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
*|FNAME|*
Coupon code
*|COUPON|*
Deadline
*|DEADLINE|*
Email address
*|EMAIL|*

The snippet to paste into Mailchimp

Put it in code block in mailchimp classic and new builder. 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 Mailchimp 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|*" target="_blank" rel="noopener">
  <img src="https://img.emailtimer.app/i/k7mQ2pXd.gif?w=w_8ha3fq&v=3&sig=YOUR_SIGNATURE" alt="*|FNAME|*, 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 Mailchimp as a contact field called ETIMAGE, 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|*" target="_blank" rel="noopener">
  <img src="*|ETIMAGE|*" alt="*|FNAME|*, 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 Mailchimp

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

  1. 1

    Design your timer in EmailTimer.App

    Configure your layout, background colors, and typography. Choose Mailchimp from the ESP export selector.

  2. 2

    Copy the Mailchimp embed snippet

    The snippet puts standard Mailchimp tags such as *|FNAME|* in the link and the alt text, where Mailchimp fills them in. The image address itself carries no merge tag.

  3. 3

    Insert a Code block in Mailchimp

    Drag a Code content block into your Mailchimp layout and paste the snippet directly into the editor.

  4. 4

    Send a live preview email

    Use Mailchimp Preview and Test function to send a test message to your inbox and confirm render clarity.

Things that only matter in Mailchimp

Mailchimp uses *|TAG_NAME|* syntax. An image that differs per subscriber goes in an audience field such as *|ETIMAGE|*, holding an address signed for that subscriber. For custom tags, configure fallback values within your Mailchimp audience settings.

What your Mailchimp subscribers will actually see

Gmail proxies images through googleusercontent.com. The first recipient open pulls a fresh 30-second countdown GIF. A later open can be served from the copy the proxy already holds, and Google does not publish how long it keeps one.

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.

Mailchimp in practice

Mailchimp countdown timer setup guide

By Danish Mohammed, founder. , updated 5 min read

Mailchimp ranks for its own countdown terms without owning a countdown feature. The page that ranks is a directory listing for somebody else’s product.

Does Mailchimp have its own countdown timer

No. Mailchimp’s content block reference for the new builder lists what you can drag into a layout, and the list runs from Text and Image through Product, Button, Social, Survey, Apps, Code, Logo and Footer. There is no timer in it, in either the new builder or the legacy one.

The closest thing Mailchimp publishes is a listing in its own integrations directory for MotionMail, which offers to “Add dynamic countdown timers to your emails that drive clicks and highlight upcoming events or deadlines”. That listing is an advertisement for a third party inside Mailchimp’s own site, which tells you where Mailchimp stands on building one.

So the answer for a Mailchimp sender is the Code block. The rest of this page is about using it without the two mistakes behind most of the Mailchimp support mail I get.

Where the snippet goes

Mailchimp names the block and the gesture. Use Code Content Blocks in the New Builder says to “Click a Code block, or click and drag a Code block into your layout from the side panel”. The next step is “In the Code menu, type or paste in your code”. The legacy builder uses the same block under the same name.

Two constraints from that page are worth carrying into the design. Mailchimp strips JavaScript, so any timer that depends on a script in the message is already dead. And it tells you to use “absolute paths” for images rather than relative links, which a signed image URL satisfies by construction.

Merge tags use the pipe-and-asterisk form. Mailchimp’s merge tag cheat sheet gives *|FNAME|* for a first name and *|EMAIL|* for the address, and custom audience fields follow the same *|TAGNAME|* shape.

For a per-recipient deadline, the tag cannot go inside the image source. Every query parameter on a signed image URL is inside the signature, so *|DEADLINE|* in the source is signed as literal text, replaced after signing, and then fails verification for the whole send. The working shape is one signed URL per recipient, imported into an audience field, with the field’s tag as the source:

<img src="*|ETIMAGE|*" width="600" height="200" border="0" alt="Your offer ends soon" />

Create the field as ETIMAGE in audience settings first. Merge tags in the surrounding link and the alt text are free to use, because neither attribute is signed.

What breaks in automations and flows

Mailchimp’s customer journeys reuse one email for months, so a fixed deadline pasted into a journey keeps ticking long after the offer is dead. Configure the expired frame at publish time. An image that says the sale has closed is a better outcome than a counter sitting at zero, and it is the only version of this that needs no maintenance.

A journey email whose deadline differs per subscriber, such as a birthday gift with a week to redeem it, needs the per-recipient field above rather than one fixed date.

The preview trap is specific and it catches almost everybody. Mailchimp’s own preview and test article explains that contact-specific merge tags do not resolve in a plain test email, because the draft has not been sent to real audience contacts. If your image source is a merge tag, the test email arrives with an empty source and a broken-image icon.

That is not your snippet failing. Mailchimp gives you two ways around it in the same article. Turn on the “Enable live merge tag info” slider in preview mode to “see how dynamic content or other merge tags look to your recipients”. Or send the campaign to a small test segment of the real audience.

One more habit. Paste the snippet from a plain text editor rather than from a word processor. A smart quote substituted into an attribute breaks the tag, and it is genuinely hard to see by eye.

What your recipients will see

Mailchimp delivers the HTML. Everything after that is the recipient’s mail client, and the clients disagree with each other. Classic Outlook on Windows draws the message through the Word engine and shows one frame of an animated GIF rather than playing it. Frame one has to read as a finished countdown on its own. Apple Mail with Mail Privacy Protection fetches remote images around delivery time, which means the number reflects when the mail arrived. Gmail fetches through its own image proxy and can serve a copy it already holds when the same recipient opens the message again.

All of that is documented client behaviour rather than anything I have photographed in an inbox, and the version with the Outlook builds named individually is on the email client support page. The practical consequence for a Mailchimp campaign is a design decision. Hours and days survive every case above. Seconds only pay off on the clients that animate, and they look like noise on the ones that do not.

Test before you send

Use both halves of Mailchimp’s Preview and Test. Preview mode “gives you an idea of how your email will look in your recipients’ inboxes on both desktop and mobile devices”. The live merge tag slider then lets you step through real recipients and confirm the source attribute resolves.

Then send a test email to yourself. Separate several addresses with a comma and send to one Gmail account and one Outlook account in the same pass. The preview proves the markup is right. Only a real inbox proves the image was fetched, and only Outlook tells you whether frame one carries the message on its own.

Questions and answers

Does Mailchimp have a built-in countdown timer block?

No. Mailchimp’s published block list for the new builder contains no timer, and its own integrations directory advertises a third-party countdown product instead.

Which block do I paste a countdown timer into?

The Code block, in either builder. Mailchimp documents dragging it in from the side panel and pasting the code into the Code menu.

Why does my timer show a broken image in a Mailchimp test email?

Because contact-specific merge tags do not resolve in test sends, so a merge-tag image source arrives empty. Use the live merge tag slider in preview, or send to a small segment of the real audience.

Can I put the deadline in the image URL as a merge tag?

No. The signature covers every query parameter, so a tag substituted after signing invalidates the URL for every recipient. Per-recipient deadlines belong in a pre-signed URL stored on an audience field.

What does this cost on top of Mailchimp?

The free plan here is 5,000 image opens a month with no watermark, and timers and personalized images sit on the same plan rather than two subscriptions. The tiers are on pricing, and the Mailchimp countdown timer generator produces a timer without an account, with the Code block instruction first. That timer works for 500 opens without an account, and for 1,000 once you sign in and claim it.

Sources

Related

Campaigns to build in Mailchimp

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 Mailchimp send

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