diff --git a/geomagio/algorithm/SpikesAlgorithm.py b/geomagio/algorithm/SpikesAlgorithm.py
index 5a4cfa19ae606ebb277569bbf445d879a7f98d0f..185b50239b998bc563f8494557561e76241dbb8e 100644
--- a/geomagio/algorithm/SpikesAlgorithm.py
+++ b/geomagio/algorithm/SpikesAlgorithm.py
@@ -99,7 +99,13 @@ class SpikesAlgorithm(MetadataAlgorithm):
 
         timestamps = trace.times("UTCDateTime")
         signal = trace.data
-        # TODO: throw error if singal len < window!
+
+        # throw error if singal len < window
+        if len(signal) < self.window_size:
+            raise ValueError(
+                f"Signal length ({len(signal)}) must be at least as large as the window size ({self.window_size})."
+            )
+
         spike_timestamps = self._despike(signal, timestamps)
 
         # check existing metadata
@@ -119,7 +125,7 @@ class SpikesAlgorithm(MetadataAlgorithm):
 
         return None
 
-    def check_existing_spike_metadata(self, trace: Trace) -> str | None:
+    def check_existing_spike_metadata(self, trace: Trace) -> Optional[str] | None:
         """
         Find existing spike metadata for a specified period.