Overview
Who this document is for:
- CMDB administrators implementing automation rules
- IT operations teams maintaining data quality
- Service management professionals building workflows
- Compliance officers establishing audit automation
Prerequisites:
- JSM Assets Premium or Enterprise license
- Global automation rule permissions
- Familiarity with AQL (Assets Query Language) syntax
- Understanding of Core Schema v1.1 object types and relationships
Understanding JSM Assets Automation
Automation Architecture
JSM Assets automation operates through Global automation rules that can trigger based on object changes or scheduled intervals. Key components include:
| Component | Description | Use Case |
|---|---|---|
| Triggers | Events that initiate rule execution | Object created/updated, scheduled time |
| Conditions | Criteria that must be met for continuation | AQL filters, attribute comparisons |
| Actions | Operations performed when conditions pass | Edit object, send email, create issue |
| Branches | Parallel execution paths | For AQL loops, conditional branching |
Key Limitations to Understand
Before implementing automations, understand these platform constraints:
- Attribute-based triggering: You cannot directly trigger automations based on specific attribute changes through native AQL conditions. The Object trigger fires on any object update, and you must use workarounds (REST API calls to object history) to determine which attribute changed.
- Lookup Objects limit: The Lookup Objects action returns a maximum of 100 objects. For larger datasets, implement pagination strategies or multiple rules.
- For AQL branch limit: Only the first 50 objects matching an AQL query are processed in a branch.
- Global rules only: For AQL branches and object triggers are only available in Global automations, not project-level automations.
Data Quality Automations
Data quality automations ensure your CMDB remains accurate, complete, and trustworthy. These rules detect anomalies, enforce standards, and flag records requiring attention.
DQ-01: Orphan Person Detection
Purpose: Identify Person records without essential organizational context (no department or manager), which may indicate incomplete onboarding data or stale records.
AQL Query
objectType = "Person" AND Status = "Active" AND Department is EMPTY AND Manager is EMPTY
Actions
- Lookup Objects using the AQL query
- Advanced Compare:
{{lookupObjects.count}} greater than 0 - Send Email to CMDB Administrator:
- Subject: "Data Quality Alert: {{lookupObjects.size}} Orphan Person Records Detected"
- Body: List all orphan records with Name, Email, and Start Date
Benefits
- Catches incomplete HR imports within one week
- Ensures all active personnel have proper organizational assignment
- Supports accurate reporting on headcount by department
DQ-02: Team Without Lead Alert
Purpose: Flag teams missing designated leadership, which impacts incident escalation and ownership accountability.
AQL Query
objectType = "Team" AND Status = "Active" AND "Team Lead" is EMPTY
Actions
- Lookup Objects using AQL
- If count > 0, send email to Service Desk Manager
- Create Jira issue in CMDB Hygiene project for follow-up
Benefits
- Ensures every active team has clear ownership
- Prevents escalation failures during incidents
- Maintains accurate service catalog data
DQ-03: Application Missing Owners
Purpose: Applications without Business Owner or Technical Owner present risk for incident response and lifecycle management.
AQL Query
objectType = "Application" AND Status = "Active" AND ("Business Owner" is EMPTY OR "Technical Owner" is EMPTY)
Actions
- Lookup Objects
- Branch by Criticality attribute
- For Critical applications: Create high-priority Jira issue
- For non-Critical: Add to weekly data quality report
Benefits
- Ensures accountability for all production applications
- Supports compliance requirements for system ownership
- Enables proper change management approvals
DQ-04: Vendor Contact Information Validation
Purpose: Detect vendors missing critical contact information that would hinder support escalation.
AQL Query
objectType = "Vendor" AND Status = "Active" AND ("Support Email" is EMPTY AND "Support Phone" is EMPTY AND "Support Portal" is EMPTY)
Actions
- Lookup matching vendors
- Send report to Procurement team
- For vendors with Risk Level = "Critical", create urgent follow-up task
DQ-05: Location Hierarchy Validation
Purpose: Identify locations missing parent relationships that break hierarchical reporting and asset roll-ups.
AQL Query
objectType = "Location" AND Status = "Active" AND Type != "Headquarters" AND "Parent Location" is EMPTY
Actions
- Lookup orphan locations
- Generate report for Facilities team
- Flag locations in EMEA and APAC regions for regional facilities managers
DQ-06: Cost Center Without Owner
Purpose: Cost centers without designated owners cannot approve expenditures or respond to budget inquiries.
AQL Query
objectType = "Cost Center" AND Status = "Active" AND Owner is EMPTY
Actions
- Lookup unassigned cost centers
- Send alert to Finance Operations
- If cost center is linked to > 5 departments, escalate to CFO office
DQ-07: Department Hierarchy Gaps
Purpose: Detect departments not connected to organizational hierarchy (except root-level departments).
AQL Query
objectType = "Department" AND Status = "Active" AND "Parent Department" is EMPTY AND Name != "Organization" AND Name != "Executive"
Actions
- Lookup disconnected departments
- Cross-reference with HR system of record
- Send reconciliation report to HR Operations
Lifecycle Automations
Lifecycle automations manage objects through their natural progression from creation to retirement, ensuring smooth transitions and proper handoffs.
LC-01: New Person Onboarding Notification
Purpose: Alert relevant teams when new personnel records are created, triggering downstream onboarding workflows.
Condition
objectType = "Person" AND Status = "Active"
Actions
- Send welcome email using object attributes
- Create IT provisioning ticket with person details
- Notify Security team for access badge creation
Email Template Example
Hi {{object.Name}},
Welcome to the organization! Your primary contact for your first day
will be {{object.Manager.Name}}. You have been assigned to the
{{object.Department.Name}} department at {{object.Location.Name}}.
LC-02: Person Status Change - Termination Processing
Purpose: When a person's status changes to "Terminated", trigger offboarding workflows.
Condition
Use Send web request to object history API to verify Status attribute changed to "Terminated"
Actions
- Create IT deprovisioning ticket (High priority)
- Notify Facilities for badge deactivation
- Alert application owners where person is listed as Business Owner or Technical Owner
- Update related team lead assignments if person led any teams
/rest/assets/1.0/object/{objectId}/history, (3) Parse response to check if most recent change affected Status attribute, (4) Continue only if Status changed to "Terminated"
LC-03: Application Deprecation Workflow
Purpose: When an application status changes to "Deprecated", notify consuming teams and initiate migration planning.
Actions
- Lookup all teams in "Used By Teams" relationship
- For each team, send notification about deprecation
- Create migration planning ticket assigned to Owning Team
- Update application's description with deprecation notice date
LC-04: Team Deactivation Cascade
Purpose: When a team is deactivated, verify all ownership relationships are reassigned.
AQL Query
objectType = "Application" AND ("Owning Team" = "{{object.Key}}" OR "Used By Teams" = "{{object.Key}}")
Actions
- Query applications where Owning Team or Used By Teams includes this team
- Send report to Service Management team listing affected applications
- Create reassignment task for each Critical or High criticality application
LC-05: Location Closure Processing
Purpose: When a location status changes to "Closed", trigger asset relocation and personnel reassignment workflows.
AQL Query
objectType = "Person" AND Status = "Active" AND Location = "{{object.Key}}"
Actions
- Query all persons with Location = closed location
- Send report to HR for personnel location reassignment
- Notify Facilities for physical asset relocation
- Create audit record of closure
LC-06: Cost Center Freeze Notification
Purpose: When a cost center status changes to "Frozen", notify all linked departments and prevent new allocations.
AQL Query
objectType = "Department" AND "Cost Center" = "{{object.Key}}"
Actions
- Lookup departments funded by this cost center
- Notify department heads of budget freeze
- Alert Finance Operations for budget reallocation planning
- Create Jira issue for budget committee review
Notification Automations
Notification automations keep stakeholders informed through timely alerts, reminders, and escalations.
NT-01: Expiring Vendor Review Reminder
Purpose: Alert relationship owners when vendor review dates are approaching to ensure timely vendor assessments.
AQL Query
objectType = "Vendor" AND Status = "Active" AND "Last Review Date" < now(-90d)
Actions
- Lookup vendors needing review
- Group by Relationship Owner
- Send personalized reminder to each owner
NT-02: Critical Application Status Change Alert
Purpose: Immediately notify stakeholders when critical application status changes.
Condition
Criticality = "Critical" AND Status attribute changed
Actions
- Send immediate notification to Business Owner, Technical Owner, Owning Team email, and Service Desk management
- If Status changed to "Deprecated" or "Retired", escalate to IT Leadership
NT-03: New Team Lead Assignment Notification
Purpose: When a team lead is assigned or changed, notify relevant parties.
Actions
- Send welcome message to new Team Lead with team details
- Notify department head of leadership change
- Update service desk escalation paths
NT-04: Manager Hierarchy Change Alert
Purpose: When a person's manager changes, notify HR and relevant parties for organization chart updates.
Actions
- Notify HR Operations of reporting change
- Send confirmation to new manager
- If person leads any teams, notify those teams of escalation path change
NT-05: High-Risk Vendor Status Alert
Purpose: Immediately notify stakeholders when vendor risk level is elevated.
Condition
Risk Level changed to "High" or "Critical"
Actions
- Send immediate alert to Relationship Owner, Procurement Director, and Information Security team
- Create risk assessment task with 48-hour SLA
- Tag vendor record for enhanced monitoring
NT-06: Department Head Vacancy Alert
Purpose: Alert HR when a department loses its designated head.
Condition
Head attribute cleared AND Status = "Active"
Actions
- Send alert to HR Leadership
- Send alert to Parent Department Head (if exists)
- Create succession planning task
Compliance Automations
Compliance automations ensure regulatory requirements are met through automated checks, reminders, and audit trail generation.
CM-01: Quarterly Vendor Risk Review
Purpose: Enforce quarterly reviews for high-risk and critical vendors per compliance requirements.
AQL Query
objectType = "Vendor" AND Status = "Active" AND ("Risk Level" = "High" OR "Risk Level" = "Critical")
Actions
- For each high-risk vendor: Create compliance review ticket, Assign to Relationship Owner, Set SLA based on Risk Level (Critical: 7 days, High: 14 days)
- Send quarterly review initiation notice to Compliance team
- Generate audit log entry
Benefits
- Ensures regulatory compliance for vendor oversight
- Creates documented evidence of review cadence
- Supports SOC 2, ISO 27001, and similar frameworks
CM-02: Application Data Classification Audit
Purpose: Ensure all applications have proper data classification for security and compliance.
AQL Query
objectType = "Application" AND Status = "Active" AND "Data Classification" is EMPTY
Actions
- Lookup unclassified applications
- Group by Business Owner
- Send classification requirement notice with 7-day deadline
- Escalate after deadline to Information Security
CM-03: SSO and MFA Compliance Check
Purpose: Verify security controls are enabled on applications per policy requirements.
AQL Query
objectType = "Application" AND Status = "Active" AND (Criticality = "Critical" OR Criticality = "High") AND ("SSO Enabled" = false OR "MFA Required" = false)
Actions
- Generate non-compliant application report
- Send to Information Security team
- For Critical applications with neither SSO nor MFA, create high-priority remediation ticket
CM-04: Annual Personnel Access Review
Purpose: Generate annual access review reports for regulatory compliance.
AQL Query
objectType = "Person" AND Status = "Active" AND "Employment Type" in ("Employee", "Contractor")
Actions
- Generate comprehensive personnel report
- Cross-reference with application ownership
- Send to Compliance team for access certification
- Create access review project with tasks per department
CM-05: Cost Center Budget Owner Certification
Purpose: Annual certification that cost center owners acknowledge budget responsibility.
AQL Query
objectType = "Cost Center" AND Status = "Active" AND Owner is NOT EMPTY
Actions
- For each cost center, create certification task assigned to Owner
- Set 30-day completion deadline
- Escalate incomplete certifications to Finance leadership
- Generate certification completion report
Integration Automations
Integration automations synchronize CMDB data with external systems and trigger cross-platform workflows.
IN-01: HR System Person Sync Trigger
Purpose: When person records are modified, trigger synchronization with HR system of record.
Actions
- Send web request to HR integration endpoint with person data
- Log sync event for audit trail
Webhook Payload Example
POST /api/v1/cmdb-sync/person
{
"employeeId": "{{object.Employee ID}}",
"email": "{{object.Email}}",
"department": "{{object.Department.Name}}",
"manager": "{{object.Manager.Email}}",
"status": "{{object.Status}}",
"location": "{{object.Location.Name}}"
}
IN-02: ServiceNow CMDB Sync Notification
Purpose: Notify integration platform when application records change for ServiceNow synchronization.
Actions
- Send webhook to integration middleware
- Include all application attributes in payload
- Log integration event
IN-03: Identity Provider User Provisioning
Purpose: Trigger identity provider actions when person status changes.
Condition
Status attribute changed
Actions
- If Status = "Active" (new): Send provisioning request to IdP, Include department and location for access policies
- If Status = "Terminated": Send deprovisioning request to IdP, Request immediate session termination
IN-04: Slack Channel Notification for Team Changes
Purpose: Post notifications to relevant Slack channels when team configurations change.
Actions
- Send web request to Slack webhook with team update message
What NOT to Automate
While automation provides significant value, certain activities should remain manual or receive careful consideration before automating.
High-Risk Status Changes
Do not automatically change:
- Person Status to "Terminated" (requires HR verification)
- Application Status to "Retired" (requires business sign-off)
- Vendor Status to "Inactive" (requires contract verification)
- Cost Center Status to "Frozen" (requires Finance approval)
Why: These changes have significant operational impact and require human judgment and proper approval chains.
Bulk Data Modifications
Avoid automating:
- Mass updates to ownership fields
- Bulk relationship changes
- Large-scale attribute modifications
Why: Automation errors at scale can corrupt significant portions of your CMDB. Bulk changes should be reviewed by humans before execution.
Deletion Operations
Never automate:
- Object deletion (use status changes instead)
- Relationship removal without backup
- Historical data purging
Why: Deleted data cannot be recovered through automation. Deletions should follow formal data retention policies with human oversight.
Automation Testing and Monitoring
Testing Strategy
Before Production Deployment:
- Develop in a test schema: Create automations against a copy of your production schema with sanitized data.
- Test with minimal scope: Initially filter automations to specific test objects
- Verify AQL queries independently: Run your AQL queries in the Assets search before using them in automations to confirm expected results.
- Monitor execution logs: After enabling an automation, review the audit log for the first several executions to verify behavior.
- Start with notifications only: Before automating actions that modify data, create notification-only versions to verify triggering conditions.
Monitoring Best Practices
Establish monitoring for:
| Metric | Target | Alert Threshold |
|---|---|---|
| Rule execution success rate | > 99% | < 95% |
| Average execution time | < 30 seconds | > 60 seconds |
| Daily rule executions | Baseline +/- 20% | > 50% variance |
| Failed lookups | < 1% | > 5% |
Troubleshooting
Common Issues and Resolutions
Issue: Automation not triggering on object updates
Cause: Object triggers fire on any schema update, but may not match your AQL filter.
Resolution:
- Verify AQL syntax is correct
- Check that attribute names match exactly (case-sensitive in some deployments)
- Ensure the automation is enabled and scope includes the correct schema
Issue: Lookup Objects returns empty results
Cause: AQL query may have syntax errors or attribute name mismatches.
Resolution:
- Test the exact AQL query in Assets search
- Verify attribute names match schema definition exactly
- Check that referenced object types exist
Issue: For AQL branch processing fewer objects than expected
Cause: For AQL branches are limited to 50 objects maximum.
Resolution:
- Add more specific AQL filters to reduce result set
- Split into multiple rules by category (e.g., by Region or Type)
- Use Lookup Objects action (100 object limit) if iteration is not required
Issue: Automation loops causing excessive executions
Cause: Edit Object action triggering the same automation rule repeatedly.
Resolution:
- Add AQL condition to exclude recently modified objects:
objectType = "Person" AND updated > -1h - Use specific attribute conditions to prevent re-triggering
- Consider scheduled rules instead of event-triggered for data quality checks
Frequently Asked Questions
Q1: Can I trigger an automation when a specific attribute changes?
Answer: Native JSM Assets automation does not support triggering based on specific attribute changes through AQL conditions. The Object trigger fires on any object update. However, you can use a workaround: add a Send web request action to call the object history REST API (GET /rest/assets/1.0/object/{objectId}/history) and parse the response to determine which attribute changed most recently. Atlassian is tracking this enhancement request under JSDCLOUD-10002.
Q2: How many objects can I process in a single automation rule?
Answer: The limits are:
- Lookup Objects action: Maximum 100 objects returned
- For AQL branch: Maximum 50 objects processed per execution
For larger datasets, implement strategies such as: filtering by date ranges, splitting by object categories, or using scheduled rules that process incrementally.
Q3: Why doesn't the For AQL branch appear in my project automation?
Answer: For AQL branches are only available in Global automations, not project-level automations. Navigate to Administration > Automation (global) to access this feature. This is a platform design constraint, not a permissions issue.
Q4: How do I reference an object's attribute in an email body?
Answer: Use smart value syntax: {{object.AttributeName}} for direct attributes, or {{object.ReferenceName.AttributeName}} for attributes on referenced objects. For example:
Manager: {{object.Manager.Name}}
Department: {{object.Department.Name}}
Location: {{object.Location.City}}, {{object.Location.Country}}
For Lookup Objects results, use iteration: {{#lookupObjects}}{{Name}} - {{Email}}{{/}}
Q5: Can I update an object's attributes through automation?
Answer: Yes, use the Edit Object action. However, note these constraints:
- Only works in Global automation rules
- Only works when an object is the focus of the rule (after Object trigger or within For AQL branch)
- Does not work with Lookup Objects results
- Be careful to avoid automation loops where your edit triggers the same rule
Q6: How do I create a Jira issue from an Assets automation?
Answer: Use the Create Issue action within your automation rule. You can populate issue fields with object attributes using smart values:
Summary: Data quality issue: {{object.Name}} missing required attributes
Description: The {{object.objectType.name}} "{{object.Name}}" requires attention.
Note that within a For AQL loop, each matched object creates a separate issue. If you want one issue listing multiple objects, use Lookup Objects with iteration in the description field.
Q7: What is the difference between Lookup Objects and For AQL branch?
Answer:
- Lookup Objects: Returns a list of objects (up to 100) that you can reference collectively or iterate through in subsequent actions like Send Email. Results are accessed via
{{lookupObjects}}smart value. - For AQL branch: Creates a separate execution path for each object (up to 50) where the object becomes the focus. Better for individual actions per object like Edit Object or Create Issue per object.
Choose Lookup Objects when you need aggregate reporting (one email with multiple objects). Choose For AQL when you need individual processing per object.
Related Resources
- Best Practices Guide - Complete guide to using each Core Schema object type effectively
- Governance Playbook - Enterprise governance framework with roles, cadences, and metrics
- JSM Forms Specification - Detailed form specifications with field logic and workflows
Version History
| Version | Date | Author | Changes |
|---|---|---|---|
| 1.0 | February 2026 | Schema Forge Team | Initial release for Core Schema v1.1 |
Schema Forge