Send mail from Google Sheets
Turn a Google Sheet into a mail merge: one row per letter, sent through the paperplane action in Zapier, Make, or n8n — $0.99 per First-Class letter, sandbox-testable for free before anything prints.
From $0.99 · postage included · no account needed
{
"mail_class": "first_class",
"sandbox": true,
"text": "Dear Ms. Alvarez, ...",
"to": { "name": "Maria Alvarez", "line1": "1 Main St",
"city": "Richmond", "state": "VA", "zip": "23220" },
"from": { "name": "Alex Rivera", "line1": "12 Grove Ave",
paperplane · Google Sheets
Mail this deliverable to the client, certified.
Here’s the draft. I’ll get a quote before anything is sent.
Nothing prints until you approve. Order ord_8k2d.
Instead of a mail merge in Word
Word's mail merge still ends at a printer, a stack of envelopes and a trip to the counter, and there is no per-letter status. One row, one order, one receipt, one status you can write back to the sheet.
Set up Google Sheets in three steps.
Row-to-letter via the native automation apps
- Step 01
Lay out the sheet
One row per letter: recipient, address fields, letter text or a pdf_url, and a “send” status column.
- Step 02
Trigger on a row
In Zapier, Make or n8n, trigger on new/updated rows where status = send and add the Send Letter action.
- Step 03
Sandbox, go live, write back
Map with Sandbox on until it is right, then go live and write the returned order id and status back to the row.
Copy the config.
Row → order (what the action sends)
{
"mail_class": "first_class",
"sandbox": true,
"text": "Dear Ms. Alvarez, ...",
"to": { "name": "Maria Alvarez", "line1": "1 Main St",
"city": "Richmond", "state": "VA", "zip": "23220" },
"from": { "name": "Alex Rivera", "line1": "12 Grove Ave",
"city": "Richmond", "state": "VA", "zip": "23221" },
"email": "alex@example.com"
}Status check per row
GET https://sendpaperplane.com/v1/orders/ORDER_ID
Under the hood
Each row becomes its own order with its own receipt and status lifecycle; prepaid credits keep payment hands-off across a batch. Every address is USPS-verified before payment; small errors are standardised automatically, and an undeliverable one returns address_undeliverable so your automation can flag the row.
Supported action fields
Every integration maps into the same fixed set of fields, the ones the REST API and MCP tools take directly.
| Field | What it does |
|---|---|
| mail_class | first_class, certified, certified_err (Certified with electronic Return Receipt), or priority |
| text or pdf_url | the letter body as plain text, or a fetchable PDF to print as-is |
| to | recipient name + street/city/state/zip, verified against USPS data |
| from | return address, printed on the envelope and used for undeliverable mail |
| where the receipt and status updates go — no account required |
Popular Google Sheets workflows
Or skip the automation tool: ask Claude or ChatGPT
Every integration here sits on the same MCP endpoint agents use directly. Instead of wiring a trigger to an action, ask Claude or ChatGPT to draft and mail the letter. Same mailing tools (quote_letter, send_letter, get_letter_status), same price, same free sandbox.
Send your first letter from Google Sheets.
Sandbox runs the whole pipeline for free and mails nothing. Live sends start at $0.99, one all-in price.
curl -X POST https://sendpaperplane.com/v1/orders \
-H 'Content-Type: application/json' \
-d '{
"mail_class": "first_class",
"sandbox": true,
"text": "Dear Ms. Alvarez, ...",
"to": { "name": "Maria Alvarez", "line1": "1 Main St",
"city": "Richmond", "state": "VA", "zip": "23220" },
"from": { "name": "Alex Rivera", "line1": "12 Grove Ave",
"city": "Richmond", "state": "VA", "zip": "23221" },
"email": "alex@example.com"
}'Common questions
Can I do a mail merge from a spreadsheet?
Yes — one letter per row via the paperplane action in Zapier, Make, or n8n. Each row becomes its own order with its own receipt; prepaid credits keep payment hands-off.
How do I avoid bad addresses in a batch?
Every recipient is checked against USPS data before payment. Small errors are standardised automatically; an address USPS can’t deliver to returns address_undeliverable and nothing is charged, which your automation can write back to the sheet.
How do I personalize each letter?
Put the full letter text in a column (formulas or Apps Script can assemble it from other columns) and map that column into the text field — each row prints as its own typeset letter.
Send your first piece of mail from Google Sheets.
A letter, in your words or drafted from your direction. You approve the exact total, and USPS delivers.
✓ You approve the exact total✓ No account neededFrom $0.99