Evergreen Countdown Timers: How They Work & Why Yours Shows Zeros
You created an evergreen timer, sent yourself a test email, and the timer shows 00:00:00:00. Is it broken? Most likely not. This article explains why.
Important: This article applies to evergreen timers with the "When email opened" trigger. If you're using the "When email sent" trigger, the mechanism is different and the issues described here do not apply.
What Is an Evergreen Timer?
A regular (Fixed Date) countdown timer counts down to a specific moment in time. If you set it to January 1st at midnight, every recipient sees the same countdown, regardless of when they open the email.
An evergreen timer is different. It creates a personal deadline for each recipient.
Instead of "Sale ends January 1st," it is "Your offer expires in 48 hours." Those 48 hours start when that specific person opens the email.
Common use cases:
- Abandoned cart sequences ("Complete your order within 24 hours")
- Trial expiration reminders ("Your free trial ends in 3 days")
- Automated webinar funnels ("Replay available for 48 hours")
- Welcome sequences with special offers ("New subscriber discount expires in 72 hours")
For step-by-step setup instructions, see our Evergreen Timer Setup Guide.
How Evergreen Timers Work (When email opened trigger)
Here is what happens behind the scenes:
STEP 1: You create an evergreen timer set to 48 hours
STEP 2: You send an email campaign with the timer
The embed code contains a unique ID for each recipient:
src="...i.countdownmail.com/xyz.gif?id={{ email }}" Your ESP replaces {{ email }} with the recipient's address.
STEP 3: Recipient opens the email
Our server receives request: "[email protected]"
We check: Have we seen this ID before?
- → NO: Start 48-hour countdown and save the start time
- → YES: Calculate remaining time from the saved start time
STEP 4: We generate a GIF showing the remaining time
John opened on Monday 10:00
→ His deadline is Wednesday 10:00
Jane opened on Tuesday 14:00
→ Her deadline is Thursday 14:00
Key points:
- The server saves the first open time for each unique ID
- Once started, the countdown runs
- When expired, it shows zeros or whatever you configured in "After Count"
- Repeated opens with the same ID show remaining time or zeros if expired
Why Your Timer Shows Zeros
If you're seeing zeros, go through this checklist.
✓ Cause 1: You're using the wrong embed code
This is the most common cause.
There are two typical variations of this mistake:
Variation A: You copied code from a regular timer, not Evergreen
Evergreen timers require a special embed code with the ?id= parameter. If you accidentally copied code from a Fixed Date timer, it does not include this parameter. In that case, the timer behaves like a regular one.
Evergreen code: ...i.countdownmail.com/xyz.gif?id={{ email }}
Fixed Date code: ...i.countdownmail.com/xyz.gif
↑ no ?id=
Variation B: You copied Evergreen code, but from the wrong ESP
Each ESP uses its own syntax for personalization. If you copied code for Mailchimp but you're using Klaviyo, the tag will not be replaced with the recipient's email.
Example of the problem:
You're using Klaviyo, but copied Mailchimp code:
...i.countdownmail.com/xyz.gif?id=*|EMAIL|* Klaviyo doesn't understand *|EMAIL|*. That is Mailchimp syntax.
The tag stays as-is: ?id=*|EMAIL|*
All recipients use the same ID.
Timer expires for the first person who opened it, so the next opens show zeros.
How to check:
- Look at your embed code
- Is there an
?id=parameter? - Does the tag match your ESP's syntax?
| Your ESP | Correct tag |
|---|---|
| Klaviyo | {{ email }} |
| Mailchimp | *|EMAIL|* |
| ActiveCampaign | %EMAIL% |
| HubSpot | {{ contact.email }} |
| ConvertKit | {{ subscriber.email_address }} |
| Campaign Monitor | [email] |
| GetResponse | {{CONTACT "subscriber_email"}} |
| SendPulse | {{email}} |
How to fix:
- Open the timer in CountdownMail
- Make sure Evergreen type is selected
- In the Embed Options section, select your ESP from the list
- Copy the generated code
If your ESP isn't in the list, see our guide for creating code for any ESP.
✓ Cause 2: You already tested this timer before
Here is a typical scenario:
- You created the timer in October
- Sent yourself a test and everything worked
- Time passed and you forgot about that test
- In December you decided to launch the campaign
- Sent yourself another test and got zeros
You might think the timer is broken. In most cases it is not.
Your email ([email protected]) already used its timer before. The server saved the first open time for this ID. If that countdown already expired, new tests to the same address will show zeros.
When you send the real campaign to subscribers, each of them will get a fresh timer. Their email addresses have not been used with this timer yet.
How to check: Think back. Did you ever send yourself this timer before, even once?
How to fix: Send a test to a different email address that has never received this timer.
✓ Cause 3: You're looking at the ESP editor, not a real email
Email editors (Klaviyo, Mailchimp, HubSpot, and others) show a preview while you're editing. This preview loads the timer and starts the countdown for some internal editor ID.
If you created the timer a week ago and opened the editor since then, the preview may have already used its timer. If it expired, the editor can show zeros.
How to check: Are you seeing zeros only in the editor, or in a real sent email too?
How to fix: Do not rely on the editor preview. Test only by sending a real email to a new email address.
✓ Cause 4 (rare): The timer is deactivated
If the timer status is "Inactive", it shows zeros for all recipients regardless of settings.
How to check: Open the timer in CountdownMail. In the Basic section, check Status. It should be set to "Active".
How to Test Evergreen Timers Correctly
The main rule: each test needs a new email address.
Your work email already used the timer during earlier tests. The server saved the first open time for that ID. Repeated tests to the same address will show either remaining time or zeros if expired.
Method 1: Use a different email address
Send to your personal email, a colleague's email, or any address that has never received this timer.
Method 2: Use a temporary email
Services like 10minutemail.com provide disposable addresses that work well for testing.
Method 3: Modify the ID in the URL manually
Open the timer link in a browser and add a suffix to the ID:
Before: https://i.countdownmail.com/[email protected]
After: https://i.countdownmail.com/[email protected]_test123
Each unique ID starts a brand new timer.
Method 4: Wait it out
If you have a 1-hour timer, wait an hour after your last test. The next open will start a new countdown.
Tip: Add your IP to "Ignored IP Addresses" in your profile settings. Then your tests won't consume credits.
What About the "When email sent" Trigger?
If you're using the "When email sent" trigger, the mechanism is different. Your ESP passes the current timestamp in the URL with each send.
...i.countdownmail.com/xyz.gif?send_time={{ now | timestamp }} Each sent email gets a fresh timestamp. The server does not save anything. It simply counts down from the passed time.
Because of this, the repeated testing problem does not exist for this trigger. Every test should be correct.
What Shows After the Timer Expires?
When the timer expires, it shows whatever you configured in the "After Count" option (Design section):
- Show Zeros - zeros (default)
- Show Expiration Message - your text (for example, "Offer expired")
- Show Expiration Image - your image
- Hide Timer - timer completely hidden
- Reset and Repeat - timer starts over (use with caution)
Common Setup Mistakes
Mistake 1: You did not select your ESP when copying code
When creating an evergreen timer, select your ESP in the Embed Options section. If you select a different one, the personalization tag will not work in your platform.
Mistake 2: You copied code from a Fixed Date timer
Make sure "Countdown Timer Type" is set to Evergreen, not Fixed Date. Only then will the code include the ?id= parameter.
Mistake 3: You tested in the editor preview
Zeros in the editor preview do not mean zeros for recipients. The editor uses an internal ID that can expire. Real recipients have their own IDs.
Evergreen vs Fixed Date: Comparison
| Aspect | Fixed Date | Evergreen |
|---|---|---|
| Deadline | Same for everyone | Unique per recipient |
| Use case | Sales and events | Funnels and automations |
| Setup | Date and time | Duration (hours or days) |
| Embed code | Standard | With unique ID |
| Testing | Just open it | Use a new email per test |
FAQ
Can I reset the timer for a specific recipient?
No. Once the server saves the start time for an ID, it cannot be reset. You would need to send a new email with a different timer or change the ID.
Why does the Klaviyo or Mailchimp editor always show zeros?
The editor already opened the timer on first view. Its internal ID used up its countdown and then expired. This does not affect real recipients. They have their own IDs.
Can I change the duration after sending?
Yes. For recipients who already opened, the countdown continues from their saved start time. If the new duration is shorter and time has passed, they may see the expired state.
How do I know which trigger I'm using?
Open the timer in CountdownMail, then go to Embed Options and check the "Countdown starts" field. It will say either "When email opened" or "When email sent".
Summary
- Evergreen means a personal deadline for each recipient
- For the "When email opened" trigger, the server saves the first open time for each ID
- Zeros usually mean the timer expired, not that it is broken
- The main cause of problems is the wrong embed code (wrong timer type or wrong ESP tag)
- The solution is to check the code and test using a new email address each time