In the past we have shown you how to add a PayPal donate button in WordPress. When working with a non-profit, just the donate button is not sufficient. They want to have a page with a video, their mission statement, and a donate form that they can use to collect payments. In this article, we will show you how to create a robust donate form for Nonprofit organizations using WordPress. This donate form will allow the user to pick an amount, choose whether it is recurring or one-time, add payment (you choose between Auth.net or PayPal), and add donors to a special email list.
To create something as robust is this, you either need a lot of coding knowledge, or you need Gravity Forms. While we could have hard coded the form, we wanted to give our client the ability to change things around in the future as easily as possible. Therefore, we decided to stick with the Gravity Forms plugin. Note: You will need the Developer version if you wish to use Auth.net and PayPal payment gateways. (Gravity Forms Coupon if you haven’t bought it already).
First thing you need to do is install and activate Gravity Forms along with the following add-ons (MailChimp, and PayPal or Auth.net). Next, you need to configure each of these add-ons which is fairly easy. For auth.net you need the API and transaction key, for PayPal you need to turn on some settings, for MailChimp you need the API.
Next, you need to setup a SSL Certificate because it is required by Auth.net. Use the plugin WordPress HTTPs. The cheapest SSL certificate we found was $12.99 / year. Ask your host if they already have a SSL Certificate available for you. Some do provide SSL Certificate with the hosting account (for example. HostGator Business Plan use coupon “wpbeginner” to start for $0.01 for the first month).
Now we are ready to create the form. Gravity Forms make this process a piece of cake with their drag-drop interface. We added a Pricing Field (Product) radio button for donation amounts (we gave 5 options $25, $50, $100, $500, $1,000). We added another radio button to decide the frequency of payments whether it will be one-time or monthly recurring.

From the advanced field section, we added the name field, email field, phone field, and the address field.

From the Pricing Fields, we added the Credit Card field. You don’t need to add Credit Card field, if you are using PayPal.

Next, we added a checkbox to add the donor’s email to our special email list. This is a simple checkbox with one value that says “Yes, I would like to receive updates from XYZ organization”. We decided to use MailChimp for our client, but you can do this with Aweber and Campaign Monitor as well because Gravity Forms have add-ons available.
Now that you have the form created, we need to integrate the Payment Methods and MailChimp to our form.
Go to MailChimp option under Gravity Forms and click Add New. It asks you to specify which MailChimp list you want. Select the one that you want to add the emails to. Then it asks you to select which form you want this in, so select the form name. Next you need to Map the fields. So for Email Address, get your form field Email. For name, get your form field name. Make sure to Enable opt-in condition so it says Export If is Yes, I would like like to… If your MailChimp list has groups, then you can select groups as well. Don’t forget to double opt-in to comply with MailChimp’s policies.
Go to PayPal option under Gravity Forms and click Add New. Enter your PayPal email address, mode will be production, enter transaction type (donation), and gravity form. Map your fields such as customer name, email, address etc. Select the options that you want. Enable PayPal Condition and say If Frequency is One-time use this form. Then repeat this whole process again except change transaction type to subscriptions, enter the Recurring amount to be Donation Amount, billing cycle should be 1 month, and recurring time should be infinite (Basically until the user cancels). Fill in the rest of the fields and then enable PayPal condition to say If frequency is recurring. Save and you are good to go.
For Auth.net the process is the same as PayPal, so follow that.
Once you are done go to Pages. Create a new page called donate. Embed a Video, add text below it or above it, and then simply add the Gravity Forms using the icon next to Add Media icon.
And you are done. You just created a robust donate form for nonprofit organization using WordPress. Let us know if you have tips and tricks to improve on this method.








Hi WPBeginner!
Man great post. This reminds so much when I wanted to start a crowdfunding website with WordPress. I paid a hefty price for that at that time and man, ended up my partner took over for good.
Thanks for sharing the lovely plugin as I might be able to use on my new site
Reginald
Absolutely brilliant article. I was able to take this from square one to up and running in a matter of an hour and a half. THANKS!
Hi,
I am using Gravity form and Paypal pro add-on to get the donation form working. It works fine but the question I have is, why the payment notification received from paypal does not include Address info that I have in my form?
Any suggestions would be a great help.
Thanks!
If I’m correct, then the address information doesn’t transfer to PayPal. Probably best to ask this in Gravity Forms support forums.
Using a custom form like this, is there a way to log the donations for registered and logged in users and then allow them to see their past donations in the front-end?
Interesting idea. It’s possible, but not out of the box. You would have to store the donation amount and date somewhere in usermeta, so you can easily pull it.
Thank you for the encouraging response!
Forgive my ignorance (I’m a recent convert from ASP.net), but how would I do that? If you came up with a great solution and wrote an article on it, it would be pretty popular. I know that on the WordPress.org site many people are looking for some way to add a donation history. It’s a common enough complaint on the various donation plugins out there. It would be even better if the admin had the ability to add donations made by phone or check to a user as well.
Just a thought, but could someone make this form generate a post to a custom post type and log donations that way (again, I’m a beginner, so I don’t know for sure)?
Hi. I am wondering about setting up the frequency buttons. Do I do that in the pricing fields or somewhere else? Thanks for this. It is just what I was looking for.
To do that, you actually have to set it up first in the PayPal add-on or authorize.net add-on. Setup two separate payment types. One as recurring the other as one-time payment. Then you would have to configure the conditionals properly. It was a bit complicated, but there is no easy way to do that. Basically, setup the two radio buttons for frequency. Then in your payment add-on load the specific one based on the radio conditional. Hope this helps.
Could you add a field to specify a fund?
If you mean add an other field and let user enter the amount. Yes you can. You have to use a conditional feature that Gravity Forms have.
Actually a text field specifying which fund to collect the money and then bring that through authorize.net or have a record of what they wanted and the dollar amount.
Yes you would need to use Gravity forms text field. But then only open it conditionally when the user checks the radio button other. Then specify in Authorize.net add-on for Gravity forms that this particular field is also a payment amount field.
Thanks so much for this tutorial. Perfectly clear and absolutely essential for the client I had.
Hi Syed, thanks for the tip. This help out a great deal.
I was wondering if you could tell me how to add a field that will allow for a potential donor enter any amount they want while still having the checkboxes or radio buttons?
Thanks.
Hey Sam,
Yes that is possible. In Gravity Forms, add an option called Other in your radio buttons. Then create a new text field. When you click on the advanced tab in GF, you will see the checkbox to enable Conditional Logic. Then show that field only when the user clicks the other option. Also make sure that your payment option is taking that into account. Basically it is just a bunch of conditional logics.
Thanks so much. I got it to work nicely. I’ve run into another small issue though. In creating the other amount and selecting recurring amount, I’m not able to get it to redirect to Paypal. I can get the single payment and other donation amount to work nicely, but the minute I select recurring amount with other payment, it fails.
You can view the donation form for Thinking Forward here.
I look forward to hearing from you.
Hey Sam, really not sure what the issue would be. We used Authorize.net platform on the donation example. You will probably get a better answer at Gravity Forms support forum.
Heard a lot of good things about Gravity Forms. Was wondering if it attracts a lot of spam as most forms seem to. The only one I have used which doesn’t is Fast Secure Contact Form but I am pretty sure it doesn’t integrate with PayPal which is a shame.
@hollywood_cat No particular form attracts SPAM. It is your site that does. If you put proper SPAM protection (such as captcha, or honeypot) then it will be fine. Gravity Forms have both options.
I see that you need SSL Certificate because it is required by Auth.net, but do you need one if you are going to use PayPal?
@MarkStanwyck No if you are using PayPal, you don’t need it.
@wpbeginner Thanks. Do you have to use the WordPress HTTPs plugin or could I just have Go Daddy install the certificate and be good to go?
@MarkStanwyck Because the page lives on WordPress, the https plugin must be installed to force https on that page.
@wpbeginner Got it. I was just surprised to see that the plugin only had 82 reviews. I thought if it provided such critical functionality than it would be more popular.
@MarkStanwyck The newest version of HTTPs is extremely unstable. We recommend using 2.0.4 << that is the last stable version that we found is working. As you can notice, that the current version is being reported by so many.
@wpbeginnerThanks! However, it look like the 3.0.1 update fixed the major issue everyone was having.
Is it possible to use this work around for multiple non-profit organizations on one WordPress website? So create for each organization a separate donation form?
@JeroenOnstenk Yes it is possible as long as you are on the only admin managing it (a lot of confidential information goes in the backend).
Also the domain name must be generic as well… otherwise the users would wonder why they are on an off-site domain name to give donation. You would also need to have a homepage explaining why they are on the site… You can create a specific page template for each organization with their logos.
Thanks. I was looking for this for my other site.Just one question though, for this to work, do I have to use Gravity Forms? Won’t some other contact form plugin like Contact Form 7 do the trick?
@thewebmasterblogs Unless they have an Authorize.net extension/add-on it will not be as easy. However, it is certainly do-able by coding an extension for it.
@wpbeginner @thewebmasterblogs Can I use this with 2Checkout.com to take donations ?
@shumail @thewebmasterblogs It won’t work with Gravity Forms because they do not have that add-on.
Can’t believe that: I was looking for something like that for a website I’ve built for a baby with a genetic disorder called Epidermolysis bullosa dystrophica. I asked the guys at Gravity Forms how to do this but couldn’t get a “step-by-step” guide. I.m going to implement this on the site in discussion.
Our current donation area operates on the Django framework. I’ve heard from our developer that if we switch the rest of the site to WP, that’s OK—but don’t move the secure donation area from Django because it’s more secure than WP will ever be. What are your thoughts?
@906graphics Total BS… You are not storing any data on your end. You are merely transferring the information over a SECURED connection to Authorize.net … You can get a real high quality SSL certificate but that’s it… its pretty much a page with a form on it. I’d like to know why is running on Django so much more secure… because I don’t see anything..