diff --git a/tools/bulkdetect b/tools/bulkdetect
index f86d13ca4728c342a9d27fc92ad8432c7b355cc2..536f361aa93c00ca1ff4d9b912fae20a5636a48c 100755
--- a/tools/bulkdetect
+++ b/tools/bulkdetect
@@ -3,9 +3,27 @@
 # taggart 2019-06
 
 $log='/var/log/sympa/wwsympa.log';
+$close = 5000;
+$warn = 1000;
+
+# if -c flag, run as a cronjob otherwise report only
+if ( $ARGV[0] eq '-c' ) {
+  $cron = 1;
+}
 
 open(LOG, "$log") or die "cannot open log\n";
 
+# load list status into hash
+$sql=qq(mysql -N --batch --database=sympa --execute "select name_list, status_list from list_table;");
+
+open(SQL, "$sql|") or die "cannot get dump of bouncers\n";
+
+while (<SQL>) {
+   chomp;
+   ($name,$status) = split(/\t/);
+   $lists{$name} = $status;
+}
+
 while (<LOG>) {
   chomp;
   if ( m/.*\[user (.*)\] \[list (.*)\] main::do_add\(\) do_add:(.+)/ ) {
@@ -16,23 +34,44 @@ while (<LOG>) {
 }
 
 format Foo =
-@<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< @>>>>>>
-$owner,                                         $list                                       $count
+@>>>>>> @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<  @<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
+$count, $list,                                          $status,$owner
 .
 
 # set output format
 $~= 'Foo';
 
 # print header
-$owner = 'Owner adding';
-$list = 'List';
 $count = 'Add';
-write;
+$list = 'List';
+$status = 'Status';
+$owner = 'Owner adding';
+
+if (! $cron ) {
+  write;
+}
 
 foreach $key ( sort { $result{$b} <=> $result{$a} } keys %result) {
   ($owner,$list) = split /:/,$key;
   $count = $result{$key}; 
-  write;
+  $status = $lists{$list};
+ 
+  if ( $cron ) {
+    if ( $status eq 'open' ) {
+      if ( $result{$key} > $close ) {
+        # close
+        print "$list is $count, autoclosing\n";
+        `sympa.pl --close_list=$list\@lists.riseup.net` or die "cannot close $list\n";
+      } elsif ($result{$key} > $warn ) {
+        # warn
+        print "$list is $count, send them a warning\n";
+      } else {
+        last;
+      }
+    }
+  } else {
+    write;
+  }
 }
 
 ## Notes