How to Add Donation Forms to Client Websites (Agency Guide)
A nonprofit client asks you to "add a donate button" three days before launch. Here is the repeatable way to do it on any platform, keep it on-brand, and hand it off so you are not on the hook for payments forever.
Quick answer
- The client owns the Stripe account, always — never you.
- Inline embeds beat redirects and outlast plugins for low-maintenance handoff.
- A clean handoff means the client edits amounts and copy without calling you.
You quote a nonprofit website, you scope the pages, you build the thing, and then in the last week someone on the board emails to ask where the donate button is. It was never in the brief, but it is somehow now your problem. Sound familiar.
Donation forms are the part of nonprofit web work that nobody scopes properly and everybody eventually regrets. Done wrong, they wreck your nice design with a redirect, or they turn into a plugin you are quietly maintaining for free two years later. Done right, they are a five-minute add-on that the client manages themselves.
This is the repeatable version. It works on WordPress, Squarespace, Wix, Webflow, or a hand-coded site, and it ends with the client owning the money and the maintenance, not you.
First rule: the client owns the payment account
Before you touch a single embed, settle this. The donation money goes into the client's own Stripe account, set up under the client's legal entity, with the client's bank details and the client's tax info. Not yours. Not a shared agency account. Not a platform that pools the money and pays them out later.
This matters for boring reasons that become very exciting reasons if you ignore them. If donations route through your account, you are now holding charitable funds that are not yours, you are on the hook for refunds and chargebacks, and you will be answering the client's bookkeeper at tax time forever. When the client offboards you, the donations should not break. The only clean way to guarantee that is that the account was always theirs.
Practically, this means you sit with the client (or screen-share) for twenty minutes and walk them through creating their Stripe account. They enter their EIN, their bank, their org name. You can help them apply for Stripe's discounted nonprofit rate (2.2% + 30¢ instead of the standard 2.9% + 30¢) while you are in there. Then your tool connects to their account. You never hold the keys to the money.
The three ways to add a form, and which one to default to
There are really only three shapes this comes in, and they have very different maintenance tails.
Redirect
You wire a button to a hosted donation page on someone else's domain. Fastest to ship. Also the one that quietly undoes the design you just got paid to build — the donor leaves the client's beautiful site and lands somewhere that looks nothing like it. Conversion drops, and you both know it looks cheap. There is a whole post on why sending donors off-site hurts conversion if you need to talk a client out of this.
Plugin
Mostly a WordPress thing — GiveWP and similar. Powerful, but it is software living inside the client's site that needs updates, has add-ons that cost money, and breaks in fun ways after a theme update. Guess who gets the panicked email when it breaks. If the client is non-technical, every plugin you add is a future support ticket with your name on it.
Inline embed
You paste one snippet and the form renders right on the client's page, branded to match. No redirect, nothing to update, the form lives in a hosted service the client manages from a dashboard. This is the default I reach for on agency work because it has the shortest maintenance tail. You build it once, the client owns the dashboard, and there is no plugin rotting inside their CMS.
For most nonprofit clients, inline embed wins. The exceptions are real but narrow: a WordPress-native team that already manages plugins, or a one-campaign-a-year volunteer group that genuinely does not care about brand match.
How the embed actually goes in, by platform
The mechanics barely change across builders. You generate a snippet in your donation tool, then drop it into whatever the client's site is built on. Here is the honest version by platform.
| Platform | Where the embed goes | Gotcha to watch |
|---|---|---|
| WordPress | Custom HTML block, or a code widget | Some page builders strip script tags — use an HTML/embed block, not a paragraph block |
| Squarespace | Code block (Business plan or higher) | Personal plan blocks custom code; check the client's tier before you promise it |
| Wix | Embed a Widget / custom element | Wix sandboxes some embeds in an iframe — test the form renders full-width |
| Webflow | Embed element in the Designer | Form only shows on the published site, not the canvas — preview to verify |
| Hand-coded / static | Paste directly into the HTML where you want it | Reserve vertical space so the layout does not jump as the form loads |
That is genuinely it. If a setup guide makes this sound like a weekend project, it is selling you something. For the platform-specific deep dives, see adding a donation form to WordPress and adding one to Webflow.
Making it match the design you just built
You did not spend three weeks dialing in the client's brand to bolt a gray default form onto the homepage. Before you embed anything, brand the form in the tool's dashboard: the client's logo, their exact hex colors, their button styling, their suggested amounts, their copy.
The test is simple. Pull up the live page and ask whether the form looks like part of the site or like a widget someone glued on. If a stranger can tell where your design ends and the form begins, you are not done. A good inline form should be indistinguishable from a section you built by hand. This is also the difference the client actually notices and remembers you for — most of them have seen a donate button that looked nothing like their site, and they hate it.
Set the suggested amounts to something sensible for the org (a row like $25 / $50 / $100 with one highlighted, plus a custom field) and turn on monthly giving. Recurring donors are worth far more over time, and you are already in the dashboard.
The handoff: where you stop being the support desk
This is the part that decides whether donation forms are a clean add-on or a forever-tax on your business. The goal is that the client can edit the obvious things — amounts, copy, the goal on a campaign — without emailing you.
- Hand over the dashboard login. The donation tool account should be in the client's name, with the client's email as owner. You can be a collaborator, but they own it.
- Record a five-minute Loom. Show them where to change suggested amounts, edit the thank-you message, and find a list of recent donations. Five minutes of video kills ninety percent of future "how do I" emails.
- Write down what they should never touch. The Stripe connection, the embed snippet. One short note: "Don't delete this code block; everything else you can edit in the dashboard."
- Make a real test donation together. Have them donate $1 on their own phone, watch the receipt arrive, then refund it from the dashboard so they have seen the whole loop.
Do this and the form stops being yours the day you hand it over. That is the entire point.
What breaks later (and how to not own it)
Six months out, here is what actually generates emails, and how the inline-embed approach defuses each one.
- "The form disappeared." Usually a redesign or a content editor who deleted the code block. With an embed, the fix is pasting the snippet back — a two-minute job you can quote as support, not a plugin debugging session.
- "Donations stopped landing." Almost always something on the Stripe side: an expired bank link, a verification request Stripe emailed the client and they ignored. Because it is the client's Stripe account, this is between them and Stripe, not you.
- "Can we add a second campaign page?" This is the good kind of email — it is billable. A new campaign page with goal tracking is a small, scoped piece of work, not an emergency.
- "The plugin wants me to renew an add-on." You only get this one if you went the plugin route. Another reason the embed defaults win for handoff.
If you want to see what a hand-off-friendly inline form looks like — branded, recurring built in, client-owned Stripe — the features page covers the embed and the receipts side. The short version: pick the approach that has the shortest support tail, because on nonprofit work, the support tail is the real cost.
Frequently asked questions
Should the donation money go to my agency account or the client’s?
The client’s, always. Donations should land in the nonprofit’s own Stripe (or PayPal) account under their legal entity. If money routes through your account you take on chargebacks, refunds, and tax-reporting headaches, and the form breaks when you offboard. Set it up in their name from day one.
Do I need to be a developer to add a donation form to a client site?
No. The repeatable method is pasting one embed snippet into the client’s builder, whether that’s WordPress, Squarespace, Wix, Webflow, or static HTML. The only real skill is branding the form to match the site and setting up the client’s Stripe account cleanly.
Which approach has the least maintenance after handoff?
An inline embed connected to the client’s own Stripe. There is no plugin to update inside their CMS, no add-ons to renew, and no redirect to a third-party domain. The client manages amounts and copy from a dashboard, and Stripe issues talk to the client, not you.
How do I keep from becoming the client’s payments support desk forever?
Put the donation tool account and the Stripe account in the client’s name, record a short walkthrough video, write a one-line note on what not to touch, and do a test donation together. After that, anything beyond editing amounts and copy is scoped, billable work rather than a free emergency.
Use the research, then choose the right donation setup.
Compare your options, then move into a donation setup your team can launch and maintain with confidence.
Related reading
How to Add Donations to a Webflow Client Project
You built the client a gorgeous Webflow site. Now do not undo it with a donate button that fires donors off to some other domain. Here is the agency playbook for donations that stay on your design.
February 21, 2026
Donation Page Launch Checklist for Agencies
You built the nonprofit a gorgeous donation page. Before you flip it live, here is the checklist that keeps a 2am "donations are broken" call from being your fault.
November 25, 2025
The Best Donation Form to Hand Off to a Non-Technical Client
The best donation form for your client is not the one with the most features. It is the one that breaks the least after you walk away and does not generate a support email every time they want to change a number.
March 28, 2026