diff --git a/modules/crm_core_activity/src/ActivityInterface.php b/modules/crm_core_activity/src/ActivityInterface.php
index 9b91d17..9ea2fb8 100644
--- a/modules/crm_core_activity/src/ActivityInterface.php
+++ b/modules/crm_core_activity/src/ActivityInterface.php
@@ -25,4 +25,15 @@ interface ActivityInterface extends ContentEntityInterface, EntityChangedInterfa
    */
   public function addParticipant(ContactInterface $contact);
 
+  /**
+   * Check if participant exists in the activity.
+   *
+   * @param \Drupal\crm_core_contact\ContactInterface $contact
+   *   The contact to check in activity participant.
+   *
+   * @return bool
+   *   Returns TRUE if activity has a given contact/participant.
+   */
+  public function hasParticipant(ContactInterface $contact);
+
 }
diff --git a/modules/crm_core_activity/src/Entity/Activity.php b/modules/crm_core_activity/src/Entity/Activity.php
index 667eaad..d24fd7c 100644
--- a/modules/crm_core_activity/src/Entity/Activity.php
+++ b/modules/crm_core_activity/src/Entity/Activity.php
@@ -234,4 +234,17 @@ class Activity extends ContentEntityBase implements ActivityInterface {
   public function getChangedTime() {
     return $this->changed;
   }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function hasParticipant(ContactInterface $contact) {
+    foreach ($this->activity_participants as $key => $participant) {
+      if ($participant->target_id == $contact->id()) {
+        return TRUE;
+      }
+    }
+    return FALSE;
+  }
+
 }
diff --git a/modules/crm_core_activity/src/Tests/ActivityUiTest.php b/modules/crm_core_activity/src/Tests/ActivityUiTest.php
index bc27843..79dbe06 100644
--- a/modules/crm_core_activity/src/Tests/ActivityUiTest.php
+++ b/modules/crm_core_activity/src/Tests/ActivityUiTest.php
@@ -93,6 +93,17 @@ class ActivityUiTest extends WebTestBase {
     $this->drupalPostForm(NULL, $meeting_activity, 'Save Activity');
     $this->assertText('Activity Pellentesque created.', 'No errors after adding new activity.');
 
+    // Test Activity::hasParticipant() method.
+    $activities = \Drupal::entityTypeManager()->getStorage('crm_core_activity')->loadByProperties(['title' => 'Pellentesque']);
+    $meeting_activity = current($activities);
+    $this->assertTrue($meeting_activity->hasParticipant($household), t('Meeting activity has participant @name.', ['@name' => $household->label()]));
+    $new_household = Contact::create(array(
+      'name' => 'Fam. Jones',
+      'type' => 'household',
+    ));
+    $new_household->save();
+    $this->assertFalse($meeting_activity->hasParticipant($new_household), t('Meeting activity does not have participant @name.', ['@name' => $new_household->label()]));
+
     // Create Meeting activity. Ensure it it listed.
     $phonecall_activity = array(
       'title[0][value]' => 'Mollis',
