@urbankitstudio/atlas 0.6.11 → 0.6.12

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 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 **239 counties across all 50 US states and DC** (251 verified endpoints), covering the largest counties in each. Call `listStates()` to enumerate the full set.
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 233 of the 239 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.
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": 239,
7
- "endpoints": 251,
8
- "countiesWithEndpoint": 233,
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": 2,
201
- "endpointCount": 2,
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": 2,
217
- "endpointCount": 2,
216
+ "countyCount": 3,
217
+ "endpointCount": 3,
218
218
  "populated": true
219
219
  },
220
220
  {
@@ -2,7 +2,7 @@
2
2
  "stateSlug": "minnesota",
3
3
  "stateName": "Minnesota",
4
4
  "stateAbbrev": "MN",
5
- "lastUpdated": "2026-06-06",
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
  }
@@ -2,7 +2,7 @@
2
2
  "stateSlug": "missouri",
3
3
  "stateName": "Missouri",
4
4
  "stateAbbrev": "MO",
5
- "lastUpdated": "2026-06-20",
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: 239,
22
- endpoints: 251,
23
- countiesWithEndpoint: 233,
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: 2,
216
- endpointCount: 2,
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: 2,
232
- endpointCount: 2,
231
+ countyCount: 3,
232
+ endpointCount: 3,
233
233
  populated: true
234
234
  },
235
235
  {
@@ -15449,7 +15449,7 @@ var minnesota_default = {
15449
15449
  stateSlug: "minnesota",
15450
15450
  stateName: "Minnesota",
15451
15451
  stateAbbrev: "MN",
15452
- lastUpdated: "2026-06-06",
15452
+ lastUpdated: "2026-10-03",
15453
15453
  counties: [
15454
15454
  {
15455
15455
  id: "mn-ramsey",
@@ -15613,6 +15613,50 @@ var minnesota_default = {
15613
15613
  email: null
15614
15614
  },
15615
15615
  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)."
15616
+ },
15617
+ {
15618
+ id: "mn-mille-lacs",
15619
+ state: "MN",
15620
+ stateName: "Minnesota",
15621
+ stateSlug: "minnesota",
15622
+ county: "Mille Lacs",
15623
+ countySlug: "mille-lacs-county",
15624
+ countyFips: "27095",
15625
+ hasPublicRest: true,
15626
+ endpoints: [
15627
+ {
15628
+ url: "https://gis.co.mille-lacs.mn.us/arcgis/rest/services/MilleLacs_Public_101/MapServer/35",
15629
+ serviceType: "MapServer",
15630
+ layerIndex: 35,
15631
+ layerName: "Parcels",
15632
+ supportsQuery: true,
15633
+ corsEnabled: true,
15634
+ searchFields: [
15635
+ { name: "TAXPAYER_NAME", label: "Taxpayer Name", searchable: true },
15636
+ { name: "PARCELID", label: "Parcel Number", searchable: true },
15637
+ { name: "PROPERTY_ADDRESS", label: "Property Address", searchable: true },
15638
+ { name: "PROPERTY_ZIP", label: "Property ZIP", searchable: false },
15639
+ { name: "CITY_TWP_NAME", label: "City/Township Name", searchable: true },
15640
+ { name: "TAXPAYER_ADDRESS_1", label: "Taxpayer Mailing Address 1", searchable: true },
15641
+ { name: "TAXPAYER_ADDRESS_2", label: "Taxpayer Mailing Address 2", searchable: false },
15642
+ { name: "TAXPAYER_ADDRESS_3", label: "Taxpayer Mailing Address 3", searchable: false },
15643
+ { name: "TAXPAYER_ADDRESS_4", label: "Taxpayer Mailing Address 4", searchable: false },
15644
+ { name: "DEEDED_ACRES", label: "Deeded Acres", searchable: false }
15645
+ ],
15646
+ 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",
15647
+ license: "unknown",
15648
+ licenseUrl: "https://www.millelacs.mn.gov/",
15649
+ status: "live",
15650
+ lastVerified: "2026-10-03",
15651
+ verifiedBy: "manual"
15652
+ }
15653
+ ],
15654
+ contact: {
15655
+ department: "Mille Lacs County GIS / Assessor's Office",
15656
+ url: "https://www.millelacs.mn.gov/1185/Assessors-Office",
15657
+ email: null
15658
+ },
15659
+ 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
15660
  }
15617
15661
  ]
15618
15662
  };
@@ -15718,7 +15762,7 @@ var missouri_default = {
15718
15762
  stateSlug: "missouri",
15719
15763
  stateName: "Missouri",
15720
15764
  stateAbbrev: "MO",
15721
- lastUpdated: "2026-06-20",
15765
+ lastUpdated: "2026-10-03",
15722
15766
  counties: [
15723
15767
  {
15724
15768
  id: "mo-jackson",
@@ -15810,6 +15854,49 @@ var missouri_default = {
15810
15854
  email: null
15811
15855
  },
15812
15856
  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."
15857
+ },
15858
+ {
15859
+ id: "mo-st-louis-city",
15860
+ state: "MO",
15861
+ stateName: "Missouri",
15862
+ stateSlug: "missouri",
15863
+ county: "St. Louis city",
15864
+ countySlug: "st-louis-city",
15865
+ countyFips: "29510",
15866
+ hasPublicRest: true,
15867
+ endpoints: [
15868
+ {
15869
+ url: "https://maps8.stlouis-mo.gov/arcgis/rest/services/ASSESSOR/Assessor_Public_Parcels/MapServer/11",
15870
+ serviceType: "MapServer",
15871
+ layerIndex: 11,
15872
+ layerName: "Parcels",
15873
+ supportsQuery: true,
15874
+ corsEnabled: false,
15875
+ searchFields: [
15876
+ { name: "OwnerName", label: "Owner Name", searchable: true },
15877
+ { name: "OwnerName2", label: "Owner Name 2", searchable: false },
15878
+ { name: "ParcelId", label: "Parcel ID", searchable: true },
15879
+ { name: "SITEADDR", label: "Site Address", searchable: true },
15880
+ { name: "OwnerAddr", label: "Owner Mailing Address", searchable: true },
15881
+ { name: "OwnerCity", label: "Owner Mailing City", searchable: false },
15882
+ { name: "OwnerState", label: "Owner Mailing State", searchable: false },
15883
+ { name: "OwnerZIP", label: "Owner Mailing ZIP", searchable: false },
15884
+ { name: "ZIP", label: "Site ZIP", searchable: false }
15885
+ ],
15886
+ 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",
15887
+ license: "unknown",
15888
+ licenseUrl: "https://www.stlouis-mo.gov/data/parcels.cfm",
15889
+ status: "live",
15890
+ lastVerified: "2026-10-03",
15891
+ verifiedBy: "manual"
15892
+ }
15893
+ ],
15894
+ contact: {
15895
+ department: "City of St. Louis Assessor's Office",
15896
+ url: "https://www.stlouis-mo.gov/data/parcels.cfm",
15897
+ email: null
15898
+ },
15899
+ 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
15900
  }
15814
15901
  ]
15815
15902
  };
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: 239,
20
- endpoints: 251,
21
- countiesWithEndpoint: 233,
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: 2,
214
- endpointCount: 2,
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: 2,
230
- endpointCount: 2,
229
+ countyCount: 3,
230
+ endpointCount: 3,
231
231
  populated: true
232
232
  },
233
233
  {
@@ -15447,7 +15447,7 @@ var minnesota_default = {
15447
15447
  stateSlug: "minnesota",
15448
15448
  stateName: "Minnesota",
15449
15449
  stateAbbrev: "MN",
15450
- lastUpdated: "2026-06-06",
15450
+ lastUpdated: "2026-10-03",
15451
15451
  counties: [
15452
15452
  {
15453
15453
  id: "mn-ramsey",
@@ -15611,6 +15611,50 @@ var minnesota_default = {
15611
15611
  email: null
15612
15612
  },
15613
15613
  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)."
15614
+ },
15615
+ {
15616
+ id: "mn-mille-lacs",
15617
+ state: "MN",
15618
+ stateName: "Minnesota",
15619
+ stateSlug: "minnesota",
15620
+ county: "Mille Lacs",
15621
+ countySlug: "mille-lacs-county",
15622
+ countyFips: "27095",
15623
+ hasPublicRest: true,
15624
+ endpoints: [
15625
+ {
15626
+ url: "https://gis.co.mille-lacs.mn.us/arcgis/rest/services/MilleLacs_Public_101/MapServer/35",
15627
+ serviceType: "MapServer",
15628
+ layerIndex: 35,
15629
+ layerName: "Parcels",
15630
+ supportsQuery: true,
15631
+ corsEnabled: true,
15632
+ searchFields: [
15633
+ { name: "TAXPAYER_NAME", label: "Taxpayer Name", searchable: true },
15634
+ { name: "PARCELID", label: "Parcel Number", searchable: true },
15635
+ { name: "PROPERTY_ADDRESS", label: "Property Address", searchable: true },
15636
+ { name: "PROPERTY_ZIP", label: "Property ZIP", searchable: false },
15637
+ { name: "CITY_TWP_NAME", label: "City/Township Name", searchable: true },
15638
+ { name: "TAXPAYER_ADDRESS_1", label: "Taxpayer Mailing Address 1", searchable: true },
15639
+ { name: "TAXPAYER_ADDRESS_2", label: "Taxpayer Mailing Address 2", searchable: false },
15640
+ { name: "TAXPAYER_ADDRESS_3", label: "Taxpayer Mailing Address 3", searchable: false },
15641
+ { name: "TAXPAYER_ADDRESS_4", label: "Taxpayer Mailing Address 4", searchable: false },
15642
+ { name: "DEEDED_ACRES", label: "Deeded Acres", searchable: false }
15643
+ ],
15644
+ 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",
15645
+ license: "unknown",
15646
+ licenseUrl: "https://www.millelacs.mn.gov/",
15647
+ status: "live",
15648
+ lastVerified: "2026-10-03",
15649
+ verifiedBy: "manual"
15650
+ }
15651
+ ],
15652
+ contact: {
15653
+ department: "Mille Lacs County GIS / Assessor's Office",
15654
+ url: "https://www.millelacs.mn.gov/1185/Assessors-Office",
15655
+ email: null
15656
+ },
15657
+ 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
15658
  }
15615
15659
  ]
15616
15660
  };
@@ -15716,7 +15760,7 @@ var missouri_default = {
15716
15760
  stateSlug: "missouri",
15717
15761
  stateName: "Missouri",
15718
15762
  stateAbbrev: "MO",
15719
- lastUpdated: "2026-06-20",
15763
+ lastUpdated: "2026-10-03",
15720
15764
  counties: [
15721
15765
  {
15722
15766
  id: "mo-jackson",
@@ -15808,6 +15852,49 @@ var missouri_default = {
15808
15852
  email: null
15809
15853
  },
15810
15854
  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."
15855
+ },
15856
+ {
15857
+ id: "mo-st-louis-city",
15858
+ state: "MO",
15859
+ stateName: "Missouri",
15860
+ stateSlug: "missouri",
15861
+ county: "St. Louis city",
15862
+ countySlug: "st-louis-city",
15863
+ countyFips: "29510",
15864
+ hasPublicRest: true,
15865
+ endpoints: [
15866
+ {
15867
+ url: "https://maps8.stlouis-mo.gov/arcgis/rest/services/ASSESSOR/Assessor_Public_Parcels/MapServer/11",
15868
+ serviceType: "MapServer",
15869
+ layerIndex: 11,
15870
+ layerName: "Parcels",
15871
+ supportsQuery: true,
15872
+ corsEnabled: false,
15873
+ searchFields: [
15874
+ { name: "OwnerName", label: "Owner Name", searchable: true },
15875
+ { name: "OwnerName2", label: "Owner Name 2", searchable: false },
15876
+ { name: "ParcelId", label: "Parcel ID", searchable: true },
15877
+ { name: "SITEADDR", label: "Site Address", searchable: true },
15878
+ { name: "OwnerAddr", label: "Owner Mailing Address", searchable: true },
15879
+ { name: "OwnerCity", label: "Owner Mailing City", searchable: false },
15880
+ { name: "OwnerState", label: "Owner Mailing State", searchable: false },
15881
+ { name: "OwnerZIP", label: "Owner Mailing ZIP", searchable: false },
15882
+ { name: "ZIP", label: "Site ZIP", searchable: false }
15883
+ ],
15884
+ 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",
15885
+ license: "unknown",
15886
+ licenseUrl: "https://www.stlouis-mo.gov/data/parcels.cfm",
15887
+ status: "live",
15888
+ lastVerified: "2026-10-03",
15889
+ verifiedBy: "manual"
15890
+ }
15891
+ ],
15892
+ contact: {
15893
+ department: "City of St. Louis Assessor's Office",
15894
+ url: "https://www.stlouis-mo.gov/data/parcels.cfm",
15895
+ email: null
15896
+ },
15897
+ 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
15898
  }
15812
15899
  ]
15813
15900
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@urbankitstudio/atlas",
3
- "version": "0.6.11",
4
- "description": "JS SDK for the UrbanKit County Parcel REST API Atlas: 239 counties across all 50 US states and DC, 251 verified public ArcGIS REST endpoints for county parcel data, with searchable field metadata, sample queries and license info.",
3
+ "version": "0.6.12",
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",