diff --git a/algo/detectors/sts/StsHitfinder.h b/algo/detectors/sts/StsHitfinder.h
index f41ce3354cfdff4d0dd86d865e9f560759441f22..e1f80a47e7f6855e1dd24c7fa26c200c064a32b5 100644
--- a/algo/detectors/sts/StsHitfinder.h
+++ b/algo/detectors/sts/StsHitfinder.h
@@ -112,8 +112,11 @@ namespace cbm::algo::sts
   };
 
   struct HitfinderMonitor {
-    u32 fNumClusterBucketOverflow = 0;
-    u32 fNumHitBucketOverflow     = 0;
+    i32 fNumClusterBucketOverflow = 0;
+    i32 fNumHitBucketOverflow     = 0;
+    u64 fNumClusterTotal          = 0;
+    u64 fNumHitsTotal             = 0;
+    f64 fTimeTotal                = 0.;
 
     bool HasErrors() const { return fNumClusterBucketOverflow > 0 || fNumHitBucketOverflow > 0; }
   };
diff --git a/algo/detectors/sts/StsHitfinderChain.cxx b/algo/detectors/sts/StsHitfinderChain.cxx
index e1bde280a4ebff83a0e72c7018d6833f5c6c72a6..5fe1579989238a0aacd0c04d2bc26c8aa4c95a26 100644
--- a/algo/detectors/sts/StsHitfinderChain.cxx
+++ b/algo/detectors/sts/StsHitfinderChain.cxx
@@ -23,11 +23,11 @@ void sts::HitfinderChain::Finalize()
   xpu::set<TheHitfinder>(fHitfinder);
 }
 
-void sts::HitfinderChain::operator()(gsl::span<const CbmStsDigi> digis)
+sts::HitfinderMonitor sts::HitfinderChain::operator()(gsl::span<const CbmStsDigi> digis)
 {
   EnsureParameters();
 
-  xpu::scoped_timer t_("STS Hitfinder");
+  xpu::push_timer("STS Hitfinder");
 
   int nModules       = fPars->modules.size();
   int nModuleSides   = nModules * 2;
@@ -197,6 +197,13 @@ void sts::HitfinderChain::operator()(gsl::span<const CbmStsDigi> digis)
   xpu::k_add_bytes<FindHits>(nClustersTotal * sizeof(sts::Cluster));
 
   L_(info) << "Timeslice contains " << nHitsTotal << " STS hits and " << nClustersTotal << " STS clusters";
+
+  auto timings = xpu::pop_timer();
+
+  monitor[0].fTimeTotal       = timings.wall();
+  monitor[0].fNumClusterTotal = nClustersTotal;
+  monitor[0].fNumHitsTotal    = nHitsTotal;
+  return monitor[0];
 }
 
 void sts::HitfinderChain::EnsureParameters()
diff --git a/algo/detectors/sts/StsHitfinderChain.h b/algo/detectors/sts/StsHitfinderChain.h
index 7bd7e0e6d088279b44c5380715aa3e1eb9413bb0..c811a19ab9c91a2c0981e8932b99fb989374465d 100644
--- a/algo/detectors/sts/StsHitfinderChain.h
+++ b/algo/detectors/sts/StsHitfinderChain.h
@@ -48,7 +48,7 @@ namespace cbm::algo::sts
      */
     void Finalize();
 
-    void operator()(gsl::span<const CbmStsDigi>);
+    sts::HitfinderMonitor operator()(gsl::span<const CbmStsDigi>);
 
   private:
     // Shorthands to map module-address onto digis in that module
diff --git a/algo/global/Reco.cxx b/algo/global/Reco.cxx
index 3dad3a6a01bebf3e7fd94c4a8e750c97653bca1c..72d87493c5d952dac4e04270053692e430806dbc 100644
--- a/algo/global/Reco.cxx
+++ b/algo/global/Reco.cxx
@@ -118,13 +118,14 @@ RecoResults Reco::Run(const fles::Timeslice& ts)
   std::vector<CbmDigiEvent> events;
   if (Opts().HasStep(Step::DigiTrigger)) events = fEventBuild.Run(digiTs);
 
-
+  sts::HitfinderMonitor stsHitfinderMonitor;
   if (Opts().HasStep(Step::LocalReco) && Opts().HasDetector(fles::Subsystem::STS))
-    fStsHitFinder(unpackResult.first.fData.fSts.fDigis);
+    stsHitfinderMonitor = fStsHitFinder(unpackResult.first.fData.fSts.fDigis);
 
   xpu::timings ts_times = xpu::pop_timer();
 
   QueueUnpackerMetrics(ts, unpackMonitor, unpackResult.first);
+  QueueStsRecoMetrics(stsHitfinderMonitor);
 
   PrintTimings(ts_times);
 
@@ -214,3 +215,17 @@ void Reco::QueueUnpackerMetrics(const fles::Timeslice& ts, const UnpackMonitorDa
                              {"unpackNumErrInvalidSysVer", monitor.fNumErrInvalidSysVer},
                            });
 }
+
+void Reco::QueueStsRecoMetrics(const sts::HitfinderMonitor& monitor)
+{
+  if (!HasMonitor()) return;
+
+  GetMonitor().QueueMetric("cbmreco", {{"hostname", fles::system::current_hostname()}},
+                           {
+                             {"stsRecoTimeTotal", monitor.fTimeTotal},
+                             {"stsRecoNumClusters", monitor.fNumClusterTotal},
+                             {"stsRecoNumHits", monitor.fNumHitsTotal},
+                             {"stsRecoNumClusterBucketOverflow", monitor.fNumClusterBucketOverflow},
+                             {"stsRecoNumHitBucketOverflow", monitor.fNumHitBucketOverflow},
+                           });
+}
diff --git a/algo/global/Reco.h b/algo/global/Reco.h
index 8cd099c806e510f5f321ab1d3a2217f7bd7991e8..ce048fe559b9e55ba4ff6097134fdfb56cec2783 100644
--- a/algo/global/Reco.h
+++ b/algo/global/Reco.h
@@ -50,6 +50,7 @@ namespace cbm::algo
     void Validate(const Options& opts);
 
     void QueueUnpackerMetrics(const fles::Timeslice&, const UnpackMonitorData&, const CbmDigiTimeslice&);
+    void QueueStsRecoMetrics(const sts::HitfinderMonitor&);
   };
 }  // namespace cbm::algo