Through our many conversations with customers, whether at User Conference or otherwise, one of the most commonly asked questions we receive is:
How do I move my published content from one organization to another?
And, while it may be one of the most asked questions, it’s nuanced, and to effectively answer it, more questions and discussion are typically needed, as the answer will depend on several factors.
For example:
- Is the content moving across tiers?
- What types of content must be moved?
- What type of infrastructure, hardware, or operating systems are involved?
- Is the administrator that will conduct the workflow most comfortable using out-of-the-box tools for the migration, or do they prefer a programmatic workflow, and have experience using scripting tools to do the migration?
If you’re an organization administrator who has explored the need for a migration workflow before, you’ve likely found that there are a variety of solutions available, some of which provide partial migrations for a subset of content, and others that provide a more comprehensive solution.
But you may be wondering: which one is the right one to use for my case? Which one is easiest? Are there any caveats with one or more that I need to be aware of?
The goal of this blog is to provide an overview of the various migration tools and strategies available in ArcGIS. Each option is described to explain what it is, how to use it, and when it might be most appropriate for the task at hand.
Each option is accompanied with additional resources to learn more, so you can further explore what’s best for your use case. If you’re still unsure, we’ve provided a decision chart to help identify which tool may be best for your use case and comfort level.
ArcGIS API for Python: clone_items()
The ArcGIS API for Python has multiple tools oriented around programmatically transferring content from one organization to another, perhaps the most used of which is clone_items()
.
This function is part of the ContentManager
class. It takes in a list of Item
objects from one ArcGIS organization and recreates that list elsewhere, in another ArcGIS organization. It has the ability to recreate almost any item type, with the main exception being ArcGIS Hub Sites/Pages (see hub stuff link).
clone_items()
essentially disassembles items internally to determine all their dependencies, and clones over all required items for the source item(s) to the new organization to reassemble them from the ground up.
There are numerous features found in the function, such as the ability to search a target organization for existent cloned items, the ability to copy service data or re-reference the original service, and the option to recreate services from scratch vs have them exported via a file format.
clone_items()
has been around for a while, and as such, brings some legacy overhead with it. This means that, despite having perhaps the most extensive range of compatible content, there are some incompatibilities that may arise from the evolution of different components and item types in any ArcGIS system.
It is a popular first option for users looking to directly migrate a subset of items, though there are cases where other migration tools may function more effectively. It works for both ArcGIS Online and ArcGIS Enterprise organizations.
- Experience level: Some scripting experience required
- Supported environments: ArcGIS Online and ArcGIS Enterprise
- Accessible via: ArcGIS API for Python, ArcGIS Pro, and ArcGIS Notebooks (through Python)
- Strengths: Great for cloning almost any kind of item, including underlying services and data
- Caveats: Incompatibilities may arise with certain edge cases, often pertaining to feature services
Additional resources:
- ArcGIS API for Python documentation and guides:
- Documentation: clone_items()
- Guide: Cloning content
- Guide: Cloning complex apps
ArcGIS API for Python: OfflineContentManager
Another (much newer) migration tool in ArcGIS API for Python is the set of functions found in the OfflineContentManager
module.
This module functions very similarly to clone_items()
, but with a couple key distinctions. Firstly, and most notably, it allows you to create offline backups of your migration items, in addition to all of their dependencies.
This means that a user trying to migrate their items to multiple different organizations can avoid repeated calls to clone_items()
, and that users can create backups of their items to use for restoration in the event that something goes wrong.
Another key distinction from clone_items()
is that the OfflineContentManager
gives users the option to avoid a rollback on failure, for example, if clone_items()
fails in cloning any item in the process, every item from the call will be deleted, whereas the OfflineContentManager
allows users to skip over failed items and carry on migrating the rest of the items.
One final difference is that by default, this function must copy services by exporting them to a file geodatabase or shapefile and then re-uploading and publishing them to the destination organization.
Much to the opposite of clone_items()
, the functions in this class are quite new, so not every item type is covered yet (roughly 80% currently).
However, these functions do a great job of circumventing some of the paint points of clone_items()
, such as incompatibilities when reconstructing services, repeated calls to the same function, and the “all or nothing” nature of clone_items()
.
This is a great option for users looking for a programmatic solution when clone_items()
cannot sufficiently accommodate the workflow. Users that would benefit from this option can use it to create backups and migrate to multiple different new organizations. It it supported for both ArcGIS Online and ArcGIS Enterprise organizations.
- Experience level: Some scripting experience may be required
- Supported environments: ArcGIS Online and ArcGIS Enterprise
- Accessible via: ArcGIS API for Python, ArcGIS Pro, and ArcGIS Notebooks (through Python)
- Strengths: Can create backups, can help in cases where
clone_items()
orGroupMigrationManager
are not compatible - Caveats: May be time consuming, not all item types are supported yet
Additional resources:
- Documentation: OfflineContentManager
- Guide: Cloning via Offline Backups
Group export and import
Group export and import is another very handy option that allows users to export/import offline packages of items, oriented around the migration of a group’s items. This tool is available to migrate content between ArcGIS Enterprise organizations and is extremely user friendly: users can use the interface in their ArcGIS Enterprise organization to export and import group content.
As an alternative, this workflow can be done programmatically using the ArcGIS REST API endpoints for the export/import functions, in addition to a GroupMigrationManager
module in the ArcGIS API for Python.
One distinct advantage this tool has over the two previously mentioned functions is the ability to overwrite existent items with the same ID, allowing users to update items based on changes in a different organization without making duplicates in a new organization.
There are some caveats to consider with this option, for example, to migrate content using this method, the staging (import) environment must be on the same or a later version of ArcGIS Enterprise than the development (export) environment.
In addition, item dependencies aren’t automatically handled in the same way that they are with the prior two options. However, if all item dependencies are accounted for, and the migration is between two eligible ArcGIS Enterprise organizations, then export and import through the organization may be the easiest way to migrate content. As mentioned earlier, it’s also great for users looking to overwrite or update their items.
- Experience level: No scripting experience required
- Supported environments: ArcGIS Enterprise
- Accessible via: GUI in ArcGIS Enterprise, REST API, ArcGIS API for Python, ArcGIS Pro & ArcGIS Notebooks (through Python)
- Strengths: Easily accessible through the organization, can create backups
- Caveats: Not available for ArcGIS Online, not all item types supported
Additional resources:
- Documentation: Export and import group content
- Blog: Migrate group content across ArcGIS Enterprise
- ArcGIS API for Python example: Group Migration Manager
Distributed and Partnered collaborations
Distributed collaboration and partnered collaboration are two different types of content sharing mechanisms and are a contrasting option to those we’ve covered thus far. Distributed collaboration enables organizations to share content between ArcGIS Enterprise and ArcGIS Online or between ArcGIS Enterprise and ArcGIS Enterprise. Partnered collaboration, on the other hand, is specific to ArcGIS Online as it supports the workflow to share content across ArcGIS Online organizations.
Collaborations are not designed to transfer the ownership of content from one organization to another; but instead, as the name implies, they allow one organization to maintain ownership of items while sharing them with another organization to view or edit. Collaborations are a great choice to share content in a professional capacity, such as in a provider-client scenario, or to privately share owned apps and data for public consumption.
The terms of a collaboration are defined by the host, to specify who the guests are, how many there are, whether guests can send content, receive content, or do both, and more. In contrast to the other technologies mentioned, collaboration does require a reasonably involved setup process, and administrators can do this through the organization’s settings, or through a script, such as one that leverages the ArcGIS API for Python.
This workflow is truly a unique way to share, receive, and discover content while preserving ownership in a single organization. It also allows for the opportunity to share private items outside of an organization, though this is a consideration the organization must make as to what content qualifies for this level of access.
- Experience level: No scripting experience required
- Supported environments: ArcGIS Online and ArcGIS Enterprise
- Accessible via: ArcGIS Online and ArcGIS Enterprise organization settings, ArcGIS REST API, ArcGIS API for Python, ArcGIS Pro, and ArcGIS Notebooks (through Python)
- Strengths: Unique method of sharing and level of accessibility, high level of customization
- Caveats: Geared toward sharing content as opposed to migrating it
Additional resources:
- ArcGIS Enterprise documentation: About distributed collaboration
- ArcGIS Online documentation: About partnered collaboration
- ArcGIS API for Python documentation: Building a distributed GIS through collaborations
WebGIS Disaster Recovery (WebGIS DR) tool
This tool, while not specifically designed for content migration or sharing items, is rather intended as a large-scale option used to protect the availability of content in an entire ArcGIS Enterprise organization. The disaster recovery tool (WebGIS DR tool) enables an administrator to create a backup of an ArcGIS Enterprise organization so that in the unforeseen event where a failure occurs, the backup can be used to restore the organization.
Regarding content migration, this option is different from other technologies covered, though the core concept and goal remains the same, to maximize access and availability of data in ArcGIS. Because this tool was designed to ensure that the data in a specific organization will remain available, it is often used to replicate content across environments. This is particularly useful for organizations who want to migrate all of their organization content to a new operating system, tier, or data center. It may also be used to ensure backups are available for critical apps and data when they are continuously accessed by numerous users or customers.
- Experience level: No scripting experience required
- Supported environments: ArcGIS Enterprise on Windows and Linux
- Available via: Built-in ArcGIS Enterprise tools
- Strengths: Can back up and migrate an entire organization, provides unmatched capability and level of completeness
- Caveats: May require more extensive knowledge of the full ArcGIS Enterprise deployment than other options
Additional resources:
- ArcGIS Enterprise documentation:
- Blog: Migrate to a new machine in ArcGIS Enterprise using the WebGIS DR tool
Other tools:
The migration tools we’ve covered thus far are all oriented around migration of various item types, or even entire organizations, however, there are also a handful of assorted item-specific and situation-specific migration tools.
Some of these solve extremely specific problems, while others are the most convenient way to migrate something if the scope is limited. We’ll briefly run through some of these methods and their available resources.
Export service and publish service definition
This pair of functions provide a highly convenient way to migrate services while retaining total parity in data and configuration in a new organization. Using the publishing tools REST API in ArcGIS Enterprise, an administrator can export services as service definition (.sd) files and then re-publish them in another organization. This maintains the highest level of accuracy with data and configuration relative to any other method of exporting and importing feature services. Note: This feature is available in ArcGIS Enterprise 11.4 and later.
ArcGIS REST API documentation:
Migration with ArcGIS Experience Builder developer edition (and ArcGIS API for Python)
One specific but popular question is:
How can I migrate the web experiences from my locally deployed developer edition app to my ArcGIS Online or ArcGIS Enterprise organization?
The ArcGIS API for Python provides a workflow to automate this process. Locally deployed applications may not directly communicate with a portal, so this workflow essentially bridges that gap.
ArcGIS API for Python documentation:
- ArcGIS Experience Builder module: WebExperience.upload()
- Guide (“Working with Local Experiences” section): Experience Builder Workflows
Sharing API functions
The ArcGIS REST API includes a sharing API that is used to support all portal operations, including, but not limited to, exporting and downloading items, uploading them, and publishing them. These functions do the work behind the scenes for other migration tools, such as the ArcGIS API for Python methods. These tools provide the most simplified building blocks for migration solutions, for those who wish to build their own custom solution.
ArcGIS REST API documentation:
Cloning users and groups through the ArcGIS API for Python
This option is a bonus sample that touches upon more than just items, and reinforces the above section’s concept of creating custom solutions by hitting the REST endpoints. The attached Python guide is a bit dated, but still shows how to use ArcGIS API for Python functions that wrap REST endpoints to re-create users/groups in a new organization and then tie all of their original items to them. Note: We recommend using clone_items()
or the OfflineContentManager
for item migration in Python.
Migration options at a glance
To help illustrate these options a bit more, the flowchart provided below steps through different scenarios and recommendations to migrate your content across ArcGIS Enterprise organizations. For migrations involving an ArcGIS Online organization, the ArcGIS API for Python must be used. To follow the options available for ArcGIS Online, start near the center of the flowchart, in the box that says “Do I want to just move items, or also create backups?” Note that collaborations aren’t included as a workflow in the flowchart as it is intended to highlight migration options (recreating content) as opposed to sharing content.

Article Discussion: