Skip to main content

Setup Guide: CSV Upload

How to launch a mail campaign from an uploaded CSV of recipients.

A
Written by Adam Rutkowski

CSV Upload lets you launch a direct mail campaign by uploading a spreadsheet of recipients — no CRM, point-of-sale system, or other integration required. Recipients are added through an embedded upload widget that checks your file's columns before anything reaches LettrLabs, and every automation can be topped up with additional CSV uploads any time you have new recipients to mail.

Before you start

  • A LettrLabs card template (or a plan for one) you want to mail — you'll attach it while creating the automation.

  • Your recipient list saved as a CSV file, with at least a name and a mailing address for every row.

  • A decision on how you want to mail: directly to the people in your file (Mail to Recipients), or to their neighbors instead (Radius Mail) — see Step 1.

Step 1: Create your CSV Upload automation

  1. From Automations, start a new CSV Upload automation and give it a name you'll recognize later.

  2. Under Actions, choose one:

    • Mail to Recipients — mails directly to the names and addresses in your CSV.

    • Radius Mail — treats each address in your CSV as a pin location and mails a set number of neighboring households around it instead of the address itself. You set how many recipients to find per pin, and can optionally filter by property type, owner/renter status, household income, home value, length of residence, and year built.

  3. Add the template you want mailed. You can add extra touches (a Cadence) — for example, a postcard now and a follow-up letter 14 days later — each with its own template and delay, up to 10 touches.

  4. Set Sending Options: an optional monthly sending limit for the whole cadence, and an optional Holdout percentage (25–50%) if you want to hold back a control group to measure results.

  5. Optionally add a Suppression Audience so recipients matching a suppression list you maintain elsewhere (e.g. existing customers) are automatically excluded.

Step 2: Prepare your CSV file

The upload widget maps your file's columns to the following recipient fields. Only two things are truly required — everything else is optional and lets you do more with your template:

  • Address (required) — either a single FullAddress column, or an Address1 column together with City, State, and ZipCode.

  • Name (required — at least one of)FirstName, LastName, or ToOrganization (for a business name), so LettrLabs has something to address the mail piece to.

  • Address2 — apartment/suite/unit. Usually not needed: LettrLabs' address-verification step fills this in automatically when it can, so only include it if your list already has reliable unit numbers.

  • Custom1 through Custom6 — free-form fields you can drop into your template as mail-merge variables (a coupon code, a rep name, a job number, etc.).

  • Salutation — a greeting override for the mail piece.

  • ReturnFirstName, ReturnLastName, ReturnOrganization, ReturnAddress1, ReturnAddress2, ReturnCity, ReturnState, ReturnZip — a per-recipient return address, useful if you mail on behalf of more than one location or brand from a single automation.

  • QrUrl — a per-recipient destination URL if your template includes a QR code.

  • Image1 through Image6 — per-recipient image URLs, if your template uses variable images.

Name and address checks above apply to the Mail to Recipients action, since those rows are mailed as-is. If you chose Radius Mail, the address in each row is only used to find a pin location for the neighbor search, so those checks are skipped — you still need at least an address LettrLabs can locate.

Step 3: Upload your CSV

  1. From the Automations list, find your automation and click the Add Recipients via CSV icon on its row. This is available any time you can edit the automation — for its first batch of recipients, or to add another batch later.

  2. The upload widget opens. Select your file and match its columns to the fields from Step 2, then submit.

  3. Starting a new upload for the same automation clears out any rows from a previous upload that hadn't yet been reviewed and approved — so if you need to correct a bad file, just fix it and upload again.

Unverified: the exact maximum file size or row count the upload widget accepts per import. That limit (if any) is configured in the underlying upload-widget vendor's dashboard rather than in the LettrLabs application itself, so it could not be confirmed from the codebase. If you're uploading a very large list, consider splitting it into a few smaller files as a precaution.

Step 4: Review and approve your recipients

  1. Once the file finishes importing, a Recipients review screen opens automatically and shows a brief "processing" state while LettrLabs verifies and standardizes every address.

  2. When processing finishes, you'll see the total recipients uploaded, how many are deliverable, any warnings (e.g. potentially undeliverable addresses, recipients mailed to recently), and any errors (missing address or name fields, non-US addresses, invalid characters, missing mail-merge fields).

  3. You can remove specific rows — or every row matching your current filter — directly from this screen before continuing.

  4. If any rows still have unresolved errors, the Enable Automation button stays disabled. Fix the source file and re-upload, or remove the offending rows, until the error count reaches zero.

Step 5: Launch the campaign

  1. Once the review screen shows no blocking errors, click Enable Automation. You'll see an estimated cost for the recipients you're adding — confirm it to approve them.

  2. Approving recipients doesn't mail them the same instant: LettrLabs processes every active CSV Upload automation as part of its daily automation run, which is what actually moves approved recipients into production.

  3. From here, your automation is Active. Recipients move through whichever cadence you set up in Step 1 — an initial mailer, then any follow-up touches after their configured delay.

Did this answer your question?