Nonprofit Direct Mail on Salesforce, Part 3: What is the Deal with Source Codes?

Hey there! My name is Dustin. I am a Solution Engineer for Salesforce.org based in Charleston, SC. Welcome to my blog series about direct mail!
Check out other parts of the series in Part 1 and Part 2.
If you’ve spent any time at all working with direct mail in the nonprofit space, you’ve inevitably come across the term source code. This post will help you understand source codes and how nonprofit marketers use them.
So, first things first: what is a source code? A source code is a string of characters that represent a specific mailing. These characters are usually a combination of numbers of letters. You probably see source codes all the time and don’t even realize it. They may look something like this:
Source Code Parts
Each of the characters in the source code represents something very specific to a marketer. These characters make up what we call source code parts. Check out the sample source code below. Each of the colors makes up a unique source code part.
In the first source code part, denoting “Program,” the letter R means “Renewals” and A means “Acquisition.” In the “Month” part, 01 stands for “January” and 02 stands for “February.”
Best practice: Use a number if you’ll want to query that part based on ranges (“Month is greater than 06”); use letters if you have more than nine items you want to represent. A letter will allow you to use up to 26 variables in a field, where a number only allows nine.
Source code structures can vary drastically from organization to organization. There is not a standard set of source code parts that every nonprofit uses. Generally, I see parts to identify the date of the mailing, the segment, test/control flags, package treatment, and often program/department fields. However, I will say that I have seen hundreds of different items tracked through the source code – it all depends on your business and reporting needs.
As a best practice I think it is best to keep your source code length somewhere between eight to fifteen digits.
Source Codes on Parent & Child Campaigns
Now that you have your source code structure defined – what the heck do you do with it? Where does it go? Great questions! As a general rule, you want to make sure your source code is associated with the record of your outgoing mailing, as well as the record of your incoming donation.
In Salesforce, this would mean the source code is a field on both the Campaign object (for the outgoing message) and on the Donation/Opportunity object (for the incoming donation). It is common on the Campaign object to break out each of the source code parts into separate individual fields. This allows for more flexible donor management and reporting. These different fields can then be combined into one master “source code” formula field that is automatically generated. The Donation/Opportunity object usually only has one field for the combined source code.
In the screenshots below, you can see two examples of Campaigns in Salesforce with source code information. The first screenshot has a parent Campaign that represents the outgoing mailing. The second screenshot represents a child Campaign that represents an individual segment. To assign constituents to a campaign segment, you add Contacts to the correct child Campaign.
Parent Campaign record
Child Campaign record
You can see that on the parent Campaign we included source code parts that will be consistent for the mailing regardless of the segment. We did this so that the end user only has to enter this information once when setting up the mailing. On the child Campaign, we simply used a formula to pull in that consistent string from the parent campaign.
Best practice: Create two Campaign Record Types to facilitate your source code. One campaign Record Type called “Direct Mail” will hold your overall mailing fields. The second campaign Record Type called “Segment” will hold all of the segmentation fields associated with that mailing.
The child Campaign contains those parts that are unique to that specific segment (e.g. segment code, package, test). It is recommended that you use the same alphanumeric codes for your segments across all mailings. This is because it is very common to use specific segments over and over again for multiple mailings. So for our example the segment of A001 will always equal 1 Gift, 0-6 Months, $10-$14.99 regardless of mailing. Oh, by the way, this means that this segment includes all constituents who have made one gift in the last 0 to 6 months and that gift amount was between $10 and $14.99.
Source Codes on Donations/Opportunities
This one is pretty simple. Just know that you need a field on the Donation/Opportunity object to track the source code. The data in this field will come in from your gift caging process. You will see why that is important when we get into reporting. Here’s an example:
Donation record
So now what? Can I report on this?
Yes! You did all of this work for the sole purpose of reporting and analysis! For starters, you have all of the reportable fields that come out of the box on the campaign record (total contacts, total responses, etc). On top of that you now have your source code fields. Let’s say for example you wanted to know how your A001 folks are performing (donating) for a specific mailing. That is pretty easy – you would just run a quick report of all Donations/Opportunities where the source code is equal to A0116A01A001C.
Now let’s say maybe you wanted to know all of the A001 donors across all acquisition marketing efforts in the 2016. Simple – just create a report where the source code is equal to “A**16**A001*” (that asterisk is a “wildcard,” which means the values of those parts can be anything).
Next, maybe you want compare donors versus non-donors within that A001 segment. Just compare folks with that source code on their Campaign to those who have a Donation with that matching source code. This will tell you that of all of the people with that specific campaign source code, X number have donated. Imagine how cool this would be if you have 50 different segments in your mailings – you could really drill down to see which segments of are actually donating and funding your mission.
Advanced reporting – take it to the next level!
Lots of nonprofits are using advanced source code reporting to track a donor’s movement through their fundraising pipeline. For example, they may report on average gift amount growth from when donors moved from an A001 segment grouping to a segment grouping further up the hierarchy. This is pretty simple since you have the data from their past segments living on the Campaign and Donation records.
We don’t just do reporting because it’s fun. It is used to drive things like ask ladders and package treatment for these specific segments. For example, maybe one segment should get a higher-end package with high-dollar asks, while another should just get a postcard with a call to donate online.
We will get into a lot more detail around reporting in future posts – including some screenshots. Stay tuned!
Phew, I’m exhausted! What did we cover again?
I know this post covered a lot. To summarize the major takeaways:
1. A source code is a collection of numbers and letters that represent a mailing.
2. You should always record the source code on the record of the outgoing mailing (Campaign) and incoming donation (Opportunity).
3. We do it all for the reporting.
If you have any questions, let’s get in touch!
Contact Me
Get started with Salesforce using Trailhead, a free tool that guides you through setting up Salesforce and the Nonprofit Success Pack.
You Might Also Like

A CRM is a customer relationship management tool that helps organizations such as nonprofits and education institutions manage relationships with…

This Women’s History Month, we celebrate the innovative women leaders of the Salesforce Catalyst Fund who are helping to bring…

Salesforce’s New Nonprofit Cloud unites programs, fundraising, engagement and outcomes.