How to remove blank rows from a mail merge contact list
- Step 1Export or prepare the contact list — Download the contact CSV from your form tool, CRM, or spreadsheet. If it's a workbook, you can drop the
.xlsx/.xls/.odsdirectly — no need to Save As CSV. - Step 2Drop the list onto the Empty Row Remover — Drag the file into the dropzone. Removal runs automatically; there are no options. The delimiter is auto-detected.
- Step 3Confirm the contact count — The panel shows Total rows in, Empty rows removed, and Rows out.
Rows outminus the header row is the number of records your merge will produce. Verify it matches your expected contact count. - Step 4Review partially-filled rows in the preview — The 10-row preview shows the result. Look for contacts missing an email or name — those are kept on purpose. Decide whether to fix or exclude them before the merge.
- Step 5Download the cleaned list — Click Download; the file saves as
<original-name>.no-empty-rows.csv(or the matching workbook format if you dropped a workbook). - Step 6Run the merge — Use the cleaned file as your Word / Google Docs / email-tool data source. Every record now corresponds to a real contact.
What a blank row does in each merge engine
Why removing blank rows before a merge matters. The tool removes only rows where every cell is empty.
| Merge engine | Effect of a blank data row | Fixed by removing it? |
|---|---|---|
| Word Mail Merge (letters) | Produces a blank/address-less page in the merged document | Yes |
| Word Mail Merge (email) | Attempts a send with an empty To: / fields — error or empty email | Yes |
| Google Docs add-ons (Autocrat etc.) | Generates one empty output doc per blank row | Yes |
| Spreadsheet-driven email scripts | Iterates the blank row and may send an empty message | Yes |
| Mailchimp / ESP import | Skips truly-empty rows, but partial rows can import as bad contacts | Partly — empties removed; review partials |
Which contact rows are kept vs removed
A contact is removed only when every field is empty. Partial contacts are preserved for review.
| Row | Status | Reason |
|---|---|---|
| Sue,sue@x.com,555-0100 | Kept | Full contact |
| Jon,,(no phone) | Kept | Has name + email |
| ,jon@x.com, | Kept | Has email — review for missing name |
| ,, | Removed | Every field empty |
| , , | Kept | A cell holds a space — not empty (trim first) |
Cookbook
Before/after rows from real contact lists. PII is anonymised. Header row shown.
Blank rows between pasted contact batches
ExampleYou pasted three batches of contacts into a sheet with a blank row between each. Exported to CSV, those blank rows would each become a phantom merge record. The tool removes them.
Input: Name,Email Sue Lee,sue@x.com , Jon Park,jon@x.com , Mia Ross,mia@x.com Output: Name,Email Sue Lee,sue@x.com Jon Park,jon@x.com Mia Ross,mia@x.com
Contact missing an email is KEPT for review
ExampleA row with a name but no email is a real contact with a data gap, not a blank row. The tool keeps it so you can chase the missing email rather than silently dropping the lead. Decide whether to exclude it before an email merge.
Input: Name,Email Sue Lee,sue@x.com Jon Park, , Mia Ross,mia@x.com Output (Jon kept, blank removed): Name,Email Sue Lee,sue@x.com Jon Park, Mia Ross,mia@x.com
Trailing empty rows from the export
ExampleA spreadsheet export padded with trailing blank rows would add empty records to the end of the merge. The tool strips them.
Input: Name,Email Sue Lee,sue@x.com Jon Park,jon@x.com , , Output: Name,Email Sue Lee,sue@x.com Jon Park,jon@x.com
A spacer row with a space is NOT removed
ExampleIf a separator row has a single space in one cell, the tool keeps it — it never treats a space as blank. Run csv-whitespace-trimmer first to clear the space, then this tool removes the now-empty row. Otherwise that row becomes a blank merge record.
Input (the spacer has a space in the Name column): Name,Email Sue Lee,sue@x.com , Jon Park,jon@x.com Output (space-bearing row preserved): Name,Email Sue Lee,sue@x.com , Jon Park,jon@x.com Fix: /tool/csv-whitespace-trimmer first, then re-run.
Remove blanks, then deduplicate the list
ExampleThe recommended order for a clean send: remove empty rows first so the dedup pass works on real contacts only, then collapse duplicate emails. Run this tool, download, then send the result through the deduplicator.
Step 1 — this tool removes the blank row: Name,Email Sue Lee,sue@x.com , Sue Lee,sue@x.com → Name,Email Sue Lee,sue@x.com Sue Lee,sue@x.com Step 2 — /tool/csv-deduplicator collapses the duplicate: Name,Email Sue Lee,sue@x.com
Errors and edge cases
Real errors and silent failures sourced from each platform's own documentation. Match the wording to the row, fix what the row says to fix.
Contact missing only the email
PreservedA row with a name but a blank email is a real contact, not a blank row, so it is kept. For an email merge, review or exclude these manually — the tool won't drop them because doing so would silently lose a lead. Use csv-column-filter with is_not_empty on the email column to isolate sendable contacts.
Spacer row with a space in a cell
PreservedA 'blank' separator row that actually holds a space is kept, because the tool tests for the literal empty string without trimming. That row would become a blank merge record. Run csv-whitespace-trimmer first, then this tool.
Header row above a blank line
By designA blank row above the header is removed and the header becomes row 1 — good, because Word's merge field mapping reads row 1 as field names. If the header itself were genuinely all-empty it would be removed too; there is no special header protection in the browser path.
Duplicate contacts (not blank)
Out of scopeThis tool removes empty rows, not duplicates. Two identical contacts are both kept. Remove empties first, then collapse duplicates with csv-deduplicator.
Email wrapped in angle brackets from an Outlook paste
PreservedA cell like <jon@x.com> is non-empty and is kept — but the brackets will break a send. The tool doesn't strip them; use csv-find-replace with regex [<>] to empty before the merge.
List over 500 rows on free tier
Blocked (upgrade)Free caps the result at 500 output rows. A larger list triggers an upgrade prompt. Pro raises the cap to 100,000 — and if you're sending to that many, also confirm your ESP's own import limits.
File over 2 MB on free tier
Blocked (upgrade)Free file-size cap is 2 MB. A contact list with many custom-field columns can hit this before 500 rows. Pro raises the cap to 100 MB.
Output has no UTF-8 BOM
ExpectedThe download has no BOM. Word and most ESPs read UTF-8 fine, but if international names show as é in Word's merge preview, set the data-source encoding to UTF-8 when connecting the list, or re-save with a BOM-adding step.
Frequently asked questions
Why does my contact list have blank rows between entries?
Common causes: deleted contacts that left a gap, manually-added spacer rows, a blank row above the header, or trailing blank rows from the export. All fully-empty rows are removed by this tool so they don't become phantom merge records.
Will this remove rows where only the email is blank?
No. Only fully-empty rows are removed. A row with a name but no email is kept — it's a real contact with a data gap. Review those before an email merge; you can isolate the sendable ones with csv-column-filter (is_not_empty on the email column).
Will it remove a row that has only a name and no other data?
No. Any row with at least one populated cell is kept. Only rows where every field is empty are removed.
Can I remove blanks and then deduplicate?
Yes, and that's the recommended order. Run this tool to strip empty rows, download, then run the result through csv-deduplicator to collapse duplicate contacts. Doing empties first means the dedup works on real records only.
Why is one of my 'blank' separator rows still in the merged output?
It probably contains a space in one cell, so the tool treats it as non-empty and keeps it. Run csv-whitespace-trimmer first to clear the space, then this tool removes the row.
Does it work with a list exported from my CRM as Excel?
Yes. Besides .csv, the tool accepts .xlsx, .xls, and .ods. Drop the workbook directly; the result is returned in the matching format.
Are there any options to set?
No. The tool runs automatically on drop with a single fixed behaviour. There's no Run button, no delimiter picker (it's auto-detected), and no toggles.
What's the limit on the free tier?
Free handles files up to 2 MB and results up to 500 rows (counted after empty rows are removed). Pro raises these to 100 MB and 100,000 rows. Remember your email tool may have its own per-import limit too.
Is my contact data uploaded?
No. Names, emails, and phone numbers are processed entirely in your browser tab via PapaParse and never reach a server. Only an anonymous usage counter is recorded when signed in. This keeps PII handling on your side, which matters for consent and privacy rules.
My emails are wrapped in <angle brackets> — does this fix that?
No, that's outside this tool. The bracketed email is non-empty so the row is kept, but the brackets will break a send. Strip them with csv-find-replace using regex [<>] mapped to empty, as a follow-up step.
Will my merge field names (header) survive?
Yes, as long as the header row has content. A populated header is always kept and becomes row 1 after any blank rows above it are removed — which is exactly what Word's merge-field mapping needs.
What should I run after removing blank rows?
Typically csv-deduplicator to collapse duplicate contacts, csv-whitespace-trimmer to clean stray spaces in names/emails, and csv-validator to confirm the file is consistent before the merge.
Privacy first
Processing runs locally in your browser with PapaParse. No file is uploaded — only metadata counters are saved for signed-in dashboard stats.