ActiveCampaign is built around automations, which changes the personalization question. It is not "how do I put someone's name in an image" - it is "how do I keep five emails feeling personal without sending the same graphic five times."
The mechanics take about ten minutes. The sequence design is what determines whether it works.
The mechanics first
An image in an email is a URL. ActiveCampaign substitutes personalization tags inside URLs exactly as it does in body text, so an image address containing a tag becomes a different image per contact.
https://media.okzest.com/img?c=YOUR-COMPANY-ID&i=YOUR-DESIGN-ID&name=%FIRSTNAME%
ActiveCampaign uses percent signs around tag names rather than curly braces:
| Field | Tag |
|---|---|
| First name | %FIRSTNAME% |
| Last name | %LASTNAME% |
| Email address | %EMAIL% |
| Custom field | %FIELD_NAME% as defined in your account |
Building it
1. Create the template. In OKZest, build a design at your target size - 600 x 300 works for most email headers. Add your background, logo and brand colours, then add a dynamic text layer where the personalization goes and name the field, name being the obvious choice.
Design around a long name rather than a short one. Your list contains longer names than your sample data does.
2. Get the image URL. OKZest gives you one URL with your fields as parameters. c is your company ID, fixed across your account; i identifies this design; everything after is a dynamic layer.
Test it in a browser with a few different values before going near ActiveCampaign - that separates template problems from ActiveCampaign problems.
3. Set fallback text. When you insert a personalization tag in ActiveCampaign, the tag picker lets you specify fallback text for contacts with that field empty. Use it. Every list has contacts with no first name, and without a fallback they get a blank space in the middle of a finished graphic.
4. Add it with a Code block. Drag a Code or HTML block into your email and paste a standard image tag:
<img src="https://media.okzest.com/img?c=YOUR-COMPANY-ID&i=YOUR-DESIGN-ID&name=%FIRSTNAME%"
alt="A message for %FIRSTNAME%"
width="600"
style="display:block; width:100%; max-width:600px; height:auto;" />
Three details matter: alt text containing the tag, so the message survives when images are blocked; an explicit width; and display:block with max-width so it behaves on mobile.
5. Preview with a real contact. ActiveCampaign lets you preview as a specific contact rather than with placeholder data. Check the longest name on your list, a contact with the field empty, and one with an apostrophe or accent.
Now the part that actually matters: the sequence
Here is where drip sequences differ from one-off campaigns, and where most implementations go wrong.
Do not use the same personalized image in every email. A name in a header is striking the first time. By the fourth email it is wallpaper, and worse, it starts to feel automated in exactly the way personalization is supposed to avoid. The contact notices the pattern, and once they notice the mechanism the effect is gone.
The useful principle: each email should personalize on something the previous one did not.
What to vary across a five-email sequence
An illustration rather than a prescription:
Email 1 - identity. Their name. It is the strongest opening signal and the one you always have.
Email 2 - context. Their company, industry, or how they arrived. Something that shows you know why they are here, not just who they are.
Email 3 - no personalized image at all. Give it a rest. A plain, useful email in the middle of a sequence resets the pattern and makes the next personalized one land again. This is the step people skip and it is the one that keeps the sequence from feeling mechanical.
Email 4 - their data. Progress, usage, what they have done since email one. This is the most powerful kind because it is information they did not have.
Email 5 - decision support. Their specific use case or plan. Personalization in service of the ask.
The pattern that matters is variation and pacing, not the specific fields. Five identical banners with a name swapped in reads as one automation. Five different reasons to feel addressed reads as attention.
Using ActiveCampaign's conditions
ActiveCampaign's strength is that it knows things about contacts and can branch on them. Two ways that helps here:
Different images for different segments. Use conditional content to show one image block to one segment and a different one to another - different design, different message, same automation.
Skip the personalized image when the data is missing. Rather than falling back to generic wording, use a condition to show a non-personalized block to contacts without the field. Often better than a technically-correct fallback that still reads slightly off.
Timing
Personalized images showing live data are only as good as the data at send time. In a drip sequence spanning weeks, a usage figure from email one may be stale by email four.
If you are rendering account data, make sure the field is being kept current rather than set once at signup. This is the most common cause of a sequence quietly making false statements about someone.
What to test
Sequences are good for testing because you have several emails and a stable audience.
Test position before design. Whether the personalized image sits above or below the first paragraph usually matters more than what is in it.
Test one email at a time, holding the rest of the sequence constant.
Measure click-through on delivered, not on opened - open rates are unreliable for reasons covered in our piece on personalized images and open rates.
Watch the whole sequence, not one email. A change that lifts clicks on email two and depresses them on email four has not helped.
Frequently asked questions
Can I use personalization tags inside an image URL in ActiveCampaign?
Yes. ActiveCampaign substitutes tags inside URLs the same way it does in body text, so %FIRSTNAME% in an image address produces a different image per contact. Use a Code or HTML block rather than the standard image block.
What is the personalization tag syntax in ActiveCampaign?
Percent signs around the field name - %FIRSTNAME%, %LASTNAME%, %EMAIL%, and your own custom field names as defined in your account.
How do I set a fallback for contacts with no first name? ActiveCampaign lets you specify fallback text when inserting a personalization tag through the editor. Always set one - a blank space inside a finished graphic looks broken.
Do I need a developer? No. Building the template is visual editing and adding it to ActiveCampaign is pasting one image tag into a Code block.
Should every email in a drip sequence have a personalized image? No. Repeating the same personalized element across a sequence makes it feel automated rather than personal. Vary what you personalize on, and include at least one email without a personalized image to reset the pattern.
Can I show different images to different segments? Yes - use ActiveCampaign's conditional content to display different image blocks based on contact conditions, within the same automation.
Does this work in automations as well as one-off campaigns? Yes. Personalization tags behave identically in automations, so the same image tag works in welcome series, abandoned cart flows and long nurture sequences.
What about contacts whose data changes mid-sequence? The image renders when the email is opened, so it reflects the data at that moment rather than at send. That is useful for live figures - but it means any field you render needs to be kept current, not set once at signup.
Build one and watch the sequence
The useful first step is not rebuilding your whole automation. Add one personalized image to the first email of an existing sequence, leave everything else alone, and compare click-through on that email against its own history.
If it moves, vary the personalization on email two rather than repeating it.
OKZest generates personalized images from a single template as a URL, so one image tag serves every contact in your automation with no per-recipient work. It works with ActiveCampaign and any other platform that accepts a custom image URL, and connects through Zapier or the API.
Create a free account, no credit card required.
Related reading: personalized images in Klaviyo, personalized images in Mailchimp, put every recipient's name inside your email image.