Skip to main content

Key takeaways

  • Letters that send themselves, from your billing or CRM software, need an API platform.
  • A merge changes details inside one letter; invoices and 1099s go one PDF per person.
  • Set up the template once, and each month is a fresh list, one proof and one payment.

You can automate most of the work in a stack of business letters without writing code. A print-and-mail service does the printing, folding, stuffing and postage, and gets the letters to USPS. A mail merge removes the retyping: you write the letter once as a template, and each person's name, amount and date come from their row in a spreadsheet. Sixty payment reminders become one upload and one proof to check.

Two jobs stay with you. You decide who gets a letter this month and whether the figures in the spreadsheet are right, and you start the send. Letters that go out on their own, because your billing software triggered them or a calendar said so, need an API platform and someone to connect it to your systems.

This guide sorts your letters into the ones a spreadsheet batch can handle and the ones it can't.

Which of your letters can go out as one batch#

Look at what changes from one envelope to the next. A mail merge changes words inside a single letter; it can't put a different document in each envelope. So the kind of letter decides how it goes out.

How each kind of letter goes out

What changes between letters
How to send them
Typical letters
Nothing
One shared PDF, mailed to the whole list as one batch
An office move, new hours, a price change
A few details: name, amount, date, reference
A saved letter template and a spreadsheet with one row per person
Payment reminders, renewal notices, appointment recalls
The whole document
One PDF per person, each mailed as its own letter
Invoices, itemized statements, 1099s, W-2s
When it goes out
An API platform connected to your software
A welcome letter at signup, a notice the day a payment fails

The third row is the one to watch. Export a month of invoices as one file and mail it as a batch, and every customer receives every invoice. Save one PDF per invoice or form instead; our guides to mailing QuickBooks invoices and mailing 1099s to contractors show how to split the export. A reminder about an overdue balance belongs in the second row: everyone gets the same letter, with their own figures filled in.

Postmarkr, which publishes this guide, covers the first three rows for USPS First-Class letters within the US, and the walkthrough below uses its screens; other services label the same steps differently. A shared PDF or a template goes to up to 100 people per batch with one payment, and separate PDFs such as invoices go through the Cart, up to ten per checkout. A one-page black-and-white letter is $2.05 including postage. It doesn't offer an API, scheduled sends or a connection to accounting software, so for the fourth row, compare the platforms in our Lob alternatives guide.

Set up the letter once#

Take a fictional office that mails payment reminders every month. It sets the letter up once, as a template with fields for the customer's first name, the invoice reference and a response date. The wording is a courtesy reminder rather than a legal notice.

The reusable wording could read:

Hello {{first_name}},

Our records show invoice {{invoice_reference}} remains unpaid. Please contact our office by {{response_date}} if you have already paid or need us to resend the invoice. Thank you.

Insert the changing values with the letter editor's merge fields, shown in braces above, and keep your business's contact details in the fixed text so customers know how to reach you.

Save the template, then start a batch with it. At the recipients step, the batch offers a sample CSV built from that template: the address columns, plus one column for each merge field in the letter. Replace its example rows with your own.

Here is one fictional row, turned on its side so each column sits next to its value.

One fictional row from the reminder spreadsheet

CSV column
Illustrative value
name
Jordan Example
address_line1
Replace with recipient’s street address
address_line2
Replace with apartment or suite, if applicable
city
Replace with recipient’s city
state
Replace with recipient’s state
zip
Replace with recipient’s ZIP Code
first_name
Jordan
invoice_reference
INV-EXAMPLE
response_date
Replace with the intended response date

The required address headers are name, address_line1, city, state and zip; address_line2 is optional. Here, name addresses the envelope and first_name fills the greeting. Give merge fields names of their own, such as first_name or balance_due: the import reads headings like recipient_name, full_name or address as address columns. Other headings for the merge fields are fine; the import asks you to match each one to a field.

Before saving, read the values as your customer will: dates written as you would in a letter, leading zeros kept in ZIP Codes and account numbers, and every merge field filled in.

Check the import and one proof#

When you upload the file, the import sorts the rows into ready, invalid and duplicate. Compare the ready count with the list you meant to mail. For each row left out, decide whether to fix it, drop it on purpose or send that letter another way, and note the decision with your mailing record.

For rejected rows, the import offers a copy of your file marked with each row's status and the reason; correct it and upload it again. Delete a true duplicate rather than renaming it to get it through, or that customer gets two letters.

The proof is the first ready row's letter, rendered as it will print. Check its name, invoice reference and date against that row, then read the whole page, contact details and closing paragraph included.

The import flags blank merge fields, and the proof shows one row, so scan the rest of the spreadsheet for unusually long text and figures that disagree with your records. If you change the template, the return address or that first row after approving the proof, you'll be asked to generate a new one; check that version too.

A monthly reminder batch, start to finish#

One month of payment reminders at a fictional office

  1. After month-end close — Export who still owes

    Post last month's payments, run the open-balance report and paste it into the template's CSV: 39 rows.

  2. First business day — Upload and reconcile the import

    37 ready, 1 invalid address, 1 duplicate. Fix the address from the customer file, delete the duplicate and upload again: 38 ready.

  3. Before paying — Check the proof against the first ready row

    Match the proof's name, invoice reference and response date to the first ready row.

  4. Same sitting — Review the batch and pay once

    Confirm the return address, page count, 38 recipients and the total, then pay for the whole batch in one checkout.

  5. After printing — Letters in the mail

    USPS states a First-Class Mail delivery window of 1–5 days. Each letter's own page shows USPS scan updates when they're available.

  6. When the batch finishes — Check the batch page

    Note the submitted, failed and blocked counts. Any retry starts from this page, as the next section explains.

  7. By the response date — Follow up

    Match payments and replies against the 38 rows. Customers who still owe go on next month's list.

Use this routine for any monthly letter where only names, amounts and dates change. The office and its counts are invented; the transit window is USPS's stated range for First-Class Mail.Fact last verified 2026-07-21

Check the results before sending again#

After payment, the batch page counts the letters submitted for printing, the ones that failed and the ones blocked before sending, and each letter has its own status page. A batch shows "Completed" only when every letter was submitted for printing. A finished batch with failed or blocked letters shows "Partial Failure", or "Failed" if every letter failed or was blocked, and that's where the failure report and retry tools appear. Whatever the label, USPS scan updates, when they appear, show where a letter has been, which isn't proof that your customer received it.

A failed letter is refunded automatically, and refunded letters stay out of the page's retry-ready CSV, because a refund settles the money and leaves open whether the letter went out. Before mailing a failed letter again, check the failure report and contact support with the batch reference. What the retry-ready CSV does hold is recipients the page can confirm went unmailed, such as letters blocked before sending because the payment was disputed or the order was cancelled. Upload that file to a new batch rather than your original list, which would mail the submitted letters a second time.

Keep the month's spreadsheet, the template version and the order reference together, so you can answer a customer who asks what you sent and when.

When a spreadsheet batch isn't enough#

A spreadsheet batch suits letters you can list and send in one sitting. Two signs say you need something else.

Letters that send themselves. A welcome letter when someone signs up, a notice the day a card payment fails, or a reminder timed from each invoice's due date starts in your software. That's the job of an API platform: your billing or CRM system sends the letter details to the mail provider, which prints and mails each one. Someone has to connect the two, with code or an integration tool, and keep that connection working.

Thousands of itemized statements a month. One PDF per customer works for a few dozen statements, as in the table's third row. At thousands a month, itemized statements are the work of statement printing houses, which are built for banks, utilities and medical billers.

SOURCES (2)
ready