Wilson Mar bio photo

Wilson Mar


Email me Calendar Skype call

LinkedIn Twitter Gitter Instagram Youtube

Github Stackoverflow Pinterest

How the Salesforce Benefit corp benefits non-profits, technically

US (English)   Español (Spanish)   Français (French)   Deutsch (German)   Italiano   Português   Estonian   اَلْعَرَبِيَّةُ (Egypt Arabic)   中文 (简体) Chinese (Simplified)   日本語 Japanese   한국어 Korean


This article are my notes about the NPSP (Non-Profit Success Pack) from the Salesforce Foundation and friends. When done, it will be a hands-on succinct introduction to how non-profits make use of NPSP.

Non-profit integral to Salesforce

Salesforce has a generous industry-leading approach to supporting non-profits. Their 1/1/1 was institued at the founding of the company in 1998, not as an after-thought.

Salesforce provides free to non-profits its first 10 seat licenses, then 24% of the commercial licensing rates for those with:

  • IRS Determination Letter of 501(c)(3) tax exempt status,
  • IPEDS ID from the National Center for Education Statistics (NCES),
  • Acceptable evidence of 501(c)(4) status, such as copy of the Form 990
  1. Salesforce.org is a separate employer entitity than Salesforce, Inc. (Employees of salesforce.org don’t get CRM stock.)


    Three clouds (apps):

    • Nonprofit Cloud
    • Education Cloud
    • Philanthropy Cloud

    “CRM” in the nonprofit world means “Constituent Relationship Management”.

  2. This demo video shows some great benefits from adoption:


    The Salesforce Foundation launched in 2014 “Salesforce for Nonprofits” [8:37]:


  3. Nurtured creation of NPSP (Non-Profit Success Pack) which adds to core Salesforce orgs specifically for non-profits. It’s described at


    • Non-profit
    • HEDAP = HEDA (Higher-Ed Data Architecture) Package

    VIDEO: roundCorner’s NGO-Connect further customizes NPSP.

    Early versions were called “Nonprofit Starter Pack”.

Power of Us Only for Registered Non-Profits

  1. If you are a non-profit, register at http://www.salesforce.org/npsp-trial/

  2. Salesforce.org runs a Power of Us Hub online community for nonprofit and higher ed Salesforce users.


    MEH: It’s only for those who have been recognized by Salesforce as belonging to a Non-profit organization.

  3. So that your browser doesn’t pick up irrelevant history, open a new Private Tab on your browser to URL:


  4. Use a Salesforce account that is NOT associated with a Developer Edition, or you’ll get this error:


  5. There is a SMS verification step for first time access.

  6. If you can get in, then you can post feedback at: https://powerofus.force.com/_ui/core/chatter/groups/GroupProfilePage?g=0F980000000CjRe

  7. Attend https://powerofus.force.com/articles/Customer_Service/Salesforce-com-Foundation-Weekly-Office-Hours 1st & 4th Friday in each month at 9:00AM Pacific / 11:00AM Central / noon Eastern

Install in DE Org

If you don’t have a “real” non-profit org:

  1. Go to the latest version:


  2. Click “Log In” at the bottom of the page to select “Production or Developer Edition org”.
  3. Provide your DE credentials.
  4. Click “Allow” for the “Examining your org” to flash by before the “Installation Bundles and Packages” page appears.


    The “hot dog” icons say “Metadata from Github” and “Metadata from Zip”.

  5. Click “Install”.
  6. Look for emails from “support@salesforce.com” for each of the 9 items listed above, such as “Package Contacts & Organizations Install Successful”.

    “Some components, such as custom objects, custom report types, and workflow rules, must be activated using the package deploy process, before they are available to your organization.”

    “Your matching rule NPSP Contact Personal Email Match for identifying duplicate records has been activated and is now ready to use.

  7. Determine whether Aloha has been enabled via the Subscriber Overview page that comes with the LMA application.

Model of Relationships among Data Objects

Internally, data values are stored within “objects” that hold data, like a tab within a spreadsheet. Within an object, each row is a record and each (vertical) column is a field. These are referred collectively as “object models”, which forms the basis for how data is imported. These are also referred to as (aka): data model, account model, household account model, object model.

Click the Entity Relationship Diagram of objects above to download a zoomable PDF.

Standard Salesforce (before NPSP) are in blue. NPSP modifies Salesforce databases and programming code to use different words on screen layouts, reports, and dashboards:

  • Contacts => Constituents and Donors in NPSP
  • Accounts (companies) => Households in NPSP
  • Opportunities (products) => Donations in NPSP (revenue-generating events)

At the upper-left, the fork symbol at the end of blue lines to leads illustrate that many leads can lookup details about the same campaign. A particular level can be assigned to many households (accounts).

View objects in Setup > Object Manager > select an object > Fields & Relationships.

Use the Schema Builder drag and drop Salesforce tool for creating a custom objects.


  1. On a Chrome browser, open a New Ingonito window and login.

    PROTIP: Press command+` (back-tick) to switch among browser windows.

    https://powerofus.force.com/articles/Resource/NPSP-Post-Install-Checklist outlines these steps:

  2. Click your profile picture to switch to Classic (Visualforce) UX.

  3. Create Opportunity Sales Processes, Record Types, and Stages. For example, if your organization handles memberships, create a Membership Record Type and appropriate stages for a Membership opportunity’s process.

  4. Assign New Record Types to Profiles

  5. Edit Page Layouts

  6. Assign Page Layouts

  7. Override Lead Conversion Button

  8. Run Health Check: Select the NPSP Settings tab, System Tools, click “Run Health Check”.

    “The Opportunity stage Pledged does not exist or is not active. Add this Opportunity Stage value in Salesforce Setup.

  9. To confirm that everything appears as it should, create a test contact, account/household, and opportunity.



Page Layouts


  • Donation
  • Grant
  • In-Kind Gifts
  • Matching Gifts
  • Memberships

Legacy Data Model

Pages use a “Household Account Model”. Some of the code references a legacy data model (whether that is One-to-One Individual or Bucket Individual).

Reports usage

https://s3-us-west-2.amazonaws.com/sfdo-docs/npsp_reports.pdf contains the NPSP Reports Workbook June 28, 2017.

  1. Sign in to see the default “home” page for Salesforce “Nonprofit Starter Pack” app, users have standard objects “Accounts”, “Contacts”, and “Reports”.

    PROTIP: Just as Non-profit accounting are different than for-profit enterprises, non-profits have a whole different set of objects, such as:

    • Donations and Recurring Donations [package]
    • Campaigns

  2. Click “Reports” among the top tabs.

    Each dashboard illustrates data in one or more reports.

    VIDEO: Salesforce Reporting 101 for Nonprofits May 10, 2018
    Salesforce Reporting 201 for Nonprofits

    PROTIP: Reports in Salesforce are organized within folders. The “Unfiled Public Reports” folder is at the top because it’s a “dumping ground” for reports that are newly created.

    Reports specific to nonprofits:

    • Households (Contacts and Organizations) [package]
    • Donations, which can consist of:
      • Soft Credits
      • Matching Gifts/Grants
      • In-Kind Gifts
    • Volunteers

    Custom reports can include additional non-profit objects:

    • Constituents
    • Affliations

Processes for nonprofits include fundraising, volunteer and grant management, advocacy, peer-to-peer campaigns.

Nevertheless, non-profits have similar needs for IT support as any organization:

  • Data cleansing, de-duplication, and maintenance
  • Data migration, mapping, and field creation
  • Email marketing

  • Custom development on the Force.com platform
  • Training on Salesforce CRM

  1. http://www.salesforce.org/nonprofit/nonprofit-success-pack/watch-nonprofit-success-pack-demo/ Register to watch the unlisted demo video [3:32] Uploaded on Jan 13, 2017 shows screens to cover the full lifecycle of donors and donations.

    Salesforce.org YouTube videos

Open-Source Repositories

Docs# Builds


Cumulus is the core NPSP repository. It has hundreds of open Issues and dozens of open Pull Requests.

  1. https://cumulusci.readthedocs.io/en/latest/ (stored within https://github.com/SFDO-Tooling/CumulusCI/blob/master/docs/why_cumulusci.rst)

  2. Within the Cumulus wiki is information about each (Apex) class at http://developer.salesforce.org/Cumulus/ApexDocumentation/index.html - the Nonprofit Success Pack Codebase Documentation. Abbreviations, alphabetically:

    • ACCT = Account
    • ADDR = Address
    • AFFL = Affiliations
    • ALLO = Allocations
    • BDE = Batch Data Entry
    • BDI = Batch Data Import
    • CON = Contact (Merge)
    • CONV = Conversion
    • CTRL = Control
    • EP = Engagement Plans
    • ERR = Error
    • HH = Households
    • LD = Lead (conversion)
    • LVL = Level
    • MTCH = Matching (gifts)
    • OPP = Opportunity
    • PMT = Payment
    • PSC = Payment Soft Credits
    • RLLP = Rollup
    • RD = Recurring Donations
    • RP =
    • REL = Relationships
    • SDRs = Sales Relationship Representatives
    • STG = Settings
    • TDDM = Table-Driven Trigger Management
    • USER = Users
    • UTIL = Utility
  3. http://developer.salesforce.org/Cumulus/ApexDocumentation/

    “Dev” is the only permanent branch.


In Opportunity objects, many non-profits use General Accounting Units (GAUs) to segregate donated funds for specific purposes or special restrictions (such as a scholarship GAU specifically for scholarships).


https://powerofus.force.com/articles/Resource/NPSP-Apex-Class-Descriptions describes each Table-Driven Trigger Management class in the code at: https://github.com/SalesforceFoundation/Cumulus/tree/rel/3.110/src/classes

Setup for DX:

  • In the orgs folder, a json file defines features enabled in each environment (feature, dev, beta, release)
  • sfdx-project.json points to the src folder.
  • In folder push, txt files define scratch org ids
  • File cumulusci.yml define tasks, flows, and json for each scratch org defined in the orgs folder

Column “#Builds” is from https://mrbelvedereci.herokuapp.com/repos which presents the status of builds on the build server on Heroku

Log in by authorizing mrbelvedereci-sfdo (third-party OAuth application)

Subject “[mrbelvedereci] Please Confirm Your E-mail Address” Click “Confirm” in the web page that pops up.

There is also https://github.com/SFDO-Tooling used by Salesforce.org’s Products team for managing devOps and release of Salesforce projects. https://metadeploy-staging.herokuapp.com/products

Much of the code is written in Python (file .py), thus the use of the Python-based Robot Framework RF is written to be a “keyword-driven”, using the human-readable “Gherkin” syntax for specifying tests.

SCREENCAST: installing cumulus CI 2.0

Continuous Integration

  1. View the Continuous Integration (CI) and Project Cumulus Jan 31, 2014 [1:00:49] by Jason Lantz

  2. CucumulusCI at https://github.com/SalesforceFoundation/CumulusCI is a Python framework for building portable automation for Salesforce projects

    https://github.com/SalesforceFoundation/Cumulus/wiki/Cumulus-CI-Build-Instructions Jenkins build processes used in the Cumulus release process as well as instructions for solving common build issues.

  3. https://cumulusci.readthedocs.io/en/latest/ CumulusCI’s documentation!

Cumulus Continuous Integration

  1. The “Mr. Belvedere” GitHub repository at


    Lightweight, Salesforce specific CI app run on Heroku to build Github repositories configured for CumulusCI


    https://github.com/SalesforceFoundation/CumulusCI CumulusCI is a Python framework for building portable automation for Salesforce projects.

    https://github.com/SalesforceFoundation/CumulusCI-Test CumulusCI-Test is a dummy project used to test CumulusCI - CumulusCI will run this project through the whole CI flow to verify everything works

Python framework for building portable automation for Salesforce projects

Jenkins, Ant, GitHub, and internal packages

  1. https://github.com/SalesforceFoundation/Cumulus/wiki

    Ant is used (instead of Maven) because there is a Force.com Ant Migration tool. Ant is extenable with macros and targets. It runs build.xml properties file in GitHub.

  2. The list of class names provides an indication of the functional scope of the effort.

Testing with Cinnamon

cinnemon are browser-based tests of Apex classes written in Gherkin for Cucumber run by Selenium invoked by Jenkins via ccli on SauceLabs VMs. It tests JavaScript drop-down lists which Apex tests don’t cover.

  1. https://forcedotcom.github.io/cinnamon/


Volunteers for Salesforce (V4S)

V4S was mainly written by David Habib of DJH Consulting which also created the free Auctions app.

Trailhead module: Volunteers for Salesforce (V4S) Basics describes how V4S handles common volunteer management processes:

  • Managing volunteer jobs that an organization needs filled
  • Tracking skills volunteers have and matching volunteers to jobs by skills and availability
  • Tracking hours against specific volunteer shifts
  • Allowing volunteers to sign up for shifts via the website
  • Displaying a calendar of jobs and shifts on an organization’s website
  • Sending email reminders for upcoming shifts to confirmed volunteers
  • Sending Thank You emails to volunteers that sign up for a shift from the website

  • Allowing volunteers to report the hours they’ve worked
  • Tracking the hours a volunteer works
  • Tracking the volunteer hours and jobs for a specific event

Tabs included in V4S include: Volunteers Help, Volunteers Wizard (to create new campaigns, jobs, and shifts), Volunteer Jobs, Shift Calendar, Calendar view, Find Volunteers.


Looking into https://github.com/SalesforceFoundation/Volunteers-for-Salesforce

  • https://github.com/SalesforceFoundation/Volunteers-for-Salesforce/blob/master/cumulusci.yml

Within folder v4sStaticResources, momentjs.com is a popular free library to Parse, validate, manipulate, and display dates and times in JavaScript.

With src folder processed using SOAP requests:

  • package.xml defines member names within types: ApexClass, ApexComponent, ApexPage, ApexTrigger, CustomField, CustomLabel, etc.
  • Groundwire_Volunteers.app defines tabs defined by …tab files within the tabs folder.
  • Each tab file specifies the page layout and associated label and motif.
    • About_Volunteers
    • Volunteers_Wizard
    • Volunteer_Job__c
    • Shift_Calendar
    • Find_Volunteers
    • standard-Lead
    • standard-Contact
    • standard-Campaign
    • standard-report
    • standard-Dashboard

For internationalization:

  • folder translations has language text files for German (de), Spanish (es), French (fr), Hebrew (iw), Japanese (ja), and Dutch (nl_NL)
  • labels contains display text for US and potentially other languages
  • folder objectTranslations
  • folder staticresources

Data Load

https://www.youtube.com/watch?v=L8ip1tWhEKU Importing Data into Salesforce for Nonprofits – Offered Monthly by Salesforce.org

PROTIP: When adding contacts, in the Contact Details section, enter all relevant details for your new Contact (but leave the Account Name field blank). Leaving the Account Name field blank is the key step to creating a new Household. Salesforce automatically creates a Household, and derives the name of the Household from the name of the Contact.

To create a new Contact within a Household, in the upper right hand corner of the Account Detail page, click Manage Household.


MetaCI CLI replaces mrbelvedereci.




metaci repo list
metaci plan list
metaci org list
metaci build list
metaci build info 2 --log
metaci service list
metaci service add
metaci plan run 1






  • Documentation about installation is included among other topics at:


  • https://www.youtube.com/watch?v=An2aeOisJK0

  • https://www.youtube.com/watch?v=8MZMVBJMW4Q 13:43 Explaining the NPSP Account Models by Caroline Renard

  • https://www.youtube.com/watch?v=An2aeOisJK0 9:26 Nonprofit Success Pack (NPSP) 3.0 in less than 10 minutes by Redpath Consulting Group

On YouTube channels Salesforce.org and Videography:

  • https://www.youtube.com/watch?v=IATQdFl5LOQ 16:56 Live Demo: Nonprofit Fundraising

  • https://www.youtube.com/watch?v=IATQdFl5LOQ 16:56 Live Demo: Nonprofit Fundraising by Salesforce.org

Playlist: https://www.youtube.com/watch?v=1Acc7Fq8CfQ&list=PLU8xqF8ZASbXC-QFldf_Nm-oa0v1Hra9q Get Started with Salesforce for Nonprofits




https://cumulusci.readthedocs.io/en/latest/ talks about the Python-based Robot Framework for testing.

https://github.com/SalesforceFoundation/Cumulus/wiki/Cumulus-CI-Build-Instructions Cumulus CI Build Instructions

More about Salesforce

This is one of a series about Salesforce

  1. Salesforce index

  2. Salesforce Ohana (about the Salesforce company, offices, mascots, emojis, and store)
  3. Salesforce Glossary (of acronyms)
  4. Salesforce Events (Conferences, local Meetups, ) to meet people face-to-face
  5. Salesforce Exhibitors (at Dreamforce)
  6. Salesforce Onboarding (Trailhead and IDEs)
  7. Salesforce Rock Stars (and influencers)

  8. Salesforce Offerings (Clouds, Industries, Domains, GitHub, editions, pricing, features, versions)
  9. Salesforce Certifications (training and exams)
  10. Salesforce Projects, Superbadges, and Sample Apps
  11. Salesforce myTrailhead for custom Trailhead content

  12. Salesforce Project Plans
  13. Salesforce Jobs (within Salesforce, with partners, etc.)
  14. Salesforce User Roles and Personas

  15. Salesforce Apps (in AppExchange)
  16. Salesforce Alexa
  17. Salesforce Heroku (external apps)
  18. Salesforce DX (Developer eXperience)

  19. Salesforce Non-Profit support
  20. Salesforce NPSP (Non-Profit Success Pack) performance (with Gatling)

  21. Salesforce Data Management
  22. Salesforce Einstein
  23. Salesforce Selenium (test automation)