WordPress.org

Plugin Directory

Donor Merchant – Donation Form with Recurring Donations, Stripe and PayPal

Donor Merchant – Donation Form with Recurring Donations, Stripe and PayPal

Description

Donor Merchant is a free donation plugin for WordPress. It gives a nonprofit, church, charity, school, or community group a donation form that takes one-time and recurring donations through Stripe and PayPal, keeps a record of every donor and gift in your own database, and sends receipts.

Try the live demo: pick an amount, choose monthly, cover the fees, and see the receipt. Nothing is charged.

Every feature is in the free plugin. There are no paid add-ons, no locked settings, and no fee added on top of what Stripe or PayPal charge. Optional paid support plans are available: priority email help for a single organization, or faster help for agencies looking after several client sites. Details are at donormerchant.com/pricing.

Who it is for

  • Small nonprofits and charities that need a dependable donation page without a monthly platform bill.
  • Churches taking online tithes and offerings, with funds such as General, Building, or Missions, and year-end giving statements donors can download themselves.
  • Schools, PTAs, booster clubs, animal rescues, and community groups running a goal-based campaign.
  • Freelancers and agencies who build sites for nonprofit clients and want one donation setup they can repeat on every site, with no license keys.

Donations

  • One-time and recurring donations. Donors choose one-time, weekly, every 2 weeks, monthly, quarterly, or yearly, and you pick which of those your form offers. Recurring giving works on both gateways: Stripe subscriptions and PayPal subscriptions.
  • Stripe through Stripe’s Payment Element: cards, plus Apple Pay and Google Pay where you have them turned on in your Stripe account.
  • Bank debit (ACH) from US bank accounts through Stripe, as a setting you switch on.
  • PayPal Smart Buttons for one-time gifts.
  • 20 currencies, with WooCommerce-style number formatting: currency position, thousand and decimal separators, and number of decimals, used on the form, receipts, statements, and reports.
  • Suggested amounts and a minimum. Your own suggested amounts, a custom amount field, and a minimum donation the server enforces.
  • Fee recovery. Donors can choose to add the processing fee to their gift, worked out from the percentage and fixed fee you enter so that the full gift is left after the processor’s cut. A donor who pays a one-time gift by bank account is asked for the lower bank fee instead.
  • Designations. Donors pick the fund their gift supports.
  • Tributes. A gift can be made in honor of or in memory of someone, with an optional message.
  • Employer matching. An optional question asks whether the donor’s employer matches gifts. The employer shows on the donation, your new-donation email and the donor’s receipt.
  • Custom fields. Add your own questions as text, paragraph, dropdown, or checkbox fields, each required or optional.
  • Test mode. Test end to end with Stripe test keys and the PayPal sandbox before going live.

Gift Aid for UK charities

Offer Gift Aid on the form when your currency is pounds sterling. Donors tick HMRC’s model declaration (unticked by default) and give a house name or number and postcode, or a full address if they live outside the UK. One declaration covers future gifts and gifts in the past 4 years, so monthly donors are covered. The declaration is stored exactly as the donor saw it.

Donor Merchant > Gift Aid lists the gifts ready to claim and downloads them in HMRC’s schedule format, ready to paste into HMRC’s spreadsheet for Charities Online. Mark gifts as claimed so they are never claimed twice, see refunds that need reporting back, and cancel a declaration when a donor asks. Donors can also cancel from the donor portal.

Campaigns and goal thermometers

Create as many campaigns as you need, each with its own goal, description, suggested amounts, and an optional end date after which its form stops taking gifts. A campaign’s form shows progress toward the goal, and the [donor_merchant_progress campaign="N"] shortcode places the same thermometer anywhere else on your site.

Donor records and reports

  • Every donor and gift is saved in your WordPress database, with each donor’s lifetime total and last donation date.
  • A dashboard shows total raised, this month’s total, number of donations and donors, recurring gifts, and the average gift.
  • Search and filter the donations list by status, and export donations or donors to CSV.
  • Record offline gifts (check, cash, bank transfer, or other) so your totals stay complete, or let donors choose “check or bank transfer” on the form: they get your instructions, and you mark the gift received when it arrives.
  • Add a donor by hand, and correct a gift’s status to completed, refunded, or failed without deleting it. Corrections never email the donor.
  • An optional monthly fundraising summary is emailed to you on the first of each month.

Receipts, statements, and the donor portal

  • Email customization like WooCommerce’s: every email the plugin sends (donation receipt, recurring gift receipt, offline gift instructions, failed recurring payment, new-donation alert, donor portal link and monthly summary) can be switched on or off, given its own subject, heading and message with placeholders such as {first_name}, {amount} and {designation}, and sent as HTML or plain text. Add your logo, colors, font and footer, set the From name and address, preview each email live on desktop or mobile, and send yourself a test.
  • A printable receipt for every gift, showing your organization’s address, tax ID, and your own receipt wording. Donors save it as a PDF from their browser, so no PDF library is bundled.
  • Annual giving statements for the current and previous year.
  • A donor portal with passwordless sign-in by one-time email link, where donors see their giving history, open receipts and statements, update the card on or cancel a Stripe recurring gift through Stripe’s hosted billing portal, and cancel a PayPal recurring gift.

Donation importer

The built-in donation importer reads a CSV export and recognizes the exports from GiveWP, Charitable, Donorbox, PayPal, Stripe, WooCommerce, Gravity Forms, and WPForms. Any other spreadsheet works too.

You confirm which column is which before anything is written, and a preview shows the result first. Re-running is safe: gifts already on file are matched by transaction ID, or by donor, amount, and date. Imported gifts never send receipts or fire integrations, and rows marked as test mode can be skipped. Each file can hold up to 10,000 rows.

Integrations

  • Mailchimp. Add donors to an audience, with a “keep me updated” checkbox on the form and optional double opt-in.
  • Outgoing webhooks. Send completed donations to Zapier, Make, a CRM, or your own code. Each request is signed with HMAC-SHA256 so the receiver can confirm it came from your site.

Design and placement

  • A Donation Form block, plus the shortcodes [donor_merchant], [donor_merchant campaign="N"], [donor_merchant_progress campaign="N"], and [donor_merchant_portal]. A Shortcodes tab in Settings lists each one with your campaign IDs filled in, ready to copy.
  • Six accent colors or a custom color, and three button shapes (pill, rounded, sharp), with a live preview in Settings.
  • Your own wording: switch “donation” and “donate” to “gift” and “give”, or to your own words, everywhere donors see them, and reword any other text with a simple replacement table.

Records that match your processor

Renewals, refunds, and bank payments that settle days later are recorded from Stripe’s and PayPal’s signed webhooks, so the donations list lines up with your gateway account. A partial refund leaves the gift in your totals, and only a full refund marks it refunded.

How it stays secure

Payment details are collected by Stripe and PayPal directly in the donor’s browser. No card number, expiration date, or CVC is ever transmitted to or stored on your server. Donation totals are recomputed on the server, payment status is confirmed server-to-gateway, and webhook signatures are verified.

Card testing and spam are handled without a CAPTCHA by default: a hidden honeypot field, a signed check that rejects forms submitted impossibly fast, per-IP rate limiting, and a server-side minimum amount. If your payment processor asks you to add a CAPTCHA, the donor_merchant_pre_donation filter lets you plug one in without editing the plugin.

What it does not do

Donor Merchant has no peer-to-peer fundraising, text-to-give, matching-gift company lookup, or drag-and-drop form builder. Forms are set up from the Settings screens.

External services

To process donations this plugin connects to third-party payment and (optionally) marketing services. Nothing is sent until you enable and configure a given service.

  • Stripe (only when Stripe is enabled). The Stripe.js library is loaded from https://js.stripe.com on pages that display the donation form, so payment details can be collected securely in the donor’s browser. Your server also calls the Stripe API at https://api.stripe.com to create payment intents, customers, and subscriptions, and to verify payments. Data sent: donation amount and currency, the donor’s name, email and phone number if given, an internal reference for the donation, and the payment details the donor enters (handled by Stripe – they do not touch your server). Stripe terms: https://stripe.com/legal – privacy: https://stripe.com/privacy
  • PayPal (only when PayPal is enabled). The PayPal JS SDK is loaded from https://www.paypal.com on pages with the donation form. Your server calls the PayPal API (https://api-m.paypal.com, or https://api-m.sandbox.paypal.com in sandbox mode) to create and capture orders and subscriptions. Data sent: donation amount, currency, and an internal reference. PayPal terms: https://www.paypal.com/legalhub – privacy: https://www.paypal.com/privacy
  • Mailchimp (optional – only when you enable it). By default the form shows a “keep me updated” checkbox and only opted-in donors are sent. If you switch that checkbox off in the settings, every donor is added to the audience, so leave it on unless you have another basis for contacting them. Your server calls the Mailchimp API (https://<dc>.api.mailchimp.com) to add the donor to the audience you choose. Data sent: donor email and name. Mailchimp terms: https://mailchimp.com/legal/terms/ – privacy: https://mailchimp.com/legal/privacy/
  • Outgoing webhooks (optional). If you enter one or more webhook URLs, completed-donation data is POSTed to those URLs – which you control and choose (e.g. your Zapier or Make endpoint). No third party receives data unless you configure it.

Getting started

  1. Install and activate the plugin.
  2. Go to Donor Merchant Settings Payments and paste your Stripe and/or PayPal API keys.
  3. Add the Donation Form block (or [donor_merchant]) to any page.
  4. If you accept recurring gifts, add the webhook URL shown on the Payments tab to your Stripe or PayPal account.
  5. Test with Stripe test mode or the PayPal sandbox, then switch to live.

Screenshots

Blocks

This plugin provides 1 block.

  • Donation Form

FAQ

Is Donor Merchant really free?

Yes. Every feature described on this page is in the free plugin, with no add-ons to buy and no fee added to donations. You pay only Stripe’s or PayPal’s own processing fees. The optional paid plans are for priority support.

Can I accept recurring donations for free?

Yes. Weekly, every-2-weeks, monthly, quarterly, and yearly donations work with both Stripe and PayPal in the free plugin, and you choose which ones your form offers. Set up the gateway’s webhook (the Payments tab shows the exact URL and events) so each renewal payment is recorded.

Does it work for churches?

Yes. Churches use it for online tithes and offerings. Set up funds such as General, Building, or Missions so givers can designate their gift, let members give monthly, record cash and check offerings by hand so each giver’s history is complete, and let members download their own year-end giving statement from the donor portal.

Can a charity outside the US use it?

Yes. It supports 20 currencies, including EUR, GBP, CAD, AUD, and NZD, and the currency position, separator, and decimal settings let amounts follow your local conventions. Bank debit (ACH) is for US bank accounts only. UK charities can collect Gift Aid declarations and prepare their HMRC claims.

Can I import donations from GiveWP or Charitable?

Yes. Export your donations to CSV from GiveWP or Charitable, then upload the file at Donor Merchant Import. The donation importer detects the columns automatically, including Charitable’s campaign, date, and gateway columns, so gifts land in the right campaign. It also recognizes exports from Donorbox, PayPal, Stripe, WooCommerce, Gravity Forms, and WPForms. You review the mapping and a preview before anything is saved, and running it twice does not create duplicates.

Will my donors’ recurring donations move over when I switch plugins?

No. An active recurring donation stays with Stripe or PayPal, attached to the plugin that created it, so it cannot be moved by any plugin. The import brings across each donor’s past gifts. Ask recurring donors to start a new recurring gift on your new form, then cancel the old one.

Is it PCI compliant?

Card details are typed into fields hosted by Stripe’s Payment Element or into PayPal’s own window. They never reach your server, and the plugin never stores them. Integrations built this way generally qualify for the shortest PCI self-assessment questionnaire (SAQ A), as Stripe’s security guide describes for its Payment Element. Your organization is still responsible for completing whatever PCI validation your processor asks for, and your site must use HTTPS.

Does the plugin store card numbers?

No. Card details are entered into fields hosted by Stripe (or on PayPal’s site) and never reach your server.

Do I need an SSL certificate?

Yes. Stripe and PayPal require your site to be served over HTTPS.

Where do I find my Stripe API keys?

In your Stripe dashboard under Developers API keys. Use the test keys with Test mode to try things out safely.

Can donors cover the processing fees?

Yes. Turn on fee recovery and enter your fee percentage and fixed fee. Donors then see a checkbox offering to add the fee to their gift. The figure covers the processor’s cut of the fee itself, so the full gift reaches you. If you accept bank (ACH) payments, a donor who switches a one-time gift to their bank account is asked for the bank fee instead (by default 0.8%, capped at $5.00, Stripe’s standard US price).

Can donors choose which fund their gift goes to?

Yes. Add your funds on the Forms tab and a designation dropdown appears on the form. The fund is saved with the gift, carried on recurring renewals, and shown in your donations list and CSV export.

Can I record cash and check donations?

Yes. Use Add Donation on the Donations screen to record a check, cash, bank transfer, or other offline gift. It counts toward the donor’s lifetime total, your reports, and any campaign goal. You can also switch on Offline gifts under Settings, Payments, so donors can pledge a check or bank transfer on the form. They are emailed your instructions, and the gift counts once you mark it received.

Does it send tax receipts?

Every completed gift gets an email receipt and a printable receipt page. Add your organization’s address, tax ID, and the wording your accountant recommends, such as a statement that no goods or services were provided. Donors can also download an annual giving statement. The plugin does not give tax advice, so check what your country requires.

Are webhooks required?

Recommended, but not required for one-time card gifts. Recurring renewal payments, refunds, and bank payments that settle later are recorded from the Stripe and PayPal webhooks, so set them up if you accept recurring gifts or ACH. The settings page shows the exact URL and events to use.

Does it include a CAPTCHA?

No CAPTCHA is bundled. Card-testing attacks are limited by a hidden honeypot field, a timing check, per-IP rate limiting, and a server-side minimum donation, while Stripe and PayPal run their own fraud screening on every payment. If your processor asks for a CAPTCHA, a developer can add one through the donor_merchant_pre_donation filter without changing the plugin.

Can I connect it to Mailchimp, Zapier, or my CRM?

Yes. Mailchimp is built in. For Zapier, Make, a CRM, or custom code, add an outgoing webhook URL and every completed donation is posted to it as signed JSON.

Does the plugin run background tasks or phone home?

No. Donor Merchant sends no telemetry and performs no analytics, tracking, or license checks. It never contacts our servers.

When a page loads and nobody is donating, the plugin makes no external or background server requests. The donation form and the goal thermometer are built from your own database, with no AJAX polling or heartbeat requests.

On pages that contain the donation form, the visitor’s browser loads Stripe.js and/or the PayPal SDK from the gateway’s own CDN, so card details go straight into the gateway’s secure fields and never touch your server. No donor or payment data is sent until someone submits, and on pages without a form those scripts are not loaded at all.

Your server contacts Stripe or PayPal only when a visitor submits a donation, when a gateway sends an incoming signature-verified webhook, when a donor manages a recurring gift in the donor portal, and, if you enable them, when an outgoing webhook or Mailchimp sync fires on a completed donation.

The plugin schedules two WordPress cron events, and neither makes an external request. The first runs daily and, on the first of the month, emails the fundraising summary to your own admin address if that option is enabled. The second also runs daily and deletes donation attempts that were never completed and have sat unfinished or failed for more than 90 days; completed and refunded records, and anything attached to a recurring gift, are never touched. Filter donor_merchant_stale_donation_days to change the window, or set it to 0 to switch the cleanup off.

Does it work with my theme?

The form has its own styling, with class names prefixed so they do not clash with your theme. Pick an accent color and button shape on the Forms tab to match your site.

Does it support Gift Aid?

Yes, for UK charities taking donations in pounds. The form collects HMRC’s declaration and the donor’s address, and the Gift Aid screen prepares your claim file, keeps track of what has been claimed, and lists refunds to report. It does not submit the claim to HMRC for you.

Does it do peer-to-peer fundraising?

No. Peer-to-peer fundraising pages, text-to-give, and matching-gift company lookups are not part of Donor Merchant.

Reviews

October 4, 2026 2 replies
I really like the simplicity and functionality of this plugin. I have a list of enhancements that would really help the plugin's adoption, but I have had no issues getting it to work. I thought about forking it since it's GPL, but I would rather have those changes go directly into this version.
Read all 1 review

Contributors & Developers

“Donor Merchant – Donation Form with Recurring Donations, Stripe and PayPal” is open source software. The following people have contributed to this plugin.

Contributors

Changelog

2.9.1

  • New: change how a check, cash or other offline gift was paid after it is recorded, with “Change method” on the Donations list.
  • Improved: the Transaction column shows how an offline gift was paid and its reference, such as “Check · 1024”.
  • Improved: the list of offline payment methods is fully editable. Check, Cash and Bank transfer are there to start and can be removed.
  • Improved: the Method column shows names such as “Check” and “Offline”.

Full release history: donormerchant.com/changelog. Detailed notes for every release are in changelog.txt, included with the plugin.