Campaign attribution
MoveData creates Salesforce campaigns from your fundraising platform data and links supporters, fundraisers, and donations to them. This article explains how campaign hierarchies work, how activity is attributed, and how campaign member statuses are assigned.
Campaign hierarchy#
MoveData creates up to three levels of campaigns in Salesforce, mirroring the structure on your fundraising platform.
| Level | Description | Example |
|---|---|---|
| 1. Campaign or event | The top-level campaign | "Winter Appeal 2025" |
| 2. Team | A team within the campaign | "Melbourne Office Team" |
| 3. Fundraiser | An individual fundraiser's page | "Sarah's Run for Hope" |
Each level is linked to the one above through the standard Parent Campaign field on the Campaign object.
Note
Not every notification results in all three levels. A donation made directly to a campaign (without a fundraiser page) is linked to the top-level campaign only. A fundraiser page created outside of a team links directly to the top-level campaign.
How activity is attributed#
MoveData links each notification to the most specific campaign level available.
- If a donation is associated with a fundraiser, it is linked to the Fundraiser campaign.
- If a donation belongs to a team without a specific fundraiser, it is linked to the Team campaign.
- If a donation is made directly to the campaign, it is linked to the Campaign itself.
Because campaigns are connected through parent-child relationships, you can always roll up totals to see the full picture at any level.
Atomic processing
If a donation is processed and the associated fundraising page does not already exist in Salesforce, MoveData creates the fundraising page campaign automatically at that point in time. There are no dependencies on the fundraising page pre-existing in Salesforce first — MoveData handles this for you.
Campaign member statuses#
When MoveData links a contact to a campaign, it assigns a campaign member status. Statuses follow a one-way priority order — a contact's status can only go up, never down.
The priority order from highest to lowest is:
- Team Leader
- Fundraiser
- Recurring Donor
- Donor
For example, if a contact is already a Fundraiser on a campaign and then makes a donation, their status stays as Fundraiser (not downgraded to Donor).
Campaign names#
MoveData constructs campaign names from the data provided by your fundraising platform. The name matches the campaign, team, or fundraiser page name as it appears on the platform.
Using the campaign hierarchy example above, the resulting Salesforce campaign names would be:
| Level | Salesforce campaign name |
|---|---|
| Campaign | Winter Appeal 2025 |
| Team | Winter Appeal 2025: Melbourne Office Team |
| Fundraiser | Winter Appeal 2025: Melbourne Office Team - Sarah's Run for Hope |
If a campaign with the same platform key already exists, MoveData updates it rather than creating a duplicate.
NPSP vs Nonprofit Cloud#
Campaign attribution works the same way for both NPSP and Nonprofit Cloud. Campaigns and campaign members are standard Salesforce objects, so there is no difference in how they are created or structured.
Troubleshooting#
Maximum hierarchy levels reached
Salesforce supports a maximum of five levels of campaign hierarchy. If your platform data creates a deeper structure, you may see a "maximum hierarchy levels reached" error. MoveData uses up to three levels by default, so this is uncommon. If you encounter this error, check whether existing campaigns in Salesforce already have deep nesting.