Productivity and Utilities

Mail Merge Text Generator

Write a template with merge fields and paste your data to get one finished message per row.

Put a column name in double braces, such as {{First name}}. Add a fallback after a bar, such as {{Nickname|friend}}.

Up to 1,000 rows. Comma, semicolon, tab or pipe separated.

    Names and other cell values are only put into your template inside this page. Nothing is uploaded or stored, and nothing is sent.

    Next step

    How to use the mail merge text generator

    1. Write your message template. Put a column name in double braces wherever a value should go, such as {{First name}}. Add a fallback after a bar, such as {{Nickname|friend}}.
    2. Paste your data as CSV with a header row. The names in braces must match the header names, without regard to capital letters.
    3. Choose how messages are separated in the result: a line of dashes, a blank line or a numbered heading.
    4. Copy all the messages or download them as a text file. The result shows how many messages were made.

    One template, many messages

    A mail merge fills the same message with different details for each person. The template holds the fixed words and the merge fields, which are the names in double braces. Each row of the data fills the fields in one copy of the message. The sample has three rows, so you get three messages.

    In the sample, Ana and Cy have an empty Nickname cell, so the fallback gives friend, and Ben has Benny. Without a fallback, an empty cell leaves a blank, and the tool tells you how many blanks it left. Fields are matched by header name, so you can reorder columns freely.

    Checks before you send

    If the template uses a field that is not in the header row, the tool stops and names it, so a mistyped field does not turn into a blank in the middle of a sentence. Two columns with the same name also cause a message to be shown, since the tool could not tell which one to use.

    Read a few messages before sending any of them. Look for names with the wrong capital letters, dates in the wrong format and rows with a missing value. Keep each message honest and relevant to the person receiving it. To send, you can use the Mailto Link Generator for single messages and the Email Signature Generator for the closing. Count the length of text messages with the SMS Segment Calculator.

    Limits and privacy

    Up to 1,000 rows are read, with comma, semicolon, tab or pipe separated values. Cells with commas or line breaks must be in double quotes, as in standard CSV. The data is not sent anywhere and is not saved, so names and contact details stay on your device.

    The tool only fills in text. It does not send messages, look up addresses or check consent. Make sure you have the right to contact the people on your list. If you need to add details from another table first, join them with the CSV Join Tool.

    Assumptions and limits

    • The first row of the data is a header, and each following row creates one message.
    • Fields are matched by name ignoring capital letters, and the same field may appear several times in the template.
    • A fallback after a bar is used only when the cell is empty.
    • The tool creates text only and sends nothing.

    Formulas reviewed October 10, 2026. See the calculation methodology for how SumPanda rounds, tests and sources its formulas.

    Frequently asked questions

    What is a mail merge?

    It is a way to produce many personalized messages from one template and a table of data. Each row of the table fills the fields of the template to make one message.

    How do I add a default for an empty cell?

    Write a bar after the field name and the default text, such as {{Nickname|friend}}. The default is used when the cell is empty and ignored when it has a value.

    Why did I get an error about a field?

    The template uses a name that is not in the header row of your data. Check the spelling, or add the column. The message names the field that was not found.

    Are the names and details uploaded?

    No. Everything happens in your browser, and the data is not stored, so nothing leaves your device.