Card Testing and Fake Donations: Defending Your Donation Form From Bot Fraud
At two in the morning your donation form starts receiving one dollar gifts. Then more of them, hundreds in an hour, most declining, a few going through, all from names that do not quite read like names. Nobody is giving you money. Somebody is using your form as a free tool to find out which stolen card numbers still work, because charity donation pages accept any amount, ask for almost nothing, and are rarely watched. The gifts are fake. The fees, the decline rates, the processor scrutiny, and the mess in your donor database are not.

Card testing, also called carding, card checking, or enumeration, is the practice of running stolen or algorithmically generated card numbers through a payment form to learn which ones are still valid. The tester does not want your services and does not care about your mission. They want a yes or no from the issuing bank. Once they have a list of confirmed live cards, they sell it or spend it somewhere with a much larger basket than your donation page.
Nonprofits are not targeted by accident. Almost every property that makes a donation form good at collecting gifts also makes it good at validating cards. There is no login. There is no shipping address to fake. There is often no minimum amount, which means a tester can submit a one dollar charge that a real cardholder will probably never notice on a statement. Many forms ask only for card number, expiration, and a name, skipping the address and security code checks that would cause most stolen card attempts to fail. And the transaction volume is small enough that nobody is watching a live dashboard at three in the morning.
Organizations discover this in one of three ways. Sometimes the giving platform notices and sends a warning. Sometimes a board member or staff member checks the dashboard on a whim and sees a wall of dollar gifts. Most often the payment processor gets there first, freezes the account, and asks what is going on, which is the worst version because it arrives during business hours on a day you had other plans and it stops legitimate giving while you sort it out.
This article covers what card testing actually is, how to recognize an attack while it is happening, what it costs even when every charge is refunded, the layered defenses that work and the order to apply them, what to ask your processor and your giving platform, how to clean up afterward across finance and your CRM, and where AI genuinely helps. It also deals honestly with the part most fraud advice skips: every control you add costs you some real gifts, so the goal is not maximum security, it is a deliberate choice about how much friction your donors should carry.
Why Donation Forms Are Such Attractive Targets
A card tester evaluating potential targets is looking for a form that will process an attempt quickly, cheaply, repeatedly, and without a human reading the result. Retail checkout pages increasingly fail that test. They require account creation, they validate shipping addresses, they run device fingerprinting, and the merchants behind them employ people whose entire job is watching for this. A charity donation page from a three person organization running a giving platform with the default settings passes every criterion.
The open amount field deserves specific mention because it is the single most exploitable feature of a typical donation form. Ecommerce has fixed prices, so a tester validating a card has to commit to a real purchase amount and risk the cardholder noticing. A donation form with an "other amount" box and no floor lets them charge one dollar, or fifty cents, or whatever the minimum the processor will accept. Small charges are the entire strategy, because a cardholder scanning a statement for fraud looks at the large entries and skims past a dollar to a charity they half recognize.
Two mechanics are worth understanding because they explain the patterns you will see in the data. The first is the BIN attack, where the tester takes a known bank identification number, the first six to eight digits that identify the issuing bank and card product, and generates thousands of plausible full card numbers from it using the check digit algorithm that validates card numbers. They then run the whole batch through your form to see which combinations of number and expiration date are real. This is why a genuine attack often shows dozens of cards sharing the same opening digits. The second is card setup abuse, where instead of charging the card the attacker simply saves it, for example by starting a recurring gift and abandoning it, because a saved card still returns a validation response from the issuer and produces nothing on the cardholder's statement at all. Stripe notes in its card testing documentation that attackers often prefer this path precisely because it is quieter.
There is also an uncomfortable structural point. The push toward frictionless giving has been one of the strongest trends in online fundraising for a decade, and it has been right on the merits. Every field removed lifts conversion. Wallet payments, saved cards, and single tap flows have moved real money. But the optimization target was always "make it as easy as possible for a stranger to send us money with a card," and a card tester is a stranger sending you money with a card. The same design that serves your donors serves them. Our article on the one click giving donor experience makes the case for that low friction approach, and it holds, but it holds best when the friction you removed from donors was not the friction that was stopping bots.
What makes a donation form easy to abuse
Each item below is also a design decision you can revisit
- No account, no login, and no session history behind the payment attempt
- An open amount field with no minimum, allowing one dollar validation charges
- Address and security code checks turned off or not enforced on failure
- No bot detection, so a script can submit as fast as the network allows
- No rate limiting per address, per session, or per card fingerprint
- Nobody monitoring transaction volume outside business hours
Recognizing an Attack in Progress
The good news is that card testing is loud. It does not look like a clever imitation of normal giving, because the attacker is optimizing for throughput rather than for blending in. Once you know the signature you can usually identify an attack from a single screen of transaction data, and the signature is consistent enough that it is worth writing down and putting somewhere your finance and development staff will find it.
A burst of small, nearly identical amounts. Real giving produces a scattered distribution: twenty five, fifty, a hundred, the occasional thirty seven dollars from a peer to peer page. Card testing produces one dollar, one dollar, one dollar, or a tight cluster of tiny amounts submitted minutes or seconds apart. If your average gift is eighty five dollars and your last four hundred transactions were all under five, you are not experiencing a surge of micro-generosity.
A decline rate that has gone vertical. This is the most reliable indicator, and it is the one most organizations never look at because dashboards emphasize successful revenue. A card testing run is mostly failures by design, since the whole point is that the attacker does not know which numbers work. A form that normally declines a small percentage of attempts and is suddenly declining the majority of them is being used as a validation service.
Names and emails that pattern-match rather than read. Automated submissions produce automated identities. You will see the same first name with rotating surnames, obviously generated strings, keyboard-adjacent nonsense, or a run of addresses at the same disposable domain. Watch also for the opposite tell, which is plausible names attached to email addresses with the same structure repeated dozens of times, because a competent script generates names from a dictionary rather than from randomness.
Shared opening digits across many cards. If you can see the first six digits of the card numbers in your processor dashboard, check whether a suspicious batch shares them. A legitimate donation stream draws from a wide spread of issuing banks. A BIN attack draws from one, because it was generated from one. This is the single most conclusive signal available to a non-technical reviewer.
Timing that does not match your audience. Most nonprofits have a recognizable giving rhythm shaped by when their emails go out and where their donors live. A dense cluster of activity at three in the morning local time, with no campaign running and no mailing sent, is a strong prompt to look closer. Timing alone proves nothing, since you may have donors in other time zones or a piece of content circulating overseas, but combined with any of the signals above it removes most of the doubt.
Repeated attempts from the same origin. Sophisticated operations rotate their network addresses, so a single address hammering your form is a sign of an unsophisticated attacker rather than the absence of one. Still, it is worth checking, along with the pattern where the same card number is attempted repeatedly with different expiration dates, which is exactly what a tester does when guessing the missing field.
The practical move is to stop relying on noticing. Set an alert that fires on transaction count rather than dollar volume, since an attack is enormous in count and trivial in dollars, and set a second one on decline rate. Nearly every giving platform and payment processor can email you when a threshold is crossed, and if yours cannot, a weekly export reviewed against last month's baseline is a workable substitute. High traffic moments deserve extra attention, because attackers know an unusual volume spike is easier to hide inside. If you are planning a campaign at the scale described in our guide to running Giving Tuesday at scale, tighten your monitoring before the day rather than after it.
Signals of an active attack
Any two together justify immediate action
- Transaction count spikes while dollar volume barely moves
- Decline rate jumps far above your normal baseline
- Many cards sharing the same first six digits
- Generated-looking names or repeated disposable email domains
- Activity concentrated in hours your audience does not give
- The same card retried with different expiration dates
Things that look similar but are not
Check before you disable your form on a Friday night
- A piece of content going viral in another time zone
- A student or workplace campaign built on deliberately tiny gifts
- Failed recurring gift retries clustering after a billing run
- A broken form retrying submissions on behalf of real donors
- Your own team testing the form without using test mode
The Real Cost, Even When You Refund Everything
The most common misconception about card testing is that refunding the fraudulent charges makes the organization whole. It does not. Refunds are the right first move and they prevent worse outcomes, but the money that leaves your account is only one of several costs, and usually not the largest one. Understanding the full picture matters, because it changes the calculation about how much you are willing to invest in prevention.
Per-transaction and per-attempt fees. A successful charge carries your normal processing fee, and refunding it typically does not return the fixed portion of that fee. Multiply the fixed component across a few hundred fraudulent one dollar gifts and you have paid a meaningful amount of real money to process nothing. Worse, some processing arrangements charge an authorization fee on attempts that decline, which means the thousands of failures can cost you too. Whether that applies depends on your pricing, and it is worth finding out before an attack rather than during one.
Chargeback fees. When a cardholder notices the charge and disputes it rather than contacting you, you pay a dispute fee regardless of the outcome, and dispute fees are large relative to a one dollar gift. Industry guidance commonly puts the per-dispute cost in the range of twenty to a hundred dollars depending on the processor and the card network. A modest number of disputes can therefore cost more than an attack's entire face value, which is why fast refunding matters so much: a refunded charge cannot become a dispute.
Your standing with card networks and issuing banks. This is the cost that persists after the attack ends, and it is the one organizations underestimate most. A flood of declines and disputes attaches a bad reputation to your merchant profile. Stripe's documentation is explicit that a high decline rate can damage your standing with issuers, which makes all of your transactions look riskier and can increase the decline rate on legitimate payments even after the card testing stops. If dispute volumes climb far enough, the card networks operate monitoring programs that impose fines and additional requirements on merchants who exceed thresholds. Your real donors start having cards declined because somebody used your form as a testbed.
Processor risk review, holds, and termination. Payment processors and giving platforms carry the liability when a merchant goes bad, so their risk teams respond to fraud signals quickly and not always gently. The realistic worst case for a small nonprofit is not a fine, it is a hold on settlements or the closure of the merchant account, which stops all online giving while you find a new provider and re-integrate your forms. Organizations have lost days of fundraising this way, and days at the wrong point in the year are expensive.
Staff time, which nobody budgets. Somebody has to identify the fraudulent transactions, refund them individually or in batches, reconcile the refunds against the deposits, correct the donor records, adjust the campaign totals, explain the variance to the finance committee, and answer emails from any real cardholders who reach out. For a small shop this is easily a full day of the development director's time and another of the bookkeeper's, and it lands without warning.
Data pollution in your CRM and your reporting. Every fake donation that succeeds creates a constituent record. Those records enter your donor counts, your new donor acquisition numbers, your average gift calculation, your retention denominators, and eventually your annual report and your board dashboard. If they are not cleaned out, next year you are comparing real performance against a baseline that includes four hundred people who never existed, and you may even mail them. Our guide to cleaning up a nonprofit CRM covers the mechanics of removing a contaminated cohort without damaging the records around it.
Costs that survive a full refund
What you still pay after every charge is reversed
- Fixed transaction fees that are not returned on refund
- Authorization fees on declined attempts, under some pricing plans
- Dispute fees on any charge a cardholder reports before you refund it
- A degraded merchant reputation that raises declines on real gifts
- Risk review, settlement holds, or account termination
- Staff hours for refunding, reconciling, and correcting records
- Inflated donor counts distorting acquisition and retention reporting
Defense in Layers, and the Order to Apply Them
No single control stops card testing. Stripe says this plainly in its guidance, noting that attackers use varied techniques and that simple filters based on a single heuristic such as network address are usually not sufficient on their own. What works is a stack of small obstacles, each cheap, each imposing a different kind of cost on an automated attacker, and collectively making your form a worse target than the next one on the attacker's list. That last point is the realistic goal. You are not trying to be impenetrable. You are trying to be inconvenient.
Layer one: bot detection at the form. Invisible challenge systems such as Cloudflare Turnstile or reCAPTCHA Enterprise evaluate browser and behavioral signals and only present a visible challenge when something looks automated. Most legitimate donors see nothing at all. This is the highest value single control because scripts are what make card testing economical, and it is also the one most likely to already be available in your platform as a setting you have not turned on. Stripe reported that adding a managed CAPTCHA across Checkout reduced card testing by 80 percent with less than two basis points of impact on authorization rates, which is an unusually favorable trade. Two implementation notes matter: validate the challenge on the server, not only in the browser, and apply it to every endpoint that can create a charge or save a card, because a form protected on its main path and open on its recurring gift path is not protected.
Layer two: a minimum gift amount. Removing the open-ended amount field, or setting a floor beneath it, directly attacks the economics of small validation charges. Some fraud guidance in the sector recommends floors as high as fifty or a hundred dollars, which is far too aggressive for most organizations and would cost more in lost small gifts than it saves. A floor in the range of five to ten dollars is a reasonable starting point for a general donation page: it eliminates the one dollar probe while keeping almost every real gift, since very few genuine donors give less than five dollars outside specific peer to peer contexts. Set the floor in the platform, not only in the front end, so it cannot be bypassed by posting directly to the endpoint.
Layer three: address and security code enforcement. Address verification compares the billing postal code and street number the donor enters against what the issuing bank has on file, and the security code check confirms the three or four digits printed on the card. Collecting them is not the same as enforcing them. Many forms request the fields, pass them to the processor, and then accept the payment regardless of whether the checks came back matched or unchecked. Configuring your processor to block charges where the security code fails, and to block or flag where the postal code fails, defeats a large share of card testing, because a tester with a card number harvested from a data breach frequently does not have the security code at all. Be aware this costs you a small number of real gifts from donors who mistype their code or whose billing address is genuinely stale, so most organizations block on security code failure and merely flag on address mismatch.
Layer four: rate limits and velocity rules. Velocity controls cap how much can happen in a window: attempts from one network address per hour, attempts against one card, failed attempts before a source is blocked, new saved cards per session. Stripe Radar supports custom velocity rules on its paid tier, and most giving platforms expose some version of this even if they call it something else. The values should reflect your actual traffic. If your form normally sees three gifts an hour, a limit of twenty attempts per address per hour is generous to donors and fatal to a script. Blanket limits set too low will eventually block a legitimate office, school, or community center where many people share one network address.
Layer five: fraud rules in the processor. Stripe Radar and its equivalents at other processors apply machine learning scoring to every payment and let you layer your own rules on top. Useful rules for a donation context include blocking when the security code check fails, blocking or reviewing charges under your minimum, reviewing an unusual concentration of attempts from one address, and blocking currencies and countries you have no reason to accept. That last one is quietly effective. If every donor you have ever had paid in dollars, accepting eleven other currencies gains you nothing and gives an attacker more paths to try.
Layer six: quiet mechanical defenses. A honeypot field, meaning a form input hidden from human eyes that bots fill in anyway, costs nothing and catches unsophisticated scripts. A minimum time-to-submit rejects anything completed in under a second or two, since no human fills in a card number that fast. Cross-site request forgery tokens, which your platform probably already uses, prevent the form from being submitted from somewhere other than your own page. None of these stop a determined attacker and all of them are free, which is the right profile for a bottom layer.
Applied in that order, most organizations get the majority of the benefit from the first three layers and can implement them in an afternoon with no developer, because they are platform settings rather than code. That pattern holds across most nonprofit security work, and it is the same argument made in our piece on strengthening cybersecurity on a small budget: the meaningful wins are usually configuration you already own rather than tooling you need to buy.
Do these first
High impact, low donor friction, usually just settings
- Turn on invisible bot detection and verify it server side
- Set a platform-enforced minimum gift, commonly five to ten dollars
- Require the security code and block charges when the check fails
- Collect billing postal code and flag mismatches for review
- Disable currencies and payment methods you never actually use
- Alert on transaction count and decline rate, not dollar volume
Then tune these
Needs your traffic baseline to calibrate safely
- Rate limits per network address, per session, and per card
- Velocity rules capping failed attempts before a block kicks in
- Processor fraud rules for review thresholds and geography
- Honeypot fields and a minimum time-to-submit on the form
- Tighter controls on the recurring and saved-card paths specifically
- Temporary hardening during campaigns and high traffic days
What to Ask Your Processor and Your Giving Platform
Most nonprofits sit on a stack with at least two vendors in it: a giving platform that renders the form and writes to the CRM, and a payment processor underneath that actually moves money. Classy, Givebutter, Donorbox, Qgiv, GiveWP, Bloomerang, and similar products generally sit on top of Stripe, PayPal, or both. This matters because responsibility for each control lives at a specific layer, and the fastest way to waste a week is to ask the wrong vendor for something the other one owns.
As a rough division, bot detection, minimum amounts, form field requirements, and honeypots belong to the giving platform. Fraud scoring, velocity and card-level rules, security code enforcement behavior, currency settings, and blocking live with the processor. Rate limiting can live in either place or in the web infrastructure in front of both. If you host your own form on WordPress or a custom site, some of these become yours rather than a vendor's, which is worth knowing before you assume you are covered.
Go to each vendor with specific questions rather than a general request to make the form more secure. General requests get general answers and a link to a help center. The questions below are answerable, and the answers tell you where your actual exposure is. Ask them at contract renewal as well, since these capabilities change and the setting that did not exist two years ago may be sitting in your dashboard now. The same evaluation discipline described in our article on evaluating vendor security applies here, with the useful property that fraud controls are more concrete and more testable than most security claims.
One question deserves particular emphasis: ask what happens during an attack and who is responsible for noticing. Some platforms actively monitor for card testing across their customer base and will throttle or notify you. Others expect you to watch your own dashboard. Some processors will simply freeze your account. Knowing in advance which of these you are dealing with determines whether your incident response plan starts with "log in and look" or with "call the number in the runbook," and that is a difference you want to have resolved before three in the morning.
Questions worth a specific answer
Ask the platform and the processor separately
- What bot protection is available on our forms, and is it currently enabled?
- Can we enforce a minimum gift amount server side, not only in the interface?
- Are security code and postal code checks enforced, or just collected and passed through?
- What rate limits exist by default, and can we tighten them for our traffic?
- Does our plan include custom fraud rules, and what does upgrading cost?
- Do we pay fees on declined attempts as well as successful charges?
- Can we refund a large batch of transactions at once, and are fees returned?
- Who monitors for attacks, how are we notified, and what number do we call?
The Donor Experience Tradeoff, Chosen Deliberately
Every control in the previous section costs you some legitimate revenue. This is not a caveat to be waved away at the end of a security article, it is the central design decision, and organizations that ignore it tend to overreact after an attack and quietly lose more money to friction than they ever lost to fraud. A required security code loses the donor who is giving from memory without the card in hand. A visible challenge loses the donor on a slow connection and the one using assistive technology that interacts badly with it. A twenty five dollar minimum loses the student, the fixed income donor, and the person testing whether your organization is real before committing more.
The useful way to think about this is that different controls have very different friction-to-protection ratios, and they are not close. Invisible bot detection is nearly free to donors and removes most automated traffic. A five dollar minimum is invisible to nearly everyone and removes the one dollar probe. Enforcing the security code costs a small number of gifts and blocks a large share of stolen card attempts. At the other end, a visible puzzle CAPTCHA on every submission, a required account, or a fifty dollar floor will each cost you real money for protection you could have obtained more cheaply. Work down the ratio, not down a checklist.
Segment your forms rather than applying one policy everywhere. Your main donation page, a peer to peer fundraising page where five dollar gifts are the point, an event registration form, and a memorial giving page have genuinely different risk profiles and different tolerable friction. A peer to peer page cannot carry a twenty five dollar floor, but it can carry strong bot detection and tight velocity limits. Conversely a high value page tied to a major gift appeal can afford a little more verification because the gifts arriving through it are large enough to justify it. Our discussion of the premium a well built donation form earns is worth reading alongside this, because the same conversion mechanics that produce the premium are the ones you are spending when you add friction.
Then measure what you spent. Record your conversion rate and average gift for a few weeks before you change anything, make one change at a time where you can, and check the numbers afterward. Most organizations find the first three layers cost them almost nothing measurable, which is useful evidence when somebody proposes going further. If a control does cost you noticeably, you now have a real number to weigh against a real risk instead of two anxieties arguing with each other. And revisit the settings periodically, because an emergency measure adopted during an attack, such as disabling the open amount field entirely, has a way of becoming permanent policy that nobody has re-examined in three years.
Incident Response and the Cleanup Nobody Warns You About
When an attack is underway, the sequence matters. Stop the bleeding first, then clean up, then harden, and do not try to do all three at once with the same tired person. The immediate priority is refunding successful fraudulent charges quickly, because a refunded charge cannot become a dispute, and disputes are where the disproportionate costs live. Stripe's own active attack checklist puts refunding second only to identifying the activity, ahead of implementing mitigations, for exactly this reason.
Taking the form offline is an option and sometimes the right one, but treat it as a last resort rather than a first instinct, because a dark donation page during a live appeal costs real money. If you can throttle instead, by tightening a velocity rule or raising the minimum temporarily, you stop the attack without stopping your donors. If you do take the form down, put up a short, plain explanation with an alternative way to give rather than an error page, and tell your team so they are not fielding confused emails without context.
Cleanup runs across three systems that do not automatically agree with each other. In the processor, refund the fraudulent charges and export the full transaction list including declines for your records. In your accounting system, reconcile the refunds against the deposits so the fees paid on fraudulent activity are recorded where somebody can see them, and flag the variance for the finance committee rather than letting it surface as an unexplained difference at year end. In your CRM, identify the constituent records created by the attack, tag them as a cohort before deleting or suppressing anything, and correct campaign totals, donor counts, and any dashboards or reports that have already published the inflated numbers.
Tagging the cohort before you delete it is the step people skip and regret. A tagged batch can be excluded from reporting, restored if you over-corrected, and shown to an auditor as evidence that the adjustment was deliberate and bounded. A deleted batch is a hole that somebody will spend a day investigating next spring. Tell your auditor either way. An unexplained cluster of refunds against contribution revenue is exactly the kind of thing that generates questions during fieldwork, and a short memo written now answers them at a fraction of the cost, in the same spirit as the documentation habits covered in our guide to audit preparation.
Finally, write the runbook while it is fresh. One page: how the attack was detected, who was called, what was changed, what the settings were before and after, what the total cost was including staff time, and what would be done differently. The next attack will arrive when the person who handled this one is on leave, and a page in a shared folder is the difference between a two hour response and a two day one. If you carry cyber coverage, check the policy while you are at it, since fraudulent transaction costs and the staff time to remediate them may or may not be covered, and our overview of cyber insurance for nonprofits covers what these policies typically do and do not include.
Response sequence
Stop it, clean it, harden it, in that order
- Confirm it is card testing using the signals, not a legitimate surge
- Refund successful fraudulent charges quickly to avoid disputes
- Throttle rather than disable, if throttling will hold
- Notify the processor and platform, and ask what they see from their side
- Export the full transaction record, declines included, before anything ages out
- Tag the fraudulent constituent cohort in the CRM before removing it
- Correct campaign totals, donor counts, and any published dashboards
- Brief finance and the auditor with a short dated memo
- Write the runbook and decide which temporary controls become permanent
What AI Adds Here, and What It Does Not
It is worth being blunt about this, because the honest answer is narrower than the topic might suggest. The controls that actually stop card testing are platform settings and processor rules. A language model does not sit in your payment path, cannot block a charge, and adds nothing to the moment of the attack itself. The fraud scoring that does operate in real time is machine learning, but it is machine learning built into Radar and its equivalents by the processor, not something you assemble. If you read this article and implement only one thing, make it a setting, not a model.
That said, there is real work around the edges where AI assistance genuinely reduces effort, and most of it is analysis and writing rather than detection. The useful frame is that the model works on exports and documents, not on live traffic.
Anomaly detection on transaction exports. Export a few months of transactions, including declines, and ask a model to characterize the normal distribution of gift amounts, hours, and decline rates, then identify clusters that deviate. This is genuinely useful because it catches slow, low-volume testing that never trips a threshold alert: thirty attempts a day for three weeks rather than three thousand in an hour. It also surfaces patterns a human scanning rows will miss, such as a recurring weekly cluster or a set of records sharing an email structure. Treat the output as a list of things to look at, not a verdict, and remember to strip or avoid uploading full card data and donor personal information, which belongs nowhere near a general purpose tool.
Drafting the runbook and the internal communications. The incident memo to the finance committee, the runbook, the note to the auditor, the short explanation for the board, and the internal instructions telling staff what to do if they see the pattern are all documents that get skipped because they are boring and nobody is waiting for them. Describing the incident and having a model produce a structured first draft removes the reason they go unwritten. You edit for accuracy, which takes minutes rather than the hour the blank page was going to cost.
Summarizing logs and dashboards. Payment processor logs and webhook event streams are dense and repetitive, and most nonprofit staff have never been trained to read them. Pasting a slice of failure data and asking for a plain language summary of what the decline codes mean and what they suggest is a reasonable use, particularly when you are trying to explain to a board member why the organization is paying fees on transactions that never happened.
Preparing for the vendor conversation. Feeding a model your platform's documentation and asking it to list which of the controls in this article exist, where they are configured, and what your plan tier includes turns a vague afternoon of help center browsing into a specific list of settings and questions. Verify what it tells you in the actual dashboard, since documentation goes stale and models state outdated details confidently, but as a way to arrive at the support conversation prepared it works well.
Cleaning the contaminated cohort. Identifying which constituent records came from the attack, writing the query or the filter criteria, and producing the corrected campaign figures is pattern matching across a dataset, which is squarely in scope. What stays human is the decision about what to delete, suppress, or keep, because a wrongly deleted real donor is a worse outcome than a retained fake one.
What it does not do. It does not decide your risk tolerance or your minimum gift amount, both of which are fundraising decisions with revenue consequences that belong to your development lead. It does not configure your processor. It should not be the thing standing between an attacker and your payment endpoint. And it should not be fed cardholder data, full donor exports with personal information, or anything covered by your donor privacy commitments without checking the vendor's data handling terms first, a point our guide to donor data privacy and AI works through in more detail.
Reasonable uses of AI here
Analysis and writing, on exports and documents
- Finding anomalous clusters in a transaction export, declines included
- Drafting the incident memo, runbook, and staff instructions
- Translating decline codes and processor logs into plain language
- Building the question list for your platform and processor
- Writing the criteria that isolate the contaminated CRM cohort
Where a model is the wrong tool
These are settings and judgment calls
- Blocking charges in real time, which belongs to your processor
- Choosing the minimum gift amount and how much friction to accept
- Deciding which donor records to delete or suppress
- Anything requiring cardholder data or unreviewed donor exports
- Confirming what a platform supports without checking the dashboard
Conclusion
Card testing is not a sign that somebody targeted your mission. It is a sign that your donation form was the cheapest available tool for a job that had nothing to do with you, and that is oddly reassuring, because it means the fix is mechanical rather than adversarial. You do not need to become a hard target. You need to become a slightly annoying one, and a form with invisible bot detection, a modest minimum amount, and enforced security code checks is already annoying enough that a script will move on to the next organization that left all three switched off.
The cost argument is what usually moves this from the someday list to the this week list. A refund does not undo the fixed transaction fees, the dispute costs, the damaged merchant reputation that raises declines on genuine gifts for months afterward, the risk review that can freeze your settlements, or the two staff days spent reconciling a mess that produced no revenue. Set against that, an afternoon in your platform settings is cheap, and most of the controls that matter are settings rather than projects.
Hold on to the tradeoff while you do it. Every control costs you some legitimate gifts, and the organizations that handle this badly are not only the ones that did nothing, they are also the ones that panicked after an attack and buried their donors in verification. Work down the friction-to-protection ratio, start with the controls that donors never see, measure what the changes cost you, segment your forms by their actual risk, and keep a written record so the next person to face this at three in the morning is not starting from nothing.
AI helps at the edges of this problem rather than at its center. It will find the slow attack buried in a transaction export, write the runbook you keep meaning to write, translate the processor logs, and clean the contaminated cohort out of your CRM. It will not block a charge, and anyone selling it as the answer to payment fraud is selling something. The real defense is a handful of settings you already own, turned on deliberately, with somebody watching the transaction count.
Harden Your Donation Form Without Losing Donors
We help nonprofits audit their giving forms for fraud exposure, tune the controls that matter, and put the monitoring and cleanup process in writing before the next attack arrives.
