Activities in CiviCRM

Your organization is going to be doing a lot of stuff in relation to its constituents. Sending mailings, signing people up for events, tracking their donations, etc. Each of these things is recorded as an “Activity”. Simply put, any kind of interaction between your org and an individual that occured at a definite point in time is an Activity.

As always, please read the complete Civi Book entry on this topic before delving into one of Thomas’s weird, overlong lessons.

This lesson will focus on understanding how Activities play into the real world functioning of CiviCRM. When this lesson started, it was just supposed to be a brief explanation of what an Activity was. As I researched the topic, it became clear that the topic was huge. Activities cut across every aspect and component of CiviCRM. Consequently, this lesson is going to be long. Rather than simple tutorials and how-to’s, we’ll approach Activities in a narrative context. This is because you need to think of Activities as part of the narrative of your org.

Intra-Organizational Example

Below is an example of how an org might use CiviCRM to manage some of their own internal processes. After we run through this, we’ll take a look at an org-to-constituent example.


Things in the Milky Way Galaxy are getting desparate. The Reapers have awakened in dark space to once again begin the cycle of purging the galaxy of all spacefaring civilization. The crew of the Normandy SR-2 must be made aware of this so we sent out a mailing to everyone in that group. Let’s see if Garrus Vakarian, our resident combat engineer, got the mailing.

We go to his contact summary and click over to the Activities tab.


Remember that Activities are interactions between our org and an individual. So this tab shows all those interactions. Lo and behold, the bulk email “Reapers Are Coming!” is there. We can even see the content of the mailing by clicking “View”.

Send Him An Email

Sometimes, a mass mailing to a big group is just the beginning of a conversation. We have more specific instructions to give to each crew member. Civi is perfectly capable of sending emails, and indeed in this case it is desirable because we want to keep a record of these official correspondences. Other members of the adminstration team need to know that vital communications happened and when they happened.

While on Garrus’s contact summary page, we hit “Actions” and then “Send an Email”.


If someone wanted to check that the email was sent and what it said, they could hop on over to the Activities tab and click “View” next to the record of the email.



Check on His Event Registraion

To make doubly sure that he knew that he needed to calibrate the weapons system, we created an “Event” using CiviEvent and sent him an invite. Let’s see if he registered by going back to the Activities tab.



Schedule a Meeting With Him

It’s performance review time! Let’s schedule a meeting with him. We’re not going to contact him ourselves, but instead assign it to someone else on the team, Commander Sheppard. She’ll then send him an email telling him about it. In the Activities tab, we hit New Activity and select Meeting. The we title the meeting and assign it to Commander Sheppard.



Once we’ve done that, we can see that the meeting Activity was scheduled. If we look at Commander Sheppard’s email, we see that she got the message that she was assigned this task.



Sheppard knows what to do. She signs into her CiviCRM account and sends Garrus an email about it. They meet at the determined time. After that’s done, she goes back to the Activities tab to edit the Performance Review meeting Activity and changes it to “Completed”.





The Power of Activites

Having a comprehensive record of activites means that your organization knows what’s going on. When you have a team of people, even if it’s small, there’s a problem with not knowing who is doing what. “Did you send that email?” “How many times has person X donated to us? And how much?” “Who talked on the phone to household Y?” Having a centralized system keeps your team organized and makes sure everyone is accountable.

A More “Nonprofity” Example

The above example was more internally focused, although you can probably already imagine applying the same principles to a org-to-constituent situation. Remember, Activities are just an interactions between your org and an individual, and CiviCRM allows you to to keep track of these interactions.

The Scenario

You are a team member at “Ice Cream for Peace!” a hot new org that aims to cool down global violence with the power of dairy free and conventional ice cream, frogurt, and sorbet. ICP! is a smart org. They’ve worked out some very effective best practices for getting their message out, interacting with constituents, and converting them into action-takers. One of their core outreach programs is called “Ice Cream Social For World Peace!”.

Ice Cream Social For World Peace! is a flash ice cream party held in train stations, parks, bonus plazas, and other public spaces. Socials are open to everyone (kinda the point), but people on their mailing list are always clued in ahead of time to where the social will be. While enjoying ice cream, partiers learn about world peace. ICP! staff and volunteers talke with people, gather emails for the mailing list, take in donations, and hand out action packets to individuals who seem like they’re serious. People who get these packets need to be tracked because of two reaons:

  1. This person, in the staff member’s judgement, demonstrated a serious interest in world peace and would be a great ally in the future
  2. Those packets cost like $3 or $4 bucks a piece! You’ve got to track those people and make sure the investment is paying off.

Let’s explore how we can make this type of specific tracking possible and why it’s useful.

Creating a New Activity Type

CiviCRM is made to be customized, so of course you are allowed to create your own activities. Mosey on over to Administer > Customize Data and Screens > Activity Types. Here you can see every type of Activity. Take a minute to look through these. Try and think about what they mean based on their label. Remember that an Activity is an action that happens between your org and an individual.

Once you’re done marveling at all the Activities on this page, go ahead and hit the Add Activity Type button. Give your new activity a name or as Civi calls it a “Label”. While not required, it’s smart to include a description for your new Activity. Just like how it’s best practice to document and comment your code, it’s best practice to use descriptions for your customizations so that people who are not you might actually know what it’s about. Once you save your new Activity, you can see it in the list with all the others.



Importing Activities

After their socials, ICP! collects all the sign up sheets from their volunteers as well as the action packet recipient lists. It’s then time for the data entry intern to create some spreadsheets. Please take note that this is a very common thing for orgs. Gathering names and emails on paper and then putting them into your CRM is a near universal thing. So pay attention!

Procedure is Important

In a perfect world we’d be able to just upload a single CSV and call it a day, but we need to do a bit more. We have to be intentional with how we put these nice people into our database. Let’s breakdown what we have to do.

  1. Import the contacts into the existing “Mailing List” group
  2. Register these people as participants in the May 2nd Ice Cream Social For World Peace! event
  3. Indicate who was given an Action Packet

Each of these is a separate, as in “no you can’t combine any steps”, import and each of them has its own unique required fields. Let’s do each import in sequence, adding new columns to our import sheet as we go.

Import 1: The Contact Info

This is straight forward and no different from how you’ve done imports before. You must have:

  • Email

Only email is required, but it’s best to try and get names as well. We’ve got them in as contacts. What else do we want to know?

It’s useful to know where we gathered these people’s contacts. We got them at the most recent “Ice Cream Social For World Peace!” so let’s figure out a way to attach that information to the contacts we just added?. There are two ways of doing this:

  1. The way that is fast in the short term but unmanageable in the long run
  2. The way that takes slightly longer but will make your database more elegant, less cluttered, and easier to manage

Guess which one we’re doing?

Wrong Way

The goal is to make it clear that these people were collected at the May 2nd Ice Cream Social For World Peace! event. You may be tempted to do what you know already and create a group called something like, “May 2nd Ice Cream Social Contacts” and call it a day. Technically you’ve accomplished that goal, but you did so in a shortsighted manner. Your org does these like once a week, so you’ll have 52 new contact groups every year! Is that really the best way to organize things? How do you expect to search through those? Is it really useful to have a group of 8 people? We want something more elegant.

Right Way

We want to use Civi Activities to keep track of our constituents, so we should add an activity to their “timeline” of Activities. Being an event attendee is an Activity isn’t it? Let’s add that information to the contacts we just created. By doing it this way, we have data on our contacts that can be searched and pulled up as we need it.

Import 2: The Participant Info

Importing participants is a lot like importing contacts, except that importing prarticipants requires you to have pre-existing contacts. That is, we’re importing information about contacts so we obviously need to have those contacts already in the system. Hence this is step two and not step one.

Rather than make a new spreadhseet, we’re just going to add new information to the same one we used for importing contacts. We need to add two columns to the sheet:

  1. Event ID
  2. Participant Status

In other words, we need to specify what the event in question is and how the person participated in the event. Event ID is simple —just go to Manage Events and look at the ID column for the event in question. Participant Status is different though.

When importing the Participant Status CiviCRM doesn’t accept strings like “Attended” or “No Show”. It wants you to give it a number corresponding to the Status ID. You can find these in Administer > CiviEvent > Participant Statuses. As you can see, each each Participant Status has an ID associated with it. We want to show that our people Attended the event so we go with 2.


We add these two columns to our existing spreadsheet because there’s no point in creating a new sheet. We’ll only select event-related information and not import the rest.

The option to Import Participants is found under the Events tab rather than the Contacts tab. Once there, all we have to do is upload the file and check the box about how the first row is column headers. For the options regarding On Duplicate Entries leave it set to Skip.

Make sure to map your columns correctly. You need to include some identifying information in order to pick the status of the correct person. First name and last name should be sufficient, but if you want to be exact, use their unique CiviCRM ID. If you want their uique ID, then you’ll need to export the contacts and copy it from there. That’s not really necessary though.



OK so we’ve imported all the people who signed up for the email list and we’ve added participant info to them so that we can see where exactly we met these people. Now we just need to specify who was given an Action Packet.

Import 3: The Action Packet Activity

Now for the importing! The Import Activities utility (located in the Contacts tab) requires the following fields:

  • Activity Date
  • Activity Type ID
  • Activity Type Label
  • Subject

Knowledge Check

Here’s a deep understanding question: Why does this require the Activity Date when we didn’t have to include that when we imported the Participant Info in the last step?

The answer is found by looking back at the basic definition of what an Activity is in CiviCRM. Activities are any kind of interaction between your org and an individual that occured at a definite point in time. When we imported the Participant Info we specified the particular event they had attended. All events take place at a definite point in time, so there’s no need to include that information again. In our current case, Civi has no way of knowing when these people were given packets so we have to specify that. Got it? Good let’s move on.

Back to the Import

We go back to our spreadsheet and add in the required columns using the Activity information we noted when we created the new Activity. The date needs to be in a particular format. You can see the date format options on the import screen. For Subject, I really couldn’t figure out anything that would add any substance to this entry, so I just put a space into each of the records in that column. After that it’s time to import. Just like with the Participant Import, you’ll need to select your field mappings, especially the name fields. But not the email for some reason. Still don’t know why.



We’ve now completed a typcical workflow! ICP! did one its main outreach events, collected contacts from people, and entered their information into the CRM. ICP! can now use this information to further their org’s mission. They have more people to send their mailings to, more people who will have foreknowledge of future Ice Cream Social events making them bigger and funner. They’ve also got a list of people who have shown enough promise to give action packets to. Speaking of whom…shouldn’t we follow up with them in some way?