Word mail merge to individual PDF files

25 August 2026 · 6 min read

Short version

  • Word merges to one document holding every record, not one file per record.
  • Your options: a VBA macro, splitting the merged PDF afterwards, or generating a PDF per row from the start.
  • The third needs no code. Load the spreadsheet, reuse the .docx you already have, download a ZIP.

Why the merge gives you one file

Word's mail merge was built for a printer. Finish & Merge → Edit Individual Documents hands you a single document with a section break between each record, which is the right shape when the next thing that happens is paper coming out of a tray.

It is the wrong shape when the next thing is an email attachment or a folder of files, and Word has no step that turns those sections into separate documents. Printing the result to PDF makes it worse: instead of one document with 200 sections you now hold one PDF with 200 pages.

Three ways out

Run a macro. A dozen lines of VBA loop over the records and save each one as its own PDF. It works, and people have been pasting the same snippet into each other's documents for fifteen years. You are putting code you cannot read into a document that matters, it breaks when the template changes, and it does not run on Word for Mac or on the web version.

Split the PDF afterwards. Merge to one PDF, then cut it every N pages with a PDF tool. This is fine while every record is the same length. The moment one client's quote runs onto a second page and another's does not, the splits land in the wrong places, and nothing tells you. You find out when a customer receives half of somebody else's contract.

Generate one file per row. Skip the single document. Read the spreadsheet, produce a PDF for each row, name each file, zip them. No macro, and no assumption about how long a record turns out to be.

If what you need is one document to print, stop here. Word's merge already does that, and it does it well.

Step by step, without a macro

What follows uses boolkpdf, which is the tool we make. It runs in the browser.

  1. Load the spreadsheet. CSV or Excel. One row becomes one document, and the column names become the placeholders you can drop into the text.
  2. Bring the template you already have. Import the .docx instead of retyping it. Bold, italics, links, alignment, tables and the letterhead all survive the trip. Section breaks and the horizontal rules Word draws as floating shapes do not, and the app lists what it could not carry over rather than letting you find out in the preview.
  3. Drop the placeholders in. Click a column name and it lands where the cursor is. They are objects, not {{text}}, so you cannot delete half of one and leave a broken tag behind.
  4. Check the first row. The preview renders the real PDF with real values from row one. This is where you catch a placeholder sitting in the wrong sentence.
  5. Name the files (see below).
  6. Generate. Every PDF is built and packed into one ZIP.

Name the files before you generate

This is the step people skip and then regret. A folder of document_1.pdf through document_200.pdf is unusable: you cannot find one, and you cannot attach the right file to the right email without opening each.

Build the name from your own columns instead, the same way you build the document: Quote_{{client}}_{{date}}.pdf. Two clients with the same name get (2) appended rather than one silently overwriting the other. If you plan to send these with a mail merge tool later, the file name is what it matches on, so this step decides whether that works.

Problems, and what they are

A placeholder has no column. You wrote the template for last month's spreadsheet and this month's has customer where the old one had client. This costs the whole batch, so it is flagged in three places before you generate. It does not block you: a template written before its data is legitimate.

A date comes out as 45930. That is Excel's serial number for the day. Format the column as a date in Excel and the tool prints what you see in the cell. There is no date syntax to learn here, and no second place for the formatting to live.

An accented letter shows as an empty box. Word sometimes stores é as two characters, the letter and the accent. The generator normalises those before printing, along with tab characters, which no font has a glyph for.

The spreadsheet is too large to load. Reading it happens on the main thread, so a very large file freezes the page while it works. Cutting the columns the documents never use is usually enough.

If you also need them sent

We do not send email, and there is no plan for it this year. What we produce is a folder of correctly named PDFs, which is what the tools built for sending expect: Yet Another Mail Merge on Gmail and Mail Merge Toolkit on Outlook both attach a file per row of a sheet. Set the file name pattern above to match the column they key on and the two halves fit together.

Questions

Does my spreadsheet get uploaded? No. It is read in your browser and the PDFs are made there. Open your browser's network tab while you generate and you will see nothing leave.

Do I need an account? Not to do any of this. Generating and downloading are free, up to 25 rows in one batch. An account is for keeping the template so it is still there in six months.

Will it look exactly like my Word file? Close, not identical. The import is a starting point you correct once, and from then on the template lives here. Pixel fidelity with Word was never the goal, and the app tells you what it changed.

Can I do this with 300 rows? Yes. Three hundred PDFs take a couple of seconds, because your machine does the work rather than a queue on somebody's server.

Try it with your own spreadsheet →