diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index b1e810f1a09e831d58e6c86d3aceea742bd6975e..1d173115ffb473302fe8dd3f5196ddb373a5d5ab 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -13,6 +13,7 @@ Added
 ~~~~~
 
 * Add preference for configuring the default phone number country code.
+* Admins recieve an mail for celery tasks with status "FAILURE"
 
 Added
 ~~~~~
diff --git a/aleksis/core/celery.py b/aleksis/core/celery.py
index 27a67c539babfc61701cc9521b42187ebebc5787..10457ea9b84871da3038cf4712babb601456bfcd 100644
--- a/aleksis/core/celery.py
+++ b/aleksis/core/celery.py
@@ -1,9 +1,36 @@
 import os
 
+from django.conf import settings
+
 from celery import Celery
+from celery.signals import task_failure
+from templated_email import send_templated_mail
+
+from .util.core_helpers import get_site_preferences
 
 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "aleksis.core.settings")
 
 app = Celery("aleksis")  # noqa
 app.config_from_object("django.conf:settings", namespace="CELERY")
 app.autodiscover_tasks()
+
+
+@task_failure.connect
+def task_failure_notifier(
+    sender=None, task_id=None, exception=None, args=None, traceback=None, **kwargs
+):
+    recipient_list = [e[1] for e in settings.ADMINS]
+    send_templated_mail(
+        template_name="celery_failure",
+        from_email=get_site_preferences()["mail__address"],
+        recipient_list=recipient_list,
+        context={
+            "task_name": sender.name,
+            "task": str(sender),
+            "task_id": str(task_id),
+            "exception": str(exception),
+            "args": str(args),
+            "kwargs": str(kwargs),
+            "traceback": str(traceback),
+        },
+    )
diff --git a/aleksis/core/templates/templated_email/celery_failure.email b/aleksis/core/templates/templated_email/celery_failure.email
new file mode 100644
index 0000000000000000000000000000000000000000..d355823eb70e58f393c6a9006ed2045ac1882171
--- /dev/null
+++ b/aleksis/core/templates/templated_email/celery_failure.email
@@ -0,0 +1,44 @@
+{% load i18n %}
+
+{% block subject %}
+ {% blocktrans with task_name=task_name%} Celery task {{ task_name }} failed!{% endblocktrans %}
+{% endblock %}
+
+{% block plain %}
+ {% trans "Hello," %}
+ {% blocktrans with task_name=task_name %}
+   the celery task {{ task_name }} failed with following information:
+ {% endblocktrans %}
+
+
+{% blocktrans with task_name=task_name task=task task_id=task_id exception=exception args=args kwargs=kwargs traceback=traceback %}
+ * Task name: {{task_name}}
+ * Task: {{task}}
+ * Id of the task: {{task_id}}
+ * Exception instance raised: {{ exception }}
+ * Positional arguments the task was called with: {{ args }}
+ * Keyword arguments the task was called with: {{ kwargs }}
+ * Stack trace object: {{ traceback }}
+{% endblocktrans %}
+{% endblock %}
+
+{% block html %}
+ <p>{% trans "Hello," %}</p>
+ <p>
+  {% blocktrans with task_name=task_name %}
+    the celery task {{ task_name }} failed with following information:
+  {% endblocktrans %}
+ </p>
+
+ <ul>
+ {% blocktrans with task_name=task_name task=task task_id=task_id exception=exception args=args kwargs=kwargs traceback=traceback %}
+   <li>Task name: {{task_name}}</li>
+   <li>Task: {{task}}</li>
+   <li>Id of the task: {{task_id}}</li>
+   <li>Exception instance raised: {{ exception }}</li>
+   <li>Positional arguments the task was called with: {{ args }}</li>
+   <li>Keyword arguments the task was called with: {{ kwargs }}</li>
+   <li>Stack trace object: {{ traceback }}</li>
+ </ul>
+ {% endblocktrans %}
+{% endblock %}