Introducing the new Open Outreach CRM based on RedHen

The latest release of the Open Outreach distribution for nonprofits comes with built-in CRM (contact relationship management) support, based on the new RedHen CRM.

CRM is fancy shorthand for contact management (or "client", or "constituent", or "customer", depending on who you're relating to).

It's over two years now since we started work on Open Outreach, and from the start CRM has been high on our list. For most nonprofits and community organizations, contacting and engaging with members or residents or supporters is key.

But we knew CRM integration was going to be a challenge. I'd worked for two years alongside many talented Drupal developers at CivicSpace (one of the first Drupal shops) trying to integrate Drupal with CiviCRM, a leading open source CRM software. That experience was enough to convince me that deep integration of Drupal with an external CRM was no picnic.

The alternative would be a CRM built natively in Drupal. But two years ago, despite many rounds of discussion and several attempts, there was little sign of that. Having no shortage of other functionality to build out for the distro, we held off and hoped for the best.

And, happily, we got it.

In June when I rolled up my sleeves to evaluate the options for CRM integration, I was pleasantly suprprised to find not just one but several active and innovative native CRM initiatives. Joachim Noreiko and Robert Mumford were building something called Party, folks at Trellon were busily coding up CRM Core, and the ThinkShout developers were hard at work on RedHen CRM. Would one of them save me from having to wade back into CiviCRM integration land? Please, please?

Party allows tracking of individuals and organizations and their relationships and is planned as a component of an eventual integrated CRM. CRM Core doesn't have a stable release yet but is in active development. RedHen has a beta release and has minimal field dependencies, shipping with just the core pieces needed for any CRM integration. (For more on the three projects, see July, 2012 episodes of the Modules Unravelled podcast.)

Of the three, RedHen stood out to us as the right combination of solid architecture and extensibility. RedHen takes the same approach to CRM as Drupal Commerce takes to e-commerce: do relatively little, enable much. Like Drupal Commerce, RedHen models its basic data types as Drupal 7 entities and ships with a core set of extension modules.

To help give an idea of how to use RedHen, the ThinkShout devs posted a demo install profile, RedHen Demo. We started out by cloning the feature module included in RedHen Demo, stripping it down a bit, and then building from there. The result is Debut RedHen, a feature module that provides RedHen-based CRM functionality. Like other Debut features, Debut Redhen can be installed on any site as an app using the Apps module--see documentation on the Debut RedHen project page.

RedHen is still in early beta and there are definitely rough edges and missing pieces. If you're working with it as an early adopter, expect to do some troubleshooting and post patches. The good news is that RedHen devs Lev Tsypin, Tauno Hogue, Sean Larkin, and Brandon Lee have been super responsive in the issue queue, giving lots of tips and reviewing and applying patches quickly.

RedHen is built around two core data types: contacts and organizations. Like many other Drupal 7 entity types, contacts and organizations support different types (bundles), each of which can have distinct sets of fields.

Contacts can be linked to each other and to organizations via relationships modelled with the Relation module and can be tied to regular Drupal user accounts. A RedHen Membership plugin, packaged as a separate module, provides organizational membership handling, including optional linking of membership status with a Drupal user role. Activities like contact updating or membership renewal are automatically logged via Message module integration. An "engagement scoring" plugin allows assigning scores to specific types of contact interactions, like when a contact posts a website comment. And there's a central UI where users with appropriate permissions can browse contacts, add notes, review activity, and make new linkages.

Much of this is what any CRM user will be familiar with. So why not just turn on CiviCRM?

For starters, RedHen makes it easy to customize a CRM with just the pieces you need. Ever created a contact record in CiviCRM? The default forms are packed with every conceivable field and data type you could possibly need. Great if you want and need all that--but in our case we wanted to start small. Drupal site and content administration is challenging enough without adding a huge new layer of contact management. With RedHen we could add just the fields we wanted.

A RedHen-based CRM isn't some external software tacked onto your website--it is your website. For example, the admin user interface will be comfortably familiar to anyone who's done Drupal content administration.

The big payoffs started when we went to integrate with our existing features. For starters, rather than introducing a whole different WYSIWYG interface just for the CRM, we could simply turn on the one that already ships with Open Outreach.

Open Outreach includes Debut Event, an event feature with calendar displays, event categories, repeating events, and some iCal integration. We'd long wanted to support event registration--and happily RedHen includes a registration plugin integrating RedHen with the Entity registrations module. With a bit of quick bridging we had a Debut RedHen event feature, providing event registration that automatically integrates with RedHen contacts. Nice!

One glaring gap in RedHen is phone number handling. Nada! But even here I have to say I'm with the RedHen devs. I looked at available Drupal phone number field modules, but my sad conclusion was that there just isn't anything that's solid enough and a good fit for CRM usage. ThinkShout has plans to fill the gap, probably with a new custom field like the email one they built into RedHen. Meantime, in Open Outreach we're making do with a general-use text field.

With contact and organization types, Rosemary Mann (the other main Open Outreach developer) and I decided to start simple. Rather than second-guess what's needed and introduce a bunch of different contact and organization types, we started with catch all "general" types that can be classified with taxonomy. Any site developer wanting more specific types can go ahead and add it along with any specialized fields that are needed.

We've only scratched the surface of what we'd like to do with RedHen. Next steps could include mail integration, donation handling, or hooking up Rules for engagement scoring and collecting contact records from website users. Then there's our new Debut Location mapping feature, which includes address-based geocoding. Why not hook it up to Debut RedHen so we can map contacts and organizations based on their addresses?

Why not indeed? Having a native Drupal CRM means that this kind of integration is as easy as cloning a few items and making some tweaks.

I've come away from my first few weeks of working with RedHen refreshed and invigourated. With its solid, entity-based design, integrating proven Drupal core and contrib APIs and innovating where needed, RedHen is off to a very strong start. For Open Outreach, RedHen is helping us hone in on the key nonprofit and activist needs that got us going in the first place.

We'd love to see more shops building on and contributing to Open Outreach. Whether or not you've already tried Open Outreach, please have a look at the new release with RedHen (and mapping, via Debut Location) built in. And if your response is "Yes, but...", consider that that's only another way of saying "Here's how I could contribute improvements!".

If nonprofit networks can work together to tackle common problems, shouldn't we as Drupal shops and developers in the nonprofit space be able to do the same?



Thanks ...

... for catching that, Bill. Link fixed.


Hi Nedjo - 

We're so excited about OpenOutreach integrating with RedHen and really appreciate the clear and informative writeup! I couldn't imagine a more concise value proposition for a native Drupal CRM. You've also been amazingly helpful in the issue queu and we've enjoyed the collaboration, which we hope continues. I'm looking forward to taking OpenOutreach for a spin and seeing RedHen in action.

Talk soon, Lev

CRM Core

where did this gibberish about CRM Core come from? the modules do 100% the opposite of what you describe, and it even says so in the podcast. #faildurh

k, updated ...

... the one-line description of CRM Core and updated an issue on CRM Core to remove multiple unused field module dependencies, which are a large part of what gave me the impression you were trying to do more than you are.


I looked at available Drupal phone number field modules, but my sad conclusion was that there just isn't anything that's solid enough and a good fit for CRM usage. ThinkShout has plans to fill the gap, probably with a new custom field like the email one they built into RedHen.

Really? What about cck_phone?

We've been using it on several sites without issue.  One of the sites even stores numbers from around 100 different countries.  Admittedly I haven't closely inspected the codebase.  In its issue queue there's a few outstanding issues, but nothing that appears major.  I think that contributing some resources to this project will be much better than creating a third 'phone' module with not enough dev resources.

Issue link

Here's the issue for adding a phone field to Debut RedHen: Comments there welcome.

Total agreement with collaborating to improve shared solutions. In Open Outreach work we frequently invest a lot of time in improving the contrib modules we use. Before doing so, though, I care a lot about the maintenance status of a project. Is there a stable release? How many open issues are there? How active are the maintainers in reviewing and applying patches? The last thing I'm looking for is another module to maintain ;)