diff --git a/nomad/datamodel/__init__.py b/nomad/datamodel/__init__.py
index f6cf880df3304335b25eb7ef9eba3aa732062b6c..3434ea2baf1f0ffc0687a74972f5a7a1b0117273 100644
--- a/nomad/datamodel/__init__.py
+++ b/nomad/datamodel/__init__.py
@@ -92,7 +92,7 @@ from .ems import EMSMetadata
 from .qcms import QCMSMetadata
 from .datamodel import (
     Dataset, User, Author, EditableUserMetadata, UserProvidableMetadata, OasisMetadata,
-    MongoMetadata, EntryMetadata, EntryArchive)
+    MongoMetadata, EntryMetadata, EntryArchive, user_reference, author_reference)
 from .optimade import OptimadeEntry, Species
 from .metainfo import m_env
 
diff --git a/nomad/search.py b/nomad/search.py
index adc8e9280f7b712954ee3b8b2741855f61993e08..91c4fb48472c8ed490ecbf5139fb8125a478efb3 100644
--- a/nomad/search.py
+++ b/nomad/search.py
@@ -43,6 +43,11 @@ _entry_metadata_defaults = {
     if quantity.default not in [None, [], False, 0]
 }
 
+_all_author_quantities = [
+    quantity.name
+    for quantity in datamodel.EntryMetadata.m_def.all_quantities.values()
+    if quantity.type in [datamodel.user_reference, datamodel.author_reference]]
+
 
 def _es_to_entry_dict(hit, required: MetadataRequired) -> Dict[str, Any]:
     '''
@@ -61,6 +66,16 @@ def _es_to_entry_dict(hit, required: MetadataRequired) -> Dict[str, Any]:
 
             entry_dict[key] = value
 
+    for author_quantity in _all_author_quantities:
+        authors = entry_dict.get(author_quantity)
+        if authors is None:
+            continue
+        if isinstance(authors, dict):
+            authors = [authors]
+        for author in authors:
+            if 'email' in author:
+                del(author['email'])
+
     return entry_dict
 
 
diff --git a/tests/app/v1/routers/test_entries.py b/tests/app/v1/routers/test_entries.py
index 13a8ab854911bfe8990ae9f8fd9ba89742b47733..12b1f09cfcfec93c14552af8f1980ca94fd5e97a 100644
--- a/tests/app/v1/routers/test_entries.py
+++ b/tests/app/v1/routers/test_entries.py
@@ -227,6 +227,9 @@ def assert_entry_metadata(response_json):
         if 'required' not in response_json:
             assert 'license' in entry
 
+        if 'uploader' in entry:
+            assert 'email' not in entry['uploader']
+
 
 def assert_entries_metadata_response(response, status_code=None):
     response_json = assert_entries_raw_metadata_response(response, status_code=status_code)