Skip to content

Import donations in bulk

Who can do this Owner, Admin, Member

Uploading a CSV files a batch of past or offline gifts against one campaign in one go, instead of typing them in one at a time.

  • The campaign must be Published — a draft or completed campaign is not offered as a target.
  • Every row you upload is filed as a Completed donation, whatever your spreadsheet says about it. This tool is for gifts you already know were received; it isn’t a way to bulk-load pending or failed attempts.
  1. Open Donations, then select All Donations, then select Bulk Upload.

  2. Choose the campaign and download the template. The template’s columns are: amount and donor_name (required), plus donor_email, donor_phone, payment_method, payment_date, payment_verified, reference_number, internal_notes and item_id (all optional — a blank item_id uses the campaign’s first item automatically).

    Step 1 with the downloaded template columns reference expanded

  3. Fill in the spreadsheet. Two things silently go wrong here more than anything else:

    • Amounts must be plain numbers, with no thousands separator. 1234.50 is read correctly; 1,234.50 is read as 1 — the importer stops at the first comma without any warning.
    • Dates must be YYYY-MM-DD (for example 2026-01-15). A date your spreadsheet reformatted into something else — US-style 1/15/2026, or a value that got turned into a raw serial number — is refused rather than misread, but you’ll only see it as one of the rows in the failed count, not called out by name. Keep the payment_date column formatted as plain text before you type into it.
  4. Upload the CSV. Files must be under 5MB, and a single upload takes up to 3,000 rows — split a larger backlog into more than one file.

  5. Review the validation summary. Rows marked with an error will not import; rows marked with a warning still will. Fix the errors in your spreadsheet and re-upload if you’d rather they went in too.

    Step 3 review screen showing Valid/Warning/Error counts

  6. Select Import. Rows import independently — one bad row doesn’t stop the rest.

The confirmation shows how many donations imported and their total. If the final count is lower than what the review screen showed, some rows failed a check the on-screen review doesn’t run (an identity-number length limit, or a date the server still couldn’t parse) — open Find a donation and search by campaign to see exactly what landed.

A donor is matched by email only: if the email already exists, the gift is linked to that donor’s existing profile; if not, a new one is created. Leave donor_email blank and the name and phone are still stored on the donation, just without a linked donor account.

What you see What it means What to do
“amount must be a positive number” The amount is blank, zero, or negative Fix the amount in your spreadsheet — negative amounts are never accepted
“Too many donations. Maximum 3000 allowed…” The file has more rows than one upload allows Split the file and upload it in batches
The imported total is lower than what Review showed Some rows failed a check the browser can’t run before upload Search the campaign in Find a donation to see what actually landed, and re-import only what’s missing

Screenshots use sample data. Every screen on this page is captured against a demo organisation seeded with generated donors, amounts, receipt numbers and campaigns. Any resemblance to a real person or organisation is coincidental.