NPSP Migration Decisions · AD-6
Outreach Source Codes under the campaigns, or campaigns alone?
Agentforce Nonprofit attributes gifts through Outreach Source[1] Codes under the campaigns — that is how Salesforce’s mapping[2] carries Opportunity.CampaignId. The decision also drags two smaller ones with it: what happens to campaign members (deprecated in the Migration Guide’s view of the target), and whether the campaign hierarchy is kept one-to-one or flattened.
Who decides
Fundraising lead
Decide after
No prerequisite — decide in parallel
Estimated effort
S check what the reports actually read
What answers it
The campaign hierarchy in use, which campaigns gifts are attributed to, and whether the fundraising team reports by appeal and channel below the campaign level.
Your options, and what each one does
The Options| The option | What it means for the migration |
|---|---|
| Outreach Source Codes under the campaigns | One source code per lowest-level campaign the gifts are attributed to. Appeal and channel reporting keeps the level the source code carries. |
| Campaigns alone | Fewer records to load, but it departs from Salesforce’s mapping of the gift’s campaign, and attribution below the campaign is not kept. |
What Horus Eye recommends — and when
Recommendation, Not VerdictOutreach Source Codes under the campaigns — it is Salesforce’s own mapping, so attribution reports as the fundraising objects expect. A team that reports by campaign only, with no appeal or channel codes, is the case for the simpler option.
A recommendation is a starting point, not a verdict. The same question lands differently org by org — one fact about your automation, volumes or vendors can flip the right answer. That is why the reasons are stated, and what would change them.
How this decision plays out
In PracticeAttribution is where fundraising analytics lives or dies, and the target model changes its mechanics: Salesforce’s mapping carries a gift’s campaign through an Outreach Source Code under the campaign, not a bare campaign lookup. Following the mapping keeps appeal- and channel-level reporting — the “which letter, which segment, which channel” layer below the campaign — intact in the shape the target’s fundraising objects expect. The simpler “campaigns alone” route loads fewer records but flattens exactly that layer; it suits a team that genuinely reports by campaign only, and short-changes everyone else.
Two companion choices travel with this one and deserve their own recorded answers. Campaign members: the Migration Guide treats them as deprecated in the target model, so each org decides — archive them (the usual answer), migrate them, or discard them, counted and listed whichever way. And the campaign hierarchy: flatten it (leaf campaigns become source codes, middle levels drop, top levels remain campaigns) or carry it one-to-one. The right answer is whichever one your fundraising team’s actual reports can be rebuilt on — pull last year’s campaign performance reports and check what level they really read before deciding.
Questions to settle before you record an answer
Before You Decide
How Horus Eye helps
With Horus EyeWhen Horus Eye assesses an NPSP org, this question is raised with the evidence the scan saw — the record types, fields and settings behind it — its recommendation marked, and the reasons stated. Accept records the recommendation; Change opens the options. Recording an answer writes nothing to Salesforce: it is captured in the decision register, with who decided and when, and the migration plan, mappings and documents are kept consistent with what your organization actually decided. Horus Eye recommends; your organization decides.
Related decisions
Keep PlanningSources & further reading
References- 1.
Salesforce Help · Outreach Source Codes — Campaign attribution in the target, as Salesforce documents it. ↩︎ - 2.
Salesforce · Agentforce Nonprofit Migration Guide v2.0 (PDF) — The official guide this content follows: platform differences, migration recommendations, and how NPSP features map to Agentforce Nonprofit. ↩︎
“Salesforce”, “Agentforce” and related marks are the property of Salesforce, Inc. Horus Eye is an independent product and is not affiliated with, endorsed, or sponsored by Salesforce, Inc.
Protected AI — the Trust Layer
Every AI read in Horus Eye is metadata-first: built from an allowlist, sanitized by pattern, made through one audited gateway and checked by an output firewall on the way back — and AI is off by default, per org. Every request carries an audit id and an AI Data Scope manifest you can open.
Facing this decision in your own org?
Horus EyeA read-only assessment puts the evidence behind it on the table — what your org holds, what it means for this choice, and the decisions that depend on it.
Try Horus Eye Free Request an Assessment All Horus Eye pagesFree start · 250 credits for 60 days · no card required · scans are free