diff --git a/src/TermMergeEvent.php b/src/TermMergeEvent.php
new file mode 100644
index 0000000..406f49e
--- /dev/null
+++ b/src/TermMergeEvent.php
@@ -0,0 +1,64 @@
+<?php
+
+namespace Drupal\term_merge;
+
+use Drupal\taxonomy\Entity\Term;
+use Symfony\Component\EventDispatcher\Event;
+
+/**
+ * Event used for Merges.
+ *
+ * Class TermMergeEvent.
+ *
+ * @package Drupal\term_merge
+ */
+class TermMergeEvent extends Event {
+
+  /**
+   * Array of terms. These terms are getting merged into $targetTerm.
+   *
+   * @var array
+   */
+  protected $termsToMerge;
+
+  /**
+   * Target Term. All $termsToMerge are getting merged into this.
+   *
+   * @var \Drupal\taxonomy\Entity\Term
+   */
+  protected $targetTerm;
+
+  /**
+   * Constructor.
+   *
+   * @param array $termsToMerge
+   *   Terms to merge.
+   * @param \Drupal\taxonomy\Entity\Term $targetTerm
+   *   Target Term.
+   */
+  public function __construct(array $termsToMerge, Term $targetTerm) {
+    $this->termsToMerge = $termsToMerge;
+    $this->targetTerm = $targetTerm;
+  }
+
+  /**
+   * Get all terms to merge.
+   *
+   * @return array
+   *   An array of terms to merge.
+   */
+  public function getTermsToMerge() {
+    return $this->termsToMerge;
+  }
+
+  /**
+   * Get the single target term.
+   *
+   * @return \Drupal\taxonomy\Entity\Term
+   *   Single target term object.
+   */
+  public function getTargetTerm() {
+    return $this->targetTerm;
+  }
+
+}
diff --git a/src/TermMerger.php b/src/TermMerger.php
index 554894f..40e5bf2 100644
--- a/src/TermMerger.php
+++ b/src/TermMerger.php
@@ -87,6 +87,11 @@ class TermMerger implements TermMergerInterface {
 
     $this->migrateReferences($termsToMerge, $targetTerm);
 
+    // Trigger term merge event
+    $dispatcher = \Drupal::service('event_dispatcher');
+    $event = new TermMergeEvent($termsToMerge, $targetTerm);
+    $event = $dispatcher->dispatch('term_merge.merge_action', $event);
+
     $this->termStorage->delete($termsToMerge);
   }
 
diff --git a/tests/src/Functional/IntegrationTest.php b/tests/src/Functional/IntegrationTest.php
index 379af39..ee28fbf 100644
--- a/tests/src/Functional/IntegrationTest.php
+++ b/tests/src/Functional/IntegrationTest.php
@@ -20,7 +20,7 @@ class IntegrationTest extends BrowserTestBase {
   /**
    * {@inheritdoc}
    */
-  public static $modules = ['node', 'taxonomy', 'term_merge'];
+  public static $modules = ['node', 'taxonomy', 'term_merge', 'term_merge_test_events'];
 
   /**
    * The content type.
@@ -112,6 +112,10 @@ class IntegrationTest extends BrowserTestBase {
     $this->assertSession()->statusCodeEquals(200);
     $this->assertSession()
       ->pageTextContains("Successfully merged 1 terms into {$b->label()}");
+    // The message below is printed to the screen by an event subscriber
+    // located in the term_merge_test_events test module.
+    $this->assertSession()
+      ->pageTextContains('The TermMergeEvent was triggered.');
   }
 
   /**
diff --git a/tests/term_merge_test_events/src/EventSubscriber/TermMergeEventSubscriber.php b/tests/term_merge_test_events/src/EventSubscriber/TermMergeEventSubscriber.php
new file mode 100644
index 0000000..7a3389c
--- /dev/null
+++ b/tests/term_merge_test_events/src/EventSubscriber/TermMergeEventSubscriber.php
@@ -0,0 +1,33 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\term_merge_test_events\EventSubscriber\TermMergeEventSubscriber.
+ */
+
+namespace Drupal\term_merge_test_events\EventSubscriber;
+
+use Symfony\Component\EventDispatcher\EventSubscriberInterface;
+use Drupal\term_merge\TermMergeEvent;
+
+/**
+ * The TermMergeEventSubscriber event subscriber.
+ */
+class TermMergeEventSubscriber implements EventSubscriberInterface {
+
+  /**
+   * Code that is executed when the event is triggered.
+   */
+  public function onTermMerge(TermMergeEvent $event) {
+    \Drupal::messenger()->addMessage('The TermMergeEvent was triggered.');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function getSubscribedEvents() {
+    $events['term_merge.merge_action'][] = ['onTermMerge'];
+    return $events;
+  }
+
+}
diff --git a/tests/term_merge_test_events/term_merge_test_events.info.yml b/tests/term_merge_test_events/term_merge_test_events.info.yml
new file mode 100644
index 0000000..94faaed
--- /dev/null
+++ b/tests/term_merge_test_events/term_merge_test_events.info.yml
@@ -0,0 +1,8 @@
+name: 'Term merge test events'
+type: module
+description: 'Helps to test events triggered in the term_merge module by creating event subscribers.'
+package: Testing
+dependencies:
+  - term_merge:term_merge
+core: 8.x
+hidden: true
diff --git a/tests/term_merge_test_events/term_merge_test_events.services.yml b/tests/term_merge_test_events/term_merge_test_events.services.yml
new file mode 100644
index 0000000..38788a1
--- /dev/null
+++ b/tests/term_merge_test_events/term_merge_test_events.services.yml
@@ -0,0 +1,5 @@
+services:
+  term_merge_event_subscriber:
+    class: '\Drupal\term_merge_test_events\EventSubscriber\TermMergeEventSubscriber'
+    tags:
+      - { name: event_subscriber }
