10 facts you may not know about the Survey123 field app

06-01-2017 10:37 PM
Esri Frequent Contributor
18 15 13K

The Survey123 field app is used to capture data using smart forms created with Survey123 for ArcGIS. This blog post highlights 10 facts about the Survey123 field app that you may not know about.


1) Platforms supported: While most commonly used in mobile devices running iOS and Android, the Survey123 field app is also available on Windows 7,8.1,10 as well as Mac OS X and Ubunutu Linux.  This allows you to capture data  from laptops, toughbooks, surface tablets, tablets, smartphones and desktops too!

The Survey123 for ArcGIS download page lists all flavors of the app available.

2) Offline by default: The Survey123 field app is designed to work offline by default. Once surveys are downloaded, captured data (including locations) will be saved in the device so it can be later synchronized. In the event that you want to include a map in your survey, you will need to prepare it for offline use.

To resources to prepare your basemaps for offline use:

3) Public surveys: Private surveys can be accessed securely, but Survey123 also supports public surveys where no ArcGIS account is required to capture data (even if offline).


You can change the size of text and controls in the Survey123 app

4) Scale factor: You can control the size of text and controls in your forms through the app settings. This is particularly useful when using a tablet. This makes the buttons bigger for folks with fat fingers!

5) Tap and Hold: Here are my favorite tap and hold functions in the Survey123 field app:

  • A tap and hold over the location button in the map widget will trigger GPS averaging.
  • Tap and hold the arrows in the calendar widget to quickly set the year or month.
  • Accelerate data entry by tapping and holding the plus and minus buttons in the spinner widget.
  • Tap and hold a survey in the gallery and it will be open directly in Collect mode.

6) Integration with Workforce, Explorer and Collector for ArcGIS: You may already know that Workforce for ArcGIS features built-in integration with Survey123 (A detailed post by the way on this topic is long overdue, so I will try to get it out shortly) . What you may now know is that Survey123 can also be launched right from the popup of a feature in Collector and Explorer for ArcGIS. This can be useful when you want to open a smart form for a feature in a Web Map and pre-populate anwers in the form using attributes from that feature.  This is possible by invoking Survey123 through its Customer URL Scheme.



7) It’s all about Feature Services: All data captured through the Survey123 field app gets stored in ArcGIS Feature Services. This means that not only can you build Story Maps, Operation Dashboards and Web AppBuilder apps on top of Survey123 data, but it also means that you can use Survey123 on top of existing Feature Services you may have!  

You can build Surveys from existing Hosted and Federated Feature Services using the 'Create from Feature Service' option in Survey123 Connect for ArcGIS.

You can create surveys on top of existing feature services

😎 Source Code available: The source code of the Survey123 field app is licensed under Apache 2.0 and available with AppStudio for ArcGIS Standard Edition. There are many reasons why you may want to take advantage of this:

  • You can create your own version of Survey123, keeping the same functionality but using your own branding.
  • You can extend the app with new functionality.
  • You can compile the app with your own developer certificate and deploy it using your own Mobile Device Management system.

9) Barcode scanning & Signatures: The Survey123 field app can scan barcodes and qrcodes using your device's built-in camera. Through a specific widget, you can also use your device's screen as a signature pad.

More on barcodes and signatures

Barcode Scanning with Survevy123

Signatures in Survey123

10) Rename photos: You can capture  one or more photos as part of your survey. Additionally, the Survey123 field app allows field users to rename and rotate photos before  submitting.

Regular Contributor


Is there a way to allow for an re-naming of the photo based on the answer from a question? In my case I have a survey that records that users input for the "Sample ID"; is there a way to concatenate the answer of this question with the name of the photo? So if they answer that the Sample ID is "Test001" could the name of the attached photos then include this within the name string? If the photo is part of a repeat series and the original photo was named  "BC_Photo1-20170406-203816.jpg" and I would like for it to be "Test001_BC_Photo1-20170406-203816.jpg".

Esri Frequent Contributor

Hi Mike. At this moment you can only rename photos manually.  The idea of automatically assigning a name to the photo using a calculation or a similar approach is in our back-log but we have not so far focused on this feature.

New Contributor II

When I add images to my form, the icons for taking and/or adding s photo appear under the photo in the form. I want these images to be embedded in the form and not be edited. Is there a way to turn these off?

Ultimately, I would like to make these embedded images hyperlinks to web pages. Is that functionality available at this time?  

Esri Frequent Contributor

Hi. I think the https://community.esri.com/groups/survey123/blog/2015/08/24/surveys-with-style  post may help. It describes how you can embed images in your form. There is a discussion also at the end about embedding simple HTML (and HTML links) in labels.  What I do not think you can do is to make an embedded image be the link.

Occasional Contributor III

ichivite-esristaff‌, on item #2, how about syncing the survey data on my outbox when the device is online, similar to Collector. Is this supported?

Esri Frequent Contributor

Hi Renato.  When you submit surveys from your outbox we send to your feature service all updates and added surveys. That is, data locally stored in your device is sent to your service.   If you also wanted to have your device bring data that may have changed in your feature service, then you need to refresh your inbox.  You can see how this works in this video: Survey123 for ArcGIS: Editing Existing Data with Survey123 for ArcGIS - YouTube 

Note that conceptually this is different from Collector, although at the end of the day you can both submit edits and adds from your device into the server, and you can also bring data from the server into your device (for updates for example).

New Contributor III

😎  Source code available

Does this mean we can still create our survey using Survey123 Connect yet publish it and use it in a Survey123 Field App that we customize? In theory it acts similar to the App Studio apps, yet still has similar functionality of Survey123 with cascading or using relevant questions?

If so, this is great! 

How does one acquire the Source Code?

Esri Frequent Contributor

Hi Amy. The source code of Survey123 for ArcGIS is available with AppStudio for ArcGIS Standard Edition.  You can take the source code and modify it to  brand the app or to extend its functionality.   You will need to download AppStudio for ArcGIS from http://appstudio.arcgis.com and get a license for the Standard Edition (included with the Esri Developer Builder Subscription). 

New Contributor III

Thanks Ismael for the clarification that a Standard Edition licence is needed. That is why I haven't seen the code.

New Contributor II



I have a quick question about field-Survey123.  Since the build 1.7.20, "Autocomplete searches anywhere in the string, not just the first letter".  But I would like to search it from the first letter.  Can you tell me how to do it?  And I would like to know more about how to apply “regular expressions” on survey123.  To find a solution for my question, I have been searched on google but I could not find a detailed resource for it.


Occasional Contributor II

Ismael Ismael Chivite

I have a question for you regarding item #8 - Source Code Available that I hope you can either answer or point me in the right direction.

Right now, one of our clients would like certain types of functionality to be made available within the Survey123 application that don't currently exist. We decided to go down the route of obtaining a standard license so we can edit the Survey123 application source code through AppStudio. In particular, our client would like to take full advantage of the camera on their mobile devices, meaning the ability to zoom in/out while taking a picture, or using the flash in dark areas. Our developer has started reviewing some of the .qml files, specifically the ones related to the camera functionality. What worries me is that this seems like something that you guys would have already been able to solve or provide within the Survey123 application, and the fact that it hasn't been done yet makes me nervous about this being achievable. I was hoping that perhaps you could provide me with a little bit of insight regarding this topic? Also, have there been any support documents regarding editing the source code for Survey123 using AppStudio? Specifically any additional functionality that others have been able to develop in order to enhance the Survey123 application?  


#survey123 app#survey123‌ #survey123camera #survey123photo

Occasional Contributor II

are public surveys available offline in the Survey123 app without having to log in?

Esri Esteemed Contributor

Hi Aurelie,

Public surveys are available with the Survey123 app.  The way to load the survey is to first have the user download Survey123 to the mobile device; you then send the link to the survey (to open in the app) from the Collaborate tab of the survey to the person, who opens the link on the device.  This will cause the device to open Survey123 and download the survey.

Occasional Contributor II

I have that exact need!  We collect 4 photos at each sample point and it would be so great if I could automatically add the Sample ID to the photo names.

New Contributor

We ran into the same issues that others have had.  I'll post some Python below that I was able to use in a couple script tools to create a workaround.

Export Attachments with photo names as they are when survey form is submitted

import arcpy
from arcpy import da
import os

inTable = arcpy.GetParameterAsText(0) #Attachment Table
fileLocation = arcpy.GetParameterAsText(1) #Output Folder Location

with da.SearchCursor(inTable, ['DATA', 'ATT_NAME', 'ATTACHMENTID']) as cursor:
   for item in cursor:
      attachment = item[0]
      filenum = "Desired Prefix"
      filename = filenum + str(item[1])
      open(fileLocation + os.sep + filename, 'wb').write(attachment.tobytes())
      del item
      del filenum
      del filename
      del attachment

Export Attachments and rename photos based on a field in your Survey 123 / Collector feature service

# imports the necessary modules to run
import arcpy
import os
import re

attachTable = arcpy.GetParameterAsText(0) # table in GDB holding attachments
origTable = arcpy.GetParameterAsText(1) # layer in GDB holding features to which attachments belong
fileLocation = arcpy.GetParameterAsText(2) # folder where you want to save the photos
nameField = arcpy.GetParameterAsText(3) # field in origTable that contains more appropriate name for attachment

origFieldsList = ["GlobalID", "OBJECTID", nameField] # GlobalID for linking, OBJECTID for renaming, nameField for renaming

# Use list comprehension to build a dictionary from a da SearchCursor
valueDict = {r[0]:(r[1:]) for r in arcpy.da.SearchCursor(origTable, origFieldsList)}

# REL_GLOBALID # 'sc_portal_map_ld_globalid_2' # GlobalID that links to origTable

# create the cursor to search through the attachment tables; specify you only wish to search those three fields
with arcpy.da.SearchCursor(attachTable,['DATA', 'ATT_NAME', 'ATTACHMENTID', 'REL_GLOBALID']) as cursor:
   for item in cursor:
      attachment = item[0] # attachment data
      filenum = "ATT" + str(item[2]) + "_"
      filename = filenum + str(item[1]) # this will be the filename if linking fails

      # store the Join value of the row being updated in a keyValue variable
      keyValue = item[3] # REL_GLOBALID
      # verify that the keyValue is in the Dictionary
      if keyValue in valueDict:
         # transfer the values stored under the keyValue from the dictionary to the updated fields.
         obID = valueDict[keyValue][0]
         # remove invalid filename characters, replace spaces and periods, limit length
         namefield = re.sub('[^0-9a-zA-Z]+', '_', valueDict[keyValue][1])[:18]
         # Create a unique filename ObjectID_AttachmentID_namefield.ext
         ext = filename.rsplit('.', 1)[-1] # keep extension of original file
        attachmentprefix = "Desired Prefix"
         filename = "{}_{}_{}.{}".format(namefield,attachmentprefix,item[2],ext,)

      print "Writing: {}{}{}".format(fileLocation, os.sep, filename)
      open(fileLocation + os.sep + filename, 'wb').write(attachment.tobytes())
      del item
      del filenum
      del filename
      del attachment

del valueDict
print "Done"