How to Put a Prospect's Own Logo or Website Inside Your Email Image

Text personalization has a ceiling. "Hi Sarah at Acme Corp" is better than "Hi there", but everyone does it and everyone knows how it is done.

Showing someone their own logo inside your graphic - or a screenshot of their actual homepage - clears that ceiling entirely, because it cannot be faked with a merge tag in a subject line. It looks like someone did the work.

The catch is that this is harder than text personalization, and it fails in ways text does not. This article covers how it works, the data you need, and the practical problems that will bite you.

Three levels of visual personalization

Worth being clear about what you are choosing between, because the effort and the payoff both climb.

Text. Their name, company, job title rendered into the image. Easy, reliable, and effective. Requires only data you almost certainly have.

Logo. Their company logo placed inside your design. Considerably more striking, and requires a logo source per company.

Screenshot. A live browser capture of their website inside your design. The strongest signal of effort, and the one with the most ways to go wrong. Requires a URL per recipient.

Most campaigns should start at text and only move up if the audience justifies it. Logos and screenshots are for high-value B2B outreach where each recipient is worth real effort - account-based marketing, enterprise prospecting, agency new business. For a fifty-thousand-person consumer newsletter, text is the right answer.

How it works

Both logos and screenshots are dynamic image layers rather than text layers. You place the layer in your template, then supply a value per recipient.

For a screenshot, the value is a URL:

https://media.okzest.com/img?c=YOUR-COMPANY-ID&i=YOUR-DESIGN-ID&name=Sarah&website=https://acme.com

In your email, that becomes a merge tag pointing at whatever field holds each prospect's website:

<img src="https://media.okzest.com/img?c=YOUR-COMPANY-ID&i=YOUR-DESIGN-ID&name={{ first_name }}&website={{ company_website }}"
     alt="A message for {{ first_name }} at {{ company }}"
     width="600" />

OKZest renders a real browser screenshot of that URL and composites it into your design. Screenshot layers can sit in front of or behind other layers, so you can overlay text on the capture, frame it in a device mockup, or tuck it behind a foreground element.

The API exposes the same behaviour with explicit flags - is_screenshot for a browser capture and is_logo for logo handling - if you are generating programmatically rather than through a URL.

The data problem, and how to solve it

This is the part that determines whether the campaign works. You need a website URL for every recipient, and most lists do not have one.

Check your CRM first. HubSpot, Salesforce, Pipedrive and most others hold a company domain field, often populated automatically by enrichment. If it is there, you are done.

Derive it from the email address. This is the trick that makes the technique practical at scale. [email protected] tells you the domain is acme.com. A formula in a spreadsheet extracts everything after the @ and prepends https://. For B2B lists this covers the large majority of your contacts at zero cost.

Filter out free email providers first. This matters more than anything else on this list. If you derive domains blindly, everyone on a personal address gets a screenshot of Gmail's homepage, and your carefully personalized outreach looks broken and slightly stupid. Exclude gmail.com, outlook.com, hotmail.com, yahoo.com, icloud.com and the rest, and either fall back to a generic image for those recipients or leave them out of the campaign.

Use enrichment for what is left. Clearbit, Apollo, Clay and similar can fill gaps, but for most B2B lists domain derivation gets you far enough that paid enrichment is not worth it for this alone.

What goes wrong with screenshots

Screenshots are the highest-impact option and the most likely to embarrass you. These are the real failure modes.

Cookie banners. A large proportion of websites present a consent overlay on first load, and a browser capture will often include it. You may end up sending a prospect a picture of their own cookie notice. Check a sample before you send, and if it is a problem, consider capturing a deeper page that is less likely to trigger the overlay.

Ugly websites. You are showing someone their own site. If it is dated or unattractive, you have drawn attention to that, which is an awkward opening for a sales conversation. This is not a technical problem but it is a real one - and it argues for screenshotting a specific page you have chosen rather than whatever their homepage happens to look like.

Sites that block automated capture. Some sites will not render for a headless browser, or will show a challenge page. You will get something unusable rather than nothing, so you need to look.

Slow or broken sites. A site that fails to load produces a blank or partial capture.

Loading states. Sites built around heavy JavaScript may capture mid-render, showing skeleton placeholders instead of content.

The mitigation for all of these is the same and it is not optional: review a sample of actual renders before sending. Twenty is usually enough to reveal a pattern. This is the step people skip, and it is the difference between a campaign that impresses and one that makes you look careless.

What goes wrong with logos

Less dramatic, but worth designing for.

Aspect ratios vary enormously. Some logos are wide wordmarks, some are square icons, some are tall stacked lockups. A layer sized for one will distort or crop another. Design the slot to accommodate the range, and give it generous space.

Backgrounds are inconsistent. Some logos come with transparency, some have a white box baked in. A white-boxed logo on your dark brand background looks broken. If you cannot guarantee transparency, design with a light panel behind the logo slot so both cases look intentional.

Some companies have no usable logo. Small businesses, sole traders, and anything pre-brand. Set a fallback - the company name rendered as text in a clean font is a perfectly good substitute and nobody will notice.

The line between impressive and creepy

Worth thinking about before you send, because this technique sits close to an edge.

Showing someone their own homepage reads as "I looked at your website", which is what a professional would do before making contact. That is flattering.

Showing someone their own homepage, their logo, their name, their job title, their recent funding round and the name of their competitor in the same graphic reads as "I have been building a file on you". That is not flattering, and the reaction is a deleted email at best.

Two practical rules. Use one strong personalization signal rather than five. The logo or the screenshot, plus their name, is plenty. And only use information they published themselves - a public website is fair game, and anything that required digging is not.

The test worth applying: if you said this out loud in a first meeting, would it sound like preparation or like surveillance? "I had a look at your site" is normal conversation. Reciting six facts about them is not.

Testing before you send

More important here than for text personalization, because the failure modes are visual and obvious.

  • Render twenty real records, not samples. Look at every one.
  • Check a free-email contact to confirm your filter or fallback works.
  • Check a company with a wide logo and one with a square logo.
  • Check a company with no website in the record.
  • Check the render in Gmail and on mobile, where the screenshot will be small - if the site is unrecognisable at that size, the personalization is wasted.

Frequently asked questions

How do I create thousands of images with each recipient's company logo? Add a dynamic image layer to your template for the logo, then supply a logo source per recipient from your data. The image URL takes the value as a parameter, so each recipient's email renders their own logo with no per-image work.

How do I get a website URL for every prospect? Check your CRM's company domain field first. For anything missing, derive it from the email address - everything after the @ is usually the company domain. Filter out free email providers before doing this, or you will screenshot Gmail.

What happens with personal email addresses? Exclude free email domains from the derivation and either fall back to a non-personalized image or leave those recipients out of the campaign. A screenshot of Gmail's homepage in a personalized email is worse than no personalization.

Will the screenshot include cookie banners? Often, yes - many sites show a consent overlay on first load and a browser capture may include it. Review a sample of real renders before sending, and consider capturing a specific interior page instead of the homepage.

What if a company's logo does not fit my layout? Design the logo slot for the range - wide wordmarks and square icons both - with generous space around it, and put a light panel behind it so logos without transparency still look intentional. Set a text fallback for companies with no usable logo.

Is showing someone their own website creepy? Not on its own - it reads as having done basic research, which is what a professional does before making contact. It becomes uncomfortable when combined with several other personal details in the same image. Use one strong signal, and only information they published themselves.

Does this work for consumer email campaigns? Rarely worth it. Logos and screenshots suit high-value B2B outreach where each recipient justifies the effort and the data exists. For large consumer lists, text personalization is the right level.

Can I combine a screenshot with text and logos in the same image? Yes. Screenshot layers can sit in front of or behind other layers, so you can overlay text, frame the capture in a mockup, or place it behind foreground elements.

Try it on twenty prospects first

The way to evaluate this is not to reason about it, it is to render twenty real records and look at them. That takes about half an hour and tells you immediately whether your data is good enough and whether the results look impressive or awkward.

OKZest renders browser screenshots and logos as layers in a single template - one URL, a different image per recipient, no manual capture. It works with any email platform that accepts a custom image URL, and connects through Zapier or the API.

Create a free account, no credit card required.


Related reading: dynamic screenshots, cold email personalization, put every recipient's name inside your email image, OKZest for sales teams.