diff --git a/nomad/app/v1/routers/uploads.py b/nomad/app/v1/routers/uploads.py
index 8fede69838f3c6cd69e6ed1c5a1de0a7eec3dc8b..80fc6a7ea1bb10649a46707e77b3069eba02a341 100644
--- a/nomad/app/v1/routers/uploads.py
+++ b/nomad/app/v1/routers/uploads.py
@@ -227,6 +227,12 @@ class UploadProcDataQuery(BaseModel):
             If True: only include published uploads.
             If False: only include unpublished uploads.
             If unset: include everything.'''))
+    process_status: Optional[str] = Field(
+        description=strip('Search by the process status.'))
+
+    @validator('process_status')
+    def upper_process_status(cls, process_status: str):  # pylint: disable=no-self-argument
+        return process_status.upper() if process_status else None
 
 
 upload_proc_data_query_parameters = parameter_dependency_from_model(
diff --git a/nomad/graph/graph_reader.py b/nomad/graph/graph_reader.py
index ad10df64ba73a47244e3e890e7de7dc0060f2839..244e0387f5a235b6391f0d976e922839ecb50bdd 100644
--- a/nomad/graph/graph_reader.py
+++ b/nomad/graph/graph_reader.py
@@ -924,7 +924,9 @@ class MongoReader(GeneralReader):
             mongo_query &= Q(upload_id__in=config.query.upload_id)
         if config.query.upload_name:
             mongo_query &= Q(upload_name__in=config.query.upload_name)
-        if config.query.is_processing is True:
+        if config.query.process_status is not None:
+            mongo_query &= Q(process_status=config.query.process_status)
+        elif config.query.is_processing is True:
             mongo_query &= Q(process_status__in=ProcessStatus.STATUSES_PROCESSING)
         elif config.query.is_processing is False:
             mongo_query &= Q(process_status__in=ProcessStatus.STATUSES_NOT_PROCESSING)