@urbankitstudio/atlas 0.6.11 → 0.6.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/data/index.json +7 -7
- package/data/louisiana.json +13 -12
- package/data/minnesota.json +45 -1
- package/data/missouri.json +44 -1
- package/dist/index.cjs +109 -21
- package/dist/index.js +109 -21
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -134,9 +134,9 @@ Omit `?fips=` to get every tracked county in one call.
|
|
|
134
134
|
|
|
135
135
|
## Coverage today
|
|
136
136
|
|
|
137
|
-
The atlas bundles **
|
|
137
|
+
The atlas bundles **241 counties across all 50 US states and DC** (253 verified endpoints), covering the largest counties in each. Call `listStates()` to enumerate the full set.
|
|
138
138
|
|
|
139
|
-
Every state has at least one county on record, and
|
|
139
|
+
Every state has at least one county on record, and 235 of the 241 carry a verified endpoint. The other 6 have `hasPublicRest: false` and an empty `endpoints` array, with `notes` recording the reason and who to contact. Those reasons vary: a subscription-only regional GIS partner, a statewide server that requires an auth token, a state with no county-level parcel authority, a county viewer with no public query API, a county that does not publish owner names online. They ship rather than being omitted, so `findCounty()` still resolves them. **Check `hasPublicRest`** rather than assuming every county has an endpoint; `totals.countiesWithEndpoint` gives the queryable count directly.
|
|
140
140
|
|
|
141
141
|
Counties are added as their public REST endpoints are verified. Package versions bump when data refreshes — pin to a minor range (`^0.x`) to receive new counties without breaking changes.
|
|
142
142
|
|
package/data/index.json
CHANGED
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
"lastUpdated": "2026-10-03",
|
|
4
4
|
"totals": {
|
|
5
5
|
"states": 51,
|
|
6
|
-
"counties":
|
|
7
|
-
"endpoints":
|
|
8
|
-
"countiesWithEndpoint":
|
|
6
|
+
"counties": 241,
|
|
7
|
+
"endpoints": 253,
|
|
8
|
+
"countiesWithEndpoint": 235,
|
|
9
9
|
"countiesUnprobeable": 1
|
|
10
10
|
},
|
|
11
11
|
"states": [
|
|
@@ -197,8 +197,8 @@
|
|
|
197
197
|
"slug": "minnesota",
|
|
198
198
|
"name": "Minnesota",
|
|
199
199
|
"abbrev": "MN",
|
|
200
|
-
"countyCount":
|
|
201
|
-
"endpointCount":
|
|
200
|
+
"countyCount": 3,
|
|
201
|
+
"endpointCount": 3,
|
|
202
202
|
"populated": true
|
|
203
203
|
},
|
|
204
204
|
{
|
|
@@ -213,8 +213,8 @@
|
|
|
213
213
|
"slug": "missouri",
|
|
214
214
|
"name": "Missouri",
|
|
215
215
|
"abbrev": "MO",
|
|
216
|
-
"countyCount":
|
|
217
|
-
"endpointCount":
|
|
216
|
+
"countyCount": 3,
|
|
217
|
+
"endpointCount": 3,
|
|
218
218
|
"populated": true
|
|
219
219
|
},
|
|
220
220
|
{
|
package/data/louisiana.json
CHANGED
|
@@ -111,11 +111,16 @@
|
|
|
111
111
|
"layerIndex": 15,
|
|
112
112
|
"layerName": "Property Information [Parcels]",
|
|
113
113
|
"supportsQuery": true,
|
|
114
|
-
"corsEnabled":
|
|
114
|
+
"corsEnabled": true,
|
|
115
115
|
"searchFields": [
|
|
116
|
+
{
|
|
117
|
+
"name": "PARID",
|
|
118
|
+
"label": "Parcel ID (PARID, per unit)",
|
|
119
|
+
"searchable": true
|
|
120
|
+
},
|
|
116
121
|
{
|
|
117
122
|
"name": "PARCELID",
|
|
118
|
-
"label": "
|
|
123
|
+
"label": "GeoPIN (lot id, shared by condo units)",
|
|
119
124
|
"searchable": true
|
|
120
125
|
},
|
|
121
126
|
{
|
|
@@ -182,19 +187,15 @@
|
|
|
182
187
|
"name": "SQUARE",
|
|
183
188
|
"label": "Square",
|
|
184
189
|
"searchable": false
|
|
185
|
-
},
|
|
186
|
-
{
|
|
187
|
-
"name": "PARID",
|
|
188
|
-
"label": "Parcel Account ID",
|
|
189
|
-
"searchable": true
|
|
190
190
|
}
|
|
191
191
|
],
|
|
192
|
-
"sampleQuery": "https://gis.nola.gov/arcgis/rest/services/apps/property3/MapServer/15/query?where=PARCELID
|
|
192
|
+
"sampleQuery": "https://gis.nola.gov/arcgis/rest/services/apps/property3/MapServer/15/query?where=PARCELID%3D%2741033176%27&outFields=*&returnGeometry=false&f=json&resultRecordCount=1",
|
|
193
193
|
"license": "public",
|
|
194
194
|
"licenseUrl": "https://gis.nola.gov/",
|
|
195
|
-
"status": "
|
|
196
|
-
"lastVerified": "2026-
|
|
197
|
-
"verifiedBy": "manual"
|
|
195
|
+
"status": "live",
|
|
196
|
+
"lastVerified": "2026-10-03",
|
|
197
|
+
"verifiedBy": "manual",
|
|
198
|
+
"attributeSearch": "unsupported"
|
|
198
199
|
}
|
|
199
200
|
],
|
|
200
201
|
"contact": {
|
|
@@ -202,7 +203,7 @@
|
|
|
202
203
|
"url": "https://gis.nola.gov/",
|
|
203
204
|
"email": null
|
|
204
205
|
},
|
|
205
|
-
"notes": "
|
|
206
|
+
"notes": "LIVE 2026-10-03 for lookup by location in clients that complete the TLS chain (see TLS below); no attribute search. Layer 15 refuses any query that NAMES its outFields except an exact PARCELID equality: measured 2026-10-03 on the paid shapes (point + 30 m buffer; 800 m envelope with geometry) and on a scan (OBJECTID>0, resultRecordCount=1), every named column list answers HTTP 200 carrying ArcGIS error 400 \"Failed to execute query.\" in about 0.2 s, while the identical request with outFields=* answers 40 features in 0.28 s and 501 features (957 KB) in 0.65 s. UrbanKit sends outFields=* to this layer (api/_lib/arcgis-quirks.ts, WILDCARD_OUT_FIELDS) and keeps only the role columns. Any predicate that scans the table (1=1, OBJECTID>0, PARCELID IS NOT NULL, an owner LIKE) runs past 40 s even for a single row, so no where-clause search is offered (attributeSearch: unsupported) and owner-name lookup is not available here; the owner columns (OWNERNME1, OWNERNME2) and the mailing address (PSTLADDRESS, PSTLCITY, PSTLSTATE, PSTLZIP5) are returned on every spatial hit (a UrbanKit row keeps PSTLADDRESS, the street line). IDS: PARID is the assessor's per-unit parcel id (e.g. 622-SALEXANDERST) and is listed first so rows key by unit; PARCELID is the GeoPIN, a lot id shared by every condo unit on the lot (a 30 m buffer in the CBD: 40 units, 3 lots, 39 owners), so keying on it would collapse a notice list to one row per lot; TAXBILLID is the tax bill number. Exact PARCELID equality answers in 0.2 s and is the sample query, which is also the predicate the liveness probe falls back to when its first shape (1=1) times out. CORS reflects the request origin. TLS: the server sends an INCOMPLETE certificate chain (leaf without its Sectigo intermediate). Clients that fetch the missing intermediate themselves (curl on Windows, Chromium and Safari through the OS store) connect; Node's fetch fails the handshake with UNABLE_TO_VERIFY_LEAF_SIGNATURE (measured 2026-10-04). UrbanKit's billed bulk-enrichment and radius paths run on Vercel's Edge runtime, which cannot be given a certificate authority and whose handling of an incomplete chain is undocumented and not yet measured, so assume they cannot serve this parish until a keyed test on the deployed function shows otherwise; today an Orleans row ends county-unavailable and is refunded, unchanged from before. The liveness probe pins the intermediate, so its ok reflects the layer, not the paid paths. An agent that fetches this URL from Node must trust the Sectigo intermediate or the request fails before any query runs. Tracked in GitHub issue #906. HISTORY: marked unreachable 2026-08-29 after 463 consecutive failed probes whose predicate (PARCELID IS NOT NULL) is a table scan; the layer was answering spatial queries the whole time. Ownership data looked dated during the 2026-08 checks; the 2026-10-03 rows carry current-looking owner names."
|
|
206
207
|
}
|
|
207
208
|
]
|
|
208
209
|
}
|
package/data/minnesota.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"stateSlug": "minnesota",
|
|
3
3
|
"stateName": "Minnesota",
|
|
4
4
|
"stateAbbrev": "MN",
|
|
5
|
-
"lastUpdated": "2026-
|
|
5
|
+
"lastUpdated": "2026-10-03",
|
|
6
6
|
"counties": [
|
|
7
7
|
{
|
|
8
8
|
"id": "mn-ramsey",
|
|
@@ -166,6 +166,50 @@
|
|
|
166
166
|
"email": null
|
|
167
167
|
},
|
|
168
168
|
"notes": "448,036 polygon parcels covering Minneapolis and the rest of Hennepin County. Verified 2026-05-11: UPPER(OWNER_NM) LIKE '%SMITH%' returns real owners (e.g., 'ALEX D SMITH', 'PAUL LOUIS SMITH'). Owner names are space-padded fixed-width, wrap searches in UPPER() and trim whitespace client-side. Full residential address columns present (HOUSE_NO, FRAC_HOUSE_NO, STREET_NM, MAILING_MUNIC_NM, ZIP_CD). PID is 13-digit composite (parcel-fragment-municipality-section). TORRENS_TYP flag distinguishes Torrens vs. Abstract land per Minnesota's dual-title system. OUTAGE RESOLVED 2026-06-06: the 2026-05 county-side outage cleared -- service re-verified live (448,083 parcels; OWNER_NM queries return real owners)."
|
|
169
|
+
},
|
|
170
|
+
{
|
|
171
|
+
"id": "mn-mille-lacs",
|
|
172
|
+
"state": "MN",
|
|
173
|
+
"stateName": "Minnesota",
|
|
174
|
+
"stateSlug": "minnesota",
|
|
175
|
+
"county": "Mille Lacs",
|
|
176
|
+
"countySlug": "mille-lacs-county",
|
|
177
|
+
"countyFips": "27095",
|
|
178
|
+
"hasPublicRest": true,
|
|
179
|
+
"endpoints": [
|
|
180
|
+
{
|
|
181
|
+
"url": "https://gis.co.mille-lacs.mn.us/arcgis/rest/services/MilleLacs_Public_101/MapServer/35",
|
|
182
|
+
"serviceType": "MapServer",
|
|
183
|
+
"layerIndex": 35,
|
|
184
|
+
"layerName": "Parcels",
|
|
185
|
+
"supportsQuery": true,
|
|
186
|
+
"corsEnabled": true,
|
|
187
|
+
"searchFields": [
|
|
188
|
+
{ "name": "TAXPAYER_NAME", "label": "Taxpayer Name", "searchable": true },
|
|
189
|
+
{ "name": "PARCELID", "label": "Parcel Number", "searchable": true },
|
|
190
|
+
{ "name": "PROPERTY_ADDRESS", "label": "Property Address", "searchable": true },
|
|
191
|
+
{ "name": "PROPERTY_ZIP", "label": "Property ZIP", "searchable": false },
|
|
192
|
+
{ "name": "CITY_TWP_NAME", "label": "City/Township Name", "searchable": true },
|
|
193
|
+
{ "name": "TAXPAYER_ADDRESS_1", "label": "Taxpayer Mailing Address 1", "searchable": true },
|
|
194
|
+
{ "name": "TAXPAYER_ADDRESS_2", "label": "Taxpayer Mailing Address 2", "searchable": false },
|
|
195
|
+
{ "name": "TAXPAYER_ADDRESS_3", "label": "Taxpayer Mailing Address 3", "searchable": false },
|
|
196
|
+
{ "name": "TAXPAYER_ADDRESS_4", "label": "Taxpayer Mailing Address 4", "searchable": false },
|
|
197
|
+
{ "name": "DEEDED_ACRES", "label": "Deeded Acres", "searchable": false }
|
|
198
|
+
],
|
|
199
|
+
"sampleQuery": "https://gis.co.mille-lacs.mn.us/arcgis/rest/services/MilleLacs_Public_101/MapServer/35/query?where=UPPER(TAXPAYER_NAME)%20LIKE%20%27%25SMITH%25%27&outFields=PARCELID,TAXPAYER_NAME,PROPERTY_ADDRESS,TAXPAYER_ADDRESS_1,CITY_TWP_NAME&returnGeometry=false&resultRecordCount=10&f=json",
|
|
200
|
+
"license": "unknown",
|
|
201
|
+
"licenseUrl": "https://www.millelacs.mn.gov/",
|
|
202
|
+
"status": "live",
|
|
203
|
+
"lastVerified": "2026-10-03",
|
|
204
|
+
"verifiedBy": "manual"
|
|
205
|
+
}
|
|
206
|
+
],
|
|
207
|
+
"contact": {
|
|
208
|
+
"department": "Mille Lacs County GIS / Assessor's Office",
|
|
209
|
+
"url": "https://www.millelacs.mn.gov/1185/Assessors-Office",
|
|
210
|
+
"email": null
|
|
211
|
+
},
|
|
212
|
+
"notes": "Mille Lacs County, Minnesota (county seat Milaca) publishes its parcels on its own ArcGIS Server 11.3 as MilleLacs_Public_101/MapServer layer 35 (Parcels), 20,083 rows with a taxpayer name on 2026-10-03. THE OWNER IS IN TAXPAYER_NAME, stored LAST/FIRST with a slash (SMITH/BRIAN & ASHLEY). A column called OWNER_NAME exists but is an empty string on about 97 percent of rows (544 of 20,083 populated on 2026-10-03; not NULL, so IS NOT NULL passes while the value is blank), and where it is populated it names a different party from TAXPAYER_NAME (a contract-for-deed holder or an LLC, for example), so the taxpayer is not always the owner of record. UPPER(OWNER_NAME) LIKE 'SMITH%' returns 0 features. OWNER_NAME is deliberately NOT listed as a search field here: the enrichment classifier takes the first owner-looking field, so listing it would route owner lookups to a mostly blank column. The mailing address is TAXPAYER_ADDRESS_1 to _4 (use _1 for the street); the matching OWNER_ADDRESS_1 to _4 columns were not checked. The site address is PROPERTY_ADDRESS with PROPERTY_ZIP and CITY_TWP_NAME. Search with UPPER(TAXPAYER_NAME) LIKE '%SMITH%'. maxRecordCount is 2000. CORS reflects the request Origin (Access-Control-Allow-Origin echoed back, credentials true), and named outFields work. No license text was found. Do not use the statewide Minnesota parcel layers for owner search: the DNR plan_parcels_minnesota layer has owner_name but no county, parcel id or address field, so a query bleeds into neighbouring counties, and the MnGeo plan_parcels_open layer filters by co_code 27095 (20,928 rows) but its owner_name is blank for all but 550 rows (control: Itasca 27061, 0 populated). The same county server also lists Assessors/TaxParcels/MapServer/0, which has only a parcel name and geometry. Verified live 2026-10-03: taxpayer SMITH returned rows (first SMITH/BRIAN & ASHLEY, parcel 11-010-0100, 17903 130TH AVE, Milaca Township)."
|
|
169
213
|
}
|
|
170
214
|
]
|
|
171
215
|
}
|
package/data/missouri.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"stateSlug": "missouri",
|
|
3
3
|
"stateName": "Missouri",
|
|
4
4
|
"stateAbbrev": "MO",
|
|
5
|
-
"lastUpdated": "2026-
|
|
5
|
+
"lastUpdated": "2026-10-03",
|
|
6
6
|
"counties": [
|
|
7
7
|
{
|
|
8
8
|
"id": "mo-jackson",
|
|
@@ -94,6 +94,49 @@
|
|
|
94
94
|
"email": null
|
|
95
95
|
},
|
|
96
96
|
"notes": "St. Louis County MO (St. Louis metro west/south, county seat Clayton, NOT the independent City of St. Louis) provides AGS_Parcels/MapServer/0 with 30+ fields: LOCATOR (parcel ID), PARENT_LOC, TAXYR, OWNER_NAME, PROP_ADRNUM, PROP_ADD, PROP_ZIP, OWN_ADD, OWN_CITY, OWN_STATE, OWN_ZIP, SCHSUB (school subdivision), MUNYCODE (municipality code), TAXCODE, ASSTIMPVAL, TOTASSMT, APPLANDVAL, APPIMPVAL, TOTAPVAL, PROPCLASS, LUC, LANDUSE2, LUCODE, TENURE, BLDGNAME, TWPNAME. Query confirmed live: UPPER(OWNER_NAME) LIKE '%SMITH%' returns real results (e.g., 'SMITH KIMBERLY & ANTHONY T/E' at '11041 LILAC AVE'). St. Louis County MO (FIPS 29189) is a separate entity from the City of St. Louis (FIPS 29510, an independent city not part of any county). The GeoData portal at data-stlcogis.opendata.arcgis.com provides open data downloads and GeoServices API links. The maps.stlouisco.com server is the live REST host."
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"id": "mo-st-louis-city",
|
|
100
|
+
"state": "MO",
|
|
101
|
+
"stateName": "Missouri",
|
|
102
|
+
"stateSlug": "missouri",
|
|
103
|
+
"county": "St. Louis city",
|
|
104
|
+
"countySlug": "st-louis-city",
|
|
105
|
+
"countyFips": "29510",
|
|
106
|
+
"hasPublicRest": true,
|
|
107
|
+
"endpoints": [
|
|
108
|
+
{
|
|
109
|
+
"url": "https://maps8.stlouis-mo.gov/arcgis/rest/services/ASSESSOR/Assessor_Public_Parcels/MapServer/11",
|
|
110
|
+
"serviceType": "MapServer",
|
|
111
|
+
"layerIndex": 11,
|
|
112
|
+
"layerName": "Parcels",
|
|
113
|
+
"supportsQuery": true,
|
|
114
|
+
"corsEnabled": false,
|
|
115
|
+
"searchFields": [
|
|
116
|
+
{ "name": "OwnerName", "label": "Owner Name", "searchable": true },
|
|
117
|
+
{ "name": "OwnerName2", "label": "Owner Name 2", "searchable": false },
|
|
118
|
+
{ "name": "ParcelId", "label": "Parcel ID", "searchable": true },
|
|
119
|
+
{ "name": "SITEADDR", "label": "Site Address", "searchable": true },
|
|
120
|
+
{ "name": "OwnerAddr", "label": "Owner Mailing Address", "searchable": true },
|
|
121
|
+
{ "name": "OwnerCity", "label": "Owner Mailing City", "searchable": false },
|
|
122
|
+
{ "name": "OwnerState", "label": "Owner Mailing State", "searchable": false },
|
|
123
|
+
{ "name": "OwnerZIP", "label": "Owner Mailing ZIP", "searchable": false },
|
|
124
|
+
{ "name": "ZIP", "label": "Site ZIP", "searchable": false }
|
|
125
|
+
],
|
|
126
|
+
"sampleQuery": "https://maps8.stlouis-mo.gov/arcgis/rest/services/ASSESSOR/Assessor_Public_Parcels/MapServer/11/query?where=UPPER(OwnerName)%20LIKE%20%27SMITH%25%27&outFields=ParcelId,OwnerName,OwnerAddr,OwnerCity,SITEADDR&returnGeometry=false&resultRecordCount=10&f=json",
|
|
127
|
+
"license": "unknown",
|
|
128
|
+
"licenseUrl": "https://www.stlouis-mo.gov/data/parcels.cfm",
|
|
129
|
+
"status": "live",
|
|
130
|
+
"lastVerified": "2026-10-03",
|
|
131
|
+
"verifiedBy": "manual"
|
|
132
|
+
}
|
|
133
|
+
],
|
|
134
|
+
"contact": {
|
|
135
|
+
"department": "City of St. Louis Assessor's Office",
|
|
136
|
+
"url": "https://www.stlouis-mo.gov/data/parcels.cfm",
|
|
137
|
+
"email": null
|
|
138
|
+
},
|
|
139
|
+
"notes": "City of St. Louis, Missouri (FIPS 29510) is an independent city that belongs to no county, and it is NOT St. Louis County (29189, a separate record in this file on a different server). The Assessor's public parcels layer is ASSESSOR/Assessor_Public_Parcels/MapServer layer 11 (Parcels) on ArcGIS Server 11.2, listed on the city's data page. SERVER-SIDE ONLY: the server sends Access-Control-Allow-Origin only to its own origin (www.stlouis-mo.gov); for any other Origin a GET and its preflight return only Vary: Origin and Access-Control-Allow-Private-Network: true, so a browser on another site cannot read it and corsEnabled is false. Query it from a server, the metered API or the MCP, not from page script. The owner is OwnerName (max 40 characters, so long names are truncated at the source) with OwnerName2; the mailing address is OwnerAddr plus OwnerCity (max 13 characters, can read ST LOUIS MO) with OwnerState, OwnerZIP and OwnerCountry; the parcel id is ParcelId (11 digits, LowerParcelId also exists). SITEADDR carries runs of internal spaces (2233 PARK AV) and trailing padding, so a LIKE on a full street string misses; search on the house number plus a street word, or collapse whitespace on the client. Search with UPPER(OwnerName) LIKE 'SMITH%'; broad searches return exceededTransferLimit true at the 2000-row page. The layer has 194 fields and this record lists a subset. Layer 11 includes condominium master parcels, and the sub-accounts are layer 10 (not examined). No license or terms text is published on the data page. Verified live 2026-10-03: owner SMITH returned rows (first SMITH, DAVID E & SANDRA L TRS, parcel 22669130000, 2233 PARK AVE)."
|
|
97
140
|
}
|
|
98
141
|
]
|
|
99
142
|
}
|
package/dist/index.cjs
CHANGED
|
@@ -18,9 +18,9 @@ var data_default = {
|
|
|
18
18
|
lastUpdated: "2026-10-03",
|
|
19
19
|
totals: {
|
|
20
20
|
states: 51,
|
|
21
|
-
counties:
|
|
22
|
-
endpoints:
|
|
23
|
-
countiesWithEndpoint:
|
|
21
|
+
counties: 241,
|
|
22
|
+
endpoints: 253,
|
|
23
|
+
countiesWithEndpoint: 235,
|
|
24
24
|
countiesUnprobeable: 1
|
|
25
25
|
},
|
|
26
26
|
states: [
|
|
@@ -212,8 +212,8 @@ var data_default = {
|
|
|
212
212
|
slug: "minnesota",
|
|
213
213
|
name: "Minnesota",
|
|
214
214
|
abbrev: "MN",
|
|
215
|
-
countyCount:
|
|
216
|
-
endpointCount:
|
|
215
|
+
countyCount: 3,
|
|
216
|
+
endpointCount: 3,
|
|
217
217
|
populated: true
|
|
218
218
|
},
|
|
219
219
|
{
|
|
@@ -228,8 +228,8 @@ var data_default = {
|
|
|
228
228
|
slug: "missouri",
|
|
229
229
|
name: "Missouri",
|
|
230
230
|
abbrev: "MO",
|
|
231
|
-
countyCount:
|
|
232
|
-
endpointCount:
|
|
231
|
+
countyCount: 3,
|
|
232
|
+
endpointCount: 3,
|
|
233
233
|
populated: true
|
|
234
234
|
},
|
|
235
235
|
{
|
|
@@ -14228,11 +14228,16 @@ var louisiana_default = {
|
|
|
14228
14228
|
layerIndex: 15,
|
|
14229
14229
|
layerName: "Property Information [Parcels]",
|
|
14230
14230
|
supportsQuery: true,
|
|
14231
|
-
corsEnabled:
|
|
14231
|
+
corsEnabled: true,
|
|
14232
14232
|
searchFields: [
|
|
14233
|
+
{
|
|
14234
|
+
name: "PARID",
|
|
14235
|
+
label: "Parcel ID (PARID, per unit)",
|
|
14236
|
+
searchable: true
|
|
14237
|
+
},
|
|
14233
14238
|
{
|
|
14234
14239
|
name: "PARCELID",
|
|
14235
|
-
label: "
|
|
14240
|
+
label: "GeoPIN (lot id, shared by condo units)",
|
|
14236
14241
|
searchable: true
|
|
14237
14242
|
},
|
|
14238
14243
|
{
|
|
@@ -14299,19 +14304,15 @@ var louisiana_default = {
|
|
|
14299
14304
|
name: "SQUARE",
|
|
14300
14305
|
label: "Square",
|
|
14301
14306
|
searchable: false
|
|
14302
|
-
},
|
|
14303
|
-
{
|
|
14304
|
-
name: "PARID",
|
|
14305
|
-
label: "Parcel Account ID",
|
|
14306
|
-
searchable: true
|
|
14307
14307
|
}
|
|
14308
14308
|
],
|
|
14309
|
-
sampleQuery: "https://gis.nola.gov/arcgis/rest/services/apps/property3/MapServer/15/query?where=PARCELID
|
|
14309
|
+
sampleQuery: "https://gis.nola.gov/arcgis/rest/services/apps/property3/MapServer/15/query?where=PARCELID%3D%2741033176%27&outFields=*&returnGeometry=false&f=json&resultRecordCount=1",
|
|
14310
14310
|
license: "public",
|
|
14311
14311
|
licenseUrl: "https://gis.nola.gov/",
|
|
14312
|
-
status: "
|
|
14313
|
-
lastVerified: "2026-
|
|
14314
|
-
verifiedBy: "manual"
|
|
14312
|
+
status: "live",
|
|
14313
|
+
lastVerified: "2026-10-03",
|
|
14314
|
+
verifiedBy: "manual",
|
|
14315
|
+
attributeSearch: "unsupported"
|
|
14315
14316
|
}
|
|
14316
14317
|
],
|
|
14317
14318
|
contact: {
|
|
@@ -14319,7 +14320,7 @@ var louisiana_default = {
|
|
|
14319
14320
|
url: "https://gis.nola.gov/",
|
|
14320
14321
|
email: null
|
|
14321
14322
|
},
|
|
14322
|
-
notes: `
|
|
14323
|
+
notes: `LIVE 2026-10-03 for lookup by location in clients that complete the TLS chain (see TLS below); no attribute search. Layer 15 refuses any query that NAMES its outFields except an exact PARCELID equality: measured 2026-10-03 on the paid shapes (point + 30 m buffer; 800 m envelope with geometry) and on a scan (OBJECTID>0, resultRecordCount=1), every named column list answers HTTP 200 carrying ArcGIS error 400 "Failed to execute query." in about 0.2 s, while the identical request with outFields=* answers 40 features in 0.28 s and 501 features (957 KB) in 0.65 s. UrbanKit sends outFields=* to this layer (api/_lib/arcgis-quirks.ts, WILDCARD_OUT_FIELDS) and keeps only the role columns. Any predicate that scans the table (1=1, OBJECTID>0, PARCELID IS NOT NULL, an owner LIKE) runs past 40 s even for a single row, so no where-clause search is offered (attributeSearch: unsupported) and owner-name lookup is not available here; the owner columns (OWNERNME1, OWNERNME2) and the mailing address (PSTLADDRESS, PSTLCITY, PSTLSTATE, PSTLZIP5) are returned on every spatial hit (a UrbanKit row keeps PSTLADDRESS, the street line). IDS: PARID is the assessor's per-unit parcel id (e.g. 622-SALEXANDERST) and is listed first so rows key by unit; PARCELID is the GeoPIN, a lot id shared by every condo unit on the lot (a 30 m buffer in the CBD: 40 units, 3 lots, 39 owners), so keying on it would collapse a notice list to one row per lot; TAXBILLID is the tax bill number. Exact PARCELID equality answers in 0.2 s and is the sample query, which is also the predicate the liveness probe falls back to when its first shape (1=1) times out. CORS reflects the request origin. TLS: the server sends an INCOMPLETE certificate chain (leaf without its Sectigo intermediate). Clients that fetch the missing intermediate themselves (curl on Windows, Chromium and Safari through the OS store) connect; Node's fetch fails the handshake with UNABLE_TO_VERIFY_LEAF_SIGNATURE (measured 2026-10-04). UrbanKit's billed bulk-enrichment and radius paths run on Vercel's Edge runtime, which cannot be given a certificate authority and whose handling of an incomplete chain is undocumented and not yet measured, so assume they cannot serve this parish until a keyed test on the deployed function shows otherwise; today an Orleans row ends county-unavailable and is refunded, unchanged from before. The liveness probe pins the intermediate, so its ok reflects the layer, not the paid paths. An agent that fetches this URL from Node must trust the Sectigo intermediate or the request fails before any query runs. Tracked in GitHub issue #906. HISTORY: marked unreachable 2026-08-29 after 463 consecutive failed probes whose predicate (PARCELID IS NOT NULL) is a table scan; the layer was answering spatial queries the whole time. Ownership data looked dated during the 2026-08 checks; the 2026-10-03 rows carry current-looking owner names.`
|
|
14323
14324
|
}
|
|
14324
14325
|
]
|
|
14325
14326
|
};
|
|
@@ -15449,7 +15450,7 @@ var minnesota_default = {
|
|
|
15449
15450
|
stateSlug: "minnesota",
|
|
15450
15451
|
stateName: "Minnesota",
|
|
15451
15452
|
stateAbbrev: "MN",
|
|
15452
|
-
lastUpdated: "2026-
|
|
15453
|
+
lastUpdated: "2026-10-03",
|
|
15453
15454
|
counties: [
|
|
15454
15455
|
{
|
|
15455
15456
|
id: "mn-ramsey",
|
|
@@ -15613,6 +15614,50 @@ var minnesota_default = {
|
|
|
15613
15614
|
email: null
|
|
15614
15615
|
},
|
|
15615
15616
|
notes: "448,036 polygon parcels covering Minneapolis and the rest of Hennepin County. Verified 2026-05-11: UPPER(OWNER_NM) LIKE '%SMITH%' returns real owners (e.g., 'ALEX D SMITH', 'PAUL LOUIS SMITH'). Owner names are space-padded fixed-width, wrap searches in UPPER() and trim whitespace client-side. Full residential address columns present (HOUSE_NO, FRAC_HOUSE_NO, STREET_NM, MAILING_MUNIC_NM, ZIP_CD). PID is 13-digit composite (parcel-fragment-municipality-section). TORRENS_TYP flag distinguishes Torrens vs. Abstract land per Minnesota's dual-title system. OUTAGE RESOLVED 2026-06-06: the 2026-05 county-side outage cleared -- service re-verified live (448,083 parcels; OWNER_NM queries return real owners)."
|
|
15617
|
+
},
|
|
15618
|
+
{
|
|
15619
|
+
id: "mn-mille-lacs",
|
|
15620
|
+
state: "MN",
|
|
15621
|
+
stateName: "Minnesota",
|
|
15622
|
+
stateSlug: "minnesota",
|
|
15623
|
+
county: "Mille Lacs",
|
|
15624
|
+
countySlug: "mille-lacs-county",
|
|
15625
|
+
countyFips: "27095",
|
|
15626
|
+
hasPublicRest: true,
|
|
15627
|
+
endpoints: [
|
|
15628
|
+
{
|
|
15629
|
+
url: "https://gis.co.mille-lacs.mn.us/arcgis/rest/services/MilleLacs_Public_101/MapServer/35",
|
|
15630
|
+
serviceType: "MapServer",
|
|
15631
|
+
layerIndex: 35,
|
|
15632
|
+
layerName: "Parcels",
|
|
15633
|
+
supportsQuery: true,
|
|
15634
|
+
corsEnabled: true,
|
|
15635
|
+
searchFields: [
|
|
15636
|
+
{ name: "TAXPAYER_NAME", label: "Taxpayer Name", searchable: true },
|
|
15637
|
+
{ name: "PARCELID", label: "Parcel Number", searchable: true },
|
|
15638
|
+
{ name: "PROPERTY_ADDRESS", label: "Property Address", searchable: true },
|
|
15639
|
+
{ name: "PROPERTY_ZIP", label: "Property ZIP", searchable: false },
|
|
15640
|
+
{ name: "CITY_TWP_NAME", label: "City/Township Name", searchable: true },
|
|
15641
|
+
{ name: "TAXPAYER_ADDRESS_1", label: "Taxpayer Mailing Address 1", searchable: true },
|
|
15642
|
+
{ name: "TAXPAYER_ADDRESS_2", label: "Taxpayer Mailing Address 2", searchable: false },
|
|
15643
|
+
{ name: "TAXPAYER_ADDRESS_3", label: "Taxpayer Mailing Address 3", searchable: false },
|
|
15644
|
+
{ name: "TAXPAYER_ADDRESS_4", label: "Taxpayer Mailing Address 4", searchable: false },
|
|
15645
|
+
{ name: "DEEDED_ACRES", label: "Deeded Acres", searchable: false }
|
|
15646
|
+
],
|
|
15647
|
+
sampleQuery: "https://gis.co.mille-lacs.mn.us/arcgis/rest/services/MilleLacs_Public_101/MapServer/35/query?where=UPPER(TAXPAYER_NAME)%20LIKE%20%27%25SMITH%25%27&outFields=PARCELID,TAXPAYER_NAME,PROPERTY_ADDRESS,TAXPAYER_ADDRESS_1,CITY_TWP_NAME&returnGeometry=false&resultRecordCount=10&f=json",
|
|
15648
|
+
license: "unknown",
|
|
15649
|
+
licenseUrl: "https://www.millelacs.mn.gov/",
|
|
15650
|
+
status: "live",
|
|
15651
|
+
lastVerified: "2026-10-03",
|
|
15652
|
+
verifiedBy: "manual"
|
|
15653
|
+
}
|
|
15654
|
+
],
|
|
15655
|
+
contact: {
|
|
15656
|
+
department: "Mille Lacs County GIS / Assessor's Office",
|
|
15657
|
+
url: "https://www.millelacs.mn.gov/1185/Assessors-Office",
|
|
15658
|
+
email: null
|
|
15659
|
+
},
|
|
15660
|
+
notes: "Mille Lacs County, Minnesota (county seat Milaca) publishes its parcels on its own ArcGIS Server 11.3 as MilleLacs_Public_101/MapServer layer 35 (Parcels), 20,083 rows with a taxpayer name on 2026-10-03. THE OWNER IS IN TAXPAYER_NAME, stored LAST/FIRST with a slash (SMITH/BRIAN & ASHLEY). A column called OWNER_NAME exists but is an empty string on about 97 percent of rows (544 of 20,083 populated on 2026-10-03; not NULL, so IS NOT NULL passes while the value is blank), and where it is populated it names a different party from TAXPAYER_NAME (a contract-for-deed holder or an LLC, for example), so the taxpayer is not always the owner of record. UPPER(OWNER_NAME) LIKE 'SMITH%' returns 0 features. OWNER_NAME is deliberately NOT listed as a search field here: the enrichment classifier takes the first owner-looking field, so listing it would route owner lookups to a mostly blank column. The mailing address is TAXPAYER_ADDRESS_1 to _4 (use _1 for the street); the matching OWNER_ADDRESS_1 to _4 columns were not checked. The site address is PROPERTY_ADDRESS with PROPERTY_ZIP and CITY_TWP_NAME. Search with UPPER(TAXPAYER_NAME) LIKE '%SMITH%'. maxRecordCount is 2000. CORS reflects the request Origin (Access-Control-Allow-Origin echoed back, credentials true), and named outFields work. No license text was found. Do not use the statewide Minnesota parcel layers for owner search: the DNR plan_parcels_minnesota layer has owner_name but no county, parcel id or address field, so a query bleeds into neighbouring counties, and the MnGeo plan_parcels_open layer filters by co_code 27095 (20,928 rows) but its owner_name is blank for all but 550 rows (control: Itasca 27061, 0 populated). The same county server also lists Assessors/TaxParcels/MapServer/0, which has only a parcel name and geometry. Verified live 2026-10-03: taxpayer SMITH returned rows (first SMITH/BRIAN & ASHLEY, parcel 11-010-0100, 17903 130TH AVE, Milaca Township)."
|
|
15616
15661
|
}
|
|
15617
15662
|
]
|
|
15618
15663
|
};
|
|
@@ -15718,7 +15763,7 @@ var missouri_default = {
|
|
|
15718
15763
|
stateSlug: "missouri",
|
|
15719
15764
|
stateName: "Missouri",
|
|
15720
15765
|
stateAbbrev: "MO",
|
|
15721
|
-
lastUpdated: "2026-
|
|
15766
|
+
lastUpdated: "2026-10-03",
|
|
15722
15767
|
counties: [
|
|
15723
15768
|
{
|
|
15724
15769
|
id: "mo-jackson",
|
|
@@ -15810,6 +15855,49 @@ var missouri_default = {
|
|
|
15810
15855
|
email: null
|
|
15811
15856
|
},
|
|
15812
15857
|
notes: "St. Louis County MO (St. Louis metro west/south, county seat Clayton, NOT the independent City of St. Louis) provides AGS_Parcels/MapServer/0 with 30+ fields: LOCATOR (parcel ID), PARENT_LOC, TAXYR, OWNER_NAME, PROP_ADRNUM, PROP_ADD, PROP_ZIP, OWN_ADD, OWN_CITY, OWN_STATE, OWN_ZIP, SCHSUB (school subdivision), MUNYCODE (municipality code), TAXCODE, ASSTIMPVAL, TOTASSMT, APPLANDVAL, APPIMPVAL, TOTAPVAL, PROPCLASS, LUC, LANDUSE2, LUCODE, TENURE, BLDGNAME, TWPNAME. Query confirmed live: UPPER(OWNER_NAME) LIKE '%SMITH%' returns real results (e.g., 'SMITH KIMBERLY & ANTHONY T/E' at '11041 LILAC AVE'). St. Louis County MO (FIPS 29189) is a separate entity from the City of St. Louis (FIPS 29510, an independent city not part of any county). The GeoData portal at data-stlcogis.opendata.arcgis.com provides open data downloads and GeoServices API links. The maps.stlouisco.com server is the live REST host."
|
|
15858
|
+
},
|
|
15859
|
+
{
|
|
15860
|
+
id: "mo-st-louis-city",
|
|
15861
|
+
state: "MO",
|
|
15862
|
+
stateName: "Missouri",
|
|
15863
|
+
stateSlug: "missouri",
|
|
15864
|
+
county: "St. Louis city",
|
|
15865
|
+
countySlug: "st-louis-city",
|
|
15866
|
+
countyFips: "29510",
|
|
15867
|
+
hasPublicRest: true,
|
|
15868
|
+
endpoints: [
|
|
15869
|
+
{
|
|
15870
|
+
url: "https://maps8.stlouis-mo.gov/arcgis/rest/services/ASSESSOR/Assessor_Public_Parcels/MapServer/11",
|
|
15871
|
+
serviceType: "MapServer",
|
|
15872
|
+
layerIndex: 11,
|
|
15873
|
+
layerName: "Parcels",
|
|
15874
|
+
supportsQuery: true,
|
|
15875
|
+
corsEnabled: false,
|
|
15876
|
+
searchFields: [
|
|
15877
|
+
{ name: "OwnerName", label: "Owner Name", searchable: true },
|
|
15878
|
+
{ name: "OwnerName2", label: "Owner Name 2", searchable: false },
|
|
15879
|
+
{ name: "ParcelId", label: "Parcel ID", searchable: true },
|
|
15880
|
+
{ name: "SITEADDR", label: "Site Address", searchable: true },
|
|
15881
|
+
{ name: "OwnerAddr", label: "Owner Mailing Address", searchable: true },
|
|
15882
|
+
{ name: "OwnerCity", label: "Owner Mailing City", searchable: false },
|
|
15883
|
+
{ name: "OwnerState", label: "Owner Mailing State", searchable: false },
|
|
15884
|
+
{ name: "OwnerZIP", label: "Owner Mailing ZIP", searchable: false },
|
|
15885
|
+
{ name: "ZIP", label: "Site ZIP", searchable: false }
|
|
15886
|
+
],
|
|
15887
|
+
sampleQuery: "https://maps8.stlouis-mo.gov/arcgis/rest/services/ASSESSOR/Assessor_Public_Parcels/MapServer/11/query?where=UPPER(OwnerName)%20LIKE%20%27SMITH%25%27&outFields=ParcelId,OwnerName,OwnerAddr,OwnerCity,SITEADDR&returnGeometry=false&resultRecordCount=10&f=json",
|
|
15888
|
+
license: "unknown",
|
|
15889
|
+
licenseUrl: "https://www.stlouis-mo.gov/data/parcels.cfm",
|
|
15890
|
+
status: "live",
|
|
15891
|
+
lastVerified: "2026-10-03",
|
|
15892
|
+
verifiedBy: "manual"
|
|
15893
|
+
}
|
|
15894
|
+
],
|
|
15895
|
+
contact: {
|
|
15896
|
+
department: "City of St. Louis Assessor's Office",
|
|
15897
|
+
url: "https://www.stlouis-mo.gov/data/parcels.cfm",
|
|
15898
|
+
email: null
|
|
15899
|
+
},
|
|
15900
|
+
notes: "City of St. Louis, Missouri (FIPS 29510) is an independent city that belongs to no county, and it is NOT St. Louis County (29189, a separate record in this file on a different server). The Assessor's public parcels layer is ASSESSOR/Assessor_Public_Parcels/MapServer layer 11 (Parcels) on ArcGIS Server 11.2, listed on the city's data page. SERVER-SIDE ONLY: the server sends Access-Control-Allow-Origin only to its own origin (www.stlouis-mo.gov); for any other Origin a GET and its preflight return only Vary: Origin and Access-Control-Allow-Private-Network: true, so a browser on another site cannot read it and corsEnabled is false. Query it from a server, the metered API or the MCP, not from page script. The owner is OwnerName (max 40 characters, so long names are truncated at the source) with OwnerName2; the mailing address is OwnerAddr plus OwnerCity (max 13 characters, can read ST LOUIS MO) with OwnerState, OwnerZIP and OwnerCountry; the parcel id is ParcelId (11 digits, LowerParcelId also exists). SITEADDR carries runs of internal spaces (2233 PARK AV) and trailing padding, so a LIKE on a full street string misses; search on the house number plus a street word, or collapse whitespace on the client. Search with UPPER(OwnerName) LIKE 'SMITH%'; broad searches return exceededTransferLimit true at the 2000-row page. The layer has 194 fields and this record lists a subset. Layer 11 includes condominium master parcels, and the sub-accounts are layer 10 (not examined). No license or terms text is published on the data page. Verified live 2026-10-03: owner SMITH returned rows (first SMITH, DAVID E & SANDRA L TRS, parcel 22669130000, 2233 PARK AVE)."
|
|
15813
15901
|
}
|
|
15814
15902
|
]
|
|
15815
15903
|
};
|
package/dist/index.js
CHANGED
|
@@ -16,9 +16,9 @@ var data_default = {
|
|
|
16
16
|
lastUpdated: "2026-10-03",
|
|
17
17
|
totals: {
|
|
18
18
|
states: 51,
|
|
19
|
-
counties:
|
|
20
|
-
endpoints:
|
|
21
|
-
countiesWithEndpoint:
|
|
19
|
+
counties: 241,
|
|
20
|
+
endpoints: 253,
|
|
21
|
+
countiesWithEndpoint: 235,
|
|
22
22
|
countiesUnprobeable: 1
|
|
23
23
|
},
|
|
24
24
|
states: [
|
|
@@ -210,8 +210,8 @@ var data_default = {
|
|
|
210
210
|
slug: "minnesota",
|
|
211
211
|
name: "Minnesota",
|
|
212
212
|
abbrev: "MN",
|
|
213
|
-
countyCount:
|
|
214
|
-
endpointCount:
|
|
213
|
+
countyCount: 3,
|
|
214
|
+
endpointCount: 3,
|
|
215
215
|
populated: true
|
|
216
216
|
},
|
|
217
217
|
{
|
|
@@ -226,8 +226,8 @@ var data_default = {
|
|
|
226
226
|
slug: "missouri",
|
|
227
227
|
name: "Missouri",
|
|
228
228
|
abbrev: "MO",
|
|
229
|
-
countyCount:
|
|
230
|
-
endpointCount:
|
|
229
|
+
countyCount: 3,
|
|
230
|
+
endpointCount: 3,
|
|
231
231
|
populated: true
|
|
232
232
|
},
|
|
233
233
|
{
|
|
@@ -14226,11 +14226,16 @@ var louisiana_default = {
|
|
|
14226
14226
|
layerIndex: 15,
|
|
14227
14227
|
layerName: "Property Information [Parcels]",
|
|
14228
14228
|
supportsQuery: true,
|
|
14229
|
-
corsEnabled:
|
|
14229
|
+
corsEnabled: true,
|
|
14230
14230
|
searchFields: [
|
|
14231
|
+
{
|
|
14232
|
+
name: "PARID",
|
|
14233
|
+
label: "Parcel ID (PARID, per unit)",
|
|
14234
|
+
searchable: true
|
|
14235
|
+
},
|
|
14231
14236
|
{
|
|
14232
14237
|
name: "PARCELID",
|
|
14233
|
-
label: "
|
|
14238
|
+
label: "GeoPIN (lot id, shared by condo units)",
|
|
14234
14239
|
searchable: true
|
|
14235
14240
|
},
|
|
14236
14241
|
{
|
|
@@ -14297,19 +14302,15 @@ var louisiana_default = {
|
|
|
14297
14302
|
name: "SQUARE",
|
|
14298
14303
|
label: "Square",
|
|
14299
14304
|
searchable: false
|
|
14300
|
-
},
|
|
14301
|
-
{
|
|
14302
|
-
name: "PARID",
|
|
14303
|
-
label: "Parcel Account ID",
|
|
14304
|
-
searchable: true
|
|
14305
14305
|
}
|
|
14306
14306
|
],
|
|
14307
|
-
sampleQuery: "https://gis.nola.gov/arcgis/rest/services/apps/property3/MapServer/15/query?where=PARCELID
|
|
14307
|
+
sampleQuery: "https://gis.nola.gov/arcgis/rest/services/apps/property3/MapServer/15/query?where=PARCELID%3D%2741033176%27&outFields=*&returnGeometry=false&f=json&resultRecordCount=1",
|
|
14308
14308
|
license: "public",
|
|
14309
14309
|
licenseUrl: "https://gis.nola.gov/",
|
|
14310
|
-
status: "
|
|
14311
|
-
lastVerified: "2026-
|
|
14312
|
-
verifiedBy: "manual"
|
|
14310
|
+
status: "live",
|
|
14311
|
+
lastVerified: "2026-10-03",
|
|
14312
|
+
verifiedBy: "manual",
|
|
14313
|
+
attributeSearch: "unsupported"
|
|
14313
14314
|
}
|
|
14314
14315
|
],
|
|
14315
14316
|
contact: {
|
|
@@ -14317,7 +14318,7 @@ var louisiana_default = {
|
|
|
14317
14318
|
url: "https://gis.nola.gov/",
|
|
14318
14319
|
email: null
|
|
14319
14320
|
},
|
|
14320
|
-
notes: `
|
|
14321
|
+
notes: `LIVE 2026-10-03 for lookup by location in clients that complete the TLS chain (see TLS below); no attribute search. Layer 15 refuses any query that NAMES its outFields except an exact PARCELID equality: measured 2026-10-03 on the paid shapes (point + 30 m buffer; 800 m envelope with geometry) and on a scan (OBJECTID>0, resultRecordCount=1), every named column list answers HTTP 200 carrying ArcGIS error 400 "Failed to execute query." in about 0.2 s, while the identical request with outFields=* answers 40 features in 0.28 s and 501 features (957 KB) in 0.65 s. UrbanKit sends outFields=* to this layer (api/_lib/arcgis-quirks.ts, WILDCARD_OUT_FIELDS) and keeps only the role columns. Any predicate that scans the table (1=1, OBJECTID>0, PARCELID IS NOT NULL, an owner LIKE) runs past 40 s even for a single row, so no where-clause search is offered (attributeSearch: unsupported) and owner-name lookup is not available here; the owner columns (OWNERNME1, OWNERNME2) and the mailing address (PSTLADDRESS, PSTLCITY, PSTLSTATE, PSTLZIP5) are returned on every spatial hit (a UrbanKit row keeps PSTLADDRESS, the street line). IDS: PARID is the assessor's per-unit parcel id (e.g. 622-SALEXANDERST) and is listed first so rows key by unit; PARCELID is the GeoPIN, a lot id shared by every condo unit on the lot (a 30 m buffer in the CBD: 40 units, 3 lots, 39 owners), so keying on it would collapse a notice list to one row per lot; TAXBILLID is the tax bill number. Exact PARCELID equality answers in 0.2 s and is the sample query, which is also the predicate the liveness probe falls back to when its first shape (1=1) times out. CORS reflects the request origin. TLS: the server sends an INCOMPLETE certificate chain (leaf without its Sectigo intermediate). Clients that fetch the missing intermediate themselves (curl on Windows, Chromium and Safari through the OS store) connect; Node's fetch fails the handshake with UNABLE_TO_VERIFY_LEAF_SIGNATURE (measured 2026-10-04). UrbanKit's billed bulk-enrichment and radius paths run on Vercel's Edge runtime, which cannot be given a certificate authority and whose handling of an incomplete chain is undocumented and not yet measured, so assume they cannot serve this parish until a keyed test on the deployed function shows otherwise; today an Orleans row ends county-unavailable and is refunded, unchanged from before. The liveness probe pins the intermediate, so its ok reflects the layer, not the paid paths. An agent that fetches this URL from Node must trust the Sectigo intermediate or the request fails before any query runs. Tracked in GitHub issue #906. HISTORY: marked unreachable 2026-08-29 after 463 consecutive failed probes whose predicate (PARCELID IS NOT NULL) is a table scan; the layer was answering spatial queries the whole time. Ownership data looked dated during the 2026-08 checks; the 2026-10-03 rows carry current-looking owner names.`
|
|
14321
14322
|
}
|
|
14322
14323
|
]
|
|
14323
14324
|
};
|
|
@@ -15447,7 +15448,7 @@ var minnesota_default = {
|
|
|
15447
15448
|
stateSlug: "minnesota",
|
|
15448
15449
|
stateName: "Minnesota",
|
|
15449
15450
|
stateAbbrev: "MN",
|
|
15450
|
-
lastUpdated: "2026-
|
|
15451
|
+
lastUpdated: "2026-10-03",
|
|
15451
15452
|
counties: [
|
|
15452
15453
|
{
|
|
15453
15454
|
id: "mn-ramsey",
|
|
@@ -15611,6 +15612,50 @@ var minnesota_default = {
|
|
|
15611
15612
|
email: null
|
|
15612
15613
|
},
|
|
15613
15614
|
notes: "448,036 polygon parcels covering Minneapolis and the rest of Hennepin County. Verified 2026-05-11: UPPER(OWNER_NM) LIKE '%SMITH%' returns real owners (e.g., 'ALEX D SMITH', 'PAUL LOUIS SMITH'). Owner names are space-padded fixed-width, wrap searches in UPPER() and trim whitespace client-side. Full residential address columns present (HOUSE_NO, FRAC_HOUSE_NO, STREET_NM, MAILING_MUNIC_NM, ZIP_CD). PID is 13-digit composite (parcel-fragment-municipality-section). TORRENS_TYP flag distinguishes Torrens vs. Abstract land per Minnesota's dual-title system. OUTAGE RESOLVED 2026-06-06: the 2026-05 county-side outage cleared -- service re-verified live (448,083 parcels; OWNER_NM queries return real owners)."
|
|
15615
|
+
},
|
|
15616
|
+
{
|
|
15617
|
+
id: "mn-mille-lacs",
|
|
15618
|
+
state: "MN",
|
|
15619
|
+
stateName: "Minnesota",
|
|
15620
|
+
stateSlug: "minnesota",
|
|
15621
|
+
county: "Mille Lacs",
|
|
15622
|
+
countySlug: "mille-lacs-county",
|
|
15623
|
+
countyFips: "27095",
|
|
15624
|
+
hasPublicRest: true,
|
|
15625
|
+
endpoints: [
|
|
15626
|
+
{
|
|
15627
|
+
url: "https://gis.co.mille-lacs.mn.us/arcgis/rest/services/MilleLacs_Public_101/MapServer/35",
|
|
15628
|
+
serviceType: "MapServer",
|
|
15629
|
+
layerIndex: 35,
|
|
15630
|
+
layerName: "Parcels",
|
|
15631
|
+
supportsQuery: true,
|
|
15632
|
+
corsEnabled: true,
|
|
15633
|
+
searchFields: [
|
|
15634
|
+
{ name: "TAXPAYER_NAME", label: "Taxpayer Name", searchable: true },
|
|
15635
|
+
{ name: "PARCELID", label: "Parcel Number", searchable: true },
|
|
15636
|
+
{ name: "PROPERTY_ADDRESS", label: "Property Address", searchable: true },
|
|
15637
|
+
{ name: "PROPERTY_ZIP", label: "Property ZIP", searchable: false },
|
|
15638
|
+
{ name: "CITY_TWP_NAME", label: "City/Township Name", searchable: true },
|
|
15639
|
+
{ name: "TAXPAYER_ADDRESS_1", label: "Taxpayer Mailing Address 1", searchable: true },
|
|
15640
|
+
{ name: "TAXPAYER_ADDRESS_2", label: "Taxpayer Mailing Address 2", searchable: false },
|
|
15641
|
+
{ name: "TAXPAYER_ADDRESS_3", label: "Taxpayer Mailing Address 3", searchable: false },
|
|
15642
|
+
{ name: "TAXPAYER_ADDRESS_4", label: "Taxpayer Mailing Address 4", searchable: false },
|
|
15643
|
+
{ name: "DEEDED_ACRES", label: "Deeded Acres", searchable: false }
|
|
15644
|
+
],
|
|
15645
|
+
sampleQuery: "https://gis.co.mille-lacs.mn.us/arcgis/rest/services/MilleLacs_Public_101/MapServer/35/query?where=UPPER(TAXPAYER_NAME)%20LIKE%20%27%25SMITH%25%27&outFields=PARCELID,TAXPAYER_NAME,PROPERTY_ADDRESS,TAXPAYER_ADDRESS_1,CITY_TWP_NAME&returnGeometry=false&resultRecordCount=10&f=json",
|
|
15646
|
+
license: "unknown",
|
|
15647
|
+
licenseUrl: "https://www.millelacs.mn.gov/",
|
|
15648
|
+
status: "live",
|
|
15649
|
+
lastVerified: "2026-10-03",
|
|
15650
|
+
verifiedBy: "manual"
|
|
15651
|
+
}
|
|
15652
|
+
],
|
|
15653
|
+
contact: {
|
|
15654
|
+
department: "Mille Lacs County GIS / Assessor's Office",
|
|
15655
|
+
url: "https://www.millelacs.mn.gov/1185/Assessors-Office",
|
|
15656
|
+
email: null
|
|
15657
|
+
},
|
|
15658
|
+
notes: "Mille Lacs County, Minnesota (county seat Milaca) publishes its parcels on its own ArcGIS Server 11.3 as MilleLacs_Public_101/MapServer layer 35 (Parcels), 20,083 rows with a taxpayer name on 2026-10-03. THE OWNER IS IN TAXPAYER_NAME, stored LAST/FIRST with a slash (SMITH/BRIAN & ASHLEY). A column called OWNER_NAME exists but is an empty string on about 97 percent of rows (544 of 20,083 populated on 2026-10-03; not NULL, so IS NOT NULL passes while the value is blank), and where it is populated it names a different party from TAXPAYER_NAME (a contract-for-deed holder or an LLC, for example), so the taxpayer is not always the owner of record. UPPER(OWNER_NAME) LIKE 'SMITH%' returns 0 features. OWNER_NAME is deliberately NOT listed as a search field here: the enrichment classifier takes the first owner-looking field, so listing it would route owner lookups to a mostly blank column. The mailing address is TAXPAYER_ADDRESS_1 to _4 (use _1 for the street); the matching OWNER_ADDRESS_1 to _4 columns were not checked. The site address is PROPERTY_ADDRESS with PROPERTY_ZIP and CITY_TWP_NAME. Search with UPPER(TAXPAYER_NAME) LIKE '%SMITH%'. maxRecordCount is 2000. CORS reflects the request Origin (Access-Control-Allow-Origin echoed back, credentials true), and named outFields work. No license text was found. Do not use the statewide Minnesota parcel layers for owner search: the DNR plan_parcels_minnesota layer has owner_name but no county, parcel id or address field, so a query bleeds into neighbouring counties, and the MnGeo plan_parcels_open layer filters by co_code 27095 (20,928 rows) but its owner_name is blank for all but 550 rows (control: Itasca 27061, 0 populated). The same county server also lists Assessors/TaxParcels/MapServer/0, which has only a parcel name and geometry. Verified live 2026-10-03: taxpayer SMITH returned rows (first SMITH/BRIAN & ASHLEY, parcel 11-010-0100, 17903 130TH AVE, Milaca Township)."
|
|
15614
15659
|
}
|
|
15615
15660
|
]
|
|
15616
15661
|
};
|
|
@@ -15716,7 +15761,7 @@ var missouri_default = {
|
|
|
15716
15761
|
stateSlug: "missouri",
|
|
15717
15762
|
stateName: "Missouri",
|
|
15718
15763
|
stateAbbrev: "MO",
|
|
15719
|
-
lastUpdated: "2026-
|
|
15764
|
+
lastUpdated: "2026-10-03",
|
|
15720
15765
|
counties: [
|
|
15721
15766
|
{
|
|
15722
15767
|
id: "mo-jackson",
|
|
@@ -15808,6 +15853,49 @@ var missouri_default = {
|
|
|
15808
15853
|
email: null
|
|
15809
15854
|
},
|
|
15810
15855
|
notes: "St. Louis County MO (St. Louis metro west/south, county seat Clayton, NOT the independent City of St. Louis) provides AGS_Parcels/MapServer/0 with 30+ fields: LOCATOR (parcel ID), PARENT_LOC, TAXYR, OWNER_NAME, PROP_ADRNUM, PROP_ADD, PROP_ZIP, OWN_ADD, OWN_CITY, OWN_STATE, OWN_ZIP, SCHSUB (school subdivision), MUNYCODE (municipality code), TAXCODE, ASSTIMPVAL, TOTASSMT, APPLANDVAL, APPIMPVAL, TOTAPVAL, PROPCLASS, LUC, LANDUSE2, LUCODE, TENURE, BLDGNAME, TWPNAME. Query confirmed live: UPPER(OWNER_NAME) LIKE '%SMITH%' returns real results (e.g., 'SMITH KIMBERLY & ANTHONY T/E' at '11041 LILAC AVE'). St. Louis County MO (FIPS 29189) is a separate entity from the City of St. Louis (FIPS 29510, an independent city not part of any county). The GeoData portal at data-stlcogis.opendata.arcgis.com provides open data downloads and GeoServices API links. The maps.stlouisco.com server is the live REST host."
|
|
15856
|
+
},
|
|
15857
|
+
{
|
|
15858
|
+
id: "mo-st-louis-city",
|
|
15859
|
+
state: "MO",
|
|
15860
|
+
stateName: "Missouri",
|
|
15861
|
+
stateSlug: "missouri",
|
|
15862
|
+
county: "St. Louis city",
|
|
15863
|
+
countySlug: "st-louis-city",
|
|
15864
|
+
countyFips: "29510",
|
|
15865
|
+
hasPublicRest: true,
|
|
15866
|
+
endpoints: [
|
|
15867
|
+
{
|
|
15868
|
+
url: "https://maps8.stlouis-mo.gov/arcgis/rest/services/ASSESSOR/Assessor_Public_Parcels/MapServer/11",
|
|
15869
|
+
serviceType: "MapServer",
|
|
15870
|
+
layerIndex: 11,
|
|
15871
|
+
layerName: "Parcels",
|
|
15872
|
+
supportsQuery: true,
|
|
15873
|
+
corsEnabled: false,
|
|
15874
|
+
searchFields: [
|
|
15875
|
+
{ name: "OwnerName", label: "Owner Name", searchable: true },
|
|
15876
|
+
{ name: "OwnerName2", label: "Owner Name 2", searchable: false },
|
|
15877
|
+
{ name: "ParcelId", label: "Parcel ID", searchable: true },
|
|
15878
|
+
{ name: "SITEADDR", label: "Site Address", searchable: true },
|
|
15879
|
+
{ name: "OwnerAddr", label: "Owner Mailing Address", searchable: true },
|
|
15880
|
+
{ name: "OwnerCity", label: "Owner Mailing City", searchable: false },
|
|
15881
|
+
{ name: "OwnerState", label: "Owner Mailing State", searchable: false },
|
|
15882
|
+
{ name: "OwnerZIP", label: "Owner Mailing ZIP", searchable: false },
|
|
15883
|
+
{ name: "ZIP", label: "Site ZIP", searchable: false }
|
|
15884
|
+
],
|
|
15885
|
+
sampleQuery: "https://maps8.stlouis-mo.gov/arcgis/rest/services/ASSESSOR/Assessor_Public_Parcels/MapServer/11/query?where=UPPER(OwnerName)%20LIKE%20%27SMITH%25%27&outFields=ParcelId,OwnerName,OwnerAddr,OwnerCity,SITEADDR&returnGeometry=false&resultRecordCount=10&f=json",
|
|
15886
|
+
license: "unknown",
|
|
15887
|
+
licenseUrl: "https://www.stlouis-mo.gov/data/parcels.cfm",
|
|
15888
|
+
status: "live",
|
|
15889
|
+
lastVerified: "2026-10-03",
|
|
15890
|
+
verifiedBy: "manual"
|
|
15891
|
+
}
|
|
15892
|
+
],
|
|
15893
|
+
contact: {
|
|
15894
|
+
department: "City of St. Louis Assessor's Office",
|
|
15895
|
+
url: "https://www.stlouis-mo.gov/data/parcels.cfm",
|
|
15896
|
+
email: null
|
|
15897
|
+
},
|
|
15898
|
+
notes: "City of St. Louis, Missouri (FIPS 29510) is an independent city that belongs to no county, and it is NOT St. Louis County (29189, a separate record in this file on a different server). The Assessor's public parcels layer is ASSESSOR/Assessor_Public_Parcels/MapServer layer 11 (Parcels) on ArcGIS Server 11.2, listed on the city's data page. SERVER-SIDE ONLY: the server sends Access-Control-Allow-Origin only to its own origin (www.stlouis-mo.gov); for any other Origin a GET and its preflight return only Vary: Origin and Access-Control-Allow-Private-Network: true, so a browser on another site cannot read it and corsEnabled is false. Query it from a server, the metered API or the MCP, not from page script. The owner is OwnerName (max 40 characters, so long names are truncated at the source) with OwnerName2; the mailing address is OwnerAddr plus OwnerCity (max 13 characters, can read ST LOUIS MO) with OwnerState, OwnerZIP and OwnerCountry; the parcel id is ParcelId (11 digits, LowerParcelId also exists). SITEADDR carries runs of internal spaces (2233 PARK AV) and trailing padding, so a LIKE on a full street string misses; search on the house number plus a street word, or collapse whitespace on the client. Search with UPPER(OwnerName) LIKE 'SMITH%'; broad searches return exceededTransferLimit true at the 2000-row page. The layer has 194 fields and this record lists a subset. Layer 11 includes condominium master parcels, and the sub-accounts are layer 10 (not examined). No license or terms text is published on the data page. Verified live 2026-10-03: owner SMITH returned rows (first SMITH, DAVID E & SANDRA L TRS, parcel 22669130000, 2233 PARK AVE)."
|
|
15811
15899
|
}
|
|
15812
15900
|
]
|
|
15813
15901
|
};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@urbankitstudio/atlas",
|
|
3
|
-
"version": "0.6.
|
|
4
|
-
"description": "JS SDK for the UrbanKit County Parcel REST API Atlas:
|
|
3
|
+
"version": "0.6.13",
|
|
4
|
+
"description": "JS SDK for the UrbanKit County Parcel REST API Atlas: 241 counties across all 50 US states and DC, 253 verified public ArcGIS REST endpoints for county parcel data, with searchable field metadata, sample queries and license info.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"parcel",
|
|
7
7
|
"arcgis",
|