diff --git a/.coveragerc b/.coveragerc
index e85c97ef80c411f11f8d6d5bc033d9e17327cbb1..b974356e0fe0aa34ed003a6235e60221d0f509bc 100644
--- a/.coveragerc
+++ b/.coveragerc
@@ -611,6 +611,8 @@ omit =
     homeassistant/components/shodan/sensor.py
     homeassistant/components/sht31/sensor.py
     homeassistant/components/sigfox/sensor.py
+    homeassistant/components/signal_messenger/__init__.py
+    homeassistant/components/signal_messenger/notify.py
     homeassistant/components/simplepush/notify.py
     homeassistant/components/simplisafe/__init__.py
     homeassistant/components/simplisafe/alarm_control_panel.py
diff --git a/CODEOWNERS b/CODEOWNERS
index 472798f72a6b2c61e511e3037700ce7b46c2aeb8..6723244c089ef667cd585e48b2688d1e6fec94fa 100644
--- a/CODEOWNERS
+++ b/CODEOWNERS
@@ -281,6 +281,7 @@ homeassistant/components/seventeentrack/* @bachya
 homeassistant/components/shell_command/* @home-assistant/core
 homeassistant/components/shiftr/* @fabaff
 homeassistant/components/shodan/* @fabaff
+homeassistant/components/signal_messenger/* @bbernhard
 homeassistant/components/simplisafe/* @bachya
 homeassistant/components/sinch/* @bendikrb
 homeassistant/components/slide/* @ualex73
diff --git a/homeassistant/components/signal_messenger/__init__.py b/homeassistant/components/signal_messenger/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..045eb95f1b31afeb7e4b80652a593ce59c9c5c3e
--- /dev/null
+++ b/homeassistant/components/signal_messenger/__init__.py
@@ -0,0 +1 @@
+"""The signalmessenger component."""
diff --git a/homeassistant/components/signal_messenger/manifest.json b/homeassistant/components/signal_messenger/manifest.json
new file mode 100644
index 0000000000000000000000000000000000000000..b3494ce8bab8894031ec020280fee9e4fd7027e7
--- /dev/null
+++ b/homeassistant/components/signal_messenger/manifest.json
@@ -0,0 +1,10 @@
+{
+  "domain": "signal_messenger",
+  "name": "signal_messenger",
+  "documentation": "https://www.home-assistant.io/integrations/signal_messenger",
+  "dependencies": [],
+  "codeowners": ["@bbernhard"],
+  "requirements": [
+    "pysignalclirestapi==0.1.4"
+  ]
+}
diff --git a/homeassistant/components/signal_messenger/notify.py b/homeassistant/components/signal_messenger/notify.py
new file mode 100644
index 0000000000000000000000000000000000000000..8fbf9c708734d86cb6ce8a518ef8d9c0a7f545f3
--- /dev/null
+++ b/homeassistant/components/signal_messenger/notify.py
@@ -0,0 +1,71 @@
+"""Signal Messenger for notify component."""
+import logging
+
+from pysignalclirestapi import SignalCliRestApi, SignalCliRestApiError
+import voluptuous as vol
+
+from homeassistant.components.notify import (
+    ATTR_DATA,
+    PLATFORM_SCHEMA,
+    BaseNotificationService,
+)
+import homeassistant.helpers.config_validation as cv
+
+_LOGGER = logging.getLogger(__name__)
+
+CONF_SENDER_NR = "number"
+CONF_RECP_NR = "recipients"
+CONF_SIGNAL_CLI_REST_API = "url"
+ATTR_FILENAME = "attachment"
+
+PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
+    {
+        vol.Required(CONF_SENDER_NR): cv.string,
+        vol.Required(CONF_SIGNAL_CLI_REST_API): cv.string,
+        vol.Required(CONF_RECP_NR): vol.All(cv.ensure_list, [cv.string]),
+    }
+)
+
+
+def get_service(hass, config, discovery_info=None):
+    """Get the SignalMessenger notification service."""
+
+    sender_nr = config[CONF_SENDER_NR]
+    recp_nrs = config[CONF_RECP_NR]
+    signal_cli_rest_api_url = config[CONF_SIGNAL_CLI_REST_API]
+
+    signal_cli_rest_api = SignalCliRestApi(
+        signal_cli_rest_api_url, sender_nr, api_version=1
+    )
+
+    return SignalNotificationService(recp_nrs, signal_cli_rest_api)
+
+
+class SignalNotificationService(BaseNotificationService):
+    """Implement the notification service for SignalMessenger."""
+
+    def __init__(self, recp_nrs, signal_cli_rest_api):
+        """Initialize the service."""
+
+        self._recp_nrs = recp_nrs
+        self._signal_cli_rest_api = signal_cli_rest_api
+
+    def send_message(self, message="", **kwargs):
+        """Send a message to a one or more recipients.
+
+        Additionally a file can be attached.
+        """
+
+        _LOGGER.debug("Sending signal message")
+
+        data = kwargs.get(ATTR_DATA)
+
+        filename = None
+        if data is not None and ATTR_FILENAME in data:
+            filename = data[ATTR_FILENAME]
+
+        try:
+            self._signal_cli_rest_api.send_message(message, self._recp_nrs, filename)
+        except SignalCliRestApiError as ex:
+            _LOGGER.error("%s", ex)
+            raise ex
diff --git a/requirements_all.txt b/requirements_all.txt
index 87ca2a46177f4b15e43dacdaa3b157096aa75b5b..e59839722439529d5e343113e5b3858ad610037f 100644
--- a/requirements_all.txt
+++ b/requirements_all.txt
@@ -1482,6 +1482,9 @@ pysesame2==1.0.1
 # homeassistant.components.goalfeed
 pysher==1.0.1
 
+# homeassistant.components.signal_messenger
+pysignalclirestapi==0.1.4
+
 # homeassistant.components.sma
 pysma==0.3.4