I am using Survey123 Connect to help volunteers collect ecological data. Currently, users select their their location using a geopoint question, then tell us what county, town, and street they were on using select_one questions. Is it possible to instead have those fields be auto-populated, and let the user confirm? We are trying to reduce errors and by having users select their GPS location, then county, then town, then street, etc. just adds opportunities to compound errors.

Yes, we could simply get the county/town/street data afterwards in GIS, but I would like to know if its possible to do in Survey123 and if so, how might I best implement that? I am currently experimenting with revesegeocoding, but finding limited documentation aside from this blog post: https://community.esri.com/t5/arcgis-survey123-blog/understanding-reverse-geocoding-in-survey123-3-0/ba-p/891644

1 Answer 1


That post does have most of the information needed to configure reverse geocoding on a geopoint question, but the actual documentation for that feature is found under Geopoints#Reverse geocoding.

The base function call would be:

pulldata("@geopoint", ${location}, "reversegeocode")

in the calculation column of the form field, where location is the name of the geopoint question. This will use the default locator service configured for your organization and will return a JSON object with the result.

If you want to use a specific locator service, you can use a fourth parameter:

pulldata("@geopoint", ${location}, "reversegeocode", "locator service URL")

Any additional URL parameters can be provided as a fifth parameter to the pulldata() function.

If you want to extract a specific property from the result, you could specify the property attribute in the third parameter:

pulldata("@geopoint", ${location}, "reversegeocode.address.Match_addr")

You can have multiple questions each referencing a different attribute, and the reverseGeocode query will only execute once and cache the results:

pulldata("@geopoint", ${location}, "reversegeocode.address.Match_addr")
pulldata("@geopoint", ${location}, "reversegeocode.address.LongLabel")
pulldata("@geopoint", ${location}, "reversegeocode.address.ShortLabel")

Keep in mind that the exact values that you get depend on which locator service you use. Also, if this survey is intended for public users, unless your locator is unsecured you will need to configure a proxy item with saved credentials.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.