Flash sale emails
Flash sale emails where the deadline is impossible to miss
A flash sale lives or dies on one number: how long is left. Put that number in the email and it stops being an abstract "ends soon" and starts being a reason to open a new tab right now.
A flash sale email with a live countdown in it. The timer is a real render from EmailTimer.App.
What creates the urgency
A hard cut-off, visible in the inbox rather than buried in the copy.
The timing model for this campaign is one deadline for everybody. You choose it once, when you build the image, and the engine works out the rest for every subscriber who opens.
Compare the timing modelsHow we would set this one up
- Timer style
- Flip cards or high-contrast digital numerals
- The deadline
- A fixed UTC timestamp, for example 2026-11-28T23:59:59Z
- What goes in the image
-
- The offer and the code everybody uses, drawn into the banner
- The countdown, running while they read
- Their first name in the alt text and their own code in the link, where your platform fills them in
- When it expires
- Becomes your "sale has ended" graphic the second the clock hits zero.
What to get right in a flash sale countdown
-
Choose the expired graphic before you send. Late openers are a real slice of any list, and they should read "this has ended" rather than puzzle over a counter stuck at zero.
-
Put the timer in the top third, above the button. If somebody reads one thing before deciding, make it the deadline.
-
Put the offer, the code and the countdown in one image rather than three, so there is one thing to check and one thing that can go wrong.
The flash sale countdown timer snippet
One image tag, wrapped in a link. Drop it into an HTML block in your campaign builder. The merge tags below are the generic form. The exact syntax for Klaviyo, Mailchimp and Shopify Email is on each platform's own page, and the integration pages cover the rest.
This campaign needs one image address for the whole send. One deadline for the whole list, so one signed image address covers the whole send. The clock still runs per reader, because it is worked out when they open.
Notice where the merge tags are. They are in the link and the alt text, and never inside the image address itself. The address is signed, and the signature covers all of it, so a tag your platform fills in afterwards breaks the signature and every subscriber quietly gets the fallback graphic instead of the timer.
<a href="https://yourstore.com/offer?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="{{ first_name }}, your offer ends tonight" width="600" height="200" border="0" style="display:block; width:100%; max-width:600px; height:auto; border:0;" />
</a>
What each inbox does with a flash sale countdown
A flash sale uses one fixed end time, which is the friendliest case there is. Even when Apple Mail collects the image at delivery rather than at open, the countdown it collects is still counting to the correct moment.
The full account of what each client does, including how long Apple Mail holds a pre-fetched image and why Outlook on Windows never animates, is in Countdown timers in Apple Mail. The timing model this campaign uses is one of six, compared side by side in email countdown timer types.
What each client is documented to do
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.
The playbook
Which send in a flash sale carries the countdown
Say the sale goes out as three sends: the announcement, a reminder on the last day, and a final call a few hours before the end. The same image can go into all three, because a fixed deadline is the one timing model that caching does not damage. What changes from send to send is where the timer sits.
In the announcement the clock reads in days, which is context rather than news, so lead with the offer and put the timer under it. In the last-day reminder the hours are the news, so the timer goes above the button. In the final call the countdown is most of the email: the end time in the subject line, the timer at the top and one button under it.
Every send points at the same signed address, so you build the image once and paste the same snippet three times. To try the idea before you open an account, the free countdown timer generator makes a fixed-deadline timer up to 90 days out, with no watermark. A timer from the free generator works for 500 opens without an account, and for 1,000 once you sign in and claim it. Three sends to a whole list will use that quickly, so build the real one in an account.
Before you send
Questions about flash sale emails
Including the parts that do not work perfectly, because you will find those out either way.
Will the timer be accurate for someone on Apple Mail?
Yes, for this campaign. A flash sale counts down to one fixed instant, so the image is drawn against a real timestamp rather than against the moment it was fetched. Apple Mail Privacy Protection collects the image at delivery rather than at open, and testing reports it holds the copy for two to three days, but what it collected is still counting to 23:59 on Sunday. This is the one timing model that caching does not damage.
What does someone on Outlook for Windows see?
The first frame, and only the first frame. Outlook on Windows has never animated a GIF and it will not start now. Design frame one so it reads correctly on its own, with the deadline written in words beside the digits, so that Ends Sunday 23:59 is legible even with nothing moving.
How long does the animation actually run?
Thirty seconds by default, at one frame per second. That is thirty frames, enough for a reader to see the seconds moving and understand this is live, and the editor lets you set anywhere from 20 to 60. When the frames run out the GIF loops or holds its last frame, whichever you choose in the editor. Choose hold for a countdown, because one that jumps back up reads as broken.
What happens to people who open it three days late?
They see the expired graphic, not a counter frozen at zero. You choose that image when you build the timer and it replaces the countdown the second the deadline passes. Late openers are a real slice of any list, and this is the difference between a dead email and one that still says something.
Can different subscribers see different discount codes in the same image?
Yes, but not by putting a merge tag inside the image address. The address is signed, so a code your platform fills in after signing breaks the image for the whole send. A code drawn in the pixels needs one signed address per subscriber, made from a recipient list or through the API and held in a contact field, which is the Growth plan or above. On the one-address snippet, put each person's code in the link and the alt text, where your platform fills it in.
Campaigns that pair with a flash sale countdown
Put a flash sale countdown in your next send
Free for 5,000 opens a month, $19 for 250,000, and no developer needed at any point.