GeoEnrichment

Demographic data for a 1 mile radius search from a location using the GeoEnrichment service

What is GeoEnrichment?

GeoEnrichment is the process of enhancing existing data with additional location-based information about the people and places in a specific area. The additional information can drive better understanding, analysis, and decision making. For example, you can submit a point or polygon to the GeoEnrichment service and retrieve demographics and other facts associated with the location and surrounding area.

You can use GeoEnrichment to:

  • Find demographics and other relevant characteristics within an area around a point.
  • Choose from over 15,000 analysis variables in more than 130 countries and regions including demographics, lifestyle segmentation, consumer spending, and market potential.
  • Enrich your own data with location based context about the people and places in an area.
  • Analyze markets and consumers, identify underserved communities, and formulate better business and policy decisions.

How GeoEnrichment works

You can perform geoenrichment by making an HTTPS request to the Geoenrichment service enrich operation or by using client APIs. Specify the x, y, and optionally, additional parameters to refine the operation.

Submitting a point to the service is the most common use case and the default options create a 1 mile buffer around the point and return facts from the default data collection, Key Global Facts.

To refine the options, you can use parameters such as study areas, data collections, analysis variables. These optional parameters provide control over how the point is buffered and which attributes are returned.

The GeoEnrichment service will return the facts requested for the input study area.

The GeoEnrichment service uses a sophisticated data apportionment methodology to aggregate demographic information for rings and other polygons. For example, in the U.S. and Canada, data apportionment relies mostly on census block points. Block points are centroids derived from census block boundaries, the most detailed level of census tabulation available. They contain attributes for the actual count of people and households living in the associated block. For most other countries and regions settlement points are used for data apportionment. Settlement points are modeled by Esri and provide an estimate of the likelihood of human settlement.

URL request

Use dark colors for code blocksCopy
 
1
https://geoenrich.arcgis.com/arcgis/rest/services/World/geoenrichmentserver/Geoenrichment/enrich?<parameters>

Learn more about standard and enhanced endpoints in Service endpoints.

Required parameters

NameDescriptionExamples
fThe format of the data returned.f=json f=pjson f=geojson f=csv
tokenAn API key or OAuth 2.0 access token. Learn how to get an access token in Security and authentication.token=<YOUR_API_KEY>
token=<ACCESS_TOKEN>

Key parameters

NameDescriptionExamples
studyAreasThe input point, address, line, polygon or administrative boundarystudyAreas=[{"geometry":{"x": -122.435, "y": 37.785}}]
studyAreas=[{"address":{"text":"380 New York St. Redlands, CA 92373"}}]
studyAreas=[{"sourceCountry":"US","layer":"US.ZIP5","ids":["92373"]}]

Additional parameters: Refine the operation by using parameters such as dataCollections to return a preassembled list of analysis variables curated for specific countries and regions. The analysisVariables parameter can return a subset of attributes from one or more data collections. To return percent, average and index attributes use addDerivativeVariables. The returnGeometry parameter retrieves the study area's geometry for display on a map. The intersectingGeographies parameter returns information about administrative boundaries intersected by an input point. The useData parameter provides a performance hint to the service when all input study areas lie within the same country or region.

Examples

Find global facts (1 mile buffer)

Use the GeoEnrichment service to enrich a 1 mile ring buffer using the only required parameter, studyAreas. With the search box, select a pre-defined location or click on the map to submit a point and create a 1 mile ring buffer. Facts are returned from the default data collection, Key Global Facts. Key Global facts contains five analysis variables that are tabulated for all countries and regions.

Steps

  1. Reference the service.
  2. Define studyAreas to submit a point.
  3. Set the API key.

APIs

ArcGIS API for JavaScriptArcGIS API for JavaScriptEsri LeafletMapLibre GL JSOpenLayersArcGIS REST JSArcGIS API for Python
Expand
Use dark colors for code blocksCopy
                                                                                                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
        function getDemographicData(point) {
          // Request demographic data
          arcgisRest.queryDemographicData({
              studyAreas: [{ "geometry": { "x": point.longitude, "y": point.latitude } }],
              authentication: authentication
            })
            .then((response) => {
              if (response.results[0].value.FeatureSet.length > 0 &&
                response.results[0].value.FeatureSet[0].features.length > 0) {
                const attributes = response.results[0].value.FeatureSet[0].features[0].attributes;
                showData(attributes, point);
              } else {
                console.log("No data found.");
              }
            });
        }
Expand

REST API

cURLcURLHTTP
Use dark colors for code blocksCopy
    
1
2
3
4
curl https://geoenrich.arcgis.com/arcgis/rest/services/World/geoenrichmentserver/Geoenrichment/enrich? \
-d "studyAreas=[{'geometry':{'x': -117.1956, 'y': 34.0572}}]"
-d "f=json"
-d "token=<ACCESS_TOKEN>"

Find local facts (1 mile buffer)

In this exmple the dataCollections parameter is used to return a different set of facts. With the search box, select a pre-defined location or click on the map to create a 1 mile ring buffer around a point. Facts are returned from the requested data collection, Household Totals.

Use dark colors for code blocksCopy
 
1
https://geoenrich.arcgis.com/arcgis/rest/services/World/geoenrichmentserver/Geoenrichment/datacollections/US?f=pjson

Steps

  1. Reference the service.

  2. Define studyAreas to submit a point.

  3. Define dataCollections to return a curated list of facts.

  4. Set the API key.

APIs

ArcGIS API for JavaScriptArcGIS API for JavaScriptEsri LeafletMapLibre GL JSOpenLayersArcGIS REST JSArcGIS API for Python
Expand
Use dark colors for code blocksCopy
                                                                                                                                                                                                                 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
        function getDemographicData(point, dataCollection) {
          if (!dataCollection) {
            return;
          }
          // Request demographic data
          arcgisRest.queryDemographicData({
              studyAreas: [{ "geometry": { "x": point.longitude, "y": point.latitude } }],
              authentication: authentication,
              dataCollections: [dataCollection]
            })
            .then((response) => {
              if (response.results[0].value.FeatureSet.length > 0 &&
                response.results[0].value.FeatureSet[0].features.length > 0) {
                const attributes = response.results[0].value.FeatureSet[0].features[0].attributes;
                showData(attributes, point, dataCollection);
              } else {
                console.log("No data found or point not in the United States.");
              }
            });
        }
Expand

REST API

cURLcURLHTTP
Use dark colors for code blocksCopy
     
1
2
3
4
5
curl https://geoenrich.arcgis.com/arcgis/rest/services/World/geoenrichmentserver/Geoenrichment/enrich? \
-d "studyAreas=[{'geometry':{'x': -74.0060, 'y': 40.7128}}]" \
-d "dataCollections=[educationalattainment]" \
-d "f=json" \
-d "token=<ACCESS_TOKEN>"

Find facts for a 5 minute drive area

In this example the studyAreasOptions parameter is used to define a 5 minute drive time service area instead of the default 1 mile ring buffer. Select a data collection then click on the map to show data within a 5 minute drive area.

Steps

  1. Reference the service.

  2. Define studyAreas to submit a point.

  3. Define studyAreasOptions to create a drive time service area around the point.

  4. Define dataCollections to return a specific lists of variables.

  5. Define returnGeometry as true so the service area can be displayed on the map.

  6. Set the API key.

APIs

ArcGIS API for JavaScriptArcGIS API for JavaScriptEsri LeafletMapLibre GL JSOpenLayersArcGIS REST JSArcGIS API for Python
Expand
Use dark colors for code blocksCopy
                                                                                                                                                                                                                                  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
        function getDemographicData(point, dataCollection) {
          if (!dataCollection) {
            return;
          }
          // Request demographic data
          arcgisRest.queryDemographicData({
              studyAreas: [{ "geometry": { "x": point.longitude, "y": point.latitude } }],
              authentication: authentication,
              dataCollections: [dataCollection],
              params: {"studyareasoptions": '{"areaType": "NetworkServiceArea", "bufferUnits": "Minutes", "bufferRadii": [5], "travel_mode": "Driving"}'},
              returnGeometry: true
            })
            .then((response) => {
              if (response.results[0].value.FeatureSet.length > 0 &&
                response.results[0].value.FeatureSet[0].features.length > 0) {
                const attributes = response.results[0].value.FeatureSet[0].features[0].attributes;
                const geometry = response.results[0].value.FeatureSet[0].features[0].geometry;
                drawGeometry(geometry);
                showData(attributes, point, dataCollection);
              } else {
                console.log("No data found.");
              }
            });
        }
Expand

REST API

cURLcURLHTTP
Use dark colors for code blocksCopy
       
1
2
3
4
5
6
7
curl https://geoenrich.arcgis.com/arcgis/rest/services/World/geoenrichmentserver/Geoenrichment/enrich? \
-d "studyAreas=[{'geometry':{'x': -74.0060, 'y': 40.7128}}]" \
-d "studyAreasOptions={'areaType': 'NetworkServiceArea', 'bufferUnits': 'Minutes', 'bufferRadii': [10],'travel_mode': 'Driving'}" \
-d "dataCollections=HouseholdTotals" \
-d "returnGeometry=true" \
-d "f=json" \
-d "token=<ACCESS_TOKEN>"

Find normalized facts for a 1 mile buffer

In this example the addDerivativeVariables parameter is used to calculate percentages from facts. Use the search box to select a pre-defined location or click on the map to create the default 1 mile ring around a point. The addDerivativeVariables parameter is set to percent. The list of accepted values are percent, index, average, all.

Steps

  1. Reference the service.

  2. Define the studyAreas

  3. Define the dataCollections

  4. Define addDerivativeVariables to return averages

  5. Set the API key.

APIs

ArcGIS API for JavaScriptArcGIS API for JavaScriptEsri LeafletMapLibre GL JSOpenLayersArcGIS REST JSArcGIS API for Python
Expand
Use dark colors for code blocksCopy
                                                                                                                                                                      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
        function getDemographicData(point) {
          // Request demographic data
          arcgisRest.queryDemographicData({
              studyAreas: [{ "geometry": { "x": point.longitude, "y": point.latitude } }],
              dataCollections: ["Health"],
              addderivativevariables: ["average"],
              authentication: authentication
            })
            .then((response) => {
              if (response.results[0].value.FeatureSet.length > 0 &&
                response.results[0].value.FeatureSet[0].features.length > 0) {
                const attributes = response.results[0].value.FeatureSet[0].features[0].attributes;
                showData(attributes, point);
              } else {
                console.log("No data found.");
              }
            });
        }
Expand

REST API

cURLcURLHTTP
Use dark colors for code blocksCopy
      
1
2
3
4
5
6
curl https://geoenrich.arcgis.com/arcgis/rest/services/World/geoenrichmentserver/Geoenrichment/enrich? \
-d "studyAreas=[{'geometry':{'x': -74.0060, 'y': 40.7128}}]" \
-d "dataCollections=Health" \
-d "addDerivativeVariables=average" \
-d "f=json" \
-d "token=<ACCESS_TOKEN>"