diff --git a/app/jobs/scheduled/clean_up_drafts.rb b/app/jobs/scheduled/clean_up_drafts.rb
new file mode 100644
index 000000000..b3ace672b
--- /dev/null
+++ b/app/jobs/scheduled/clean_up_drafts.rb
@@ -0,0 +1,12 @@
+module Jobs
+  class CleanUpDrafts < Jobs::Scheduled
+    every 1.week
+
+    def execute(args)
+      delete_drafts_older_than_n_days = SiteSetting.delete_drafts_older_than_n_days.days.ago
+
+      # remove old drafts
+      Draft.where("updated_at < ?", delete_drafts_older_than_n_days).destroy_all
+    end
+  end
+end
diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml
index d760b4b5f..9ca22fef3 100644
--- a/config/locales/server.en.yml
+++ b/config/locales/server.en.yml
@@ -1139,6 +1139,8 @@ en:
     enable_cdn_js_debugging: "Allow /logs to display proper errors by adding crossorigin permissions on all js includes."
     show_create_topics_notice: "If the site has fewer than 5 public topics, show a notice asking admins to create some topics."
 
+    delete_drafts_older_than_n_days: Delete drafts older than (n) days.
+
     vacuum_db_days: "Run VACUUM FULL ANALYZE to reclaim DB space after migrations (set to 0 to disable)"
 
     prevent_anons_from_downloading_files: "Prevent anonymous users from downloading attachments. WARNING: this will prevent any non-image site assets posted as attachments from working."
diff --git a/config/site_settings.yml b/config/site_settings.yml
index 11c0641b8..33764aff1 100644
--- a/config/site_settings.yml
+++ b/config/site_settings.yml
@@ -893,6 +893,8 @@ uncategorized:
     default: 0
     hidden: true
 
+  delete_drafts_older_than_n_days: 90
+
   tos_topic_id:
     default: -1
     hidden: true