Mail Merge with Inline Images (Gmail & Google Sheets)
Add inline images to a Gmail mail merge from Google Sheets: put a logo or banner in your Gmail draft, keep emails light, and test rendering before sending.
How to Add Inline Images to a Mail Merge in Gmail and Google Sheets
Sometimes a campaign needs more than text and attachments — it needs a logo, a banner, or a product image shown right inside the email. With Mail Merge for Gmail and Google Sheets, you can include inline images in your personalized sends: put the image in the Gmail draft you use as your template, and every recipient gets it.
Try Mail Merge for Gmail and Sheets →
Inline images vs attachments: what’s the difference?
An attachment is a file the recipient downloads (a PDF, an image file). An inline image is displayed directly in the body of the email, so the reader sees it without opening anything.
Use inline images for on-brand visuals — a logo, a header banner, a product shot — that should be seen immediately. Use attachments when the recipient needs to keep or print a file. Many campaigns use both.
Preparing your images
Get your images ready before you build the template:
- Use owned or licensed images only. Do not reuse images you do not have the rights to.
- Keep them light. Large images slow loading and can hurt deliverability; resize to a sensible width for email.
- Decide hosting vs embedding. An image inserted from a public web address (URL) loads from that address when the email is opened, so it must stay online; an uploaded image is embedded in the message. Whichever you use, check your test email to confirm the image shows in the body.
- Add alt text so the message still makes sense if images do not load.
Adding a shared image to your template
For a single image that everyone receives — a logo or banner — insert it once into your Gmail template where you want it to appear. Every recipient gets the same visual, personalized only in the text around it. This is the most common setup for newsletters and announcements.
Send on-brand, image-rich emails from your Sheet →
Different images per recipient: what works
Mail Merge for Gmail and Sheets has no per-recipient image column. The images in your Gmail draft go to every recipient, and a placeholder such as {{image_url}} is replaced with the cell’s text, so the reader sees the address, not the picture. If people need different visuals, you have two honest options.
Send a link to each person’s image. Add a column that holds a public image URL per row, for example image_url:
| First Name | image_url |
|---|---|
| Maria | https://example.com/img/north.png |
| Sam | https://example.com/img/south.png |
Then write a line such as “Your banner: {{image_url}}” in the draft. Each recipient gets their own address as text (most email apps make it clickable), not an inline image. Make sure every URL is public, stable, and points to an image you are licensed to use.
Split the list by image. For a few variants, such as a north and a south banner, put each group on its own tab, make one Gmail draft per banner, and run one campaign per tab.
Keeping emails light for deliverability and mobile
Heavy, image-only emails are a known deliverability risk and load slowly on phones. Keep a healthy balance of text and images, compress files, avoid embedding many large pictures, and remember that some clients hide images until the reader clicks “display images” — so your message should still read well with images off.
Test send and check rendering
Before the full send, click Send Test Email. It sends one message to you, filled with row 2’s data (forward it to a colleague for a second look). Then check:
- images appear where you intend, at a reasonable size;
- if you use an image-link column, the link shows row 2’s URL;
- the email looks right on both desktop and mobile;
- alt text shows when images are blocked;
- no merge tags are left unresolved.
Frequently asked questions
Can I embed an image inside a Gmail mail merge instead of attaching it?
Yes. Insert the image in the Gmail draft you use as your template so it shows in the body of the email, separately from any file attachments.
Can each recipient get a different image?
Not as an inline image. The add-on has no per-recipient image column: images in your Gmail draft go to every recipient, and a placeholder like {{image_url}} is filled in as text. To vary visuals, put each group on its own tab with its own draft, or send each person a link to their image.
Should I host images or embed them?
Both work. An image loaded from a public URL must stay online; an uploaded image is embedded in the message. Whichever you use, check that it shows in the body of your test email before the full send.
Will inline images hurt deliverability?
They can if emails are heavy or image-only. Keep a balance of text and images, compress files, add alt text, and test send before sending to your list.
Do I need rights to the images I use?
Yes. Use only images you own or are licensed to use, and add alt text so the email still makes sense if images do not load.
Make your next campaign more visual
Inline images turn a plain merge into an on-brand email your readers actually want to look at. Prepare your images, add them to your Gmail draft, test send, and go.
