Salesforce 101: Fun with Campaigns and Workflows

This is what I love about Salesforce CRM.

No matter how much I think I know, I always have “lightbulb” moments where I learn something new about the platform that opens up wide new doors in how we use the tool at C3.

Over the past few weeks, I’ve had such moments around Campaigns and Workflow Rules. We’ve been using both Campaigns and Workflow Rules to some extent since we started with Salesforce in 2006. Now I’m just beginning to see how powerful the two can be, and how little technical knowledge I need. Remember, I’m not a programmer or developer. I can follow a recipe, but I can’t write a line of javascript or Apex to save my life.

As a nonprofit, the key to making the most out of Salesforce (IMO) is to think beyond the textbook definition of a standard object. If you only think of “Opportunities” as a place to store information about people who give you money, and you only think of “Campaigns” as large mailings you send out to bring in money, you’re missing out on a lot. It’s not just about the financial bottom line.

I also think you need to try and do as much as you can with the standard objects before moving to 3rd party tools, add-ins and programming.

If you’re not into Salesforce geekery, best to stop reading now…

donationrecordtypes.pngWe broadened our thinking of “Opportunities” a long time ago (renamed “Donations” in our version of the nonprofit template, but in this post I’m going to use the standard Salesforce terms). We use that object to track:

  • individual donations
  • corporate matching gifts
  • corporate and foundation grants
  • event registration
  • honorariums (folks who are given payment for speaking or sitting on committees and donate back to the organization)
  • inventory (what goes in and out – the inventory itself is managed in a custom object, but the actual action of items moving in and out are through the Opportunities object)

In short, any transaction that moves money or goods through our organization is managed in the Opportunities object. For reporting, we rely on Record Types and Page Layouts to separate the different transaction types.

Then we use a few Workflow rules to trigger tasks. For example, every night Salesforce syncs with Convio, which processes our online donation forms. If someone makes a donation, the Convio database connector creates a new Opportunity with the “Individual Donations” record type. As soon as that record is created, a Workflow Rule checks to see if it’s a honor or memorial donation and creates the correct tasks for our office to send the appropriate notification/acknowledgment letters. Once a week, our Office Manager runs some scripts through Conga Merge that automatically generates the printed letters she needs and leaves an activity record on each donation that the task was done. If it’s a product order, the workflow rules tell the office what to send out, tracks that they did, and tells us how many of said items are still left on the shelf.

In Campaigns, for the longest time we were only using the object to track the few direct mail pieces we did. I just couldn’t wrap my head around how to get better use of the object.

Then the lightbulb went off. If we can use Opportunities to track all movement of funds and goods, why can’t we use Campaigns to track all high-level commonalities? Not what the object was specifically designed for, but that never stopped us before.

What sets Campaigns apart is how tightly it links to Opportunities and Contacts right out of the box. Not Accounts…Contacts. No jumping through hoops to directly link a person, regardless of their Account/Organization affliation directly to a Campaign. Short of Person Accounts, there aren’t a lot of places in Salesforce where you can say that.

We can go way beyond just direct and email fundraising campaigns. You can almost think of Campaigns as tagging on steroids. You can tag all objects related to a program or person, but you can’t report on them or assign workflow rules based on whether criteria is met for that commonality the way you can do for Campaigns. The same contact can be linked to multiple Campaigns, but only one Campaign per transaction, which makes sense if you think about it.

Some examples of how we’re starting to use Campaigns more effectively:

Advocacy action alerts – When someone responds to an action alert on Convio, they’re added to the Campaign for that action alert in Salesforce as a “responded” member. That lets us target our interactions to them, knowing that they contacted their legislator. And it gives us an easy way to see how an action alert campaign is doing compared to others. If we want to get really granular on our reporting on action alerts, we need to do that in Convio. But this works well for high level looks.

offline.png Email – this is a more standard use of Campaigns, but for this type it’s more about the Convio database connector. The connector has the ability to link Salesforce campaigns to Convio groups. We send our emails out of Convio. Convio has the ability to segment the audience based on criteria that you build into a group. Easy enough to do right within Convio if we’re only thinking of the contact’s online history with the organization. But what if we want to take a broader view and build our list based on offline interactions as well? All that information is in Salesforce, and it’s easy to run a report and get a list of those contacts. We simply add those contacts to a campaign (with their status as “Sent”), and then tell Convio to create a group (and dynamically update that group) based on the campaign member status from Salesforce.

If you’ve ever tried an import in Convio, you know this is tons easier than any way that Convio offers to set up a group based on an outside list.

I’ve asked the Convio folks if they would consider adding the ability to update Campaign Member Status in the sync (so for fundraising email campaigns, their status would be marked as “Responded” automatically). I believe it’s been added to the feature request list. For now, we have to update that information manually (more on that below).

Event Registration – We use Convio to create an online donation form so folks can sign up for our advocacy training which syncs to new donations with the “Event Registration” record type. This way, when we’re running reports of donations we don’t count the funds raised this way.

That campaign, with multiple forms depending on the advocate who is registering, is linked to a single Salesforce campaign for the event. Easy to see who’s coming and other details about the event in general. And of course how much money we’ve brought in for the event’s expenses.

There are dedicated event management applications, but for now with our shoestring budget and typically under 50 folks to track per event, this does the job we need.

Applicant Tracking – When we have a job opening, we use a campaign to track those folks who have submitted applications. When the message arrives to the designated email address we set up to collect applications, it’s forwarded to Salesforce (using the new “Email to Salesforce” bcc address). If the contact doesn’t exist, it’s created and their resume is added as an attachment to the contact file. Then they’re added to the campaign for the job opportunity. A templated email is sent through Salesforce which lets the applicant know that we received their email and we’ll be in touch if their qualifications are a potential fit. If the folks who are reviewing the resume like what they see, the candidate is added to a child campaign that specifically tracks those folks who are on the “short list.”

Unfortunately, this is all a manual process since the programming required to automate this is way over my head. Still, much better than trying to track this information in email or Excel spreadsheets. And cheaper than using a dedicated tool for this purpose.

Honor/Memorial Donations – As we are a cancer advocacy organization, we often (too often) get a phone call that an advocate has passed away and the family would like to designate “in lieu of” donations to C3. They will often tell us exactly which fund they’d like the donations to target, and where they’d like notifications of those donations to be sent. We send a letter to the donor, but we will also generate a letter to the loved one letting them know that so-and-so has made a donation in their loved one’s memory, along with the friend’s address so they may thank them personally.

If this information is indicated on the Convio donation form, our workflow rules trigger to notify the office to send the designated letters. But quite often, the information is inconsistent. The donations might say “Her Mother” in the field asking for the name of the deceased. Or they miss the fact that the family wanted the donation to go to a specific fund.

Enter Campaigns. When we know that we will be getting a number of donations in honor/memory of a single person and/or the family has made specific requests, we can easily configure Salesforce to respond appropriately.

A Campaign is set up. When the office enters a donation and assigns the campaign source to that donation, a workflow rule fires a number of actions automatically when the record is saved:

  • The fund on the donation is automatically set to the fund the family requested, if specified
  • The correct name of the deceased is entered in the appropriate field. Too often, donors know the family member and not the deceased and the same name can be spelled many different ways making tracking difficult (as well as provide some embarrassment when the family member receives a letter with their loved one’s name misspelled)
  • The correct name/address is entered for the person who will receive the notification. Quite often the donor knows who needs to be notified, but not their home address.
  • All the necessary tasks to our office staff for the letters to be generated as part of her weekly routine.

With a campaign, we can easily let the family member know how much was collected in their loved one’s memory (we don’t tell them individual donation amounts). If they prefer not to receive so many postal letters, we can use Salesforce to send them an email notifying them of the donation. In other cases I was able to use campaign reporting to easily send the family a spreadsheet containing the names/addresses of everyone who donated so they could plug into their own mail merges.

We also use Contact Roles to link the contacts to these donations. There are many who advise moving away from using Contact Roles to link contacts to donations where they weren’t the donor, but I can’t see another way to show how much a contact was indirectly responsible for raising.


There’s always a catch, isn’t there?

At this point, Campaign Membership and Contact Roles are standard objects that aren’t standard objects. As far as I can tell, there is no way through workflow rules to change/update Campaign Member Status or add a Contact Role. This is why some of what I describe above has to be done manually as the donation comes in or a contact’s status changes. I am guessing that there’s a way to do what needs to be done through Apex triggers, but as I said above that programming is still too far over my head.

Is anyone else using Salesforce Campaigns for a nonprofit in interesting not-just-about-direct-mail-fundraising ways? I’d love to hear about it.


2 responses to “Salesforce 101: Fun with Campaigns and Workflows”

  1. Hi, I know this post is ancient, but I’m really interested in this topic, and wasn’t sure how else to get in contact with you through your blog.
    First – thanks for all the tips on Salesforce / Common Ground for non-profits!
    The main reason I found your blog is that our small non-profit (in Canada!) has just started with Common Ground and we’re trying to figure out how to use Campaigns for advocacy.
    I’d like to hear your thoughts on this related to the latest Common Ground.

    I’ve seen some information about it, but it’s unclear. At this point, it seems that any org that’s using CG for tracking advocacy/engagement does it through an integrated email client (e.g. Vertical Response, Constant Contact). I was hoping the online sign-up forms could be used, and/or that there would be an easy way to have contact files automatically updated when they take action (i.e. submitting a form set up as a petition, opening and clicking on email client, etc)

    Thanks for any thoughts on this!