What This Table Is
The sys_notification table stores email notification configuration records that define when and how ServiceNow sends automated emails. Each record represents a single notification rule that triggers based on specific events (insert, update, delete) on designated tables. These notifications form the backbone of ServiceNow's communication system, alerting users when records change, approvals are needed, or business processes require attention.
This table belongs to the Platform module and supports the core notification engine that runs across all ServiceNow applications. When a record changes on any table, the notification engine evaluates active notification records to determine which emails to send. The system processes these in near real-time, though complex condition scripts can impact performance at scale.
The sys_notification table extends the base sys_metadata table, inheriting standard metadata fields like sys_scope and sys_package. No tables extend this one directly, but notification devices (sysevent_email_action) reference these records to determine recipient lists and message content.
Large enterprises typically maintain 200-500 active notification records, though poorly designed condition scripts can create performance bottlenecks. Each active notification evaluates against every qualifying record change, so complex JavaScript conditions multiply processing overhead. The system maintains an internal cache of active notifications, but changes to notification records require cache refresh across all nodes.
When You'll Script Against This Table
You'll primarily script against sys_notification in Business Rules that need to dynamically enable or disable notifications, Script Includes that manage notification lifecycle, and Scheduled Jobs that audit notification effectiveness. Administrative scripts often query this table to identify notifications that haven't triggered recently or have problematic condition logic.
Access requires the admin role for write operations, though users with notification_admin can modify notification records. Read access varies by scope - global notifications are visible to most developers, but scoped application notifications require appropriate role access. Background scripts run with elevated permissions but should validate scope boundaries when modifying notification records.
- Bulk enable/disable notifications during maintenance windows or data migrations
- Clone notification templates when creating new applications or processes
- Audit which notifications target specific user groups or conditions
- Dynamically adjust notification conditions based on business rules or configuration
- Validate notification performance by analyzing condition complexity and target tables
- Import/export notification configurations between instances during deployments
- Create conditional notification logic that responds to environmental factors or business calendars
Table Gotchas
The condition field stores JavaScript that executes for every qualifying record change. Complex conditions or database queries in notification conditions can severely impact instance performance during bulk operations.
Notifications trigger based on the table field value, but inheritance means a notification on 'task' will evaluate for incident, problem, and change records unless explicitly filtered by sys_class_name.
- The
whenfield accepts 'insert', 'update', 'delete', 'query' but 'query' notifications are deprecated and should be avoided - The
filterfield uses encoded query syntax but doesn't validate field existence - invalid filters fail silently
Setting active=false doesn't immediately stop notification processing - the system caches active notifications and may take several minutes to recognize the change across all application nodes.
- The
sys_domainfield controls domain separation but notifications can still trigger across domains if condition logic explicitly queries global data - The
orderfield determines execution sequence but only matters when multiple notifications have identical conditions - most notifications should use order 100
Notification conditions execute in a separate JavaScript scope from Business Rules - current.getValue() behaves differently and some GlideRecord operations may not work as expected.
Enjoying this? Get one deep-dive per week.
Join 1,000+ ServiceNow pros — scripts, GlideRecord patterns, Flow Designer techniques, and career moves. Free.
Related Tables
The sys_notification table extends sys_metadata, inheriting scope and package management capabilities essential for application lifecycle management. When cloning or migrating applications, notification records follow the same scope rules as other metadata objects, requiring careful attention to cross-scope references in condition scripts.
The sysevent_email_action table stores the actual email device configurations that notifications reference, defining recipient logic and message templates. The sysevent table logs notification firing events for debugging and audit purposes. When troubleshooting notification delivery, developers commonly join these three tables to trace the complete notification lifecycle from trigger to delivery.
The sys_dictionary table becomes critical when building notifications that reference specific fields, as notification conditions often need to validate field existence and attributes before firing. The sys_user_group and sys_user tables frequently appear in notification condition scripts that need to determine recipient eligibility based on group membership, roles, or user attributes.