Skip to main content

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 — $1.99 per First-Class letter, sandbox-testable for free before anything prints.

Row-to-letter via the native automation apps

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 to set it up

  1. 1Structure the sheet with one row per letter: recipient name, address fields, letter text (or a pdf_url), and a “send” status column.
  2. 2In Zapier, Make, or n8n, trigger on new/updated rows where status = send and add the paperplane Send Letter action.
  3. 3Map the row fields into the action — with Sandbox on until the mapping is right (free, instant, nothing mailed).
  4. 4Go live; write the returned order id and status back to the row so the sheet stays the source of truth.

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 — failures return the corrected candidate so your automation can write it back to the sheet.

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_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 three tools (quote_letter, send_letter, get_letter_status), same price, same free sandbox.

Send mail from ClaudeSend mail from ChatGPT

Related integrations

Send your first letter from Google Sheets.

Sandbox runs the whole pipeline for free and mails nothing. Live sends start at $1.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"
  }'

All integrations · API docs

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 order is USPS-verified before payment; failures return a structured error with the corrected candidate, 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.