Skip to main content
Sign in

Import donors from CSV

Not on a CRM? Bring your existing supporter list into Together by uploading a CSV. You map the file's columns to Together's fields, preview exactly what will change, and commit. Re-running the same file updates donors rather than duplicating them.

If your supporter data lives in a spreadsheet rather than NationBuilder or Raisely, a CSV import is the fastest way to get started. Imported donors land in the same place as everything else - your donor list, duplicate detection, and (with the Compliance module) cap and disclosure tracking.

The same screen imports two things: donors (your supporter list) and donations (giving history). Most of this page is about donors; the Import donations section at the end covers the differences.

Before you start

You need:

Up to 1,000 rows per import. If your list is larger, split it into a few files, or use the API for bulk loads.

Steps

  1. Go to Settings -> Integrations and open the Import from CSV card.

  2. Choose Donors, then drop your .csv file (or click to choose it).

  3. Map your columns. Together matches your headers to its fields automatically where it can - check them and fix any that are wrong. A few sample values show under each column so you can map a cryptic header by its data. Make sure a column is mapped to Email or External ID.

  4. Click Preview. You'll see a breakdown of what will happen:

    • New - people who will be created.
    • Updating - existing donors who are missing details your file fills in.
    • Unchanged - existing donors your file adds nothing to.
    • Look-alike - rows that repeat an email or ID already in the file (folded into one so you don't double-count).
    • Errored - rows that can't be imported (with the reason).
  5. Click Import. When it finishes you'll see a summary. If any rows errored, download the errors CSV, fix those rows, and import again.

How matching works

Together matches each row to an existing donor by external ID first, then email. On a match it only fills in blank fields - it never overwrites a detail you already have. So a re-import is safe: it tops up missing data and leaves everything else alone. (To correct an existing value, edit the donor directly; import-to-correct is coming later.)

Because Together matches on identity, running the same file twice imports it once. That makes a CSV import a safe way to keep a spreadsheet and Together in step.

Import donations (giving history)

A donations import brings in your giving history - one row per gift. Choose Donations on the first step instead of Donors.

Each donation row needs three things:

Optionally map a revenue code column. The code is what tells Together which jurisdiction a gift belongs to (federal, Victoria, ...), so map it if you want imported giving to feed caps and disclosures - rows with no revenue code are still imported, but carry no jurisdiction and won't appear in compliance figures.

Every imported gift is recorded as confirmed, so exclude any refunded or failed rows from your file (importing those, and correcting a gift after the fact, come later). If you have a stable transaction/receipt ID, map it as the Donation ID - that lets a later re-import correct a gift's amount or date instead of adding a second copy. Two rows with no ID and identical details are kept as two gifts (so a genuine repeat gift is never dropped).

After you commit, if any donors crossed a disclosure threshold you'll see a summary: crossings in an open reporting period are flagged as needing action (with their deadlines), and crossings in periods that have already closed are listed as historical backfill.

Your file is handled carefully

Your uploaded file holds personal data, so Together stores it privately, uses it only to run the import, and deletes it as soon as the import finishes. An abandoned upload is cleared automatically within 48 hours.

If some rows don't import

Common reasons a row errors:

Download the errors CSV from the result screen (or from the Past imports list lower on the page), fix those rows in your spreadsheet, and re-import - the good rows you already imported won't be touched again.

What to do next