Batch Payment Import
Last updated: August 27, 2026
Use Batch Payment Import to record a stack of offline gifts, such as checks, cash, or DAF and IRA distributions, from a single CSV. Nothing is added to your Payments until you review the batch and submit it.
Find it under Settings > Batch Payment Imports.
Before you start
Your CSV needs one row per gift. Three values are required on every row:
Column | Format | Example |
|---|---|---|
Amount | Numbers only, two decimals, no currency symbol or commas |
|
Gift date | ISO 8601 in UTC |
|
Donor identifier | An email, a WeGive donor ID, your CRM ID, or a name with a mailing address |
|
Strongly recommended
These are not required, but leaving them out is what creates review work and duplicate donors. Every one of them saves you time later.
Column | Why it matters |
|---|---|
WeGive donor ID, or your CRM ID | The strongest possible match. A row carrying one of these matches with full confidence and never needs review. |
The next strongest match, and the only value we can use to spot the same donor twice in one file. Two rows sharing an email produce one donor with two gifts. | |
State | Without it we cannot name-match at all, so a row with no email and no state always creates a new donor. |
Street, city, postal, country | Makes the state match reliable, and makes a newly created donor usable for mail. |
First and last name, or company name | Determines whether we create a person or an organization, and what the new record is called. A company name creates an organization. |
Fund | Every payment needs one. Send it per row, or set a default for the whole batch. |
Payment type | Tells us check, cash, or another offline type. Without it, everything takes the batch default. |
Check number | Maps to Tracking number / check no. and is what you will search on when reconciling a single gift months from now. |
Batch or deposit reference | Ties the gifts back to the bank deposit they arrived in. Map it to a custom field, or use the batch name. |
Also supported
Campaign, fundraiser, campaign event, pledge, recurring plan, description, tags, tribute name, tribute email, tribute message, soft credit email, phone, address line 2, payment status, an external reference, UTM values, and your organization's custom fields.
Two of these are worth a second look:
External reference. If you send your own unique ID per gift, a row that repeats an ID already in the batch is flagged as an error instead of importing. That is your guard against accidentally importing the same deposit twice.
Soft credit email. It must exactly match an existing donor's primary email. An email we cannot find puts the row in error rather than importing without the soft credit.
Formatting
Two notes that cause most of the avoidable errors:
Postal codes need their leading zeros. Spreadsheet apps strip them, turning
06784into6784. Format the column as text before saving.Save as CSV, not as a spreadsheet file. Re-check your dates after saving, since some apps rewrite them.
Step 1, create the batch
Go to Settings > Batch Payment Imports and click New batch.
Give the batch a Batch name. Name it for the deposit it represents, for example
August 26, 2026. The name shows in your imports list and on every transaction the batch creates, so it is how you find these gifts later.Choose your CSV file and click Continue.
Step 2, map your columns
WeGive reads your header row and maps the columns it recognizes. Check every row of the mapping screen, then set anything it missed.
Click a column's dropdown and type to search the available fields. Choose Ignore column for anything you do not want imported.
If a column you need has no matching field, that field is not supported for import yet. Note it and contact support rather than forcing it into another field.
Turn on Save mapping as template and give the template a name. The next time you import a file with the same columns, choose it from Apply template instead of mapping everything again.
Step 3, set batch defaults
Defaults fill in any row that does not bring its own value, so you do not need a column for something that is the same across the whole file.
You can set a default fund, campaign, fundraiser, campaign event, pledge, checkout, recurring plan, soft credit supporter, payment type, and payment date, plus UTM values and your organization's custom fields.
Leave Default payment type on Use row value if your file has a payment type column. A mapped column always wins over the matching default.
Step 4, choose your commit settings
These lock once any payment in the batch is committed, so decide them now.
Setting | What we recommend |
|---|---|
Trigger engagements on commit | Off for imported history. Off suppresses receipts, automations, and CRM sync for every payment in the batch. Turn it on only when you want donors to receive receipts for these gifts. |
Auto-accept all suggested updates | Off. Off means a matched donor's record is left alone when your file has different values, and the differences are shown for you to accept row by row. |
Expected batch total (USD) | Enter your deposit total, for example |
Click Continue, review the summary, and start parsing.
Step 5, work the review queue
Parsing sorts every row into a tab so you can see what needs attention.
Tab | What to do |
|---|---|
Ready | A donor was matched confidently. Nothing needed unless you want to change something. |
Needs review | Either no donor was found, or more than one donor matched and we will not guess. Decide each row. |
Errored | Something on the row could not be read, such as an unusable amount or date. Fix the value and re-parse, or skip the row. |
Skipped | Rows you have excluded. They will not be imported. |
Open a row to see its donor panel. You have four choices:
Search for a donor in the box at the top of the panel to attach the gift to someone the match did not find.
Action on commit sets what happens to the donor record: use the matched donor with no changes, update the matched donor with your row's values, or create a new donor from your row's values.
Edit the fields in the panel. Your edits are saved as overrides and are what gets written. Fields you leave empty stay empty on a new record.
Skip row to leave the gift out of the batch entirely.
When a row is right, click Confirm as new contact or accept the match, then Commit to batch. Use Create all as new contacts to clear the whole queue at once, but only when you are confident none of these donors already exist.
Committing does not create anything. It stages the row and locks in your donor decision.
Step 6, submit
When Uncommitted reaches zero, click Submit all and confirm.
You will see a summary of how many were submitted, skipped, and errored. Click View transactions to open your Payments table filtered to this batch. Check the row count and the total against your deposit before you close it out.
Common questions
Will this create duplicate donors? Not for donors we can identify. Rows are matched against your existing donors before any new record is created, and two rows in the same file that share an email produce one donor with two gifts. Rows with no email and no address are the exception, since there is nothing to match on. See the Batch Payment Import reference for exactly how matching works.
Why did a donor I know exists come back as no match found? Most often because the row has no email and the donor has no mailing address on file in that state, or because the row has no state at all. Name matching depends on both. Adding the donor's WeGive ID or your CRM ID to the file is the reliable fix.
Why is a row still blocked after I picked a donor? Check whether the batch has an expected total set. Committed payments must add up to it before the batch can be submitted.
Can I undo a submitted batch? No. Submitting creates real transactions. Archive a batch you no longer want before submitting it. If a batch has already been submitted, contact support to have the transactions reversed.
Where do check numbers go? Map your check number column to Tracking number / check no. on the payment. You do not need to put it in the description.