Google Docs template from a spreadsheet: merge tags that work
A template is a normal Google Doc with gaps. Each gap is a tag. A tag names a column in your sheet. For each row, the tag is swapped for that row's value.
Most problems in a merge come from tags. A tag has a typo, or it names a column that is not there. This guide shows the rules Fillmore uses. Then you can check your own tags.
What a tag looks like
A tag is a column name inside double angle brackets:
<<Student Name>>
Fillmore also reads double curly brackets. Both of these fill from the same column:
<<Student Name>>and{{Student Name}}
Use whichever you know. You can mix them in one template.
How Fillmore matches a tag to a column
Fillmore reads the column names in row 1. Then it matches each tag in the template in this order:
- A column with exactly the same name.
- Otherwise, the one column with the same name when case and spaces are ignored. So
<<studentname>>matches "Student Name". - Otherwise, no match. You pick the column from a list in the sidebar.
Spaces just inside the brackets do not count. << Name >> is the same tag as <<Name>>.
If 2 columns match a tag, Fillmore does not guess. Say you have "Name" and "name". You pick one.
When a tag has no match, Fillmore looks for a close column name. It allows changes to about a third of the letters. So a typo like <<Scrore>> suggests "Score". A very short name gets no suggestion unless it is 1 letter off.
Try the tag checker
Paste a line from your template, and your column names. The checker uses the same rules as the add-on.
Check your tags
Paste a line from your template. Then paste your column names from row 1.
This result is for the sample text. Turn on JavaScript to check your own.
Matched 3 of 4 tags.
Parent nameFills from the column Parent Name. Case and spaces do not matter.Student NameFills from the column Student Name.ScroreNo column has this name. Did you mean Score?ClassFills from the column Class.
Where tags work
In a Google Doc, tags work in:
- the main text, and tables;
- headers, footers and footnotes;
- every tab of the document.
In Google Slides, Fillmore reads tags on every slide. It reads text boxes, shapes, tables and groups. It does not read tags in speaker notes, or on the master or layouts. Google's docs do not say if those get filled. So put every tag on the slides themselves. Source: Slides API requests, read 20 Oct 2026. The Slides guide has a full example.
Tags also work in the file name, the email subject and the email text. There, the rules are stricter. Write the column name exactly as in row 1, with the same case and spaces. A tag that matches no column is left blank. For example, a file name of "Report - {{Student Name}}".
What the value looks like
Fillmore uses each value as the sheet shows it. A date shows as "16 Oct 2026" if the cell shows that. A score of 95% stays "95%". It never becomes 0.95.
To change how a value looks, change the cell's format in the sheet. The letters guide shows how to set a date format.
A tag whose cell is empty becomes empty in the file. So check that each row has every value. Or fill blanks with a formula in the sheet.
Tips for tags that fill well
- Keep column names short. "Parent Email" is easier to type than a whole question.
- Copy the column name from row 1, then paste it into the tag.
- Do not use angle or curly brackets inside a column name.
- Make each text box big enough for the longest value.
- After you change the template, press Edit job. Fillmore reads the tags again.
Common questions
Do I need to write the tags in capitals?
Not in the template. There, Fillmore ignores case and spaces when it matches. <<STUDENT NAME>> fills from "Student Name". In the file name and the email text, write the column name exactly.
What happens to a tag with no column?
Fillmore will not save the job until each tag has a column. Pick one from the list next to the tag.
Can a tag hold a picture?
No. A tag is swapped for text only. Put pictures that are the same for everyone in the template itself.
Where do I start?
Follow the mail merge guide. It walks through a first run, step by step.