This guide is for anyone leaving the Charitable plugin (WP Charitable), whether you built the site yourself or inherited it. Every Charitable detail below was checked against the source code of Charitable 1.8.12.3, the current version on WordPress.org, so you can confirm it yourself. Donor Merchant is the worked example, but the export steps and the warnings apply whichever plugin you move to.
Charitable is a capable plugin, and this is not a case against it. It just has a few behaviors that matter when you leave, and its documentation is written for people staying.
What carries over from Charitable, and what does not?
Your donor and donation history carries over through a CSV file; live subscriptions, campaign settings and page URLs do not.
| What you have in Charitable | Comes across? | How |
|---|---|---|
| Donor name, email, phone | Yes | Donation export CSV |
| Gift amounts, dates, status, gateway | Yes | Donation export CSV |
| Campaigns and the money raised for each | Yes | Created from the "Campaign Title" column |
| Campaign goals | No | Not in the donation export; type them in by hand |
| Campaign descriptions, images, end dates, suggested amounts | No | Rebuilt in the new plugin |
| Donor mailing addresses and contact consent | Not imported | They stay in your CSV file, which you should keep |
| Test-mode donations | Skipped on purpose | So they cannot inflate totals |
| Active recurring donations | No | No plugin can move them |
| Campaign page URLs | No | Set up redirects |
The reasoning behind the recurring row is the same for every donation plugin, and we cover it in full in migrating a donation plugin without losing donor history. The short version: the subscription lives in your Stripe or PayPal account, it is tied to the integration that created it, and a donor's saved card is deliberately not exportable.
Should I keep Charitable active while recurring donations are still running?
Yes. If you have any live recurring donations, keep Charitable installed, active and connected to your gateway until each of those donors has moved or lapsed.
In Charitable, recurring giving comes from a separate extension. Its WordPress.org readme says you can accept recurring donations "with the Recurring Donations extension." Each Stripe renewal is recorded on your site when Stripe sends a webhook to Charitable's listener, and Charitable's own code handles that message. Its Stripe webhook processor even contains the reply it sends when the extension is missing: "Subscription Webhook: Unable to process without Charitable Recurring extension." (source).
Deactivate Charitable, or just its Recurring extension, and the schedule at Stripe carries on. Donors keep being charged. Nothing on your site records those gifts, so they never reach your reports or a donor's year-end statement.
The three ways to move those donors (run both plugins, ask donors to re-subscribe, or let them run out) are laid out in the general migration guide. Whichever you choose, the rule is the same: cancel a donor's old schedule only after their new one has confirmed. Stripe lets you cancel any subscription from your own dashboard (Stripe docs).
Where is the donation export in Charitable?
It is the Export button above the list at Charitable, then Donations.
- Click Export. A box titled "Export Donations" opens.
- Leave both date fields blank to export everything.
- Set Filter by Status to All and Filter by Campaign to All Campaigns.
- Click Export to download the CSV.
Do not use the export under Charitable, then Tools, then Export for this. That one produces a JSON file meant for moving campaigns "into another site with Charitable installed," and its own help text says "Recurring donations are not included." It is the right tool for a Charitable-to-Charitable move and the wrong one for anything else.
By default, the CSV has these columns, in this order (source): Donation ID, Campaign ID, Campaign Title, First Name, Last Name, Email, Address, Address 2, City, State, Postcode, Country, Phone Number, Address Formatted, Donation Amount, Date of Donation, Time of Donation, Donation Status, Donation Gateway, Made in Test Mode, Contact Consent. Charitable's field system then adds Campaign Categories, Donation Subtotal, Donation Total, Gateway Transaction ID and Currency at the end. Extensions and custom fields can add more.
Does Charitable have a campaign export?
Yes. At Charitable, then Campaigns, the Export button produces a CSV with one row per campaign (source).
No importer reads it as donation history, because it holds no individual gifts. Download it anyway. It is your reference sheet for the manual steps, since it includes each campaign's Title, Goal, End Date, Amount Donated, Description, Minimum Donation Amount and Campaign Permalink. Suggested donation amounts and featured images are not in it, so note those from each campaign's edit screen.
Why should I change the date format before exporting?
Because Charitable writes the "Date of Donation" column in your site's own date format, and a day-first date can be misread on import.
In the source, a donation's date is formatted with get_option( 'date_format' ), the setting at Settings, then General, then Date Format (source). Donor Merchant reads dates with PHP's standard date parser, which treats slashed dates as US month-first. We ran each format through it:
| Date as exported | Read as | Result |
|---|---|---|
2026-09-26 | September 26, 2026 | Correct |
September 26, 2026 | September 26, 2026 | Correct |
26/09/2026 | Not a date | Row skipped as incomplete |
05/09/2026 (meaning 5 September) | May 9, 2026 | Silently wrong |
| A month name in another language | Not a date | Row skipped as incomplete |
The last row matters because WordPress translates month names on non-English sites. The fix takes a minute. Before you export, set the date format to Y-m-d (one of WordPress's built-in choices, shown as 2026-09-26), export, then change it back. The WordPress date format docs explain the codes. If you have already exported, check the dates in the preview before you import.
How do I import the Charitable CSV into Donor Merchant?
Upload it at Donor Merchant, then Import, confirm the column mapping, preview, then import.
From version 2.5.4, Charitable's default headers are detected automatically:
| Charitable column | Donor Merchant field |
|---|---|
| Email, First Name, Last Name, Phone Number | Donor record |
| Donation Amount | Amount (currency symbols and either decimal style are handled) |
| Date of Donation | Date |
| Donation Status | Status |
| Donation Gateway | Payment method |
| Campaign Title | Campaign |
| Donation ID | Transaction ID |
| Currency | Currency |
| Made in Test Mode | Test flag (rows marked Yes are skipped) |
A few details worth knowing:
- Preview writes nothing. It runs the whole file in memory and reports how many gifts would be added, across how many donors, plus duplicates, incomplete rows and skipped test-mode rows.
- Imported gifts never send email. No receipts, admin alerts, outgoing webhooks or Mailchimp syncs fire for historical records.
- Re-running is safe. Charitable's Donation ID is used as the transaction ID, so a gift already imported is recognized and skipped. You can fix a mapping and run the same file again.
- Statuses carry across. "Paid" becomes completed. Refunded and pending gifts keep those statuses, failed and canceled gifts come in as failed, and none of them count toward totals.
- Gateway Transaction ID is not mapped by default. It stays in your CSV for reconciling against Stripe or PayPal. You could map it instead of Donation ID, but older or offline gifts may have it blank. A blank ID falls back to matching donor, amount and day, which can merge two identical same-day gifts.
- One file holds up to 10,000 rows. For larger histories, export by date range using Charitable's date filter.
How do I move Charitable campaigns to Donor Merchant?
The import creates them for you from the "Campaign Title" column and attaches each gift, so every campaign's raised total is right from the start. What you add by hand is everything the donation export does not contain.
- Open Donor Merchant, then Campaigns and edit each imported campaign.
- Enter the Goal amount from the Goal column of your Charitable campaign export. Until you do, the thermometer stays hidden, since a goal of 0 means "no goal."
- Add the description and, if you like, campaign-specific suggested amounts.
- Imported campaigns start as Active. Donor Merchant campaigns have no end date, so set any campaign that has already finished to Closed.
- Copy the shortcode from the Shortcode column, such as
[donor_merchant campaign="3"], onto the campaign's page. Use[donor_merchant_progress campaign="3"]where you want only the thermometer.
Campaigns are matched by exact title. If you rename an imported campaign and later re-import the same file, a new campaign with the old name will be created, so do all your importing before you rename anything.
Check your totals by comparing each campaign's raised figure with the Amount Donated column in Charitable's campaign export. If they differ, the cause is usually test-mode or refunded rows, or dates that failed to parse, and the preview counts show which.
What happens to my old Charitable pages and shortcodes?
They stop working when Charitable is deactivated, so plan replacements before that day.
- Campaign URLs. Charitable campaigns are their own post type, served under
/campaigns/by default (source). Once Charitable is off, they return "not found." The Campaign Permalink column gives you every old URL, so set up a 301 redirect from each to its new page. - Shortcodes. Pages that use Charitable's shortcodes, such as
[charitable_donation_form],[campaigns]or[charitable_my_donations], will show the raw shortcode text. Replace donation forms with[donor_merchant]and the donor account page with[donor_merchant_portal]. - PayPal. Charitable ships two PayPal gateways. The older one, labeled simply "PayPal," uses PayPal's legacy Website Payments Standard and IPN. If yours is that one, read PayPal's January 2027 end-of-life first, because its recurring donors face a deadline regardless.
A switching order that loses nothing
- Untick Reset Data in Charitable's Advanced settings.
- Set the WordPress date format to
Y-m-d. - Export donations (all statuses, all campaigns, no dates) and campaigns. Keep both files somewhere that is not one person's laptop.
- Restore your date format.
- Install Donor Merchant, connect Stripe or PayPal in test mode, and run one test gift.
- Import with preview first, then for real.
- Set goals, statuses and descriptions, place shortcodes, and add redirects.
- Switch your donate pages to the new forms so new recurring donors start in the new plugin.
- Leave Charitable active and connected until its last recurring schedule has moved or ended. Then deactivate it.
Is Donor Merchant a good Charitable alternative?
It depends on what you used Charitable for. If you rely on peer-to-peer fundraising or a stack of Charitable extensions, Charitable may still suit you better, and we would rather say so. If you mainly need donation forms, campaigns with thermometers and recurring giving, Donor Merchant does that in one free plugin with no add-ons. Recurring donations through Stripe and PayPal, campaigns, PDF receipts and the donor portal are all included, with no platform fee. Charitable's readme points to a paid Recurring Donations extension for that; check wpcharitable.com for current pricing. There is a fuller side-by-side on our Charitable alternative page.