diff --git a/notifications_routing/authorization_service.py b/notifications_routing/authorization_service.py
index f6f4bde864f55f4b12331b9c9bc28c58461f78fa..465c4a6bca1891659f998ea5268cda9e5a8a9899 100644
--- a/notifications_routing/authorization_service.py
+++ b/notifications_routing/authorization_service.py
@@ -67,7 +67,7 @@ def _prepare_user(member: Dict[str, str]) -> Optional[Dict[str, str]]:
         return {DataSource.USERNAME: member["unconfirmedEmail"], DataSource.EMAIL: member["unconfirmedEmail"]}
 
     # always respect "activeUser"
-    # activeUser field is omitted in Application and Service types
+    # activeUser field is omitted in Application and Service types and Person type from external sources
     if "activeUser" in member and member["activeUser"] is False:
         if member["externalEmail"]:
             return {DataSource.USERNAME: member["upn"], DataSource.EMAIL: member["externalEmail"]}
diff --git a/notifications_routing/config.py b/notifications_routing/config.py
index 086da2de12370a82fcf8f6f8b1ad038358f9a26c..e0860288144cd05677e0c34a6ec44a813d045bd7 100644
--- a/notifications_routing/config.py
+++ b/notifications_routing/config.py
@@ -34,7 +34,7 @@ class Config:
     CERN_GROUP_QUERY = os.getenv(
         "CERN_GROUP_QUERY",
         "memberidentities/precomputed?field=upn&field=primaryAccountEmail"
-        "&field=unconfirmed&field=unconfirmedEmail&field=type&field=externalEmail&field=activeUser",
+        "&field=unconfirmed&field=unconfirmedEmail&field=type&field=externalEmail&field=activeUser&field=source",
     )
 
     # DB
diff --git a/tests/unit/test_authorization_service.py b/tests/unit/test_authorization_service.py
index ab3e245e14ba239f3e78932f67c0ee3fb8d35606..58c856135a17e6c0e4eba4cd8fc307085b4e1c4c 100644
--- a/tests/unit/test_authorization_service.py
+++ b/tests/unit/test_authorization_service.py
@@ -25,7 +25,7 @@ class MockResponse:
 
 
 @pytest.fixture(scope="function")
-def auth_user_1():
+def auth_user():
     """Auth user dict."""
     return {
         "primaryAccountEmail": "user1@cern.ch",
@@ -35,35 +35,40 @@ def auth_user_1():
         "externalEmail": None,
         "type": "Person",
         "activeUser": True,
+        "source": "cern",
     }
 
 
 @pytest.fixture(scope="function")
-def auth_user_2():
+def auth_user_external():
     """Auth user dict."""
     return {
-        "primaryAccountEmail": "user2@cern.ch",
-        "upn": "user2",
+        "primaryAccountEmail": "external@usc.es",
+        "upn": "external@1234567890",
         "unconfirmed": False,
         "unconfirmedEmail": None,
         "externalEmail": None,
         "type": "Person",
-        "activeUser": True,
+        # external user don't have activeUser
+        # "activeUser": None
+        "source": "edugain",
     }
 
 
 @pytest.fixture(scope="function")
-def auth_user_data_inconsistent():
+def auth_user_external_unconfirmed():
     """Auth user dict."""
     return {
-        "primaryAccountEmail": "inconsistent@cern.ch",
-        "upn": "inconsistent",
-        "unconfirmed": False,
-        "unconfirmedEmail": None,
-        "type": "Person",
         "externalEmail": None,
-        # some times data is not consistent and activeUser is not filled
-        # "activeUser": True
+        "primaryAccountEmail": None,
+        "type": "Person",
+        "upn": None,
+        # unconfirmed, external users have source null
+        "source": None,
+        "unconfirmed": True,
+        "unconfirmedEmail": "external-unconfirmed@hotmail.fr",
+        # external user don't have activeUser
+        # "activeUser": None
     }
 
 
@@ -78,19 +83,7 @@ def auth_user_data_inconsistent_error():
         "type": "Person",
         "externalEmail": None,
         "activeUser": True,
-    }
-
-
-@pytest.fixture(scope="function")
-def auth_group_user_unconfirmed():
-    """Auth user dict."""
-    return {
-        "externalEmail": None,
-        "primaryAccountEmail": None,
-        "type": "Person",
-        "upn": None,
-        "unconfirmed": True,
-        "unconfirmedEmail": "unconfirmed@hotmail.fr",
+        "source": None,
     }
 
 
@@ -104,6 +97,9 @@ def auth_group_user_application():
         "unconfirmedEmail": None,
         "type": "Application",
         "externalEmail": None,
+        "source": None
+        # Application type don't have activeUser field
+        # "activeUser": None
     }
 
 
@@ -117,6 +113,9 @@ def auth_group_user_service():
         "unconfirmedEmail": None,
         "type": "Service",
         "externalEmail": None,
+        "source": "cern",
+        # Service type don't have activeUser field
+        # "activeUser": None
     }
 
 
@@ -131,6 +130,7 @@ def auth_group_user_inactive_1():
         "unconfirmed": False,
         "unconfirmedEmail": None,
         "activeUser": False,
+        "source": "cern",
     }
 
 
@@ -145,6 +145,7 @@ def auth_group_user_inactive_2():
         "unconfirmed": False,
         "unconfirmedEmail": None,
         "activeUser": False,
+        "source": "cern",
     }
 
 
@@ -158,6 +159,9 @@ def auth_group_user_secondary():
         "upn": "secondary",
         "unconfirmed": False,
         "unconfirmedEmail": None,
+        "source": "cern",
+        # secondary type don't have activeUser field
+        # "activeUser": None
     }
 
 
@@ -169,15 +173,14 @@ def test_process_users(
     mock_get,
     mock_get_token,
     appctx,
-    auth_user_1,
-    auth_user_2,
-    auth_user_data_inconsistent,
+    auth_user,
+    auth_user_external,
+    auth_user_external_unconfirmed,
     auth_group_user_inactive_1,
     auth_group_user_inactive_2,
     auth_group_user_service,
     auth_group_user_application,
     auth_group_user_secondary,
-    auth_group_user_unconfirmed,
     auth_user_data_inconsistent_error,
 ):
     """Test process users for normal."""
@@ -187,31 +190,29 @@ def test_process_users(
             {
                 "pagination": {"next": "/next/url/page"},
                 "data": [
-                    auth_user_1,
-                    auth_user_2,
-                    auth_user_data_inconsistent,
+                    auth_user,
+                    auth_user_external,
+                    auth_user_external_unconfirmed,
                     auth_group_user_inactive_1,
                     auth_group_user_inactive_2,  # should be ignored, email is not extractable
                     auth_group_user_service,
                     auth_group_user_application,  # should be ignore
-                    auth_group_user_secondary,
-                    auth_user_data_inconsistent_error,
+                    auth_user_data_inconsistent_error,  # log error
                 ],
             },
             200,
         ),
-        MockResponse({"pagination": {"next": None}, "data": [auth_group_user_unconfirmed]}, 200),
+        MockResponse({"pagination": {"next": None}, "data": [auth_group_user_secondary]}, 200),
     ]
 
     result = get_group_users_api("group_id")
     assert result == [
         {"username": "user1", "email": "user1@cern.ch"},
-        {"username": "user2", "email": "user2@cern.ch"},
-        {"username": "inconsistent", "email": "inconsistent@cern.ch"},
+        {"username": "external@1234567890", "email": "external@usc.es"},
+        {"username": "external-unconfirmed@hotmail.fr", "email": "external-unconfirmed@hotmail.fr"},
         {"username": "inactive1", "email": "external@aol.com"},
         {"username": "service", "email": "service-email@cern.ch"},
         {"username": "secondary", "email": "secondary@cern.ch"},
-        {"username": "unconfirmed@hotmail.fr", "email": "unconfirmed@hotmail.fr"},
     ]
 
     mock_logging_error.assert_called_once()
@@ -219,7 +220,7 @@ def test_process_users(
     expected_first_call_url = (
         "https://authorization-service-api.web.cern.ch"
         "/api/v1.0/Group/group_id/memberidentities/precomputed?field=upn&field=primaryAccountEmail"
-        "&field=unconfirmed&field=unconfirmedEmail&field=type&field=externalEmail&field=activeUser"
+        "&field=unconfirmed&field=unconfirmedEmail&field=type&field=externalEmail&field=activeUser&field=source"
     )
     expected_headers = {"Authorization": "Bearer jwt"}
     mock_get.assert_has_calls(