A minimum viable fundraising software migration
Protect gifts, recurring donations, donor identity, receipts, and reconciliation before moving lower-value fundraising history.
CharityStack
·5 min read
A fundraising software migration does not need to move every historical field before your new system can go live. It needs to keep fundraising operational while you change systems.
Start with five continuities: new gifts, recurring gifts, donor identity, acknowledgments, and reconciliation. Put every other record into one of three lanes—day one, later, or archive—and do not let low-value cleanup delay the workflows that keep money and donor service moving.
Build the continuity map before the export list
Most migration plans begin with a list of tables and CSV files. That inventory matters, but it does not tell you what must work at cutover.
Create a one-page continuity map with three lanes:
- Day one: a failure would interrupt giving, create a donor-service problem, or prevent finance from closing the books.
- Later: useful history that can be imported after the core workflow is stable.
- Archive: records your team may need to look up but does not need inside the new platform.
This changes the first question from “Can we migrate this field?” to “What breaks if this field is not present next Monday?”
Keep the old system or a controlled export available as a read-only archive for the agreed retention period. Do not delete the source merely because the first import completed.
Protect five day-one continuities
1. New gifts can complete
Build and test the new form, receipt, designation, and confirmation flow before redirecting live traffic. Test the payment methods your donors actually use, plus a declined or incomplete payment path.
Record one successful test gift from checkout through the admin record and finance export. The acceptance test is not “the form loaded.” It is “the gift arrived with the correct donor, amount, fund, status, receipt, and payout trail.”
2. Recurring gifts have an explicit owner
Recurring gifts are not ordinary rows in a donor-history spreadsheet. They may involve a subscription record, a payment method held by a processor, a billing date, and a connection between the old and new identifiers.
Stripe's current data migration overview treats customer and payment data, payment-method updates, and subscription remapping as coordinated work. Its subscription migration guide also requires teams to know the current processor, subscription provider, and pricing model before choosing a path.
Ask both vendors, in writing:
- Who moves stored payment information, if it can move?
- Who recreates or remaps subscription records?
- Which system owns the next charge during the cutover window?
- How will you prove that one donor has one active schedule rather than zero or two?
Do not copy card details into a spreadsheet or ask donors to send them by email. If a payment method cannot transfer through the supported provider process, plan one secure donor-update route.
3. Donor identity remains usable
Choose the identifiers you will trust before importing contacts. Email alone may not distinguish a shared household address, a changed email, or duplicate records created by separate campaigns.
For day one, bring the fields needed to recognize the donor and service the gift: source identifier, name, usable contact details, communication preference when supported, and the relationship to active gifts or subscriptions. Move notes, obsolete tags, and unowned custom fields later unless a current workflow depends on them.
Test known edge cases deliberately: a donor with two emails, a household sharing one address, and a donor with both one-time and recurring gifts. The goal is not a perfectly clean database. It is a predictable identity rule your team can explain.
4. Acknowledgments still go out
List every automatic response that follows a gift: receipt, confirmation page, internal notification, tax-language variant, or campaign-specific message. Decide which system sends each one during the overlap period.
Use test inboxes and verify the sender, subject, amount, designation, donor name, links, and delivery timing. Disable the old automation only after the replacement passes. Otherwise, a successful migration can still produce duplicate receipts or no receipt at all.
5. Finance can reconcile the switch
Choose a cutover timestamp and keep the final report from the old system. Then compare the first new-system period by count and amount, not by a casual scan of two dashboards.
Your cutover packet should include:
- final old-system transaction and payout exports;
- first new-system transaction and payout exports;
- refunds, failures, and pending transactions that cross the boundary;
- the person responsible for resolving each difference.
Do not declare the migration complete while unexplained differences remain. A small mismatch can point to a timezone boundary, a refunded gift, a duplicated import, or a transaction still settling.
Move history in useful slices
Once the five continuities pass, import later-lane history in slices that your team can validate. For example: current-year gifts, prior-year gifts, active campaign records, then older history.
For every slice, record the source file, export time, row count, transformation, importer, and validation result. A repeatable import log is more valuable than a folder of files named “final,” “final-2,” and “really-final.”
Some giving platforms provide structured recurring-gift imports and migration-status comparisons; the current ACS Technologies giving migration guide is one example. Treat that as a provider-specific path, not proof that every platform accepts the same fields.
Use one cutover decision, not a vague launch date
The migration is ready when all five continuity tests pass, each unresolved exception has an owner, and finance can explain the boundary. Historical cleanup can continue afterward without holding live fundraising hostage.
If you are comparing a consolidated system with your current stack, review CharityStack's connected fundraising and donor-operation workflows and its current plan details against your continuity map—not against the number of fields a vendor says it can import.