Hi SailPoint Community,
I am facing an issue with Identity Search range queries on a custom identity attribute called lastLoginValue.
Background
I have created an identity attribute named lastLoginValue using a transform that determines the most recent login across multiple sources (Entra ID, Active Directory, and Okta). The transform outputs a single date value in ISO8601 format. The logic compares login timestamps from the three sources and returns the most recent login date.
Example output values stored in the identity attribute:
2026-08-14T09:15:30.000Z
2026-08-12T18:42:11.000Z
Issue
Identity Search range queries work correctly for built-in date attributes such as:
attributes.endDate:[now-500d TO now]
and
attributes.created:[now-500d TO now]
These return the expected results.
However, the same type of query does not work for lastLoginValue.
Examples attempted:
attributes.lastLoginValue:[now-500d TO now]
attributes.lastLoginValue:[now-60d TO now]
attributes.lastLoginValue:now
I even have identities whose lastLoginValue is populated with the current timestamp, but:
attributes.lastLoginValue:now
returns no results.
In fact, none of the range queries seem to return any identities for this attribute.
Validation Performed
- Confirmed that the identity attribute is populated.
- Confirmed that values are in ISO8601 format.
- Confirmed that other date attributes (
created,endDate) support range searches in the same tenant. - Confirmed that the transform successfully evaluates and populates the identity attribute.
Questions
- Are custom identity attributes populated via transforms indexed differently from standard date attributes?
- Does a custom identity attribute need to be configured as a specific data type (Date vs String) to support Identity Search range queries?
- Is there any limitation on using relative date operators such as
now,now-60d, etc., against custom identity attributes? - Has anyone successfully implemented range searches against a custom ISO8601 identity attribute?
The transform used for the attribute is given below -
{ "name": "LastLoginValue", "type": "static", "attributes": { "MascoLastLogon": { "type": "firstValid", "attributes": { "values": [ { "attributes": { "attributeName": "signInActivity.lastSuccessfulSignInDateTime", "sourceName": "Test Workday" }, "type": "accountAttribute" }, { "type": "dateMath", "attributes": { "expression": "now", "roundUp": false } } ], "ignoreErrors": false } }, "ADLastLogon": { "type": "firstValid", "attributes": { "values": [ { "type": "dateFormat", "attributes": { "input": { "attributes": { "attributeName": "lastLogonTimeStamp", "sourceName": "Test Workday" }, "type": "accountAttribute" }, "inputFormat": "EPOCH_TIME_WIN32", "outputFormat": "ISO8601" } }, { "type": "dateMath", "attributes": { "expression": "now", "roundUp": false } } ], "ignoreErrors": false } }, "OktaLastLogon": { "type": "firstValid", "attributes": { "values": [ { "attributes": { "attributeName": "lastLogin", "sourceName": "Test Workday" }, "type": "accountAttribute" }, { "type": "dateMath", "attributes": { "expression": "now", "roundUp": false } } ], "ignoreErrors": false } }, "NearestOfAdAndOkta": { "type": "dateCompare", "attributes": { "firstDate": { "type": "firstValid", "attributes": { "values": [ { "type": "dateFormat", "attributes": { "input": { "attributes": { "attributeName": "lastLogonTimeStamp", "sourceName": "Test Workday" }, "type": "accountAttribute" }, "inputFormat": "EPOCH_TIME_WIN32", "outputFormat": "ISO8601" } }, { "type": "dateMath", "attributes": { "expression": "now", "roundUp": false } } ], "ignoreErrors": false } }, "secondDate": { "type": "firstValid", "attributes": { "values": [ { "attributes": { "attributeName": "lastLogin", "sourceName": "Test Workday" }, "type": "accountAttribute" }, { "type": "dateMath", "attributes": { "expression": "now", "roundUp": false } } ], "ignoreErrors": false } }, "operator": "gt", "positiveCondition": "AD", "negativeCondition": "Okta" } }, "NearestOfEntraAndOkta": { "type": "dateCompare", "attributes": { "firstDate": { "type": "firstValid", "attributes": { "values": [ { "attributes": { "attributeName": "signInActivity.lastSignInDateTime", "sourceName": "Test Workday" }, "type": "accountAttribute" }, { "type": "dateMath", "attributes": { "expression": "now", "roundUp": false } } ], "ignoreErrors": false } }, "secondDate": { "type": "firstValid", "attributes": { "values": [ { "attributes": { "attributeName": "lastLogin", "sourceName": "Test Workday" }, "type": "accountAttribute" }, { "type": "dateMath", "attributes": { "expression": "now", "roundUp": false } } ], "ignoreErrors": false } }, "operator": "gt", "positiveCondition": "Entra", "negativeCondition": "Okta" } }, "NearestOfEntraAndAd": { "type": "dateCompare", "attributes": { "firstDate": { "type": "firstValid", "attributes": { "values": [ { "attributes": { "attributeName": "signInActivity.lastSignInDateTime", "sourceName": "Test Workday" }, "type": "accountAttribute" }, { "type": "dateMath", "attributes": { "expression": "now", "roundUp": false } } ], "ignoreErrors": false } }, "secondDate": { "type": "firstValid", "attributes": { "values": [ { "type": "dateFormat", "attributes": { "input": { "attributes": { "attributeName": "lastLogonTimeStamp", "sourceName": "Test Workday" }, "type": "accountAttribute" }, "inputFormat": "EPOCH_TIME_WIN32", "outputFormat": "ISO8601" } }, { "type": "dateMath", "attributes": { "expression": "now", "roundUp": false } } ], "ignoreErrors": false } }, "operator": "gt", "positiveCondition": "Entra", "negativeCondition": "AD" } }, "value": "#if($NearestOfAdAndOkta == 'Okta' && $NearestOfEntraAndOkta == 'Okta')$OktaLastLogon#elseif($NearestOfAdAndOkta == 'AD' && $NearestOfEntraAndAd == 'AD')$ADLastLogon#else$MascoLastLogon#end" }, "internal": false }


