You have a spreadsheet full of names and addresses. You want personalized postcards in every one of those mailboxes — without touching a printer, buying stamps, or making a post office run. This guide walks you through exactly how to do that using a CSV file and WriteToMail's bulk postcard mailing tool.
By the end, you'll have a fully launched postcard campaign with personalized recipient names, addresses, and custom messages — sent to as many people as your list contains.
Prerequisites: What You Need Before You Start
Before you touch any upload button, make sure you have these three things ready:
- A mailing list — at least a rough spreadsheet of recipients with names and physical addresses
- A WriteToMail account — free to create at writetomail.com
- A postcard concept — even a rough idea of your message, offer, or announcement
You do not need design software. You do not need to know anything about USPS postal rules. WriteToMail handles printing, postage, and delivery.
Step 1: Build and Format Your CSV File
Expected outcome: A clean, upload-ready CSV file with all required columns present and properly formatted.
This is the step most people rush — and where most campaigns fail before they start. Get your CSV right the first time.
Required columns
Your CSV must include at minimum:
| Column Name | Example Value |
|---|---|
first_name |
Sarah |
last_name |
Chen |
address_line_1 |
412 Maple Street |
address_line_2 |
Apt 3B (optional) |
city |
Austin |
state |
TX |
zip |
78701 |
Optional personalization columns
These columns become variable fields you can drop into your postcard design:
| Column Name | Example Value |
|---|---|
custom_message |
Your spring discount code is SPRING20 |
offer_code |
SPRING20 |
salutation |
Dr. |
CSV formatting rules that actually matter
- Use UTF-8 encoding. Accented characters (é, ñ, ü) will break imports if your file uses a different encoding. In Google Sheets, export as "CSV (UTF-8)." In Excel, use "Save As → CSV UTF-8."
- No merged cells. If you're building from a spreadsheet, merged cells export as empty values.
- Keep column headers in row 1. No blank rows above the header row.
- Avoid trailing spaces. A value of
"Austin "(with trailing space) can fail address validation. - Do not include currency symbols in numeric fields. Use
250not$250. - State abbreviations only. Use
CAnotCalifornia.
Downloadable sample CSV template
Copy this into a text file, save it as postcard_list.csv, and replace the sample rows with your data:
first_name,last_name,address_line_1,address_line_2,city,state,zip,custom_message
Sarah,Chen,412 Maple Street,Apt 3B,Austin,TX,78701,Your exclusive offer expires June 30!
Marcus,Rivera,88 Birchwood Lane,,Denver,CO,80203,Thanks for being a loyal customer since 2023.
Priya,Nair,2201 Harbor Blvd,Suite 100,San Diego,CA,92101,Your neighborhood deserves better service — we agree.
Leave address_line_2 blank if unused — just keep the comma as a placeholder.
Step 2: Log In and Navigate to Bulk Postcard Mailing
Expected outcome: You're inside WriteToMail's bulk postcard campaign workflow, ready to upload.
Log in at writetomail.com. From the dashboard, look for the postcard creation option and select bulk send. The platform will prompt you to upload a recipient list — that's where your CSV comes in.
If you've never done this before, the broader overview in this online postcard mailing service guide walks through the full postcard creation process, including single sends, so you know what each step looks like.
Step 3: Upload Your CSV File
Expected outcome: Your recipient list is successfully imported with all rows and columns recognized.
Click the upload prompt and select your postcard_list.csv file. WriteToMail will parse the file and display a preview of your imported data — typically showing the first few rows so you can confirm everything looks right.
Watch for these indicators after upload:
- Row count matches your list. If you had 500 rows of data and the platform shows 487, something caused 13 rows to be skipped.
- No "unrecognized column" warnings. Column names should map cleanly to the system's recognized fields.
- No red error flags on individual rows. These usually indicate address validation failures (more on this in the troubleshooting section).
If the row count is off, open your CSV in a text editor (not Excel — Excel sometimes hides formatting issues) and look for stray commas, unexpected line breaks inside cells, or rows where a field with a comma wasn't wrapped in quotes.
Step 4: Map Variable Data Fields to Your Postcard Design
Expected outcome: Your CSV columns are connected to placeholders in your postcard, so each card is personalized for its recipient.
This is the step that transforms a generic postcard into something that feels personal. Variable data mapping means your design has placeholders — like {{first_name}} or {{custom_message}} — and the platform replaces those placeholders with the actual values from each row in your CSV.
How field mapping works
After your CSV uploads, WriteToMail will show you a mapping interface. You'll see your CSV column names on one side and available postcard fields on the other. Match them:
first_name→ Recipient First Namelast_name→ Recipient Last Nameaddress_line_1→ Delivery Address Line 1city→ Citystate→ Statezip→ ZIP Codecustom_message→ Custom Text Field (body copy)
For the address fields, mapping is non-negotiable — these drive USPS delivery. For custom fields like custom_message, mapping is what enables personalization at scale.
Inserting variable fields into your postcard design
Inside the postcard editor, you'll see an option to insert a variable field wherever your cursor is placed. Click it, select the column you want (e.g., first_name), and the editor will insert a token like {{first_name}}. When the campaign sends, every card replaces that token with the actual value from that recipient's row.
A postcard body that reads:
Hi {{first_name}}, your home at {{address_line_1}} may qualify for our free energy audit this month.
…becomes, for Sarah Chen's card:
Hi Sarah, your home at 412 Maple Street may qualify for our free energy audit this month.
That specificity is what separates campaigns that get responses from ones that get recycled. Direct mail response rates average 4.4% — significantly higher than email's typical 0.6% — and personalization pushes that number higher.
This approach to variable data is explored in depth in this guide on bulk direct mail from spreadsheet, which covers the same workflow for both postcards and letters.
Step 5: Design Your Postcard
Expected outcome: A complete postcard design with front and back content, including any variable fields in place.
WriteToMail's postcard editor lets you set up your design without any external tools. A few design decisions that affect response rates:
Front of the card:
- Lead with a benefit or curiosity hook, not your logo
- Use the recipient's name or neighborhood if your variable data includes it
- Keep it to one idea — postcards are glanced at, not read
Back of the card:
- This is where variable fields typically live (offer code, custom message, personalized greeting)
- Include a clear call to action: a phone number, URL, or QR code
- Your return address is required for USPS delivery
If you want campaign ideas beyond this tutorial, the direct mail postcard ideas for small business article has seven proven postcard concepts with sample copy you can adapt directly.
Step 6: Preview Personalized Postcards Before Sending
Expected outcome: You've reviewed at least 3-5 individual card previews to confirm variable fields are rendering correctly.
Never skip the preview step. The preview mode shows you what each individual card will actually look like — with real values from your CSV substituted in. It's the fastest way to catch a variable mapping error before it goes to 500 mailboxes.
Check for:
- Correct name rendering — "Hi Sarah" not "Hi {{first_name}}" (indicates the field didn't map)
- No truncated text — long
custom_messagevalues can overflow a text box if your design doesn't allow enough space - Address accuracy — verify a few addresses match what's in your CSV
- Blank fields — if a recipient has no
address_line_2, does the card look right without it?
Preview at least your first row, a middle row, and your last row. If you have more than 200 recipients, spot-check one from each major segment of your list.
Step 7: Review Recipient Count, Cost, and Confirm Launch
Expected outcome: Your campaign is submitted for printing and mailing with the correct recipient count confirmed.
Before you hit send, WriteToMail will show you a campaign summary:
- Total recipient count
- Per-piece cost and total campaign cost
- Expected delivery timeframe via USPS
Confirm the recipient count matches your CSV row count (minus any rows that failed address validation). If the numbers don't match, go back and resolve the flagged rows before launching — sending to a smaller list than intended means some recipients simply won't receive a card.
Once you confirm, WriteToMail takes it from there: printing, postage, and USPS First-Class Mail delivery — no printer, no stamps, no post office.
Troubleshooting: Common CSV Errors and How to Fix Them
Even a well-prepared CSV can throw errors. Here are the most common ones and how to resolve each.
"Address could not be validated"
This is the most frequent error. It means the USPS address database couldn't match the address you provided.
Fixes:
- Check for abbreviation inconsistencies (
StvsStreet— both work, butStretdoesn't) - Verify the ZIP code matches the city and state
- Look for transposed numbers in street addresses (e.g.,
412entered as142) - PO Boxes require
PO Box 412notP.O. Box 412(formatting inconsistency) - Some rural routes and new construction addresses may not yet be in the USPS database — remove or manually verify these
"Missing required field: [column name]"
A row is blank in a required column.
Fix: Open the CSV, filter for blank values in that column, and either fill in the missing data or remove incomplete rows. In Google Sheets: Data → Create a filter → Filter by condition → Is empty.
"Encoding error / special characters"
Names or addresses with characters like ñ, é, or ü are rendering as garbled symbols.
Fix: Re-export your CSV as UTF-8. In Excel: File → Save As → change file type to "CSV UTF-8 (Comma delimited)."
"Column not recognized"
Your column header doesn't match what the platform expects.
Fix: Check for extra spaces in your header names (first name instead of first_name), or capitalization mismatches. Match the exact column name format shown in the field mapping interface.
"Row count mismatch"
You uploaded 500 rows but the platform shows 487 imported.
Fix: Open your CSV in a plain text editor (Notepad, TextEdit, VS Code). Look for rows where a text field contains a comma that wasn't wrapped in double quotes — this causes the parser to split that row incorrectly. Wrap any field containing commas in double quotes: "Austin, TX branch".
Postcard Campaign Best Practices for Better Results
Getting the campaign out is step one. Getting responses is the actual goal. A few things that move the needle:
Send size and frequency matter. According to the USPS Household Diary Study, Americans engaged with 98% of their physical mail in a given year — significantly higher engagement than most digital channels. Your postcard is highly likely to be seen. Whether it drives action depends on the offer and timing.
Segment your CSV before uploading. Don't send the same message to every row. A custom_message field lets you vary the offer or content by segment without running multiple campaigns. Split by geography, purchase history, or customer status directly in your spreadsheet.
Variable personalization lifts response rates. According to a USPS study on personalized direct mail, mail that includes the recipient's name is perceived as more relevant and is more likely to prompt action. Your CSV gives you the raw material for that personalization — use it.
Plan a follow-up. One postcard rarely converts a cold prospect. If you're doing direct mail for the first time, the direct mail marketing for small businesses guide covers how to sequence campaigns over multiple sends for better cumulative results.
Next Steps After Your First Bulk Postcard Campaign
Once your campaign is submitted, a few things to plan for:
- Track response rates manually if you're using a unique phone number, URL, or promo code per campaign — your CSV's
offer_codecolumn is useful here - Clean your list post-send — after USPS returns undeliverable mail, remove those addresses from your spreadsheet
- Prepare your follow-up campaign — most direct mail programs work as sequences, not one-shots
- Scale your list — if you're pulling names from a CRM, the workflow described in this automated physical mail for CRM users guide shows how to automate CSV exports as a recurring process
If you're in real estate and using bulk postcards for neighborhood farming or just-sold campaigns, the bulk postcard mailing for real estate agents guide covers the specific CSV fields, design strategies, and mailing frequencies that work best for that use case.
Summary
Bulk postcard mailing from CSV comes down to six core actions: format your data correctly, upload your file, map your variable fields, design your postcard, preview individual cards before sending, and confirm your launch. Every step in between is just making sure those six actions happen without errors.
The CSV is the foundation. A clean, well-structured file with accurate addresses and properly named columns is the difference between a campaign that goes out smoothly and one that spends an hour in troubleshooting. Spend the extra ten minutes on your spreadsheet before you upload — it saves far more time on the back end.
WriteToMail handles everything after your file is uploaded: printing, postage, and USPS delivery. Your job is to bring a clean list and a clear message.
Sources
- Statista — Direct Mail Response Rate in the U.S. — cited for average direct mail response rate of 4.4%
- USPS Inspector General Blog — Household Diary Study — cited for 98% physical mail engagement rate among U.S. households
- USPS Delivers — Mail Moment Research Findings — cited for personalized direct mail perception and response data
- WriteToMail — Online Postcard Mailing Service — platform used for bulk postcard mailing workflow described throughout this guide
- Google Sheets Help — Export to CSV with UTF-8 Encoding — referenced for UTF-8 export instructions