Skip to main content
Back to Blog
Direct Mail MarketingOctober 2, 2026

Direct Mail Campaign from CSV: Launch in Under 5 Minutes

W

WriteToMail Team

You have a spreadsheet of customer addresses. You want physical mail in their hands. The gap between those two things used to require a print shop, a mail house, and three to five business days of coordination. Now it takes about five minutes.

This guide walks you through the exact process of launching a direct mail campaign from CSV — from preparing your spreadsheet to previewing personalized letters or postcards before a single piece gets printed. By the end, you'll have a live campaign running through USPS First-Class Mail without touching a printer, buying stamps, or leaving your desk.


What You'll Need Before You Start

Prerequisites:

  • A CSV file with recipient data (Name, Address, City, State, ZIP at minimum)
  • A WriteToMail account — create one at writetomail.com
  • Your letter or postcard message drafted (or use the AI drafting tool to write it)
  • Five minutes

What you'll achieve: A fully personalized bulk mail campaign — letters or postcards — queued for USPS delivery, with each piece customized using variable data from your spreadsheet.


Step 1: Format Your CSV Correctly

Expected outcome: A clean, error-free file that uploads without issues.

This is where most campaigns stall. A misformatted CSV causes upload failures, garbled addresses, or failed personalization — none of which you'll know about until after you've wasted time re-uploading.

Use these column names exactly as shown:

Column Name Example Value Notes
FirstName Sarah Split first and last name into separate columns
LastName Okonkwo Required for proper salutation formatting
Address1 842 Pine Street Street address only — no city, state, ZIP
Address2 Apt 4B Optional — leave blank if not applicable
City Austin Full city name
State TX Two-letter abbreviation only
ZIP 78701 Five-digit ZIP — leading zeros matter
CustomMessage Your lease renewal is due Nov 1 Any variable text you want to appear in the body

A few formatting rules that prevent 90% of upload errors:

  • Save as .CSV, not .XLSX. Excel files will fail the upload. Export from Google Sheets or Excel as CSV (comma-separated values).
  • No merged cells. If you're copying from a formatted Excel report, paste as plain text first.
  • Headers in Row 1, data starting in Row 2. Don't include blank rows between the header and your first record.
  • ZIP codes that start with 0. States like Massachusetts (02XXX) and New Jersey (07XXX) have leading zeros. Format that column as text in Excel before exporting, or your ZIPs will trim to four digits and fail USPS validation.
  • No special characters in headers. Stick to letters and numbers — no slashes, parentheses, or symbols.

If you're pulling data from a CRM, check out the guide on automated physical mail workflows for CRM users — it covers CSV export formatting for HubSpot, Salesforce, and Zoho specifically.


Step 2: Upload Your CSV to WriteToMail

Expected outcome: Your recipient list loads correctly, showing an accurate count of records.

Log into your WriteToMail account and navigate to the bulk mailing section. Select whether you're sending letters or postcards — the design flow differs slightly between the two, so choose your format before uploading.

Click "Upload CSV" and select your file. The platform will parse your file and display a preview of the first few rows. Review this preview carefully:

  • Does the record count match your spreadsheet? (If you had 250 rows of data + 1 header row, you should see 250 recipients — not 251 or 249.)
  • Are names displaying correctly? Look for encoding issues — characters like é, ñ, or ü sometimes get garbled if your CSV wasn't saved as UTF-8.
  • Are ZIP codes showing all five digits?

Fix any issues in your spreadsheet, re-save as CSV, and re-upload. It's faster to catch errors here than after mapping.


Step 3: Map Your CSV Columns to Mail Fields

Expected outcome: Every column in your spreadsheet is connected to the right field in your letter or postcard template.

Column mapping is where your spreadsheet data becomes personalized mail. WriteToMail displays each column from your CSV on the left and asks you to match it to a mail field on the right.

Standard mappings look like this:

  • FirstName → Recipient First Name
  • LastName → Recipient Last Name
  • Address1 → Street Address Line 1
  • Address2 → Street Address Line 2
  • City → City
  • State → State
  • ZIP → ZIP Code
  • CustomMessage → Variable Body Text (this appears inside the letter or postcard where you place the merge placeholder)

The address fields feed the mailing label — the envelope or postcard address block that USPS reads. The CustomMessage field (or any custom column you create) feeds merge placeholders inside your letter or postcard design.

Merge placeholders follow a double-bracket format. In your letter body, you'd write:

Dear {{FirstName}}, {{CustomMessage}}

When the campaign renders, each recipient gets their name and their specific message. Sarah Okonkwo sees "Dear Sarah" and her lease renewal notice. Marcus Chen sees "Dear Marcus" and his appointment reminder. Same template, individualized output.

You can add as many custom variable columns as your campaign needs — account numbers, amounts owed, expiration dates, promo codes. Each one becomes a merge field you can drop anywhere in the body.

For a deeper look at variable field strategy, the bulk direct mail from spreadsheet guide covers real-world examples from property managers and retailers running complex merge campaigns.


Step 4: Design or Finalize Your Letter or Postcard

Expected outcome: A complete, print-ready design with all merge fields placed correctly.

If you're sending a letter, WriteToMail's rich text editor lets you format the body with fonts, styles, and colors. Drop your merge placeholders exactly where you want the variable data to appear. The editor shows you static placeholder text — you won't see the personalized values until the preview step.

If you're sending a postcard, you'll design the front (image, headline, branding) and back (message area, address block). Variable fields work the same way — {{FirstName}}, {{CustomMessage}}, or any column you mapped. Postcard design best practices are worth reviewing if this is your first bulk postcard send.

Already have a designed document? WriteToMail supports PDF upload — upload your pre-designed letter as a PDF, and the platform handles printing and mailing from there.

A few design checks before moving to preview:

  • Every merge placeholder {{ColumnName}} must exactly match the column name in your CSV — case-sensitive. {{firstname}} won't match a column named FirstName.
  • Check line spacing around variable fields. A short {{CustomMessage}} and a long one will produce different line breaks. Test with your longest expected value.
  • Leave enough margin for the address block on postcards — USPS requires the bottom 5/8 inch of the back panel for the mailing address.

Step 5: Preview Personalized Output Before Sending

Expected outcome: You see exactly what recipients will receive — with real data, not placeholders.

This step is non-negotiable. Preview at least five to ten records before confirming the send, choosing recipients from different parts of your list — not just the first few rows.

What to check in preview:

  1. Merge fields resolve correctly. No {{FirstName}} appearing literally in the output. No blank spaces where values should be.
  2. Long values don't break the layout. A 120-character CustomMessage shouldn't overflow into the margin or overlap a footer.
  3. Address formatting looks right. "Austin, TX 78701" — not "Austin TX78701" or "Austin, Texas, 78701-0000."
  4. No duplicate or missing records. Scroll through a few pages of your preview list to confirm all rows imported cleanly.

If something looks wrong in preview, it's almost always a CSV formatting issue or a placeholder typo — both fixable in two minutes without losing your campaign setup.


Step 6: Confirm and Launch

Expected outcome: Your campaign is queued for printing and USPS delivery.

Select your mailing class (WriteToMail delivers via USPS First-Class Mail), review the total piece count and cost, and confirm the send. Your campaign enters the print queue immediately.

From here, the platform handles everything — printing, folding, enveloping, stamping, and USPS handoff. You don't schedule a pickup. You don't buy stamps. You don't stand at a post office counter with 400 envelopes.

USPS First-Class Mail typically delivers in two to five business days domestically. For campaigns where timing matters — expiration deadlines, event invitations, sale windows — factor that delivery window into your send date.


Common CSV Errors and How to Fix Them

Most upload failures trace back to five recurring issues:

1. Wrong file format Uploading an .XLSX file instead of .CSV is the most common error. Fix: File → Download → CSV in Google Sheets, or Save As → CSV in Excel.

2. Missing required columns If Address1, City, State, or ZIP are absent, the platform can't construct a valid mailing address. Every recipient row needs all four. If your data is in a single "Full Address" column, split it before uploading — Google Sheets' "Split text to columns" tool handles this in seconds.

3. Truncated ZIP codes Excel strips leading zeros unless the column is formatted as text. If Massachusetts ZIPs are showing as 2134 instead of 02134, reformat the column as text before re-exporting.

4. Placeholder mismatch {{Firstname}} won't pull from a column named FirstName. Capitalization and spelling must match exactly. Open your CSV in a text editor (not Excel) to see the exact header strings.

5. Special characters breaking encoding Names with accented characters (José, Renée) sometimes display as garbled strings if the CSV wasn't saved as UTF-8. Fix: In Google Sheets, the CSV export defaults to UTF-8. In Excel, choose "CSV UTF-8 (comma-delimited)" from the Save As format dropdown.


WriteToMail vs. Lob vs. Click2Mail: CSV Workflow Comparison

All three platforms support CSV-based bulk mail. The differences matter depending on your use case.

WriteToMail is built for businesses, law firms, and individuals who need to send letters, postcards, and checks without technical setup. CSV upload, variable data merge, AI-powered letter drafting, PDF upload-and-mail, and a no-code design interface are all available through the standard platform. It's SOC 2 compliant and HIPAA-compliant — relevant for healthcare organizations and legal teams handling sensitive recipient data. No developer required to run a bulk campaign.

Lob is an API-first platform designed for engineering teams building mail automation into software products. Bulk mail via CSV is possible, but the platform's primary interface is programmatic — REST API calls, not a visual upload flow. For a developer team building triggered mail into a CRM or billing system, Lob is purpose-built for that. For a marketing manager who wants to upload a spreadsheet and send postcards this afternoon, the technical overhead is unnecessary. (For a technical audience, the physical mail API comparison guide covers API-based mail automation in more depth.)

Click2Mail supports CSV uploads and variable data through their MailJack interface. It covers a range of mail formats and USPS classes. The interface is functional but dated, and the workflow for variable data mapping requires more manual configuration steps than WriteToMail's guided upload flow.

Feature WriteToMail Lob Click2Mail
CSV bulk upload ✓ ✓ (API-primary) ✓
Variable data merge ✓ ✓ ✓
No-code interface ✓ Limited ✓
AI letter drafting ✓ ✗ ✗
PDF upload-and-mail ✓ ✓ ✓
SOC 2 compliant ✓ ✓ Not published
HIPAA compliant ✓ ✓ Not published
Checks by mail ✓ ✗ ✗
Legal letter templates ✓ ✗ ✗

Next Steps

A single CSV upload campaign is the fastest way to see direct mail working for your business. Once you've run one, the logical next moves are:

  • Segment your list and run targeted variants. Split your CSV by customer type, geography, or account status and send different messages to each segment. Variable data makes this feasible without designing separate campaigns from scratch.
  • Explore postcard vs. letter format decisions. The right format depends on your audience and goal — the postcard vs. letter direct mail comparison breaks down response rates and cost-per-piece for both.
  • Add direct mail to your CRM workflow. Export segments from your CRM on a recurring schedule and run consistent mail campaigns without building them fresh each time. If you're running seasonal promotions or appointment reminders, direct mail automation for small business covers how to structure recurring CSV-based campaigns.
  • Review your list for data quality. Undeliverable addresses waste spend. Clean your list with USPS address validation before each upload — bad addresses mean wasted print costs and pieces that never land.

Direct mail response rates average 4.4% — compared to 0.12% for email, according to the Data & Marketing Association. The channel works. The bottleneck has always been execution speed. A CSV upload eliminates that bottleneck.


Sources

  1. Data & Marketing Association — Response Rate Report — Direct mail response rate benchmarks (4.4% average) compared to digital channels
  2. USPS Postal Explorer — Addressing Standards — Address formatting requirements and postcard dimension/clear zone rules
  3. USPS — First-Class Mail Delivery Standards — Domestic delivery timeframes for First-Class Mail pieces
  4. WriteToMail — Bulk Mailing via CSV — Platform capabilities for variable data merge and bulk mailing
  5. Lob — Direct Mail API Documentation — API-first bulk mail platform capabilities referenced in platform comparison
how-to

Ready to Try Direct Mail?

Create professional letters and we'll print and mail them for you. No stamps, no trips to the post office.