How to Generate 5,000 Personalized Images Without a Developer

You have a campaign going out to five thousand people and each one needs its own image. No developer available, and the send is soon.

The good news is that this is a solved problem and you do not need code. The better news is that the fastest route probably involves generating nothing at all.

First, work out which job you actually have

These sound like the same task and they are not. Getting this wrong is what turns a twenty-minute job into a two-day one.

Job A: the image needs to appear in an email. The recipient opens the email and sees a picture with their name, their city, their data on it. You never need to possess the image as a file - it only has to exist at the moment they look at it.

Job B: you need 5,000 actual files. Because you are attaching them, uploading them to a portal, printing them, or storing them as records. Certificates and tickets often fall here.

Most email campaigns are Job A, and most people approach them as though they were Job B. That is the mistake worth avoiding, because Job A has a much faster answer.

Job A: don't generate them

For an image displayed inside an email, you do not need a batch of files. You need one image URL that produces a different picture for each recipient.

The mechanics: build one design with a placeholder where the personalized part goes, then put its URL in your email with a merge tag where the value belongs.

https://media.okzest.com/img?c=YOUR-COMPANY-ID&i=YOUR-DESIGN-ID&name={{first_name}}

Your email platform substitutes each recipient's value as it sends, exactly as it does in the subject line. When someone opens the email, the image is generated for them at that moment.

The syntax for the merge tag is whatever your platform already uses:

Platform Merge tag
Klaviyo {{ first_name\|default:'there' }}
Mailchimp *\|FNAME:there\|*
ActiveCampaign %FIRSTNAME%
HubSpot {{ contact.firstname }}

Why this is the fast route:

  • There is no batch job. Nothing to run, nothing to wait for, nothing to check afterwards.
  • Volume is irrelevant. Five thousand and fifty thousand are the same amount of work, because the work is building one design.
  • You have no files to manage. Nothing to upload, name, or match to the right person.
  • You can fix mistakes after sending. Because the image renders on open, correcting the design updates it for anyone who opens afterwards. A typo caught an hour after send is recoverable, which is not true of attached files.

Realistically this is twenty to forty minutes of work, most of it spent building the design rather than on anything technical. No developer, no API, no code.

The one thing to watch: some recipients have images turned off, and some mail clients block them by default. That is true of every image in every email, personalized or not, so it should not change the decision - but do not put anything essential only in the image. Alt text and a text fallback cover it.

Job B: when you genuinely need files

Sometimes you do need the actual files. Certificates people download and print. Tickets. Anything going into a records system.

Two routes without a developer.

Zapier or Make. Connect your spreadsheet to OKZest through Zapier: each row triggers a generation, and the finished image comes back to be emailed or saved. Genuinely no-code, and it runs unattended once built. For five thousand rows it will chew through your task quota, so check that before you start - this is usually the real constraint rather than anything technical.

A batch from a spreadsheet. Upload the list, get the images back. Fewer moving parts than an automation chain when it is a one-off rather than an ongoing workflow.

Either way, budget more time than Job A. Not because generation is slow, but because of what comes next.

The bottleneck nobody warns you about

At five thousand images, the slow part is not making them.

It is possessing five thousand files and matching each one to the right person. They need consistent naming, somewhere to live, and a reliable way to attach the correct file to the correct email. That is a fiddly job at any volume and an unpleasant one at this volume, and it is where most of the time actually goes.

This is the strongest practical argument for Job A wherever it applies. Not that generation is faster - that the file-handling problem never comes into existence.

If you do need files, name them from a unique field in your data rather than a sequence number. CERT-1041.pdf matched to a reference in your spreadsheet is recoverable when something goes wrong. image_0417.png is not.

Before you generate anything, check the data

Fifteen minutes here saves the campaign. All of these are common and all are much easier to fix before a send than after.

Sort by name length and look at the longest. That is the one that will break your layout. Design around it rather than around "John Smith".

Look for junk in the name field. Exported lists contain lowercase entries, email addresses typed into the name box, blank rows, and the occasional "asdf". Five thousand rows will definitely contain some.

Set a fallback for empty fields. Decide what appears when the value is missing, and make sure it reads sensibly. An image with a blank space where a name should be looks broken.

Send yourself a test with real data - not with "Test Test", but with three or four genuine rows including the longest name and anything with an accent or apostrophe.

Check it on a phone. Most recipients will see it there first, and text that is comfortable on a laptop can be unreadable at phone size.

What "without a developer" actually means at this volume

It means what you would hope. Building the design is a visual editor task. Putting a URL into an email is a copy-paste. Neither requires anyone technical.

A developer becomes useful when you want generation triggered from inside your own product - a certificate issued automatically when a user completes something, for example. That is an API job. For a campaign going out from your email platform, it is not needed.

The thing that genuinely trips people up is not code. It is discovering at 4pm that the design breaks on long names.

Frequently asked questions

What's the fastest way to generate 5,000 personalized images for an email campaign? For images displayed inside an email, do not generate them as files. Build one design, put its URL in the email with a merge tag where the personalized value goes, and each recipient's image renders when they open. Volume makes no difference to the work involved, and there is no batch job to run.

Do I need a developer for this? No. Building the design is a visual editor task and adding the URL to your email is a copy-paste. A developer is only needed if you want images triggered programmatically from your own application.

How long does it take to set up? Usually twenty to forty minutes for a campaign, most of it spent on the design rather than anything technical. It is the same amount of work whether you are sending to five hundred people or fifty thousand.

What if I need the images as actual files? Then use a no-code automation through Zapier or Make, or a batch from a spreadsheet. Budget more time - not for generation, but for naming five thousand files and matching them to the right recipients, which is the part that actually takes effort.

Will the images slow down my emails? Images are generated when the email is opened and cached afterwards, so there is a brief render step measured in fractions of a second. Recipients do not notice it.

What happens if a recipient has images turned off? They see the alt text, as with any image in any email. Never put essential information only in the image - keep a text version of anything that matters.

Can I fix a mistake after sending? If the image renders on open, yes. Correcting the design updates it for anyone who opens afterwards. This is not possible with pre-generated files that have already been attached or sent.

What data can I personalize on besides a first name? Anything in your list - city, company, plan, a figure from their account, a reference number. First name is the default and the weakest, because everyone does it. Something specific to the recipient works considerably harder.

Getting it done today

If your campaign needs images inside the email, the job is: build one design, copy one URL, add your merge tag, send a test with your longest name in it.

OKZest generates personalized images from a URL, so there is no batch to run and no files to manage - the same setup covers five recipients or fifty thousand.

Create a free account, no credit card required.


Related reading: generating images from a CSV via the API, how a solo account manager can run personalized campaigns, updating images after sending.