diff --git a/aleksis/core/data_checks.py b/aleksis/core/data_checks.py
index 1279822f8d1f28bb40e040d9eaf0bb8126540940..2e95620933b74cc6fd89e94570686dd43bf7119d 100644
--- a/aleksis/core/data_checks.py
+++ b/aleksis/core/data_checks.py
@@ -255,3 +255,35 @@ def send_emails_for_data_checks():
         logging.info("Sent notification email because of unsent data checks")
 
         results.update(sent=True)
+
+
+class DeactivateDashboardWidgetSolveOption(SolveOption):
+    name = "deactivate_dashboard_widget"
+    verbose_name = _("Deactivate DashboardWidget")
+
+    @classmethod
+    def solve(cls, check_result: "DataCheckResult"):
+        widget = check_result.related_object
+        widget.active = False
+        widget.save()
+        check_result.delete()
+
+
+class BrokenDashboardWidgetDataCheck(DataCheck):
+    name = "broken_dashboard_widgets"
+    verbose_name = _("Ensure that there are no broken DashboardWidgets.")
+    problem_name = _("The DashboardWidget was reported broken automatically.")
+    solve_options = {
+        IgnoreSolveOption.name: IgnoreSolveOption,
+        DeactivateDashboardWidgetSolveOption.name: DeactivateDashboardWidgetSolveOption,
+    }
+
+    @classmethod
+    def check_data(cls):
+        from .models import DashboardWidget
+
+        broken_widgets = DashboardWidget.objects.filter(broken=True, active=True)
+
+        for widget in broken_widgets:
+            logging.info(f"Check DashboardWidget {widget}")
+            cls.register_result(widget)
diff --git a/aleksis/core/models.py b/aleksis/core/models.py
index 04bc77b7a6f3e89a345bd2e54f60e0842bfed296..d6c79b74d88b775c16a2d47f5e577f7ee74753d9 100644
--- a/aleksis/core/models.py
+++ b/aleksis/core/models.py
@@ -26,7 +26,7 @@ from model_utils.models import TimeStampedModel
 from phonenumber_field.modelfields import PhoneNumberField
 from polymorphic.models import PolymorphicModel
 
-from aleksis.core.data_checks import DataCheck, DataCheckRegistry
+from aleksis.core.data_checks import BrokenDashboardWidgetDataCheck, DataCheck, DataCheckRegistry
 
 from .managers import (
     CurrentSiteManagerWithoutMigrations,
@@ -689,6 +689,8 @@ class DashboardWidget(PolymorphicModel, PureDjangoModel):
           )
     """
 
+    data_checks = [BrokenDashboardWidgetDataCheck]
+
     @staticmethod
     def get_media(widgets: Union[QuerySet, Iterable]):
         """Return all media required to render the selected widgets."""