Charitable Documentation

Learn how to make the most of Charitable with clear, step-by-step instructions.

How to Merge Duplicate Donors in Charitable

Requires: Charitable Pro plugin 1.8.19.1+
Basic plan and higher

Does one of your supporters show up twice in your donor list? It happens a lot. A donor gives once from a work email and once from a personal one, or an import brings in a second copy of them.

When that happens, their donation history is split across 2 records. Your donor count ends up too high, and each record’s lifetime total is too low.

Charitable’s donor merging combines those records into one. This guide shows you how to find duplicate donors, merge them, undo a merge and check the results. Donations move to the record you keep, the other email addresses stay searchable, and nothing is merged until you choose it.

What’s in This Guide?

See Donor Merging in Action

The Duplicate Donors window, listing three groups of donor records that share a name

When to Merge Duplicate Donors

  • After an import. Bringing donors in from another plugin is the most common way a site ends up with 2 records for one person.
  • When a regular supporter uses 2 email addresses. Many donors have a work email and a personal email and have given from both over the years.
  • Before a year-end mailing. Merging first means each household gets one letter instead of 2.
  • When a donor’s lifetime total looks wrong. Split history is the usual reason a major donor shows up as 2 smaller ones.
  • Before reporting to your board. A donor count that includes duplicates says you reach more people than you really do.

To get started, head over to Charitable » Donors. Above the donor list, next to Filter and Export, you’ll see Find Duplicates.

Find duplicates

When you click it, the Duplicate Donors window opens and tells you how many groups Charitable found.

How Charitable Finds Duplicate Donors

Charitable groups donor records by name, not by email.

It compares the first and last name together and ignores capital letters, spacing and punctuation. So Maria Gonzalez, maria gonzalez and Maria Gonzalez all count as the same name.

Records with no first or last name at all are skipped.

If 2 records have the same name and different email addresses, Charitable shows them to you as a group. That’s the most common kind of duplicate.

If 2 records have the same email address and different names, Charitable won’t group them. So if one person is in your list as both “Bob Smith” and “Robert Smith”, that pair won’t be suggested, because the names don’t match.

This is on purpose. Matching by name finds the duplicates people actually create, and Charitable never merges anything without you.

What the Duplicate Donor Badges Mean

Each group carries a badge, because sharing a name doesn’t prove 2 records are the same person.

BadgeWhat it means
POSSIBLY SAME PERSONSomething beyond the name matches. The records share an email domain, an address or a phone number, or they have very similar email addresses.
NAME MATCH ONLYThe records have nothing in common except the name.

Under the badge, Charitable shows the reason in plain words, for example “Same email domain (example.org)” or “Nothing in common but the name”.

A group badged POSSIBLY SAME PERSON, with the reason shown beneath

NAME MATCH ONLY is a warning, not a decision. 2 unrelated people really can share a name, so check the donation history before you merge one of these groups.

How to Merge Duplicate Donors in 3 Steps

The steps always run in the same order, and the window won’t let you skip ahead.

Step 1: Choose Which Donor Record to Keep

Each row in the group has a Keep button and shows that record’s email, donation count and lifetime total. Click Keep on the record you want to stay.

You won’t lose any donations or email addresses whichever record you pick. But the record you keep supplies the name, address, phone number and marketing consent from now on, so it’s usually best to keep the more complete or more recently used one.

Step 2: Preview the Donor Merge

Next, click Preview. Charitable shows you exactly what the merge will do before anything changes.

The preview, showing the combined donation count and total, and the email that will be added

The preview names the donor you’re keeping, the combined number of donations and the combined total. It also lists the email addresses that will be added as secondary emails, plus any conflicts.

If you click Preview before choosing a record to keep, you’ll see “Choose which record to keep first.” That’s a reminder of the order, not an error.

Step 3: Tick the Group and Apply the Merge

Finally, tick Merge this group and click Apply Selected Merges at the bottom of the window. You can tick several groups and apply them all at once.

A group with a record chosen and Merge this group ticked

What a Donor Merge Changes

  • Donations move from the other record to the one you kept, and the totals and counts combine.
  • The other email addresses are kept on the record you kept as secondary emails, one row each. You can still search for them, so looking up the old address still finds the donor.
  • The kept record’s own details stay. Its name, address, phone number and marketing consent are the ones used from now on.
  • Charitable saves a full snapshot of the other record first. The snapshot is what lets an undo put everything back exactly.

How Charitable Flags Donor Merge Conflicts

When the 2 records disagree about something important, the preview tells you and leaves the decision with you.

What’s flaggedWhat happens
Both records are linked to a WordPress user.The record you keep keeps its own user. The other user account is never deleted.
A linked user has a membership or login.The membership stays. A merge never deletes a membership account.
The marketing consent is different.The record you keep keeps its own consent setting.
The billing addresses are different.The record you keep keeps its own address. The other address is saved in the snapshot.
The phone numbers are different.The preview tells you they’re different.

Most people want to know 2 things before they click anything. Merging never deletes a WordPress user account or a membership, and you can undo every merge.

How to Undo a Donor Merge

Charitable keeps a record of every merge, and you can undo each one on its own. The snapshot saved before the merge puts the other record back as it was, down to fields that were empty.

You can only undo a merge once. If you try again, you’ll see “This merge was already undone.”

Example: Cleaning Up Duplicate Donors After an Import

Let’s say a charity moves 4,000 donors over from another plugin. The import works, but the donor count is higher than the number of people they know they have, because some long-time supporters came in again under a second email address. Here’s how they’d clean it up.

1. Export Your Donors First

Before you merge anything, go to Donors » Export and save a full CSV.

You can undo merges one at a time. But a CSV from before you started is the quickest way to see what a record looked like last week, without stepping through undo.

2. Open Find Duplicates and Check the Count

The top of the window tells you how many groups Charitable found. If the number is large, split the work over a few days, since you’ll make fewer mistakes that way.

3. Start With the POSSIBLY SAME PERSON Groups

These groups have extra evidence beyond the name. They’re the quickest to judge and the least likely to be wrong.

For each group, keep the record with the more complete details and click Preview. Then check the combined total and tick Merge this group.

4. Apply Several Merges at Once

Tick several groups, then click Apply Selected Merges once. You don’t need to apply after every group.

5. Take Your Time With NAME MATCH ONLY Groups

For these groups, open each donor record in another tab and compare the donation history before you decide.

2 donations from different cities 5 years apart are probably from 2 people. 2 donations of the same amount a week apart are probably from one person.

6. Leave Any Group You’re Unsure About

An unmerged duplicate only makes your list a little untidy. Merging 2 different people means an undo and possibly an apology, so when in doubt, leave it.

7. Check the Count Again

Once you’re done, open Find Duplicates again. The groups you merged are gone, and the ones left are the groups you chose to keep separate.

Tips Worth Keeping in Mind

Doing these 3 things before a large merge session saves you from finding problems halfway through.

  • Take a donor export. It only takes a minute, as shown in the example above.
  • Decide your rule for NAME MATCH ONLY groups and stick to it. “Merge only if the donation histories don’t overlap in time” is a rule you can apply the same way every time. “Merge if it looks fine” isn’t, and you’ll apply it differently across 200 groups.
  • Check whether any of these donors have logins. If your donors sign in to a donor dashboard, the preview flags linked user accounts. Nothing is deleted, but the kept record keeps its own user, so decide which login should stay before you merge.

How Donor Merging Works With Tags, Exports and Filters

  • Donor tags stay on the record they were added to. Tags on the record you merge away don’t move across, so if you use tags to group donors, check the kept record’s tags afterwards.
  • Exports show the merged record straight away. A donor export run after a merge shows one row where there were 2, with the combined totals.
  • Filters work the same way. A filter on a tag or a date range only sees the kept record.
  • Date Joined stays as the kept record’s own date. If the record you merged away was older, the Date Joined doesn’t move back to match it, so keep this in mind if you report on how long supporters have been with you.

What Donor Merging Does Not Do

  • It doesn’t delete a WordPress user account, even when both records have one.
  • It doesn’t delete a membership or a login.
  • It doesn’t match by email, so 2 records with the same email and different names aren’t suggested.
  • It doesn’t run automatically, on a schedule or in bulk. Every merge needs you to choose a record, tick the group and click apply.
  • It doesn’t change the donations themselves, apart from which donor they belong to. Amounts, dates, campaigns and statuses stay the same.

Troubleshooting Donor Merging

Check that the Charitable Pro plugin is active and on 1.8.19.1 or later. Before 1.8.19.1, merging was only available inside the GiveWP import tool, so most sites on an older version won’t see it.

The free version of Charitable doesn’t include the Donors screen.

It Says No Duplicate Donors Were Found, But I Know I Have Some

The window shows “No two donor records share a name, so there is nothing to merge.” This is usually right, and it means your duplicates have different names as well as different emails. That covers pairs like “Bob Smith” and “Robert Smith”, or a record where the name was never filled in.

Charitable only matches on name, so those pairs won’t appear. Edit one record’s name to match the other, and they’ll be grouped the next time you check.

A Group Shows 0 Donations and $0.00

That’s a real pair of donor records with no completed donations. They’re usually created by an import, or by a donation form where payment was never finished.

You can safely merge them, there’s just nothing to combine.

2 Different People Share a Name and I Don’t Want Them Merged

Leave the group alone. Nothing is merged unless you choose a record to keep, tick the group and apply, and there’s no bulk “merge everything” option.

I Kept the Wrong Donor Record

Undo the merge, then merge again with the other record chosen as the one to keep. Nothing is lost in between, because the snapshot restores the record exactly.

The Old Email Address No Longer Finds the Donor

It should. The other record’s emails are added to the kept donor as secondary emails, and you can still search for them.

If searching for the old address finds nothing, check that the merge actually went through. The window confirms each applied merge.

The Donor’s Lifetime Total Still Looks Wrong After Merging

Donation totals only count approved donations. Pending, failed and refunded donations aren’t counted as money received.

So a record with several pending donations shows a lower total than its number of donations suggests.

Developer Reference for Donor Merging

Donor Merge Hooks and Filters

// Runs after a merge completes.
// $survivor_id int   the donor kept
// $loser_id    int   the donor merged away
// $record      array the stored merge record, including the snapshot
do_action( 'charitable_donors_merged', $survivor_id, $loser_id, $record );

// Runs after a merge is undone.
do_action( 'charitable_donor_merge_undone', $survivor, $loser, $merge_id );

// The donor meta keys a merge will fill in on the survivor when the
// survivor's own value is empty.
apply_filters(
    'charitable_donor_merge_fillable_meta_keys',
    array( 'addresses', 'phone', 'company', 'title', 'first_name', 'last_name' )
);

How Donor Merge Data Is Stored

  • Secondary emails are stored as donor meta under the key secondary_email, with one row per address. That’s what keeps each one searchable on its own.
  • The surviving donor’s primary email is never copied into that list.
  • Conflicts come back as an array of flags. Each flag has a code, a severity of high, warn or info, and a readable message. They’re advisory only, and nothing in the merge path resolves one on its own.

Example: Log Every Donor Merge for Your Own Audit Trail

add_action(
    'charitable_donors_merged',
    function ( $survivor_id, $loser_id, $record ) {
        error_log( sprintf(
            'Donor merge: %d absorbed %d',
            $survivor_id,
            $loser_id
        ) );
    },
    10,
    3
);

Example: Carry a Custom Field Across a Merge

If you store your own donor meta, you can have it filled in on the survivor when the survivor’s own value is empty.

add_filter(
    'charitable_donor_merge_fillable_meta_keys',
    function ( $keys ) {
        $keys[] = 'my_crm_reference';
        return $keys;
    }
);

Example: Send Donor Merges to an External CRM

add_action(
    'charitable_donors_merged',
    function ( $survivor_id, $loser_id, $record ) {
        $survivor = charitable_get_donor( $survivor_id );

        if ( ! $survivor ) {
            return;
        }

        my_crm_merge_contacts(
            $survivor->get_email(),
            isset( $record['snapshot']['email'] ) ? $record['snapshot']['email'] : ''
        );
    },
    10,
    3
);

You can now find duplicate donors, merge them safely and undo any merge you change your mind about. Your donor count, lifetime totals and donor history will show each supporter as one person.

If you have any questions, our support team is happy to help.

You May Also Want to Read

These guides cover the rest of the Donors screen and the tools that bring donors into Charitable.

Helpful Links

🤝 Get help when you need it

Connect with Customer Support →

📑 Find the guide you need

Browse the Documentation Hub →

⬇️ Download proven strategies, campaign ideas, and expert tools

Get the Fundraising Kit →

🔗 Let your AI Assistant do the fundraising work for you.

Connect Charitable to your AI assistant →

💸 Get Free Fundraising Resources
Head to the Charitable Fundraising Hub →

🤔 Got questions about Charitable?
Charitable FAQs →

Need help understanding non-profit terms and jargon?
See our Non-Profit Glossary →

Not yet on Charitable Pro?

You can get up to 50% off when you sign up for or upgrade to Charitable Pro. We want to ensure that you can try the advanced fundraising features like Recurring Donations, Donation Recovery, and more at a significantly reduced cost.

Join over a million satisfied Charitable Pro users today. Every purchase comes with a 14-day money-back guarantee, ensuring you’re supported every step of the way.

If you have any questions or need assistance, our support team is ready to help you make the most of these new features.

Still have questions? We’re here to help!

Last Modified:

What's New In Charitable

View The Latest Updates
🔔 Subscribe to get our latest updates
📧 Subscribe to Emails

Email Subscription

Join our Newsletter

We won’t spam you. We only send an email when we think it will genuinely help you. Unsubscribe at any time!

Improvement Payments

💸 Introducing Tiered Rates for Fee Relief: Match the Ask to the Gift!

Fee Relief asks your donors one short question at checkout: would you like to cover the processing fee on this gift? Until now that question used a single rate for every donation on a gateway, so a $10 gift and a $500 gift were asked for the same percentage. Fee Relief 1.3.0 lets you set as many donation bands as you like, each carrying its own rate. Why this is important:

  • 🪙 Gentler on small gifts: A fixed transaction cost is a far bigger share of a $10 donation than a $500 one, so bands let you ask for less at the bottom.
  • 🎚️ As many bands as you need: Each band carries its own percentage and its own fixed amount, and the top band runs on with no upper limit.
  • 🛑 An optional ceiling: A Maximum fee field stops any donor being asked for more than a number you choose, however large the gift.
  • 🔌 Set per payment gateway: Stripe can run on four bands while Windcave and Payfast stay on a single rate, because bands belong to a gateway and not to your whole site.
  • 🛡️ Nothing changes until you say so: Your current rates stay exactly as they are until you switch Use Tiered Rates on under Charitable » Settings » Advanced » Fee Relief.

Check out our announcement here.

Donations Improvement

📊 Your Pro Dashboard Can Now Compare, Export, and Score!

Most fundraising dashboards only tell you how much you have raised. Charitable Pro 1.8.19 rebuilds the dashboard and the Reports Overview around the harder questions: whether anything is broken, whether this period beat the last one, and which single change would make the most difference today. Why this is important:

  • 📈 Every figure has a trend: Pick a period and the tiles and the chart move together, with each total shown against the previous period.
  • 🗓️ Charts that stay readable: Short ranges group donations day by day, while longer ranges group by week or month, so a full year reads as a curve instead of a flat line.
  • 🔀 Compare any 2 periods: Not just consecutive ones, so you can ask how this December did against last December. That matters because fundraising is seasonal.
  • 📤 Export the whole summary: Send the full overview out as CSV or PDF, ready for a board pack or a funder report.
  • 🎯 Score your setup for free: Have your fundraising setup scored, so the one change worth making next is the one you can see.

Check out our announcement here.

Feature New

🎟️ Introducing Charitable Events: Sell Tickets Inside Your Campaigns!

Most nonprofits sell event tickets in one tool and collect donations in another, which leaves two sets of reports and a manual match at the end of the year. Charitable Events brings both together, selling tickets through the same donation forms and payment gateways you already run in Charitable. Why this is important:

  • 🎟️ Every ticket is a donation: Ticket sales run through the gateway you already use and count toward the campaign goal, with everything managed under Charitable » Events.
  • 📱 QR check-in from any phone: Each attendee gets their own QR code on the receipt, and volunteers scan at the door through a check-in link that needs no WordPress account.
  • 🧾 Receipts ready for tax time: Give each ticket type a fair market value, and Charitable puts the correct tax-deductible amount on every donor receipt.
  • 📋 Attendee details at checkout: Ask every guest for a meal choice, shirt size, or access needs, with a separate attendee record created for each ticket.
  • 🗓️ Blocks and calendars included: Three editor blocks plus Sugar Calendar and The Events Calendar support put your events where supporters already look.

Check out our announcement here.

ai New

🚀 Unleash AI Power in Charitable!

Your AI assistant can now build, edit, and manage your Charitable fundraising campaigns directly — just by asking. With Charitable Pro adding write support for the WordPress Abilities API, tools like ChatGPT, Claude, and Cursor can handle full administrative actions safely through MCP. Why this is important:

  • 🤖 Campaign creation in plain language: Prompt your assistant with a goal like “Set up a fundraiser for the shelter with a $5,000 goal”, and it builds a real draft campaign complete with suggested donation tiers.
  • 🎨 Instant donation form tweaks: Add custom fields, change button colors, or reorder elements without diving into form settings.
  • 📝 Offline gift logging: Tell your assistant about cash or check gifts, and it will match donor emails and record transactions into your history.
  • 🛡️ Safety and control by default: Write access stays strictly off until turned on in Charitable » Tools » AI MCP, keeping read-only reporting safe by default.
  • 📜 Full audit logging: Every change made by an AI assistant is tracked under Charitable » Tools » Logs, so you always know who (or what) updated your site.

Check out our announcement here.

Improvement Payments

💰 Accept Recurring Donations with Windcave and Charitable

A donor sets their gift up once on Windcave’s secure payment page, and Charitable bills every renewal after that on schedule. Why this is important:

🏦 Organizations banked in New Zealand or Australia: monthly giving on the gateway your bank already set you up with, with no second processor to onboard.
⛪ Churches taking regular tithes and offerings: congregants set their own schedule once, which is the simplest way to launch recurring church giving without a separate platform.
🌏 Groups with donors in several currencies: Windcave handles more than 20, so a supporter can give in the currency they actually hold.
📅 Operating funds rather than one-time campaigns: switch on Recurring Only mode and the one-off option disappears, so every gift to that campaign is a subscription.
🧾 Teams with no developer on staff: 3 sets of credentials pasted into a settings page, and no code anywhere.

Check out our announcement here.