Automatically Removing Contact From Campaigns Using Process Builder And Flow

You are currently viewing Automatically Removing Contact From Campaigns Using Process Builder And Flow

I have been lately seeing a lot of questions on the Answers Community related to automatically adding or removing contact/lead from a Campaign when a field is changed on either one of them. Being an avid fanboy of Process Builder and Flows, I love responding to any questions remotely concerned with these automation tools. The objective of this post is to demonstrate how straightforward it is to manipulate Campaign Data via changes made on a Contact or Lead. The ulterior motive however is to link the community folks to this article if a similar question pops up in the future. I will tackle a specific requirement here which can be easily tweaked to meet any related requirement.

Requirement: The system administrator needs to create an automated process which automatically removes a Contact from all Campaigns (that he/she is a part of) as soon as the contact is flagged as Inactive.
 
Design Approach (questions to ask yourself before you begin the implementation):

  • What are we really trying to do here?
    Good question! So the primary part of this implementation is first finding the Campaign/(s) which the Contact is a part of and then removing him/her from the Campaign/(s). Which means that we are essentially deleting a Campaign member. Helps put things in perspective, right? Let’s proceed with the rest of the questions.
  • What should be the trigger for the automation?
    A contact is created or edited and is flagged as Inactive – This becomes the criteria
  • Should the automation fire every time the Contact is edited?
    Nah, just firing it once when the contact is marked inactive should suffice – This means that we are going to enforce the ‘subsequently meets criteria’ evaluation
  • And now the million dollar question among all: Which automation tool/(s) are we using to implement this requirement?
    Well we are going to perform some deletion here which is only possible either via Visual Workflows (commonly known as Flows) or Apex.  Let’s keep Apex out of the picture since we are trying to design this declaratively.
    For the deletion we need to find all Campaign Members that have their ContactId field equal to the ID of the Contact being flagged Inactive – This can be done within the flow
    The Flow needs to fire when the Contact is flagged – This can be easily done via the Process Builder

 
So there we go! We are going to use the Process Builder to create a Process that is triggered when a Contact is created or edited to be flagged Inactive which launches a Flow. This Flow performs the heavy lifting of finding all related Campaign Member records and then purging them from the system. This is what the complete automation flow will look like:

Now when we have got our bases covered, let’s get down to business:
 
CREATING THE FLOW:

Flow - Full View
Flow – Full View

 

We need two variables in this Flow: One to receive the ID of the Contact being flagged inactive (vContactId) and other to store the Campaign members (vColCampMem).

 

Fast Lookup element

Flow11
Fast Lookup Element

 
Using the Fast Lookup element: There can be multiple Campaign members found for a single Contact which means we have to store the result in a Collection variable which demands usage of a Fast Lookup element.
 
Decision Element
Decision Element

 

Using the Decision element: We need to factor in the possibility of our Contact not being a part of any Campaign which means no Campaign members are found. The deletion step should only be performed if a related Campaign member is found which is why we need the Decision element.
 

Fast Delete Element
Fast Delete Element

 

Using the Fast Delete element: Well you need a Fast Delete element to delete the records inside a collection variable.
Do not forget to activate the Flow otherwise it won’t be accessible within the following Process.
 
CREATING OUR PROCESS THAT LAUNCHES THE FLOW:
 

Process - Full View
Process – Full View

 

Process Evaluation Criteria
Process Evaluation Criteria

 

Process Criteria
Process Criteria

 

Process Immediate Action
Process Immediate Action

 

Activate the Process and you are ready to test!
 
BEFORE:

Test1

 

AFTER the magic happens:

Test2

 

See how easy it is to manipulate records via Process Builder and Flows? We were able to query records in an object, store them in a collection variable and also delete them, all of it without using Apex! This is the beauty of Visual workflows and that is exactly why I am so fond of them.

Feel free to share in the comments below any similar scenario involving Contact/Lead and related Campaign data manipulation that you tackled using Process Builder and Flows.
 
Related Answer Community questions:

Is it possible to use Process Builder and/or Flow to remove a contact from a campaign?

Adding contact to campaign automatically with process builder

Can a Workflow add a Contact to a Campaign as a Campaign Member?