Planning for NFP Appeals - the Pyramid Approach

A talk for the Melbourne Nonprofit User Group

This talk is based on this fabulous article and I have unashamedly borrowed heavily from it. 

Also as part of the planning for this talk I have upgraded my NFP Dev org from NPSP 2 to NPSP 3.

To Start - Planning your Appeal

This is the non-technical bit - what is your appeal for? who are you sending to? what are you asking for? how are you sending it? what is the wording on the appeal? do you need to get any custom graphics done? what is your deadline to send the appeal out? 

The two most important questions for our purpose today is who are you sending to and how are you sending it. 



Why are you still using Mail in 2016? That is a discussion for another time. But if you do send mail, at least have a really quick and easy way for people to opt out of mail and into emails. At least have both options. I hate mail so much. I do understand why you do it though. 

How do you create the labels - no do not try and attempt a word mail merge - use Easy Label or aiEasyLabel to create them directly out of Salesforce. 

Are you merging data into your documents? 

Are you using a mailing house or trying to do it yourself. Unless you are a very tiny NFP just use a mailing house. People can tell if it's a shoddy looking cheap envelope with a mailing label and one A4 flyer in it. A beautiful looking Mailchimp standard template would be much much nicer than that.  

And why are you asking people for hand written credit card details in 2016? How is your PCI compliance? (If you don't know what that is, stop using credit cards right now and find out about your organisations obligations). 


Ok, so how - Mailchimp? Campaign Monitor? No - you are NOT sending it from your own mail servers - that is a huge no no! If you have under 2000 recipients Mailchimp is free and there is no excuse, and it is very cost effective after that. You can send up to 5000 emails per day out of Salesforce if you are using the Mass Email functionality. 

How are your design skills? Unless you are a professional designer, they are probably not great. Get your email templates professionally designed. It is worth the money. If you get them designed in such a way that they are modular, and you can re-use them for other occasions, then that is great. But some appeals require custom graphics, and therefore custom email design. I have a great Campaign Monitor template builder in India if you need a cost effective resource to get something custom built. 

See Campaign Monitor and Mailchimp for details on how to use both apps to integrate with Salesforce so there is NO CSV export and import! 


OK, so I am going to start on the premise that ALL of the contacts in your Salesforce exist there for a reason and you know exactly why every single contact exists in your Salesforce. No? Well then that's time for another talk about how to cleanse your Salesforce data. Don't be afraid to delete contacts from your Salesforce - first ones to go are ones that have no related records (eg no donations, no campaign members), and either no Address, Email or Phone Number. Why are they there - Unless you can categorically say why they exist, do a big report with all that data, export to a CSV file and save that file somewhere safe. Then delete them. 

The next premise I am working on is that you have ALL your donations entered in Opportunities/Donations and are using the donation rollup fields like Last Gift Date and Total Gifts Last Year. Again, if you are not doing that, then call me so we can get your Salesforce working well. 

The final premise I have is that ALL people are in Salesforce - of course they are? You would not be doing anything else, would you? No Excel spreadsheets? 

Do you have a list of donors sent out last year? Are they in Campaign Members? Do you know who out of all the people you sent to last year, actually donated? If you have the excel spreadsheet of who you sent out to last year, then keep a hold of that, and we will import it into Campaigns. 

So, who are you targeting this year - make a list. Everyone in your database? OK, if you have all the money in the world, that might be OK, but let's get a little more targeted. Some segments to think about. 

  • Donors this year
  • Donors last year
  • Donors in the past 5 years
  • High value donors
  • High net worth individuals - if you track that sort of thing
  • Alumni or people who have been ex board members etc - you can quickly pull a report from Salesforce listing all those people, can't you? 
  • People from key organisations - remember, people donate, organisations don't - well people donate on behalf of organisations and you need to appeal to people. 
  • People with full mailing addresses
  • People with email addresses

Get together an idea of who you want to target, and we will start building Salesforce reports to find those people. 

As Megan's article says, also understand what the different types of communications you will be sending out - we will probably create those as different campaigns.

Step 2 - Get Set Up

Create Campaigns

You probably have a campaign hierarchy something like this

  • Donors
    • Appeals
      • 2015 Appeals
        • 2015 Christmas Appeal
        • 2015 Tax appeal
      • 2016 Appeals
        • 2016 Christmas Appeal

Or you may have Appeals at the top of the tree. Remember you can only have 5 levels. Let's take the 2016 Christmas Appeal as the one we are creating now. Well, unless you start next week, you are probably too late for the Christmas Appeal - see this great post by brand agency BrandByName to see what is involved in planning and sending your custom Christmas Cards

Do you have a campaign record type for Parent Campaign? It is a good idea - you just add in the basic rollup fields and nothing else. Whilst you are there create a separate Record Type for Appeals - just in case you want fields that are only related to Appeals. Now create a Page Layout for each Record Type and assign the page layouts to the record types. The Parent Campaign will have all the Total Value in Hierarchy fields. Remember that no one has access to these fields by default - not even Admin, so you need to add them to the appropriate profiles. 

Suggested layout for Parent Page Layout and Parent Campaign. 

  • See Page Layouts for details on setting up the header section - always Record Type on the left and Owner on the right. System Info heading is always shown. 
  • See Campaigns to ensure the feed is turned on. 
  • Add the Budget section only if you use it - remove any fields that you will not use. 
  • All the Hierarchy fields are on here. 
  • I didn't add the Leads fields into the stats section because we don't deal with Leads in Appeals. 
  • Note that the numbers are on the left and the dollars are on the right, and the Donation fields line up. 
  • Spot the error. 

Suggested Layout for Appeals

  • All notes as above
  • The Parent Campaign is set. 
  • Stats are just for this campaign. 
  • I created the Dates in a separate section to hilight them further. 

Sub Campaigns

Now, you may want to break down the appeal campaigns into further child campaigns - depending on how you want to track your stats. Eg you may create

  • 2016 Christmas Appeal Top Prospects
  • 2016 Christmas Appeal General Donors

If you do this, you will need to add the Hierarchy stats to the standard appeals page layout also. We will keep it simple for this exercise and add Campaign Member Statuses instead. 
In the article, Megan has two phases to her campaign - to send the email, then do phone calls, so she has created them as separate campaigns. These two phases may or may not have the same people in them - depending on how you think people will react to getting that level of communication. 

But, keeping ALL of the appeal in one Campaign means that no duplicates will be created. (Unless of course you have dirty data). 

Campaign Statuses

Setting up the Campaign Statuses on your new campaigns is imperative. Use AAKonsult Campaign Stats or watch out for the new app from Bigthinks that will do something similar but use Custom Metadata Types. 

You may want to add a new Type to the Campaign Type field - named Appeals. 

Then add the following Statuses (depending of course on how you are going to run the levels in your Campaign). 

Previous Donor 
This Year Donor 
High Value Donor 
Org Contact 
Board Contact 

Now remember to change the Type to Appeals (or change it to blank, save, then to Appeals if it already set to Appeals). Check the Campaign Member Statuses. 

A suggestion in the User Group was to create more Statuses such as Sent - Previous Donor, Sent - This Year Donor - rather than Sent. 

As there is not Feed Tracking or Field History Tracking on Campaign Members (There is this horrible work around by Salesforce though) you will loose the status you set. So the idea was to create a custom field on the Campaign Member for Previous Status and update that via a Workflow when the Status is changed. 

Step 3 - Reports

Now start to build your reports. 

Household Reports

 Are you fanatical about entering your households? Do you enter household email addresses? Do you want to ensure that only one person from the household gets an email? (I'm not sure about this - postal mail yes, but maybe each person should get an email, and Household Email is not a feature in NPSP3). 

If yes, you are going to want to do separate reports for individuals and households. 

How do you know that a person is in a household? It's difficult in NPSP2. Do you have a field whereby you know that that means the person is in a household? 

Use the Contacts & Organisations and Household Report Type for NPSP2 and just Contacts & Organisations for NPSP3

For NPSP2 you may be able to filter where Informal Greeting contains " and " but then you get all Andrews. Or Contact > Household Naming Order is not blank, but that doesn't get set unless you specifically say which person is first by editing the household.

In NPSP2 there is a button you can add to the campaign for Household Mailing List. It does not bring in the household address or household greetings. It needs lots of modifications. When adding to a campaign, the NPSP automatically takes care of duplicated household members and marks them as Duplicated. This is good.

In NPSP3 once you have moved everything to the Household Account Model there is a field on the Account saying how many Household members there are.

In NPSP3 the Household Mailing List report is a bit more useful but still needs to be modified to have the salutations.


You are going to need reports for

Send TypeIndividualsOrg ContactsHouseholds
Email Marketing(tick)(tick)NA

The Email Marketing reports are very simple and have just enough fields for you to know that the right people are on the list. Also include the email address. 

The Mailing reports at this stage should be very simple - you don't need their mailing address details on these reports. 

Report Criteria

You may have another field that says something like "do not hassle for future appeals" which you can include. 

Helper Formulas

Rather than entering the same criteria over and over again, I create a formula checkbox to help me with this. Eg isOnEmailAppeals__c which is a formula such as

AND(NOT(ISBLANK(Email)),HasOptedOutOfEmail = false, NoFutureAppeals__c = false)

And another formula for isValidMailingAddress__c which is

AND(MailAddrNotCurrent__c = false,NOT(ISBLANK(MailingState)), NOT(ISBLANK(MailingCity)), NOT(ISBLANK(MailingStreet)), DoNotPostMail__c = false).

Mailing Address Not Current is when you know that this address is no longer current (eg the letter was returned), but you don't want to get rid of it yet because you want to verify it is that person from their previous address.

Do Not Post Mail allows you to still contact them by Email, but allow them to opt out of postal mail.

All reports should be saved as relative dates and with names that DO NOT INCLUDE the dates - see Reports. That way you can run these reports next year and the year after. 

Donors This Year

Organisations & Contacts report Types (or Accounts & Contacts)

Donors Last Year

Organisations & Contacts report Types (or Accounts & Contacts)

  • Email Appeals = true OR Valid Mailing Address = true
  • AND Latest Gift Date = LAST YEAR (or LAST FISCAL YEAR).

Donors in past 5 years

Organisations & Contacts report Types (or Accounts & Contacts)

  • Email Appeals = true OR Valid Mailing Address = true
  • AND Latest Gift Date < LAST 2 YEARS (or LAST 2 FISCAL YEARS).
  • AND Latest Gift Date > LAST 6 YEARS (or LAST 6 FISCAL YEARS).

High Value Donors

Organisations & Contacts report Types (or Accounts & Contacts)

  • Email Appeals = true OR Valid Mailing Address = true
  • Largest Gift Amount >= 5000 (or whatever amount you think)

(you could also include some date bounds in this if you want). 


How would you do the criteria for the other reports. That sort of depends on how your org is set up. Eg Board members are usually affiliations, but do you then roll up affiliations onto the contact and set a flag to say this is a Board Member? Or if Board Members are a mailing list Campaign, then use Declarative Lookup Rollup Summary to add a field to the Contact to say that this is a Board Member based on their inclusion in that specific Campaign. 

You are only using these reports to find the people to add to your appeals. 

Last Year's Appeal

You may also want to include people that were in last year's appeal. That would be easy if you have a status of Sent for all people in last year's appeal. If you only have an excel spreadsheet, you can import them into your Campaign Members with a Status of Sent and ensure you DO NOT OVERRIDE the Status, as the donors will be in there with a status of Donated. 

Step 4 - Add to Campaigns

Now you can add the contacts to your campaigns. 

This is where you start with the most general, and build up to the most specific group. 

If someone had donated in the last 5 years, and is a high value donor and is a Board Member they will end up with the status of Board Contact in your campaign. 

  • Run the Donors in past 5 years report. Click Add to Campaign, choose Campaign Status of Previous Donor
  • Run the Donors Last Year report. Click Add to Campaign, choose Campaign Status of Previous Donor
  • Donors This Year. Campaign Status = This Year Donor and choose to Override the Campaign Member Status
  • High Value Donors. Campaign Status = High Value Donor and choose to Override the Campaign Member Status
  • etc etc.

Now you have a campaign with the thousands of people you are going to send the campaign to. At this stage you can run a campaign report and you might choose to delete some people and specifically add other people. Eg there might be a "CEOs Infuencers Mailing List" that you may want to add. 

Step 5 - Prepare Exports

This is now where you decide who you are mailing to and who you are emailing to - hopefully it is just a matter of all Board Members are being mailed, to and if they have an email, they get emailed to otherwise they get postal mail to their household. But you may have different criteria. 

Remember that Campaigns can include people that don't have email addresses, but when you sync with Mailchimp or Campaign Monitor these people won't come across. 

Mailing with external mailing house

So now you need to do a Campaign Member report with the Campaigns with Contacts and Household report type. 

You will only need a Mailing report here. 

Choose the Campaign

Chose the criteria of Email Appeals = false AND Valid Mailing Address = true

Bring in all the household address fields, not the contact address fields. 

Bring in the household greeting field.

You don't need any email address or any other fields other than you will send to the mailing house. 

Export this report to CSV. 

Open it in Excel

Use the Remove Duplicates to remove all the household duplicates. 

Save this as a CSV and send it off to the mailing house. 

Mailing using aiEasyLabel

For this one, I created a field on the Contact as a Lookup to Campaign and called it Current Appeal. 

Then I did a Declarative Lookup Rollup Summary to add the campaignMember's CampaignID to the Contact if it was an Appeal

Then I could create a view on Contact to include where Latest Appeal IS NOT BLANK and use that View to create the mailing list reports. 

Sync with Mailchimp or Campaign Monitor

Follow the steps in the Mailchimp or Campaign Monitor apps to query all the Campaign Members that should be in your List to send the appeal to. 

When you add them, choose to add them to a Static Segment for 2016 Christmas Appeal, that way you can ignore all the newsletter subscribers that are on your list. Try to not create a new list because then you will pay for subscribers twice. 

After sending

After you send do a bulk update of the Campaign Member Status to be Sent. 

Note: There is no Field History Tracking on Campaign Member so you will loose which group they came from. If this is an issue there are other ways to do it, like rolling up the Status to Contact if it is not Sent or Responded, or just relying on the reports.