diff --git a/changelogs/fragments/8224-keycloak_realm-add-normalizations.yaml b/changelogs/fragments/8224-keycloak_realm-add-normalizations.yaml
new file mode 100644
index 0000000000..0574141f61
--- /dev/null
+++ b/changelogs/fragments/8224-keycloak_realm-add-normalizations.yaml
@@ -0,0 +1,2 @@
+bugfixes:
+  - keycloak_realm - add normalizations for ``enabledEventTypes`` and ``supportedLocales`` (https://github.com/ansible-collections/community.general/pull/8224).
diff --git a/plugins/modules/keycloak_realm.py b/plugins/modules/keycloak_realm.py
index 9f2e72b525..6128c9e4c7 100644
--- a/plugins/modules/keycloak_realm.py
+++ b/plugins/modules/keycloak_realm.py
@@ -582,6 +582,27 @@ from ansible_collections.community.general.plugins.module_utils.identity.keycloa
 from ansible.module_utils.basic import AnsibleModule
 
 
+def normalise_cr(realmrep):
+    """ Re-sorts any properties where the order is important so that diff's is minimised and the change detection is more effective.
+
+    :param realmrep: the realmrep dict to be sanitized
+    :return: normalised realmrep dict
+    """
+    # Avoid the dict passed in to be modified
+    realmrep = realmrep.copy()
+
+    if 'enabledEventTypes' in realmrep:
+        realmrep['enabledEventTypes'] = list(sorted(realmrep['enabledEventTypes']))
+
+    if 'otpSupportedApplications' in realmrep:
+        realmrep['otpSupportedApplications'] = list(sorted(realmrep['otpSupportedApplications']))
+
+    if 'supportedLocales' in realmrep:
+        realmrep['supportedLocales'] = list(sorted(realmrep['supportedLocales']))
+
+    return realmrep
+
+
 def sanitize_cr(realmrep):
     """ Removes probably sensitive details from a realm representation.
 
@@ -595,7 +616,7 @@ def sanitize_cr(realmrep):
         if 'saml.signing.private.key' in result['attributes']:
             result['attributes'] = result['attributes'].copy()
             result['attributes']['saml.signing.private.key'] = '********'
-    return result
+    return normalise_cr(result)
 
 
 def main():
@@ -777,9 +798,11 @@ def main():
             result['changed'] = True
             if module.check_mode:
                 # We can only compare the current realm with the proposed updates we have
+                before_norm = normalise_cr(before_realm)
+                desired_norm = normalise_cr(desired_realm)
                 if module._diff:
-                    result['diff'] = dict(before=before_realm_sanitized,
-                                          after=sanitize_cr(desired_realm))
+                    result['diff'] = dict(before=sanitize_cr(before_norm),
+                                          after=sanitize_cr(desired_norm))
                 result['changed'] = (before_realm != desired_realm)
 
                 module.exit_json(**result)