EmailTimer.App

Countdown timers and personalized images for Oracle Responsys

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

Oracle Responsys 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 Oracle Responsys 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
${profile.FIRST_NAME}
Coupon code
${profile.COUPON_CODE}
Deadline
${profile.OFFER_DEADLINE}
Email address
${profile.EMAIL_ADDRESS_}

Checked against Oracle Responsys's own documentation: Namespace Reference (Oracle Responsys Personalization Language), read on 17 September 2026.

The snippet to paste into Oracle Responsys

Put it in email message designer html source. 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 Oracle Responsys 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=${profile.COUPON_CODE}" target="_blank" rel="noopener">
  <img src="https://img.emailtimer.app/i/k7mQ2pXd.gif?w=w_8ha3fq&v=3&sig=YOUR_SIGNATURE" alt="${profile.FIRST_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 Oracle Responsys 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=${profile.COUPON_CODE}" target="_blank" rel="noopener">
  <img src="${profile.ET_IMAGE_URL}" alt="${profile.FIRST_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 Oracle Responsys

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 name the fields you want personalized. Choose Oracle Responsys as your platform.

  2. 2

    Match the datasource alias to your campaign

    RPL reaches your data through the alias you gave the personalization datasource, so ${profile.FIRST_NAME} means the FIRST_NAME column of the datasource aliased as profile. Swap the alias and the column name for the ones your campaign actually uses.

  3. 3

    Paste it into the message content

    In Email Message Designer, open the HTML source of the content block and paste the image tag where the banner would go.

  4. 4

    Proof it against a real record

    Send a proof to yourself against a seed record. Turn the RPL debug flag on if a field comes through blank, which is almost always an alias or column name mismatch rather than a problem with the image.

Things that only matter in Oracle Responsys

Responsys Personalization Language interpolates values with ${...}, and datasource fields are reached as ${alias.COLUMN}. The alias is whatever your campaign calls the personalization datasource, so the exact names in your account will differ from the examples here. Older campaigns built on the Responsys built-in functions rather than RPL use a different form.

Before procurement asks

You will have to explain this to someone in security

Running Oracle Responsys usually means a review before anything new goes near a send. The short version you can forward: an image URL goes in the template, the values it carries are the merge fields you choose, and no script runs anywhere. Nothing is installed inside Oracle Responsys and no data leaves your platform except what you put in that URL.

The Agency plan adds white-label image domains, so the URL your subscribers see reads as your own brand rather than ours, along with a separate workspace per brand or region and control over what each person on the team can touch. There is no dedicated IP option and no written uptime commitment; what the service does when something fails is on the status page.

What your Oracle Responsys subscribers will actually see

Responsys runs large batch launches. Because the countdown is calculated against a deadline rather than against launch time, everyone in the batch sees the correct time remaining regardless of which wave they were in.

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.

Oracle Responsys in practice

Oracle Responsys countdown timer, with RPL

By Danish Mohammed, founder. 5 min read

A countdown in Oracle Responsys is a signed timer image in the message’s HTML. For a date everyone shares, paste the fixed address. For a date per recipient, store one signed address per recipient in a profile extension table and let RPL write that column whole into the image source, ${ext.ET_IMAGE_URL}. RPL personalizes the link and the alt text; it never builds any part of the address.

Responsys has no countdown block of its own, and nothing in Oracle’s Responsys documentation that I read describes one. The top results for a Responsys timer search are about program timers, the step that pauses a program until a date, which is a different thing. So this page covers the email image, from the RPL syntax Oracle documents. It is one of four enterprise ESP guides, beside Iterable, Marketo Engage and Oracle Eloqua; the enterprise guide covers choosing a vendor for the programme.

The shared deadline, for a batch launch

Most Responsys countdowns are this one. A seasonal cut-off, a sale end, a holiday campaign last posting date: every recipient counts to the same instant. Publish the timer, copy the signed address, and paste the snippet into the message’s HTML. That is on every plan, including the free one.

A countdown beside the headline Last day for guaranteed delivery, reading 86 days 11 hours 59 minutes
A last-posting-date timer from the dashboard gallery, rendered by the product's engine at 12:00 UTC on 23 September 2026, counting to 23:59 UTC on 18 December.

Batch launches are where a shared address earns its keep. The time left is worked out when each mail client fetches the picture, against the deadline in the address, so a recipient in the last wave of a long launch sees the same correct number as one in the first. Nothing about launch time enters the arithmetic.

Oracle’s Working with Message Content says the Email Message Designer shows “the HTML source code and the live view of your email side-by-side”. Paste the snippet into the source where the banner would go. The designer’s image dialog also has an Enter URL option, “a web location of an image to insert”, which takes the fixed address if you would rather not touch the source.

Where RPL may personalize the snippet

The signature is the rule. Every image address here carries an HMAC-SHA256 signature over its path and every query parameter. If Responsys writes a value into part of the address during the launch, the signature no longer matches, and every recipient gets a grey “image unavailable” card at HTTP 200. Nothing reports an error.

Diagram of the timer snippet in RPL. The link, carrying a coupon code from the profile datasource, and the alt text, with a first name and a default, are marked as safe to personalize. The image source is one column from the profile extension datasource with a default of the campaign address, marked whole only.
The three slots in the snippet, and which of them RPL may fill.

RPL reaches data through the alias your campaign gives each datasource. Oracle’s Namespace Reference writes a field as ${alias.field}, and its own example is ${profile.email} for a datasource aliased profile. The aliases below, profile for the profile list and ext for the profile extension table, are examples; use the ones your campaign declares.

<a href="https://yourstore.com/sale?code=${profile.COUPON_CODE}" target="_blank">
  <img src="${ext.ET_IMAGE_URL!'https://img.emailtimer.app/i/k7mQ2pXd.gif?w=w_8ha3fq&v=3&sig=YOUR_SIGNATURE'}" alt="${profile.FIRST_NAME!'Hi'}, your offer ends soon" width="600" height="200" border="0" style="display:block; width:100%; max-width:600px; height:auto; border:0;" />
</a>

The ! after a field is RPL’s default value operator. Oracle’s Handling missing values gives the form unsafe_expr!default_expr, with examples in both quote styles, including ${seq[0]!'-'}. Single quotes keep the default from closing the double-quoted HTML attribute around it. Here a recipient with no address in the table gets the campaign timer rather than an empty src. The same page documents ?? to test whether a value exists, if you would rather show a different block altogether.

What RPL must not do is assemble the address: a base address followed by &deadline=${profile.RENEWAL_DATE}. The signature was taken over the address before Responsys ever saw it, so any value RPL adds breaks it for the whole launch.

A deadline per recipient, in a profile extension table

A renewal date or a contract end belongs to the person, so it needs one signed address per person, made before the launch. They come from a recipient list upload in the dashboard or from the REST API’s batch endpoint, up to 10,000 addresses per call, and both are on the Growth and Agency plans.

For an upload, put your Responsys recipient identifier in the file’s external_id column, the deadline in a deadline column as a full timestamp with a zone, such as 2026-12-01T09:00:00Z, and any values you want drawn into the picture, such as first_name. The download pairs each external id with its signed address.

Store the addresses in a profile extension table. Oracle’s Creating Profile Extension Tables describes a one-to-one relationship between a recipient and the profile table, which is exactly one address per person. A PET holds up to 20 attributes and a list can have up to 40 PETs, so a single-column timer table costs little. Give the column a text type long enough for the longest address in the file: a truncated address fails the signature in the same way an altered one does.

Five-step diagram. Your data holds a deadline and a key per recipient. EmailTimer.App signs one address per recipient before the send. The address is stored in a profile extension table column such as ET_IMAGE_URL, one row per recipient. At the send, RPL writes the column whole into src through the datasource alias in the campaign. At the open, the image service reads the token and draws that person's deadline. A warning says Responsys must not write a value into part of the address.
Where a per-recipient deadline is fixed, and what Responsys does with it.

Then add the PET to the campaign as a personalization datasource, give it the alias your RPL uses, and the snippet above picks it up. The address carries a recipient token and nothing else personal: the deadline and any name stay with the recipient list and are read at the open.

The dashboard’s snippet generator does not write RPL. Responsys is not one of the twelve platforms on its publish screen, so you copy the address or download the per-recipient file and write the ${...} yourself, as above.

What your recipients will see

Responsys hands the message to the mail client, and the client decides. In Outlook with animation off, Microsoft’s support page says, “If only the first frame of the animation appears, you have animations, or animated GIFs, disabled.” The first frame of every timer here is a complete, correct countdown, so that reader sees a still with the right number. Apple Mail’s privacy protection fetches images around delivery, and Gmail serves through its own proxy, which can answer a second open from a copy. The email client support page goes through each, from the vendors’ documentation rather than from tests in live inboxes.

Write the deadline in body text beside the image as well. RPL can print the same date there from the same datasource, and plain text survives every client.

Test before you launch

Send a proof to yourself against a seed record that has a real address in the PET column, and one against a record with the column empty, to see the default. Open the proof’s HTML source and compare the src with the address in the file, character for character. Then open the proof in Outlook and in a web client.

Questions and answers

Does Oracle Responsys have a countdown timer block?

Not in the Responsys documentation I read. A countdown in a Responsys email is an image from a timer service, pasted into the message’s HTML source or placed through the image dialog’s Enter URL option.

Can RPL add the recipient’s deadline to the timer URL?

No. The address is signed over every parameter, so a value RPL writes in at launch breaks the signature and every recipient gets the fallback card. Sign one address per recipient before the launch and let RPL output that column whole.

Where should the per-recipient address live in Responsys?

In a profile extension table, which Oracle describes as one-to-one with the profile table. Add it to the campaign as a datasource and reference the column through its alias.

What does a recipient with no address see?

With the ! default operator pointing at the campaign address, the shared timer. Without a default, an empty src and no image. Per-recipient addresses need Growth or Agency, which pricing compares.

Sources

Related

Campaigns to build in Oracle Responsys

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 Oracle Responsys send

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