diff --git a/api/funkwhale_api/moderation/models.py b/api/funkwhale_api/moderation/models.py
index ccc891e79e62f15864fffad308ce0920726db2f4..74fa4fd1b24594e6fce572d78f08ab31627ce540 100644
--- a/api/funkwhale_api/moderation/models.py
+++ b/api/funkwhale_api/moderation/models.py
@@ -6,13 +6,14 @@ from django.contrib.contenttypes.fields import GenericForeignKey
 from django.contrib.contenttypes.models import ContentType
 from django.contrib.postgres.fields import JSONField
 from django.db import models
+from django.db.models.signals import pre_save
+from django.dispatch import receiver
 from django.urls import reverse
 from django.utils import timezone
 
 from funkwhale_api.federation import models as federation_models
 from funkwhale_api.federation import utils as federation_utils
 
-
 class InstancePolicyQuerySet(models.QuerySet):
     def active(self):
         return self.filter(is_active=True)
@@ -160,3 +161,11 @@ class Report(federation_models.FederationMixin):
             self.fid = self.get_federation_id()
 
         return super().save(**kwargs)
+
+
+@receiver(pre_save, sender=Report)
+def set_handled_date(sender, instance, **kwargs):
+    if instance.is_handled is True and not instance.handled_date:
+        instance.handled_date = timezone.now()
+    elif not instance.is_handled:
+        instance.handled_date = None
\ No newline at end of file
diff --git a/api/tests/moderation/test_models.py b/api/tests/moderation/test_models.py
new file mode 100644
index 0000000000000000000000000000000000000000..8c1de981fcddb72b711ea96920220b876c851a2e
--- /dev/null
+++ b/api/tests/moderation/test_models.py
@@ -0,0 +1,22 @@
+def test_setting_report_handled_to_true_sets_handled_date(factories, now):
+    target = factories["music.Artist"]()
+    report = factories["moderation.Report"](target=target)
+
+    assert report.is_handled is False
+    assert report.handled_date is None
+
+    report.is_handled = True
+    report.save()
+
+    assert report.handled_date == now
+
+
+def test_setting_report_handled_to_false_sets_handled_date_to_null(factories, now):
+    target = factories["music.Artist"]()
+    report = factories["moderation.Report"](
+        target=target, is_handled=True, handled_date=now
+    )
+    report.is_handled = False
+    report.save()
+
+    assert report.handled_date is None