What It Is
Domain Separation is ServiceNow's implementation of multi-tenancy — a platform architecture that partitions data, processes, and administrative access within a single instance. Unlike traditional IT concepts of domain separation that focus on network segmentation or Active Directory boundaries, ServiceNow's Domain Separation operates at the application layer, creating logical barriers that prevent users in one organizational unit from seeing or modifying data belonging to another. Each domain functions as an isolated workspace with its own data scope, user base, and administrative controls, while sharing the underlying platform infrastructure and core application logic.
Architecturally, Domain Separation sits at the data access layer of the ServiceNow platform, intercepting every database query to enforce tenant boundaries. When a user queries the incident table, the platform automatically appends domain filters to ensure they only see records within their authorized scope. This enforcement happens transparently — developers write standard GlideRecord queries, but the platform modifies them at execution time based on the user's domain context. The architecture enables true multi-tenancy where each tenant believes they have exclusive access to their portion of the instance, while the platform manages the complexity of data isolation behind the scenes.
The business function Domain Separation serves is enabling managed service providers (MSPs) to deliver ITSM services to multiple clients from a single ServiceNow instance. Without this capability, an MSP would need separate instances for each client — a model that doesn't scale economically and creates operational overhead in managing dozens or hundreds of isolated environments. Domain Separation allows MSPs to consolidate their client base onto shared infrastructure while maintaining the security and data isolation that enterprise clients demand. This consolidation reduces licensing costs, simplifies upgrade management, and enables MSPs to standardize their service delivery processes across their entire client portfolio.
ServiceNow built Domain Separation because their customer base increasingly included MSPs who needed to serve multiple clients efficiently. The alternative approaches — separate instances per client or complex custom data filtering — either failed to scale economically or introduced security risks through custom code vulnerabilities. ServiceNow's engineering team recognized that multi-tenancy needed to be a platform-native capability, not an afterthought implemented through customization. The feature emerged from the SaaS industry's broader evolution toward multi-tenant architectures, where providers realized that true scalability required sharing infrastructure while maintaining isolation. This design decision positioned ServiceNow as a viable platform for large-scale service provider operations, opening an entire market segment that single-tenant architectures couldn't address effectively.
Different stakeholders interact with Domain Separation in fundamentally different ways. End users typically remain unaware of its existence — they log in, see their data, and perform their work without knowing they're operating within a domain-restricted environment. Administrators experience Domain Separation as both a constraint and a capability: they can only manage users and data within their assigned domains, but they gain tools for cross-domain operations when authorized. Developers must understand Domain Separation's query filtering behavior because it affects how their scripts retrieve and manipulate data — a GlideRecord query that works in development might return unexpected results in production if domain context differs. Process owners and service managers need to understand domain boundaries when designing workflows that might need to cross organizational boundaries, such as escalation processes or shared service catalogs.
Without Domain Separation, multi-client ServiceNow deployments would collapse into chaos or become economically unviable. MSPs would be forced to choose between compromising client data security through inadequate custom filtering or maintaining dozens of separate instances with the associated licensing, maintenance, and operational costs. Client data would intermingle in shared tables, creating compliance violations and security breaches that would destroy trust in managed services. Integration patterns would break down because APIs and web services would lack tenant context, potentially exposing one client's data to another through poorly scoped service calls. The entire managed services business model that many ServiceNow partners rely on would become technically unfeasible, forcing the ecosystem back to single-tenant deployments and dramatically limiting the platform's market reach.
Where It Fits in the Platform
Domain Separation occupies a foundational position in the ServiceNow platform architecture, operating at the intersection of the data layer, security framework, and user interface rendering engine. It integrates with the platform's query engine to automatically filter database results, works with the access control system to enforce permissions, and influences UI rendering to ensure users only see domain-appropriate content. The feature isn't bolted onto existing functionality — it's woven into the platform's core services, affecting everything from simple list views to complex workflow orchestrations. This deep integration means Domain Separation influences nearly every other platform capability, making it one of the most architecturally significant features in ServiceNow.
The relationship between Domain Separation and other platform components creates both opportunities and constraints that administrators must navigate carefully. While Domain Separation provides the isolation necessary for multi-tenant deployments, it also introduces complexity in areas like reporting, integration, and workflow design. Understanding these relationships is crucial for architects designing domain-separated instances and for developers building applications that must respect domain boundaries. The feature's pervasive influence means that decisions about domain structure made early in an implementation have cascading effects throughout the platform's configuration and customization.
Key Relationships:
- User Administration and Groups: Domain Separation restricts users to specific domains and controls which groups they can join or manage. Cross-domain group membership requires special configuration and can create security vulnerabilities if not properly managed.
- Access Control Lists (ACLs): Domain-based ACLs can override or supplement role-based security, creating complex permission hierarchies. ACL evaluation considers both domain membership and traditional role assignments when determining access rights.
- Business Rules and Workflows: These automation components respect domain boundaries by default, but can be configured for cross-domain operations when business requirements demand it. Workflow activities may fail unexpectedly when attempting to access out-of-domain records.
- Integration and Web Services: External systems must understand domain context when creating or updating records through APIs. Poor domain handling in integrations can create data in the wrong domain or fail to retrieve expected records.
- Reporting and Analytics: Reports can be domain-scoped or cross-domain depending on configuration, but cross-domain reporting requires elevated privileges. Dashboard widgets may show incomplete data if domain context isn't properly configured.
- Service Catalog and Knowledge Base: These components can be domain-specific or shared across domains, allowing MSPs to offer both client-specific and common services. Catalog item availability and knowledge article visibility are controlled by domain assignment and sharing rules.
How You Encounter This in Practice
Enjoying this? Get one deep-dive per week.
Join 1,000+ ServiceNow pros — scripts, GlideRecord patterns, Flow Designer techniques, and career moves. Free.
MSP Administrator Onboarding New Client
You're an MSP administrator tasked with onboarding a new enterprise client onto your existing ServiceNow instance that already serves twelve other clients. The client has 500 users across three geographic regions and requires complete data isolation from other clients while sharing certain common service catalog items. During the initial setup, you discover that users from other client domains can see this new client's data in certain list views, and some automated workflows are creating records in the wrong domain. The client's security team is asking detailed questions about data separation that you can't fully answer.
Understanding Domain Separation architecture reveals that your instance's domain configuration has gaps — some tables aren't properly domain-separated, certain user roles have excessive cross-domain privileges, and your workflow design lacks proper domain context handling. This knowledge allows you to systematically audit and fix the domain boundaries, configure proper ACLs for cross-domain scenarios, and design a user provisioning process that maintains strict tenant isolation. You can now provide concrete answers about data separation mechanisms and demonstrate compliance with the client's security requirements.
Without understanding Domain Separation, you'd likely attempt to solve data visibility issues through role-based restrictions or custom ACLs, creating a complex web of permissions that becomes unmaintainable as your client base grows. You might miss subtle data leakage scenarios where records appear in reference fields or reports, leading to compliance violations. Your onboarding process would be ad-hoc and error-prone, with each new client requiring extensive manual configuration and testing to ensure proper isolation.
Developer Building Cross-Domain Integration
You're a ServiceNow developer building an integration that synchronizes incident data from multiple client domains into a centralized reporting database for your MSP's operational dashboard. Your initial GlideRecord scripts work perfectly in your development environment but return no results in production, and your scheduled jobs are failing with cryptic "access denied" errors. The integration needs to read incident records from all client domains, aggregate metrics like resolution time and customer satisfaction, and write summary records to a global reporting table that MSP executives can access.
Understanding Domain Separation explains why your queries return different results in different environments — your development instance lacks domain separation, while production enforces strict domain boundaries. You learn to use domain override techniques in your scripts, configure service accounts with appropriate cross-domain privileges, and structure your data model to respect domain boundaries while enabling legitimate cross-domain operations. This knowledge lets you build robust integrations that work reliably across all client domains while maintaining security boundaries.
Without understanding Domain Separation, you'd struggle with seemingly random query failures and spend days debugging scripts that work inconsistently. You might attempt to solve access issues by granting excessive privileges to integration users, creating security vulnerabilities. Your integration would likely fail silently for some domains while working for others, producing incomplete reporting data that leads to poor operational decisions.
Platform Administrator Diagnosing Performance Issues
You're a platform administrator investigating performance degradation that seems to affect only certain users in specific domains while others experience normal response times. Database queries are taking significantly longer for users in three particular client domains, list views are timing out, and users are complaining about slow form loads. Your monitoring tools show high CPU utilization during peak hours, but the bottlenecks appear inconsistently across different domains. Standard performance tuning techniques aren't resolving the issues, and the problems seem to correlate with specific client domains rather than user count or data volume.
Understanding Domain Separation reveals that the affected domains have complex ACL configurations that create expensive query joins, or that certain domains contain data patterns that don't interact well with domain filtering logic. You discover that domain-specific customizations are causing inefficient database queries, or that cross-domain reference fields are creating cascading lookups. This knowledge allows you to optimize domain configurations, restructure problematic customizations, and implement domain-aware caching strategies that improve performance for all tenants.
Without understanding Domain Separation's performance implications, you'd apply generic optimization techniques that don't address the root causes. You might increase hardware resources or adjust database parameters, providing temporary relief while the underlying issues persist. Your troubleshooting would focus on symptoms rather than the domain-specific configurations causing the problems, leading to expensive infrastructure upgrades that don't resolve the performance bottlenecks.
What People Get Wrong
Domain Separation automatically handles all data isolation requirements without additional configuration.
Domain Separation provides the framework for data isolation, but administrators must explicitly configure which tables, fields, and processes participate in domain separation. Many tables remain global by default, and custom tables created without domain separation awareness will leak data across tenant boundaries. The platform doesn't automatically apply domain separation to every piece of functionality — reference fields, attachment access, email notifications, and integration endpoints all require specific configuration to respect domain boundaries. This misconception leads MSPs to deploy clients onto domain-separated instances without properly auditing their data isolation, creating compliance violations and security breaches.
The misconception exists because ServiceNow's marketing materials emphasize the platform's ability to "automatically" provide multi-tenancy, and the initial domain setup wizard creates an impression that configuration is complete once domains are created. In reality, proper domain separation requires extensive table-by-table analysis, custom ACL configuration, and careful workflow design. Administrators often discover data leakage scenarios months into production when clients report seeing inappropriate data or when security audits reveal cross-tenant access. The fix requires retrofitting domain separation onto existing configurations, often necessitating data migration and significant customization rework.
In production, this misconception manifests as incidents where Client A's users can see Client B's configuration items in reference fields, or where automated workflows create records in the wrong domain because the business rules weren't designed with domain context. Email notifications might be sent to users across domain boundaries, exposing sensitive information. Integration failures occur when external systems attempt to create records but lack proper domain context, causing data to appear in unexpected locations or fail validation. These failures often surface during client security reviews or compliance audits, when systematic data access testing reveals the gaps in domain isolation.
Performance problems in domain-separated instances are caused by having too many domains rather than poor domain design.
Domain count rarely causes performance issues — poor domain architecture and configuration choices create the bottlenecks. The most common performance killers in domain-separated instances are complex ACL configurations that require expensive database joins, inefficient cross-domain queries that bypass normal indexing strategies, and poorly designed domain hierarchies that create cascading permission checks. Custom applications that don't understand domain filtering can generate queries that perform table scans instead of using indexes. Reference fields that span domains can create expensive lookups, especially when combined with large datasets or complex business rule chains.
This misconception develops because administrators notice performance degradation after implementing domain separation and assume that the additional overhead of domain filtering is inherently expensive. ServiceNow's domain filtering is highly optimized and adds minimal query overhead when properly implemented. The real performance issues stem from design decisions made during domain implementation — creating unnecessarily complex domain hierarchies, over-using cross-domain ACLs, or building custom applications without considering domain query patterns. MSPs often blame domain count when they should examine their domain structure and custom code quality.
In practice, this misconception leads administrators to limit their domain count artificially, forcing unrelated clients into shared domains to avoid perceived performance penalties. This compromise creates security and operational risks as client data becomes harder to isolate and manage. Meanwhile, the actual performance problems — inefficient queries, poor indexing, complex ACLs — remain unaddressed and continue degrading system performance. The resulting system performs poorly AND lacks proper tenant isolation, defeating both performance and security objectives. Proper domain architecture with clean separation often performs better than compromised designs that attempt to minimize domain count.
Admin vs Developer Perspective
For Admins
Admins control domain separation at the infrastructure level, managing the sys_domain table and configuring domain policies that determine data visibility and process isolation. They must understand domain hierarchies when troubleshooting user access issues, as permissions compound with domain restrictions in ways that can appear random without this context. The critical admin decision is choosing which applications and modules should be domain-separated versus global, as this affects everything from reporting to integration patterns. Admins also manage domain delegation, determining which domain administrators can create child domains and what level of autonomy each client domain should have.
For Developers
Developers must understand that GlideRecord queries automatically filter by the current user's domain context unless explicitly overridden with setDomainQuery(false), which fundamentally changes how cross-domain integrations and reporting scripts must be written. Business Rules and Script Includes running in domain-separated environments need careful consideration of execution context, as they may need elevated privileges to access global data or cross-domain records. The gs.getDomainID() and gs.getSession().getDomainID() APIs become essential for building domain-aware applications. Developers must also account for domain separation when designing REST APIs, as external integrations may need to authenticate with domain-specific contexts to access the correct data subset.
How It Connects to Other Concepts
- Access Control Lists (ACLs) — Domain separation adds an additional layer of filtering that executes before ACL evaluation, meaning users can fail domain checks even if they have proper role-based permissions. ACLs can be configured to respect or ignore domain boundaries, but the domain check always runs first and can't be overridden by ACL conditions alone.
- Business Rules — Execute within the domain context of the triggering record, which means a Business Rule on the
incidenttable in Domain A cannot naturally access or modify records in Domain B without explicit domain query overrides. This creates complex scenarios in multi-domain workflows where Business Rules must be designed to handle cross-domain data access patterns. - Application Scopes — Work independently from domain separation, creating a two-dimensional security model where applications can be global while data is domain-separated, or applications can be scoped while data spans multiple domains. The intersection determines whether custom applications can access domain-separated data and whether domain-specific customizations affect globally-scoped applications.
- Scheduled Jobs — Run in the global domain context by default, which means they can access all domain data unless specifically configured otherwise through the
run_asuser's domain context. This creates a common pattern where domain-specific maintenance jobs must either run as domain users or use domain query overrides to target specific domain data. - Import Sets — Must be configured with proper domain context through transform maps, as data imported without domain assignment lands in the global domain and may not be accessible to domain users. Transform scripts must explicitly set the
sys_domainfield on target records or use thesetDomainID()method to ensure correct domain assignment. - Email Processing — Inbound email processors must determine the correct domain for incoming records, typically through sender email domain mapping or custom parsing logic in the email script. Outbound emails inherit the domain context of the triggering record, which affects template access and notification user visibility in domain-separated environments.
Junior vs Senior Knowledge Gap
Junior administrators often treat domain separation as just another access control mechanism, not understanding that it creates fundamentally different data architectures on the same instance. They'll spend hours troubleshooting "missing" records that are actually in different domains, or wonder why their scripts work in development but fail in production when domain separation is enabled. The most common mistake is building reports or dashboards without considering domain context, creating visualizations that appear empty for domain users while working perfectly for global administrators.
The mental model shift happens when you realize that domain separation isn't about hiding data — it's about creating multiple logical instances within a single physical instance. Senior implementers understand that every design decision must account for domain boundaries from the beginning, not as an afterthought. They know that "works in the global domain" is meaningless for a domain-separated instance, and they design integrations, workflows, and customizations with cross-domain scenarios as the default case, not the exception.
What separates senior architects is understanding the performance implications of domain separation — that every query includes domain filtering, that cross-domain reporting requires careful index design, and that domain hierarchies can create exponentially complex permission calculations. They know that domain separation affects upgrade paths, because customizations in child domains can conflict with base system updates in ways that don't appear in the upgrade preview. They also understand the operational complexity of managing domain administrators who have "admin" privileges within their domain but can't see or understand the global configuration that affects their domain's behavior.
The questions that experienced professionals ask reveal this deeper understanding: How will this customization behave when replicated across 50+ domains? What happens to cross-domain references when a domain is deleted? How do we handle data that legitimately needs to span domain boundaries? How do we design domain hierarchies that allow for client acquisition and spin-offs? These are the concerns that only emerge after managing domain separation in production environments with real business complexity, real organizational changes, and real scaling challenges.
Quick Reference
- The
sys_domainfield is automatically added to every table that supports domain separation, but not all ServiceNow tables are domain-separable — system tables likesys_user_roleandsys_scriptremain global regardless of domain separation settings. - Domain hierarchy supports up to 5 levels deep, and child domains automatically inherit parent domain visibility — a user in a child domain can see parent domain records, but parent domain users cannot see child domain records without explicit delegation.
- The
domain_adminrole grants full administrative access within a specific domain but provides no visibility into the global domain or sibling domains — domain admins can break their domain's functionality without knowing why. - Cross-domain references (like a domain A incident assigned to a domain B user) create orphaned record scenarios when domains are deleted — these relationships break silently and don't appear in domain separation health checks.
- Email notifications sent from domain-separated records use the sender's domain context to determine template and user visibility, which means global notification templates may not be accessible to domain users even if they have the appropriate roles.
- The
gs.getImpersonatingUserID()function returns the original user's domain context, not the impersonated user's domain, which creates unexpected behavior in domain-separated environments when using user impersonation for cross-domain operations. - REST API calls inherit the authenticating user's domain context by default, but can be overridden using the
sysparm_domain_scopeparameter — however, this requires the API user to have cross-domain visibility permissions. - Transform maps for Import Sets must explicitly set domain context in the field mapping or through script — imported records without domain assignment default to the global domain and may become inaccessible to the intended domain users.
- Domain separation affects knowledge base articles, catalog items, and service portal content differently — knowledge articles can be domain-separated while maintaining global search capability, but catalog items in separated domains require domain-specific entitlements and approval workflows.
- The
globaldomain (sys_id:global) cannot be deleted or renamed, and its domain administrators automatically have visibility into all other domains — making it unsuitable for multi-tenant environments where true isolation is required.