---
title: 'How to Add Personalized Images to Mailchimp Emails (Step-by-Step)'
meta_title: 'How to Add Personalized Images in Mailchimp (8 Easy Steps)'
meta_description: 'Add personalized images to Mailchimp emails with merge tags. Map audience fields to a dynamic image URL and give every subscriber a unique banner in 8 steps.'
excerpt: 'A step-by-step tutorial: map Mailchimp merge tags to a dynamic image URL and send every subscriber a personalized banner — no design tools or code required.'
featured_image: /images/blog/how-to-add-personalized-images-in-mailchimp.png
categories:
    - 'Email Marketing'
keywords:
    - 'personalized images in mailchimp'
    - 'mailchimp merge tags image'
    - 'dynamic images in mailchimp'
    - 'mailchimp personalized email images'
    - 'mailchimp code block image'
    - 'mailchimp merge tag image url'
---

[Mailchimp](https://mailchimp.com) lets you personalize almost everything in a campaign — the subject line, the greeting, the preview text. Except the part people actually look at first: **the image**. Merge tags work beautifully in text, but a picture is baked into pixels, so every subscriber sees the same banner no matter how good your segmentation is.

The workaround is simpler than it sounds. Instead of uploading an image, you embed a **dynamic image URL** that contains your merge tags — `*|FNAME|*`, `*|MMERGE7|*`, whatever your audience has. Mailchimp fills in the tags per contact at send time, and the image renders with each person's data baked in. One banner in your template, a thousand variations in the inbox.

In this tutorial we'll build a personalized birthday campaign end to end, in eight steps: design the banner in ogdynamic, grab the merge tags from your Mailchimp audience, map them to the image, and paste the generated HTML into your template. It takes about fifteen minutes and zero code.

## What You Need

- An [ogdynamic](https://ogdynamic.com) account with a canvas — any size works, but 1200×628 is the sweet spot for email banners
- A Mailchimp audience with at least one custom field worth personalizing (first name, birthday, plan, coupon code…)
- A Mailchimp campaign or template you can edit in the email builder

## Step 1: Design Your Banner

![Designing a birthday gift banner with a dynamic recipientName text layer in the ogdynamic Studio editor](/images/blog/steps/design-dynamic-email-banner-ogdynamic-studio.webp)

Open the [ogdynamic Studio](https://ogdynamic.com/canvases/create) and design the image exactly as you want it to appear in the inbox. In this example we're building an "Email — Birthday Gift" banner: headline, discount code, call-to-action button, confetti.

Before you get too far in, decide **which text should change per subscriber** and toggle those layers to **dynamic**. In the screenshot above, the name layer is marked as a dynamic field named `recipientName` — that's the slot each contact's own name will drop into. Every dynamic layer gets:

- a **parameter name** (`recipientName`) that appears in the image URL
- a **default value** ("Jordan!") that renders whenever no value is provided

That default is more important than it looks. It's what shows in the builder preview, in archived campaigns, and for any contact whose field is empty — so make it look intentional, not like a placeholder.

## Step 2: Go to Audience Fields and Merge Tags

![Opening Audience fields and merge tags from the Add contacts menu in Mailchimp](/images/blog/steps/mailchimp-audience-fields-merge-tags-menu.webp)

Over in Mailchimp, open your **Contacts** (Audience) page and click the **three-dot menu** next to **Add contacts**. From that menu, choose **Audience fields and merge tags** — that's where every field on your contacts lives, alongside the merge tag that references it.

If the menu looks different for you, make sure you're on the audience you plan to send from: each audience has its own fields and its own tags.

## Step 3: Find the Merge Tags You Need

![Mailchimp audience fields table listing merge tags like *|MMERGE7|* for Full Name and *|MMERGE4|* for Birthday](/images/blog/steps/mailchimp-audience-merge-tags-list.webp)

You'll land on a table of your audience fields: **Field label**, **Data type**, **Merge tag**, and the default value. Standard fields look like `*|EMAIL|*` and `*|MERGE0|*`; custom fields usually get numbered tags like `*|MMERGE2|*` for First Name or `*|MMERGE7|*` for Full Name.

Copy the exact tags for the fields you want in your image — in this campaign, that's `*|MMERGE7|*` for the recipient's full name. Mailchimp also publishes a [merge tags cheat sheet](https://mailchimp.com/help/all-the-merge-tags-cheat-sheet) if you want the full reference, but the golden rule is simple: **use the tags exactly as your audience page shows them.**

## Step 4: Open the Canvas Integrations Page

![Clicking the Integrations button on the Email — Birthday Gift canvas card in My Studio](/images/blog/steps/ogdynamic-studio-integrations-button.webp)

Back in ogdynamic, head to [My Studio](https://ogdynamic.com/canvases) and find your canvas card. Click the **Integrations** button on the card (next to "Copy link").

This opens the canvas's integrations page, where the bridge between your design and your email platform happens.

## Step 5: Map Merge Tags and Copy the HTML

![Mapping dynamic fields to Mailchimp merge tags and copying the generated HTML snippet on the integrations page](/images/blog/steps/mailchimp-merge-tag-mapping-html-code.webp)

On the **Mailchimp** tab, every dynamic field from your canvas shows up with an input for its merge tag — `recipientName= *|MMERGE7|*` in our example, plus headline, message, code, and CTA fields. Paste the tags you copied in step 3, one per field. The live preview re-renders instantly with the raw tags in place, so you can confirm the mapping before touching Mailchimp.

Then scroll down to the **Personalize images per contact** section:

- **Clickable link** _(optional)_ — a URL wrapped around the whole image, so clicking the banner in the email opens your landing page
- **Image URL** — the dynamic URL with your merge tags in the query string, e.g. `https://cdn.ogdynamic.com/c/01m6k…?recipientName=*|MMERGE7|*`
- **HTML** — a ready-made, email-safe table snippet containing that URL

Copy the **HTML** — that's the piece Mailchimp needs. If you'd rather place the image with Mailchimp's own Image block, copy the **Image URL** instead and paste it as the image source. (On MailerLite? The same tab handles it.)

## Step 6: Add a Code Block to Your Email Template

![Selecting the Code content block in the Mailchimp email builder](/images/blog/steps/mailchimp-email-builder-code-block.webp)

Now open your campaign or template in the Mailchimp email builder. From the **Content blocks** panel, drag the **Code** block into your layout where the banner should appear.

The Code block is what allows raw HTML — and that's what lets merge tags live inside an image URL. Mailchimp's regular Image block uploads a static file, so it can't do this.

## Step 7: Paste the HTML Code

![Pasting the ogdynamic HTML snippet into the Mailchimp code block editor](/images/blog/steps/mailchimp-paste-html-code-block.webp)

Click into the Code block and paste the snippet from step 5. Mailchimp renders it immediately, and you'll see your banner appear right in the layout — with the literal merge tag showing where the name will be. That's expected: the builder preview doesn't know who "you" are yet.

The snippet is a plain table with an `<img>` inside, so it plays nice with email clients. There's nothing to style or fix — the width is already set to scale to the template.

## Step 8: Preview Your Email Before You Send

![Enabling live merge tag info to preview the personalized image with real contact data in Mailchimp](/images/blog/steps/mailchimp-preview-personalized-image.webp)

Before you hit send, prove the personalization works. In the preview panel, toggle **Enable live merge tag info** on — Mailchimp substitutes your own contact data into the merge tags, and the image re-renders with **your** name in it.

A few things worth checking in this final screen:

- **The image actually personalizes.** If you still see the literal tag, re-check the mapping in step 5.
- **Email size.** The counter in the preview shows how close you are to Gmail's 102 KB clipping limit — a rendered image is one URL, not a base64 blob, so you'll stay far under it (28 KB in this example).
- **Send yourself a test.** The inbox is the final judge of how the banner sits next to your copy.

## Make Every Send Feel Handwritten

That's the whole setup: design once, map your merge tags, paste one snippet. From here on, every campaign you send with this template renders fresh images per recipient — new subscribers, updated fields, and seasonal tweaks included without you exporting anything.

Want the "why" behind this technique — how merge-tag rendering works and when it beats exporting a folder of JPEGs? We break it down in [Personalized Images in Mailchimp: One URL, Every Recipient](https://ogdynamic.com/blog/mailchimp-personalized-images). Or skip the theory: [start a canvas](https://ogdynamic.com/canvases/create) and map your first merge tag in minutes.

## FAQ

**Can Mailchimp personalize images per contact natively?**

No. Mailchimp merge tags work in text, links, and subject lines, but a static image can't contain them. The fix is a dynamic image URL: merge tags go in the image's query string, and the image renders per recipient at send time.

**Do merge tags work inside an image URL in Mailchimp?**

Yes — when the image is embedded through a Code content block. Mailchimp substitutes merge tags anywhere in the campaign's HTML, including the `src` of an `<img>` tag.

**Why does my personalized image show the merge tag instead of the name?**

You're looking at the builder preview, which has no contact data. Toggle **Enable live merge tag info** in the preview panel, or send yourself a test campaign — real data only appears per actual recipient.

**What happens if my merge tag value is empty?**

When a contact's field is empty, Mailchimp passes an empty value into the URL — and the image renders the default you set for that layer in the canvas editor. That's exactly why intentional defaults matter: they become the fallback design for every contact without that field.

**Which merge tags should I use in the image URL?**

The ones from your own audience's _Audience fields and merge tags_ page. Default fields like `*|FNAME|*` and numbered custom fields like `*|MMERGE7|*` both work — copy them exactly as Mailchimp displays them.
