Households and Campaigns in a Contact-centric Salesforce.com
Anyone who works in Salesforce.com notices quickly that there is a distinct bias for business to business (B2B) interaction over business to consumer (B2C) interactions. This is a drag when you try to do things like run an individual giving program, or lock down user access to Contact records.
One place in Salesforce.com where B2C functionality is actually pretty nice is Campaigns. Campaigns are the stock way of modeling an outreach event. They allow you to connect a ton of Contacts to the Campaign, change their status, export them to Excel, etc. You can easily use Campaigns to create lists for direct mail, emailing, etc.
There is a problem, though, when we try to model Households. Here’s an illustrative example.
You run a report of everyone who has given you a gift this year so you can send them all a mailed invitation to a thank you party. You add everyone in that report to a Campaign for the party. Then you export the Campaign members to Excel for mail merging.
Faye Fonebone gave you $100 and Fred Fonebone gave you $50, so they are both Campaign members, and both in your Excel export. Problem is, they live at the same address, and you’d like to send them one invitation. You’ve already created a Household for them, so it’s easy to bring in their Household information, but how do we deal with the duplicates?
You can take the Excel spreadsheet and dedupe it by hand–not really that hard to do. Or you can write an S-Control to dedupe the Campaign members based on their Household, which is what I’ve done.
From a link on the Campaign, I run an S-Control that looks for Contacts that have their Household represented more than once. For all Contacts other than the first one, the Campaign Member Status is changed to “Household Member”.
The link is a Formula field created on the Campaign object–here’s what the syntax looks like:
HYPERLINK("/servlet/servlet.Integration?lid=XXXX&eid=" & {!Id} , "Deduplicate Household members")
Where XXXX is the Id of the S-Control you've just installed.
Now when I export my Campaign members, I can drop out all those with Household Member status, and eliminate my duplicate address problem. I address my letters to the Households, using the Household recognition name, “Faye and Fred Fonebone”, and we save paper and look like we know what we’re doing.
It will work with no changes if you’re using my Householding setup, which is included in the new Salesforce.com Foundation nonprofit template.


July 12th, 2006 at 3:21 pm
Hey Steve,
Sounds cool. I’d like to look at the code, if for no other reason than to learn from it. (I’m not using your householding setup for my current client, but might use it for others, and might adapt this feature to a different structure.)
One question: how do you address the letters to the household name? I assume that’s stored in the Household object, and I also assume that some of the contacts in your campaign aren’t part of a household? Since SFDC only lets you do inner joins in the report builder, I don’t see how you’d do this without using the API or some other fancydancing. Are you redundantly storing the household name in the contact as well? I’d be curious how you make this happen.
Thanks!
Matthew
July 12th, 2006 at 3:31 pm
Yes, there are a couple different Recognition names that are stored on the Household object.
Contacts without Households can be a problem. My current best practice is to create a Household for every Contact. With my data entry form, it’s all done automatically, so no real overhead there.
I have a customer who decided not to create a household for all their Contacts who are business members, so during the appeal process they have two Campaigns, one for individual donors where the Household info is used, and onther where Account info is used. A bit cumbersome, but I think the best way to handle the problem of trying to do B2B and B2C at the same time.
I’ll post the code in the next couple minutes.
January 9th, 2008 at 8:10 pm
Steve,
I’m having trouble with this. created the formula field, input the ID for the s-control. when i run it off my campaign, blank page, and no update on any member status.
am i missing a step?
thanks!
Hudi