Moving from the Nonprofit Success Pack to Agentforce Nonprofit is not an upgrade. The two products model a constituent differently at the foundation, so this is a data migration project with a reconciliation problem attached. Done well, you also get to delete years of workarounds. Done badly, your year-end totals stop matching and nobody trusts the new org. This guide is the sequence we use, in the order that keeps the numbers correct.
Decide this before you touch anything
Two decisions shape everything that follows. Make them in writing, with the finance lead in the room.
What is the reconciliation standard? Pick the reports that must match the old system exactly, and name them. Usually it is total raised by fiscal year, total by designation or fund, donor counts, and the recurring giving roster. Everything else can be approximate. If you do not set this boundary, you will chase every discrepancy in a 20 year gift history and never finish.
What is the cutover window? Find eight weeks with no campaign, no audit, and no year-end appeal. That window is your hard constraint, and it usually sets the project timeline more than the technical work does.
Do not migrate history you cannot defend. Many organizations carry gift records from systems two generations back, with no source documents and no way to verify them. Decide early which years come across as detail and which years come across as summary only. This one decision can remove months of reconciliation.
New org or migrate in place?
Almost always a new org. Here is the honest comparison.
| New org | In place | |
|---|---|---|
| Old customizations | Left behind unless you deliberately bring them | Come with you, including the ones nobody understands |
| Person Accounts | Enabled cleanly from the start | Enabling Person Accounts in a mature org is disruptive and hard to reverse |
| Managed packages | None. No npsp, npe01, npe03 namespaces | NPSP packages stay installed alongside the new objects |
| Risk to production | Low. Users stay on the old org until you switch | High. You are changing the system people use today |
| Integrations | All must be repointed at once | Can be moved gradually |
| Cost | Higher up front, cheaper afterwards | Cheaper up front, and you keep paying for the mess |
The Person Account row is the decisive one. Agentforce Nonprofit is built on Person Accounts, and turning them on in a long-lived org with a large Contact base is a change you cannot cleanly undo. A new org avoids the whole question.
The one common exception is a small, young NPSP org with almost no customization and one integration. There, an in-place rebuild can work.
The object mapping table
This is the core of the migration plan. Keep it as a live document, because the field-level detail underneath each row is where the work actually is.
| NPSP | Agentforce Nonprofit | Watch out for |
|---|---|---|
Contact on a Household Account |
Person Account: Account with the Person Account record type |
Fields split across Account and Contact in NPSP land on one record. Decide which value wins where both exist |
Household Account |
Business Account plus PartyRelationshipGroup with Type set to Household |
NPSP created households automatically. Here you create them deliberately, so decide which households are worth keeping |
| Household membership | AccountContactRelation between the group account and the person account's contact |
Primary member and salutation logic has to be rebuilt |
Organization Account |
Business Account |
Straightforward. Usually the easiest load in the project |
npe5__Affiliation__c |
AccountContactRelation |
Role and current or former status map to different fields |
npe4__Relationship__c |
ContactContactRelation plus PartyRoleRelationship |
NPSP auto-created the reciprocal record. You now manage both directions explicitly |
Donation Opportunity |
GiftTransaction |
Stage values become status values. Anything not Closed Won needs a decision |
npe01__OppPayment__c |
GiftTransaction records linked to a GiftCommitment |
The biggest conceptual change. NPSP splits pledge and payment across two objects. Get this wrong and you double count |
npe03__Recurring_Donation__c |
GiftCommitment and GiftCommitmentSchedule |
Schedules must line up with the payment processor, or the next charge fails or duplicates |
| General Accounting Unit | GiftDesignation |
Load these first. Gifts cannot be allocated to designations that do not exist yet |
| Allocation | GiftTransactionDesignation |
Percentage versus amount splits behave differently. Reconcile totals per designation |
| Soft credits | GiftSoftCredit, and GiftDefaultSoftCredit for recurring |
Never let soft credits inflate hard credit totals in your parity reports |
| Tribute and honoree fields | GiftTribute |
Often stored inconsistently in NPSP. Expect manual cleanup |
| Campaign and appeal codes | Campaign plus OutreachSourceCode |
Source codes are a real object now. Use them instead of free text |
| Batch Gift Entry | GiftBatch and GiftEntry |
Historical batches are usually not migrated. Bring the resulting gifts, not the batches |
| NPSP rollup fields | Data Processing Engine definitions and DonorGiftSummary |
Recalculate rather than migrate. Migrated totals hide load errors |
npsp__Address__c |
ContactPointAddress |
Seasonal and mailing address logic needs redesign |
| Email and phone fields | ContactPointEmail and ContactPointPhone |
Preferred and opt-out flags move here. Coordinate with your email tool |
| Program Management Module | Program, ProgramEnrollment, Benefit, BenefitAssignment |
Usually a redesign, not a mapping, because most PMM orgs bent the model |
Step 1: Inventory and triage customizations
Before any data work, list every custom field, validation rule, flow, Apex class, report, and dashboard in the NPSP org. Then put each item in exactly one of three piles.
- Port. It encodes something specific to your organization that the platform does not provide.
- Replace. The newer model does this as standard. Designations, soft credits, tributes, source codes, and outcome tracking are the usual candidates.
- Delete. Nobody uses it, or it existed to work around an NPSP limitation that no longer applies.
In most orgs we assess, the delete pile is the largest, and the replace pile is the one that saves the most money. Do this triage before you scope the build, because the scope is the port pile plus the migration, and nothing else.
Step 2: Clean and dedupe in the source
Fix data in NPSP, not after the load. Once gift history hangs off a duplicate Person Account, merging is far more expensive and far more likely to lose an audit trail.
- Run duplicate detection on constituents and merge. Expect the pass rate to be worse than you think, especially where a household and an individual both received mail.
- Standardize and validate addresses. Bad addresses become bad
ContactPointAddressrecords. - Find gifts with no designation, no campaign, or no date and decide the default for each case before the load, not during it.
- Resolve deceased, do-not-contact, and opt-out flags. These must survive the move exactly, because getting them wrong has legal and reputational consequences.
- Reconcile your source totals now. Produce the parity reports from NPSP and freeze them as the target numbers.
Step 3: Build constituents and households
Load in dependency order, and keep the NPSP record id in an external id field on every new record. You will need it for every later step and for support questions years from now.
- Enable Person Accounts in the new org before anything else.
- Load organization business accounts.
- Load individuals as Person Accounts.
- Create household business accounts, then a
PartyRelationshipGroupfor each with Type set to Household. Use the Subtype and other group fields where they carry meaning for your programs. - Create
AccountContactRelationrecords to place people in households, and set the roles you rely on for salutations and mailings. - Load
ContactPointEmail,ContactPointPhone, andContactPointAddressrecords, with the primary and preferred flags set deliberately. - Load relationships as
ContactContactRelationplusPartyRoleRelationship, remembering that you now write both directions.
Note that creating groups needs the Group Membership permission set, and merging them needs the Merge and Split Groups system permission in a cloned permission set. Sort permissions out before the load rather than during it.
Step 4: Load designations, then gifts
Order matters. A gift cannot point at a designation that does not exist.
- Create
GiftDesignationrecords from your General Accounting Units. Take the chance to retire funds nobody has used in five years. - Load
GiftTransactionrecords. Map amount, date, payment method, campaign, and source code. Keep the NPSP Opportunity id as an external id. - Create
GiftTransactionDesignationrecords from your allocations. Then reconcile the total per designation against the frozen NPSP figure before you go further. - Load
GiftSoftCreditrecords. Verify that your parity report still shows the same hard credit total, because soft credit errors show up here as inflated revenue. - Load
GiftTributerecords for in-honor and in-memory gifts.
The pledge and payment question deserves its own attention. In NPSP a pledge is an Opportunity with multiple Payment records. In the newer model a pledge is a GiftCommitment with a GiftCommitmentSchedule, and each received payment is a GiftTransaction linked back to that commitment. If you load both the pledge and the payments as Gift Transactions, you double your revenue. We cover the correct modelling in the fundraising implementation guide.
Step 5: Rebuild recurring giving
This is the step with the most operational risk, because real money moves on a schedule and donors notice mistakes immediately.
- Extract every active Recurring Donation with its amount, frequency, next charge date, designation, and payment method.
- Create a
GiftCommitmentfor each, with aGiftCommitmentSchedulethat reproduces the frequency and next date exactly. - Set default designations with
GiftDefaultDesignationso generated transactions land in the right fund without manual work. - Use
GiftDefaultSoftCreditwhere a recurring gift should credit an influencer, such as a board member who secured it. - Coordinate with your payment processor. Tokens, customer ids, and schedules have to line up. Agree exactly which system owns the schedule after cutover.
- Test with a small live cohort before you move everyone. A declined card on migration weekend must produce a retry, not a silent lapse.
Never cut over recurring giving inside three days of a scheduled charge run. If the timing goes wrong you either miss a month of revenue or charge donors twice. Both are recoverable. Neither is a good week.
Step 6: Reach rollup and report parity
Do not migrate rollup values. Recalculate them in the new org using Data Processing Engine definitions and the standard summary objects, then compare against your frozen NPSP numbers. Migrated totals paper over load errors, and you will find the errors later at the worst possible moment.
Reconcile in this order, and stop when a level fails rather than pushing on:
- Total raised per fiscal year, all funds.
- Total per designation per fiscal year.
- Donor count and new donor count per year.
- Top 100 donors by lifetime giving, matched name by name.
- Active recurring giving: donor count, monthly value, next charge dates.
Then rebuild the board pack and the audit reports. Have the finance lead sign off in writing that the new org produces the same numbers. That signature is what lets you switch off the old system.
Step 7: Repoint integrations
Every system that touches donation data needs work, because the objects it wrote to no longer exist. Typical list:
- Payment processor and online giving forms. They must create Gift Transactions and respect commitments.
- Email and marketing tools. Contact Point objects now hold email and consent. Map opt-out carefully.
- Accounting. Your journal entries or subledger feed keys off designations and gift dates.
- Wealth screening and prospect research. Results now belong on the philanthropic assessment and indicator objects rather than in custom fields.
- Event, volunteer, and forms tools. Anything writing Contacts should be checked against the Person Account model.
Use Named Credentials and log every callout, so that when something fails at 2am on cutover weekend you can see what happened. Our callout framework guide covers the pattern.
Step 8: Cut over
- Freeze the source. Announce a hard stop for data entry in NPSP, with a named person enforcing it.
- Run the delta load. Move everything created or changed since your last full extract.
- Reconcile again. Same reports, same standard. This is a gate, not a formality.
- Switch users. Activate users in the new org, deactivate write access in the old one.
- Repoint live integrations and watch the first transactions land.
- Keep the old org read-only for a full reporting cycle. At least one quarter, ideally through your next audit. It costs little and it answers the questions that only surface later.
Five mistakes that cause rework
- Loading gifts before designations. You end up with unallocated revenue and a manual repair job.
- Treating NPSP payments as separate gifts. The classic double counting error. Pledges are commitments, receipts are transactions.
- Skipping dedupe because the timeline is tight. The timeline gets tighter later, and by then the duplicates own gift history.
- Porting customizations without triage. You pay to rebuild workarounds for problems the new platform already solved.
- No named reconciliation standard. Without it, the project has no definition of done and the finance team never signs off.
Frequently asked questions
Is there a Salesforce tool that migrates NPSP to Agentforce Nonprofit automatically?
There is no single button that converts an NPSP org into an Agentforce Nonprofit org. The data models differ at the foundation, so migration is a mapping, extract, transform, and load project. Standard tooling such as Data Loader and third party ETL tools does the moving, but the mapping and reconciliation are design work.
Should we migrate into a brand new org or convert the one we have?
A new org in almost every case. Agentforce Nonprofit is built on Person Accounts, and enabling Person Accounts in a mature org with a large Contact base is disruptive and hard to reverse. A new org also lets you leave old customizations behind instead of porting them.
What happens to our NPSP recurring donations?
Each active Recurring Donation becomes a Gift Commitment with a Gift Commitment Schedule, and future payments become Gift Transactions linked to that commitment. The delicate part is aligning schedules and tokens with your payment processor so the next charge neither fails nor runs twice.
Do we have to migrate all of our gift history?
No, and often you should not. Decide which years come across as full detail and which come across as summary only. Organizations frequently carry history from systems two generations back that cannot be verified against source documents. Cutting that scope removes a large amount of reconciliation work.
How do we prove the new org is correct?
Freeze a set of parity reports from NPSP before you extract: total raised by fiscal year, totals by designation, donor counts, top donors by lifetime giving, and the active recurring roster. Recalculate the same figures in the new org and get written sign off from your finance lead before switching users.
When is the worst time to cut over?
During a capital campaign, in the weeks around a year-end appeal, during an audit, or within a few days of a scheduled recurring charge run. Pick a window with none of those and treat it as a fixed constraint on the project plan.