An evergreen timer counts down a fixed length, such as 48 hours, separately for each reader. Use it in automations, where people receive the same email on different days.
How Inboxclock tells readers apart
The image URL carries a value that is different for each subscriber. Your email platform fills it in with a merge tag:
<img src="https://inboxclock.app/t/TIMER-ID.gif?r=*|UNIQID|*" … />
The first time Inboxclock sees a value for a timer, it records the time. That reader’s deadline is that time plus the timer’s length. Later opens, on any device, show the same deadline.
Inboxclock stores only a SHA-256 hash of the timer ID and the value. It never stores the raw email address or ID.
The Embed tab fills in the right tag when you choose your platform:
| Platform | Merge tag |
|---|---|
| Mailchimp | *|UNIQID|* |
| Klaviyo | {{ email }} |
| Kit | {{ subscriber.id }} |
| ActiveCampaign | %SUBSCRIBERID% |
| HubSpot | {{ contact.hs_object_id }} |
| FluentCRM | {{contact.id}} |
| MailerLite | {$email} |
| Brevo | {{ contact.EMAIL }} |
If your account uses another field, change the tag in the Embed tab. Any value that is stable for one subscriber works.
Start from a date instead
If your platform can print a date, such as the signup date, use start instead of r. The countdown then starts at that date, not at the first open:
<img src="https://inboxclock.app/t/TIMER-ID.gif?start={{ signup_date }}" … />
start accepts an ISO date such as 2026-10-27T09:00:00Z or a Unix timestamp in seconds or milliseconds. When both start and r are present, start wins.
When the merge tag is not filled in
Email editors and some previews show the tag as text, for example *|UNIQID|*. Inboxclock detects unfilled tags and ignores them. Without a value, each open shows the full length. Send a real test email to check the behavior.