HOW TO

Publish personal markup from the ArcGIS Field Maps mobile app to ArcGIS Online

Last Published: February 5, 2026

Summary

After the September 2025 release of ArcGIS Field Maps, the handling of markups on the map has changed. The primary difference is the new and improved personal markup experience, which consolidates all individual markups into a single comprehensive layer. However, the layer does not display in ArcGIS Online. Displaying the layer in ArcGIS Online enables users to share, manage, analyze, and reuse personal markups across devices and applications as part of broader GIS workflows.

This article outlines the workflows to publish a personal markup from a map as a hosted feature layer, incorporating point, line, and polygon features from the ArcGIS Field Maps mobile app into ArcGIS Online using Python.

Procedure

  1. In the ArcGIS Field Maps mobile app, use personal markup to draw points, lines, or shapes directly on the map. Refer to ArcGIS Field Maps: Sketch on the map for instructions. In this example, a point, line, and triangle are sketched.
The image of the sketched point, line and triangle as the personal markup in ArcGIS Field Maps.
  1. Share and save the personal markup as a markup file through the Markup in View, Selected Markup, or All Markup option. Refer to ArcGIS Field Maps: Share personal markup for more information. In this example, the markup is shared with the Field Maps file on the device.
Note:
To publish saved markups across all maps in the app, skip Step 2. Esri recommends to reload all related maps in the app first before before proceeding to Step 3.
  1. Navigate to the Field Maps file on the device and browse to the markup file saved in Step 2. Optionally, use the markup200.json file instead to publish all saved markup across all maps. Select and import the markup or JSON file to the local machine.
  • On iOS, navigate to Files > On My iPhone or On My iPad > Field Maps.
  • On Android, connect the device to a local machine. Browse to Device_Name > Internal shared storage or Internal storage > Android > data > com.esri.fieldmaps > files.
The image of an example of a markup and JSON files saved in the Field Maps file in an iOS device.
Note:
Skip Step 4 if the JSON file is not used.
  1. Edit the JSON file name and type.
    1. Open the JSON file with Notepad.
    2. Click File > Save as. Change the file name and replace .json with .markup. In this example, markup200.json is replaced with markuptest.markup.
    3. Select All files for Save as type and save the file.
  1. Create a new feature layer in ArcGIS Online.
    1. Log in to ArcGIS Online and navigate to the Content page.
    2. Click New item > Feature layer > Define your own layer > Next.
    3. Under Specify name and type, edit the default name and select the layer type. In this example, the first layer is renamed to Point, and Point layer is selected as the layer type.
    4. Click + Add to add other layers. In this example, line and polygon layers are added.
The image of the point, line and polygon sublayers added to a new feature layer in ArcGIS Online.
    1. Click Next and add a title to the layer. In this example, the new feature layer is titled markuptest. Click Save.
  1. Enable sync in the new feature layer.
    1. On the Overview page of the newly created feature layer, click Settings.
    2. Navigate to Feature layer (hosted), under Editing options, toggle on Enable sync (required for offline use and collaboration).
    3. Click Save.
  1. Note the item ID to include in the script.

The following procedures can be performed in Python IDLE for ArcGIS Pro or ArcGIS Notebooks in ArcGIS Online.

In Python IDLE for ArcGIS Pro

  1. Copy and paste the following script into Notepad. Save the file as <filename>.py. In this example, the file is named markuptest.py. Replace <new feature layer ID> and <path to the markup file on the local machine>.
from arcgis.gis import GIS
import json

#initialize constants for the output feature layer
FEATURE_LAYER_ITEM = "<new feature layer ID>"
#edit the layer IDs accordingly, depending on the configuration of the new sublayers during the new feature layer creation in Step 5 above.
POINTS_LAYER_ID = 0
LINES_LAYER_ID = 1
POLYGONS_LAYER_ID = 2

#connect to gis using built-in user
gis = GIS("home")

#open and read the markup file
with open(r"<path to the markup file on the local machine>") as f:
    markup_json = json.load(f)

feature_layer = gis.content.get(FEATURE_LAYER_ITEM)

#add or remove the sections below accordingly, depending on the type of sublayers to publish. In this example, three sections are applied for the three sublayers (point, line, and polygon) created.
feature_layer_collection = feature_layer.layers[POINTS_LAYER_ID]
elements = [
    element
    for element in markup_json["elements"]
    if element.get("geometry", {}).get("x")
]
result = feature_layer_collection.edit_features(use_global_ids=True, adds=elements)
print(result)

feature_layer_collection = feature_layer.layers[LINES_LAYER_ID]
elements = [
    element
    for element in markup_json["elements"]
    if element.get("geometry", {}).get("paths")
]
result = feature_layer_collection.edit_features(use_global_ids=True, adds=elements)
print(result)

feature_layer_collection = feature_layer.layers[POLYGONS_LAYER_ID]
elements = [
    element
    for element in markup_json["elements"]
    if element.get("geometry", {}).get("rings")
]
result = feature_layer_collection.edit_features(use_global_ids=True, adds=elements)
print(result)
  1. On the local machine, click Start, expand ArcGIS, and open Python Command Prompt.
  2. In the Python Command Prompt window, type idle and press Enter.
  3. In the IDLE Shell <version> window, click File > Open…
  4. Browse to and open the Python file of the copied script. In this example, the markuptest.py file is opened.
  5. In the IDLE window of the file, click Run > Run Module.
The image of the python script being run from the IDLE window.
The image of the output result from the IDLE window.
  1. Open the feature layer created previously in Map Viewer and notice that the personal markup is now added to the new feature layer as point, line, and polygon features.

In ArcGIS Notebooks in ArcGIS Online

  1. Log in to ArcGIS Online and click Notebooks > New notebook > Standard.
  2. In the new notebook, click Files > Choose file to upload.
  3. Browse to and select the saved markup file to upload it to the workspace.
  4. Copy and paste the following script into the code cell. Replace <new feature layer ID> and <path to the markup file uploaded to Files>.
Note:
By default, when inserting the markup file from Files to the notebook, a new code cell is added with the format: dataset = '<path>'. Ensure to only copy and paste the <path> portion to the script below for <path to the markup file uploaded to Files> and delete the new cell.
from arcgis.gis import GIS
import json

#initialize constants for the output feature layer
FEATURE_LAYER_ITEM = "<new feature layer ID>"
#edit the layer IDs accordingly, depending on the configuration of the new sublayers during the new feature layer creation in Step 5 above.
POINTS_LAYER_ID = 0
LINES_LAYER_ID = 1
POLYGONS_LAYER_ID = 2

#connect to gis using built-in user
gis = GIS("home")

#open and read the markup file
with open("<path to the markup file uploaded to Files>") as f:
    markup_json = json.load(f)

feature_layer = gis.content.get(FEATURE_LAYER_ITEM)

#add or remove the sections below accordingly, depending on the type of sublayers to publish. In this example, three sections are applied for the three sublayers (point, line, and polygon) created.
feature_layer_collection = feature_layer.layers[POINTS_LAYER_ID]
elements = [
    element
    for element in markup_json["elements"]
    if element.get("geometry", {}).get("x")
]
result = feature_layer_collection.edit_features(use_global_ids=True, adds=elements)
print(result)

feature_layer_collection = feature_layer.layers[LINES_LAYER_ID]
elements = [
    element
    for element in markup_json["elements"]
    if element.get("geometry", {}).get("paths")
]
result = feature_layer_collection.edit_features(use_global_ids=True, adds=elements)
print(result)

feature_layer_collection = feature_layer.layers[POLYGONS_LAYER_ID]
elements = [
    element
    for element in markup_json["elements"]
    if element.get("geometry", {}).get("rings")
]
result = feature_layer_collection.edit_features(use_global_ids=True, adds=elements)
print(result)
  1. Run the script. Save the notebook, if necessary.
The image of the script being run in ArcGIS Notebooks.
  1. Open the feature layer created previously in Map Viewer and notice that the personal markup is now added to the new feature layer as point, line, and polygon features.
The image of the personal markup being published as point, line and polygon features in a hosted feature layer.

Article ID: 000038800

Software:
  • ArcGIS Online
  • ArcGIS API for Python
  • ArcGIS Field Maps Android
  • ArcGIS Field Maps iOS

Get support with AI

Resolve your issue quickly with the Esri Support AI Chatbot.

Start chatting now

Related Information

Discover more on this topic

Get help from ArcGIS experts

Contact technical support

Start chatting now

Go to download options