diff --git a/sage_validation/file_validator/forms.py b/sage_validation/file_validator/forms.py
index 4a6895d777d502777b071895ea2ac01c068a006e..990b83ce708a694f1099d3688b0caf7abc67a771 100644
--- a/sage_validation/file_validator/forms.py
+++ b/sage_validation/file_validator/forms.py
@@ -76,7 +76,7 @@ class CSVUploadForm(forms.Form):
         self._validate_file_type(file)
 
         # Step 2: Parse file and validate headers
-        raw_data = file.read().decode("utf-8")
+        raw_data = file.read().decode("utf-8-sig")
         normalized_data = raw_data.replace("\r\n", "\n").replace("\r", "\n")
         csv_file = normalized_data.splitlines()
         reader = csv.DictReader(csv_file, delimiter=",")
diff --git a/sage_validation/file_validator/views.py b/sage_validation/file_validator/views.py
index aeaa50be6a9e9ada7d0bd7ed612cfd6c33a0d0cf..b58807d9b45587e4738eafae91e82ae6ab607dfb 100644
--- a/sage_validation/file_validator/views.py
+++ b/sage_validation/file_validator/views.py
@@ -53,7 +53,7 @@ class CSVUploadAPIView(APIView):
 
         csv_file = form.cleaned_data["file"]
         csv_file.seek(0)
-        decoded_file = csv_file.read().decode("utf-8").strip()
+        decoded_file = csv_file.read().decode("utf-8-sig").strip()
 
         if not decoded_file:
             return Response({"status": "error", "message": "Uploaded file is empty."},