Skip to main content
Row-to-letter via the native automation apps

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

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.

How it works

Set up Google Sheets in three steps.

Row-to-letter via the native automation apps

  1. Step 01

    Lay out the sheet

    One row per letter: recipient, address fields, letter text or a pdf_url, and a “send” status column.

  2. 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.

  3. 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.

FieldWhat it does
mail_classfirst_class, certified, certified_err (Certified with electronic Return Receipt), or priority
text or pdf_urlthe letter body as plain text, or a fetchable PDF to print as-is
torecipient name + street/city/state/zip, verified against USPS data
fromreturn address, printed on the envelope and used for undeliverable mail
emailwhere 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 mail from ClaudeSend mail from ChatGPT

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

Related integrations

All integrations · API docs