@urbankitstudio/atlas 0.4.0 → 0.5.1

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.
Files changed (52) hide show
  1. package/README.md +7 -2
  2. package/data/alabama.json +52 -6
  3. package/data/alaska.json +1 -1
  4. package/data/arizona.json +3 -3
  5. package/data/arkansas.json +143 -0
  6. package/data/california.json +65 -59
  7. package/data/colorado.json +6 -6
  8. package/data/connecticut.json +105 -3
  9. package/data/delaware.json +46 -0
  10. package/data/florida.json +31 -34
  11. package/data/georgia.json +42 -2
  12. package/data/hawaii.json +82 -0
  13. package/data/illinois.json +16 -11
  14. package/data/index.json +47 -47
  15. package/data/indiana.json +3 -3
  16. package/data/kansas.json +2 -2
  17. package/data/kentucky.json +1 -1
  18. package/data/louisiana.json +7 -7
  19. package/data/maine.json +1 -1
  20. package/data/maryland.json +94 -0
  21. package/data/massachusetts.json +1 -1
  22. package/data/michigan.json +5 -5
  23. package/data/minnesota.json +5 -5
  24. package/data/mississippi.json +8 -10
  25. package/data/missouri.json +49 -2
  26. package/data/montana.json +196 -0
  27. package/data/nebraska.json +3 -3
  28. package/data/nevada.json +1 -1
  29. package/data/new-jersey.json +2 -2
  30. package/data/new-mexico.json +49 -0
  31. package/data/new-york.json +7 -7
  32. package/data/north-carolina.json +5 -5
  33. package/data/north-dakota.json +57 -0
  34. package/data/ohio.json +3 -3
  35. package/data/oklahoma.json +49 -0
  36. package/data/oregon.json +10 -16
  37. package/data/pennsylvania.json +3 -3
  38. package/data/rhode-island.json +1 -1
  39. package/data/south-carolina.json +18 -19
  40. package/data/south-dakota.json +58 -0
  41. package/data/tennessee.json +9 -8
  42. package/data/texas.json +33 -26
  43. package/data/utah.json +4 -4
  44. package/data/vermont.json +2 -2
  45. package/data/virginia.json +43 -1
  46. package/data/washington.json +9 -9
  47. package/data/west-virginia.json +176 -0
  48. package/data/wisconsin.json +1 -1
  49. package/data/wyoming.json +58 -0
  50. package/dist/index.cjs +1702 -377
  51. package/dist/index.js +1702 -377
  52. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -2,20 +2,20 @@
2
2
 
3
3
  // data/index.json
4
4
  var data_default = {
5
- version: "0.4.0",
6
- lastUpdated: "2026-05-31",
5
+ version: "0.5.1",
6
+ lastUpdated: "2026-06-20",
7
7
  totals: {
8
8
  states: 50,
9
- counties: 128,
10
- endpoints: 128
9
+ counties: 155,
10
+ endpoints: 155
11
11
  },
12
12
  states: [
13
13
  {
14
14
  slug: "alabama",
15
15
  name: "Alabama",
16
16
  abbrev: "AL",
17
- countyCount: 1,
18
- endpointCount: 1,
17
+ countyCount: 2,
18
+ endpointCount: 2,
19
19
  populated: true
20
20
  },
21
21
  {
@@ -38,9 +38,9 @@ var data_default = {
38
38
  slug: "arkansas",
39
39
  name: "Arkansas",
40
40
  abbrev: "AR",
41
- countyCount: 0,
42
- endpointCount: 0,
43
- populated: false
41
+ countyCount: 3,
42
+ endpointCount: 3,
43
+ populated: true
44
44
  },
45
45
  {
46
46
  slug: "california",
@@ -62,17 +62,17 @@ var data_default = {
62
62
  slug: "connecticut",
63
63
  name: "Connecticut",
64
64
  abbrev: "CT",
65
- countyCount: 1,
66
- endpointCount: 1,
65
+ countyCount: 3,
66
+ endpointCount: 3,
67
67
  populated: true
68
68
  },
69
69
  {
70
70
  slug: "delaware",
71
71
  name: "Delaware",
72
72
  abbrev: "DE",
73
- countyCount: 0,
74
- endpointCount: 0,
75
- populated: false
73
+ countyCount: 1,
74
+ endpointCount: 1,
75
+ populated: true
76
76
  },
77
77
  {
78
78
  slug: "florida",
@@ -86,17 +86,17 @@ var data_default = {
86
86
  slug: "georgia",
87
87
  name: "Georgia",
88
88
  abbrev: "GA",
89
- countyCount: 3,
90
- endpointCount: 3,
89
+ countyCount: 4,
90
+ endpointCount: 4,
91
91
  populated: true
92
92
  },
93
93
  {
94
94
  slug: "hawaii",
95
95
  name: "Hawaii",
96
96
  abbrev: "HI",
97
- countyCount: 0,
98
- endpointCount: 0,
99
- populated: false
97
+ countyCount: 2,
98
+ endpointCount: 2,
99
+ populated: true
100
100
  },
101
101
  {
102
102
  slug: "idaho",
@@ -166,9 +166,9 @@ var data_default = {
166
166
  slug: "maryland",
167
167
  name: "Maryland",
168
168
  abbrev: "MD",
169
- countyCount: 0,
170
- endpointCount: 0,
171
- populated: false
169
+ countyCount: 2,
170
+ endpointCount: 2,
171
+ populated: true
172
172
  },
173
173
  {
174
174
  slug: "massachusetts",
@@ -206,17 +206,17 @@ var data_default = {
206
206
  slug: "missouri",
207
207
  name: "Missouri",
208
208
  abbrev: "MO",
209
- countyCount: 1,
210
- endpointCount: 1,
209
+ countyCount: 2,
210
+ endpointCount: 2,
211
211
  populated: true
212
212
  },
213
213
  {
214
214
  slug: "montana",
215
215
  name: "Montana",
216
216
  abbrev: "MT",
217
- countyCount: 0,
218
- endpointCount: 0,
219
- populated: false
217
+ countyCount: 4,
218
+ endpointCount: 4,
219
+ populated: true
220
220
  },
221
221
  {
222
222
  slug: "nebraska",
@@ -254,9 +254,9 @@ var data_default = {
254
254
  slug: "new-mexico",
255
255
  name: "New Mexico",
256
256
  abbrev: "NM",
257
- countyCount: 0,
258
- endpointCount: 0,
259
- populated: false
257
+ countyCount: 1,
258
+ endpointCount: 1,
259
+ populated: true
260
260
  },
261
261
  {
262
262
  slug: "new-york",
@@ -278,9 +278,9 @@ var data_default = {
278
278
  slug: "north-dakota",
279
279
  name: "North Dakota",
280
280
  abbrev: "ND",
281
- countyCount: 0,
282
- endpointCount: 0,
283
- populated: false
281
+ countyCount: 1,
282
+ endpointCount: 1,
283
+ populated: true
284
284
  },
285
285
  {
286
286
  slug: "ohio",
@@ -294,9 +294,9 @@ var data_default = {
294
294
  slug: "oklahoma",
295
295
  name: "Oklahoma",
296
296
  abbrev: "OK",
297
- countyCount: 0,
298
- endpointCount: 0,
299
- populated: false
297
+ countyCount: 1,
298
+ endpointCount: 1,
299
+ populated: true
300
300
  },
301
301
  {
302
302
  slug: "oregon",
@@ -334,9 +334,9 @@ var data_default = {
334
334
  slug: "south-dakota",
335
335
  name: "South Dakota",
336
336
  abbrev: "SD",
337
- countyCount: 0,
338
- endpointCount: 0,
339
- populated: false
337
+ countyCount: 1,
338
+ endpointCount: 1,
339
+ populated: true
340
340
  },
341
341
  {
342
342
  slug: "tennessee",
@@ -374,8 +374,8 @@ var data_default = {
374
374
  slug: "virginia",
375
375
  name: "Virginia",
376
376
  abbrev: "VA",
377
- countyCount: 1,
378
- endpointCount: 1,
377
+ countyCount: 2,
378
+ endpointCount: 2,
379
379
  populated: true
380
380
  },
381
381
  {
@@ -390,9 +390,9 @@ var data_default = {
390
390
  slug: "west-virginia",
391
391
  name: "West Virginia",
392
392
  abbrev: "WV",
393
- countyCount: 0,
394
- endpointCount: 0,
395
- populated: false
393
+ countyCount: 4,
394
+ endpointCount: 4,
395
+ populated: true
396
396
  },
397
397
  {
398
398
  slug: "wisconsin",
@@ -406,9 +406,9 @@ var data_default = {
406
406
  slug: "wyoming",
407
407
  name: "Wyoming",
408
408
  abbrev: "WY",
409
- countyCount: 0,
410
- endpointCount: 0,
411
- populated: false
409
+ countyCount: 1,
410
+ endpointCount: 1,
411
+ populated: true
412
412
  }
413
413
  ]
414
414
  };
@@ -418,8 +418,55 @@ var alabama_default = {
418
418
  stateSlug: "alabama",
419
419
  stateName: "Alabama",
420
420
  stateAbbrev: "AL",
421
- lastUpdated: "2026-05-15",
421
+ lastUpdated: "2026-06-20",
422
422
  counties: [
423
+ {
424
+ id: "al-shelby",
425
+ state: "AL",
426
+ stateName: "Alabama",
427
+ stateSlug: "alabama",
428
+ county: "Shelby",
429
+ countySlug: "shelby-county",
430
+ countyFips: "01117",
431
+ hasPublicRest: true,
432
+ endpoints: [
433
+ {
434
+ url: "https://maps.shelbyal.com/gisserver/rest/services/LegacyServices/Cadastral_2022/MapServer/91",
435
+ serviceType: "MapServer",
436
+ layerIndex: 91,
437
+ layerName: "Parcels",
438
+ supportsQuery: true,
439
+ corsEnabled: null,
440
+ searchFields: [
441
+ { name: "Parcel_Num", label: "Parcel Number", searchable: true },
442
+ { name: "NAM1", label: "Owner Name 1", searchable: true },
443
+ { name: "NAM2", label: "Owner Name 2", searchable: false },
444
+ { name: "ADR1", label: "Owner Address Line 1", searchable: false },
445
+ { name: "ADR2", label: "Owner Address Line 2", searchable: false },
446
+ { name: "CITY", label: "Owner City", searchable: false },
447
+ { name: "STATE", label: "Owner State", searchable: false },
448
+ { name: "ZIP", label: "Owner ZIP", searchable: false },
449
+ { name: "PROP_ADR", label: "Property Address", searchable: true },
450
+ { name: "Subd_Name", label: "Subdivision Name", searchable: false },
451
+ { name: "Zoning", label: "Zoning", searchable: false },
452
+ { name: "ACRES", label: "Acres", searchable: false },
453
+ { name: "PROP_CLASS", label: "Property Class", searchable: false }
454
+ ],
455
+ sampleQuery: "https://maps.shelbyal.com/gisserver/rest/services/LegacyServices/Cadastral_2022/MapServer/91/query?where=UPPER(NAM1)+LIKE+UPPER('%25SMITH%25')&outFields=Parcel_Num,NAM1,NAM2,ADR1,CITY,PROP_ADR,Subd_Name&returnGeometry=false&f=json&resultRecordCount=10",
456
+ license: "public",
457
+ licenseUrl: "https://maps.shelbyal.com/",
458
+ status: "live",
459
+ lastVerified: "2026-06-20",
460
+ verifiedBy: "automated"
461
+ }
462
+ ],
463
+ contact: {
464
+ department: "Shelby County GIS / Shelby County Commission",
465
+ url: "https://maps.shelbyal.com/",
466
+ email: null
467
+ },
468
+ notes: "Shelby County AL (Birmingham south suburbs, Hoover, Alabaster, Helena, Pelham, Calera; county seat Columbiana; FIPS 01117; fastest-growing county in AL) uses MapServer layer 91 (layerIndex=91) in the Cadastral_2022 service at maps.shelbyal.com. The layer has 160+ fields including Parcel_Num, NAM1, NAM2 (owner names), ADR1/ADR2, CITY, STATE, ZIP, ZIP4 (owner mailing address), PROP_ADR (property address), Subd_Name, Zoning, ACRES, SQUARE_FEET, PROP_CLASS, DIST, SCH_DIST, LN_VL1/LN_VL2, CUR_USE_VL, various CIMP/IMP improvement codes and values, tax sale fields, and audit timestamps. Owner search via UPPER(NAM1) LIKE on NAM1 works. Verified 2026-06-20: SMITH returns Shelby County addresses (e.g., 'SMITH GLENDA & ADAMS MIRIAM ROLLS & MIKE'). Note: layerIndex 91 is non-standard. Must specify /91 in the URL. Do not confuse with Shelby County TN (Memphis, FIPS 47157) already in the atlas."
469
+ },
423
470
  {
424
471
  id: "al-jefferson",
425
472
  state: "AL",
@@ -450,7 +497,6 @@ var alabama_default = {
450
497
  { name: "STATE_Mail", label: "Mailing State", searchable: false },
451
498
  { name: "Legal_Desc", label: "Legal Description", searchable: false },
452
499
  { name: "Property_City", label: "Property City", searchable: false },
453
- { name: "ZONING_BOE", label: "Zoning (Board of Equalization)", searchable: false },
454
500
  { name: "ACRES_APR", label: "Appraised Acres", searchable: false },
455
501
  { name: "AssdValue", label: "Assessed Value", searchable: false }
456
502
  ],
@@ -458,16 +504,16 @@ var alabama_default = {
458
504
  license: "public",
459
505
  licenseUrl: "https://www.jccal.org/Default.asp?ID=1220&pg=Enterprise+GIS",
460
506
  status: "live",
461
- lastVerified: "2026-05-15",
462
- verifiedBy: "manual"
507
+ lastVerified: "2026-06-27",
508
+ verifiedBy: "automated"
463
509
  }
464
510
  ],
465
511
  contact: {
466
- department: "Jefferson County Commission GIS / Information Technology Services \u2014 EGIS",
512
+ department: "Jefferson County Commission GIS / Information Technology Services, EGIS",
467
513
  url: "https://data-jeffco-al.opendata.arcgis.com/",
468
514
  email: null
469
515
  },
470
- notes: "Jefferson County AL (Birmingham, pop. 670,000; FIPS 01073) Basemap/Parcels layer. Data maintained by Jefferson County Tax Assessor Office and updated nightly. 70+ fields confirmed including PARCELID, OWNERNAME, Name2, PROP_MAIL, CITYMAIL, ZIP_MAIL, STATE_Mail, Bldg_Number, Street_Name, Street_Type, Street_Dir, ADDR_APR, ZIP, Property_City/State, Legal_Desc, SUBDIV_NAME, ZONING_BOE, Water/Sewer/Gas, ACRES_APR, GIS_ACRES, PrevParcelLand/Imp/Total, AssdValue, TotalMHValue, Cls, TAX_CODE, DISTRICT, ESN_NUM, FIREDEPTNAME, NEIGHBOR_N, SchDist, MapNumber, Sqft. OWNERNAME field returns padded fixed-width strings (trim on use). Note: distinct from Jefferson County CO (FIPS 08059) and Jefferson County KY (Louisville; FIPS 21111) already in atlas. Verified 2026-05-15: SMITH returns Birmingham-area addresses."
516
+ notes: "Jefferson County AL (Birmingham, pop. 670,000; FIPS 01073) Basemap/Parcels layer. Data maintained by Jefferson County Tax Assessor Office and updated nightly. 76 fields in live schema as of 2026-06-27: OBJECTID, Unique_ID, PID, TAX_TOWNSH, ISP_SECTION, SEC, QSECTION, BLOCK, PARCEL, PARCELID, APP_PID, DISTRICT, ESN_NUM, ADDR_PSPR, Bldg_Number, Street_Name, Street_Type, Street_Dir, APARTMENT, ADDRAPT_PS, OWNERNAME, PROP_MAIL, CITYMAIL, ZIP_MAIL, STATE_Mail, Legal_Desc, Property_City, Property_State, NEIGHBOR_N, SUBDIV_NAME, ADDR_APR, ZIP, TotalMHValue, PrevParcelLand/Imp/Total, Water, Sewer, Gas, ACRES_APR, GIS_ACRES, Remarks, Name2, Plat_Book/Page (\xD72), NbhdCd, Ownership, Topography, RoadAcc, MaintDate, CITY, NbhName, PriMunCode, SecMunCode, PriAcreage, SecAcreage, LegalRemarks, ParcelNo, Division, RecordYear, SchDist, MapNumber, Sqft, FIREDEPTNAME, Cls, BLDG_IND, TAX_CODE, OBY_IND, AssdValue, Territory, FireFee_District. NOTE 2026-06-27: ZONING_BOE is no longer in the live schema (schema drift), removed from searchFields. OWNERNAME field returns padded fixed-width strings (trim on use). Note: distinct from Jefferson County CO (FIPS 08059) and Jefferson County KY (Louisville; FIPS 21111) already in atlas. Verified 2026-06-27: metadata 200, query 200, 410K+ parcels."
471
517
  }
472
518
  ]
473
519
  };
@@ -520,7 +566,7 @@ var alaska_default = {
520
566
  url: "https://services1.arcgis.com/7HDiw78fcUiM2BWn/arcgis/rest/services/AK_Parcels/FeatureServer",
521
567
  email: null
522
568
  },
523
- notes: "15 fields confirmed: OBJECTID, parcel_id, owner, alt_owner, property_type, property_use, land_value, building_value, total_value, local_gov, datetime_processed, feature_id, Shape__Area, Shape__Length, GlobalID. This is the Alaska Statewide Parcel FeatureServer, combining parcel data from various local government bodies in Alaska. Filter by local_gov field \u2014 use UPPER(local_gov) LIKE '%ANCHORAGE%' for Anchorage Municipality parcels (confirmed returning real parcels including United Airlines, residential, etc.). Owner query confirmed working. NOTE: Alaska does not have counties \u2014 it has boroughs and a small number of unified municipalities. Anchorage is officially the Municipality of Anchorage (FIPS 02020). This statewide service also covers Fairbanks North Star Borough, Matanuska-Susitna Borough, and other AK jurisdictions via the local_gov field. Coverage and completeness vary by participating jurisdiction."
569
+ notes: "15 fields confirmed: OBJECTID, parcel_id, owner, alt_owner, property_type, property_use, land_value, building_value, total_value, local_gov, datetime_processed, feature_id, Shape__Area, Shape__Length, GlobalID. This is the Alaska Statewide Parcel FeatureServer, combining parcel data from various local government bodies in Alaska. Filter by local_gov field, use UPPER(local_gov) LIKE '%ANCHORAGE%' for Anchorage Municipality parcels (confirmed returning real parcels including United Airlines, residential, etc.). Owner query confirmed working. NOTE: Alaska does not have counties. It has boroughs and a small number of unified municipalities. Anchorage is officially the Municipality of Anchorage (FIPS 02020). This statewide service also covers Fairbanks North Star Borough, Matanuska-Susitna Borough, and other AK jurisdictions via the local_gov field. Coverage and completeness vary by participating jurisdiction."
524
570
  }
525
571
  ]
526
572
  };
@@ -573,7 +619,7 @@ var arizona_default = {
573
619
  }
574
620
  ],
575
621
  contact: {
576
- department: "Maricopa County Assessor's Office \u2014 GIS Division",
622
+ department: "Maricopa County Assessor's Office, GIS Division",
577
623
  url: "https://maps.mcassessor.maricopa.gov/",
578
624
  email: null
579
625
  },
@@ -619,11 +665,11 @@ var arizona_default = {
619
665
  }
620
666
  ],
621
667
  contact: {
622
- department: "City of Tucson / Pima County GIS \u2014 PropertyHousing MapServer (Pima Assessor PAREGION data)",
668
+ department: "City of Tucson / Pima County GIS, PropertyHousing MapServer (Pima Assessor PAREGION data)",
623
669
  url: "https://www.pima.gov/1796/Geographic-Information-Systems",
624
670
  email: null
625
671
  },
626
- notes: "75 fields confirmed. The PAREGION layer (layer 17) is the county-wide Pima County Assessor parcel layer, hosted on the City of Tucson mapdata.tucsonaz.gov ArcGIS server, which aggregates both City of Tucson and unincorporated Pima County parcels. Layer 40 (PAREGION_TUCSON) is the Tucson-only subset; use layer 17 for full county coverage. Owner-name field is ADDRESSEE (holds the assessor's addressee/taxpayer name \u2014 equivalent to owner name for most records). PARCEL format is alphanumeric (e.g. '101013880'). Also exposes FCV (Full Cash Value), TAXYR, USE_DESC, MAIL1-5 (mailing address), LEGAL1-5 (legal description), SITE_ADDRESS, SITE_ZIPCITY, SITE_ZIP, TAXAREA, GISACRES, CURZONE_OL (zoning), and YearBuilt. The supportsQuery field reads null in layer metadata (ArcGIS 11.3 quirk), but the service capabilities string is 'Map,Query,Data' \u2014 queries work as confirmed by live testing. maxRecordCount=2000. The gisweb.pima.gov hostname NXDOMAINs; mapdata.tucsonaz.gov is the correct publicly accessible host."
672
+ notes: "75 fields confirmed. The PAREGION layer (layer 17) is the county-wide Pima County Assessor parcel layer, hosted on the City of Tucson mapdata.tucsonaz.gov ArcGIS server, which aggregates both City of Tucson and unincorporated Pima County parcels. Layer 40 (PAREGION_TUCSON) is the Tucson-only subset; use layer 17 for full county coverage. Owner-name field is ADDRESSEE (holds the assessor's addressee/taxpayer name, equivalent to owner name for most records). PARCEL format is alphanumeric (e.g. '101013880'). Also exposes FCV (Full Cash Value), TAXYR, USE_DESC, MAIL1-5 (mailing address), LEGAL1-5 (legal description), SITE_ADDRESS, SITE_ZIPCITY, SITE_ZIP, TAXAREA, GISACRES, CURZONE_OL (zoning), and YearBuilt. The supportsQuery field reads null in layer metadata (ArcGIS 11.3 quirk), but the service capabilities string is 'Map,Query,Data'. Queries work as confirmed by live testing. maxRecordCount=2000. The gisweb.pima.gov hostname NXDOMAINs; mapdata.tucsonaz.gov is the correct publicly accessible host."
627
673
  },
628
674
  {
629
675
  id: "az-pinal",
@@ -674,6 +720,151 @@ var arizona_default = {
674
720
  ]
675
721
  };
676
722
 
723
+ // data/arkansas.json
724
+ var arkansas_default = {
725
+ stateSlug: "arkansas",
726
+ stateName: "Arkansas",
727
+ stateAbbrev: "AR",
728
+ lastUpdated: "2026-06-20",
729
+ counties: [
730
+ {
731
+ id: "ar-pulaski",
732
+ state: "AR",
733
+ stateName: "Arkansas",
734
+ stateSlug: "arkansas",
735
+ county: "Pulaski",
736
+ countySlug: "pulaski-county",
737
+ countyFips: "05119",
738
+ hasPublicRest: true,
739
+ endpoints: [
740
+ {
741
+ url: "https://gis.arkansas.gov/arcgis/rest/services/FEATURESERVICES/Planning_Cadastre/FeatureServer/6",
742
+ serviceType: "FeatureServer",
743
+ layerIndex: 6,
744
+ layerName: "Parcels",
745
+ supportsQuery: true,
746
+ corsEnabled: null,
747
+ searchFields: [
748
+ { name: "parcelid", label: "Parcel ID", searchable: true },
749
+ { name: "ownername", label: "Owner Name", searchable: true },
750
+ { name: "adrnum", label: "Address Number", searchable: false },
751
+ { name: "pstrnam", label: "Street Name", searchable: true },
752
+ { name: "adrcity", label: "City", searchable: true },
753
+ { name: "adrzip5", label: "ZIP Code", searchable: false },
754
+ { name: "adrlabel", label: "Full Address Label", searchable: true },
755
+ { name: "countyfips", label: "County FIPS (05119 = Pulaski)", searchable: false },
756
+ { name: "county", label: "County Name", searchable: false },
757
+ { name: "assessvalue", label: "Assessed Value", searchable: false },
758
+ { name: "totalvalue", label: "Total Value", searchable: false }
759
+ ],
760
+ sampleQuery: "https://gis.arkansas.gov/arcgis/rest/services/FEATURESERVICES/Planning_Cadastre/FeatureServer/6/query?where=countyfips%3D'05119'+AND+UPPER(ownername)+LIKE+UPPER('%25SMITH%25')&outFields=parcelid,ownername,adrlabel,countyfips&returnGeometry=false&f=json&resultRecordCount=10",
761
+ license: "public",
762
+ licenseUrl: "https://gis.arkansas.gov/",
763
+ status: "live",
764
+ lastVerified: "2026-06-20",
765
+ verifiedBy: "automated"
766
+ }
767
+ ],
768
+ contact: {
769
+ department: "Arkansas GIS Office (AGISO)",
770
+ url: "https://gis.arkansas.gov/",
771
+ email: null
772
+ },
773
+ notes: "Pulaski County AR (Little Rock, pop. 400,000; state capital; county seat Little Rock; FIPS 05119) is served by the Arkansas statewide parcel layer hosted by the Arkansas GIS Office (AGISO). The Planning_Cadastre/FeatureServer/6 layer aggregates parcels from all 75 AR counties, filter by countyfips='05119' to query Pulaski County specifically. Key fields: parcelid (parcel identifier), ownername (owner name), adrnum+pstrnam+adrcity+adrzip5 (address components), adrlabel (full address string), countyfips (5-digit FIPS, '05119' for Pulaski), countyid, county (county name text), parceltype, assessvalue, impvalue, landvalue, totalvalue, subdivision, section/township/range, camakey, dataprov, pubdate. Owner-name search via UPPER(ownername) LIKE works across all AR counties. Verified 2026-06-20: countyfips='05119' AND SMITH returns Little Rock addresses. The statewide layer is compiled from county assessor data and may lag 6\u201312 months from deed recording."
774
+ },
775
+ {
776
+ id: "ar-benton",
777
+ state: "AR",
778
+ stateName: "Arkansas",
779
+ stateSlug: "arkansas",
780
+ county: "Benton",
781
+ countySlug: "benton-county",
782
+ countyFips: "05007",
783
+ hasPublicRest: true,
784
+ endpoints: [
785
+ {
786
+ url: "https://gis.arkansas.gov/arcgis/rest/services/FEATURESERVICES/Planning_Cadastre/FeatureServer/6",
787
+ serviceType: "FeatureServer",
788
+ layerIndex: 6,
789
+ layerName: "Parcels",
790
+ supportsQuery: true,
791
+ corsEnabled: null,
792
+ searchFields: [
793
+ { name: "parcelid", label: "Parcel ID", searchable: true },
794
+ { name: "ownername", label: "Owner Name", searchable: true },
795
+ { name: "adrnum", label: "Address Number", searchable: false },
796
+ { name: "pstrnam", label: "Street Name", searchable: true },
797
+ { name: "adrcity", label: "City", searchable: true },
798
+ { name: "adrzip5", label: "ZIP Code", searchable: false },
799
+ { name: "adrlabel", label: "Full Address Label", searchable: true },
800
+ { name: "countyfips", label: "County FIPS (05007 = Benton)", searchable: false },
801
+ { name: "county", label: "County Name", searchable: false },
802
+ { name: "assessvalue", label: "Assessed Value", searchable: false },
803
+ { name: "totalvalue", label: "Total Value", searchable: false }
804
+ ],
805
+ sampleQuery: "https://gis.arkansas.gov/arcgis/rest/services/FEATURESERVICES/Planning_Cadastre/FeatureServer/6/query?where=countyfips%3D'05007'+AND+UPPER(ownername)+LIKE+UPPER('%25SMITH%25')&outFields=parcelid,ownername,adrlabel,countyfips&returnGeometry=false&f=json&resultRecordCount=10",
806
+ license: "public",
807
+ licenseUrl: "https://gis.arkansas.gov/",
808
+ status: "live",
809
+ lastVerified: "2026-06-20",
810
+ verifiedBy: "automated"
811
+ }
812
+ ],
813
+ contact: {
814
+ department: "Arkansas GIS Office (AGISO)",
815
+ url: "https://gis.arkansas.gov/",
816
+ email: null
817
+ },
818
+ notes: "Benton County AR (Bentonville/Rogers/Fayetteville metro north; county seat Bentonville; FIPS 05007; home to Walmart HQ) is served by the Arkansas statewide parcel layer. Filter countyfips='05007' to scope to Benton County. Same schema and endpoint as Pulaski County (AR statewide FeatureServer/6). Benton County is the fastest-growing county in Arkansas. Verified 2026-06-20: SMITH query returns Bentonville-area addresses."
819
+ },
820
+ {
821
+ id: "ar-washington",
822
+ state: "AR",
823
+ stateName: "Arkansas",
824
+ stateSlug: "arkansas",
825
+ county: "Washington",
826
+ countySlug: "washington-county",
827
+ countyFips: "05143",
828
+ hasPublicRest: true,
829
+ endpoints: [
830
+ {
831
+ url: "https://gis.arkansas.gov/arcgis/rest/services/FEATURESERVICES/Planning_Cadastre/FeatureServer/6",
832
+ serviceType: "FeatureServer",
833
+ layerIndex: 6,
834
+ layerName: "Parcels",
835
+ supportsQuery: true,
836
+ corsEnabled: null,
837
+ searchFields: [
838
+ { name: "parcelid", label: "Parcel ID", searchable: true },
839
+ { name: "ownername", label: "Owner Name", searchable: true },
840
+ { name: "adrnum", label: "Address Number", searchable: false },
841
+ { name: "pstrnam", label: "Street Name", searchable: true },
842
+ { name: "adrcity", label: "City", searchable: true },
843
+ { name: "adrzip5", label: "ZIP Code", searchable: false },
844
+ { name: "adrlabel", label: "Full Address Label", searchable: true },
845
+ { name: "countyfips", label: "County FIPS (05143 = Washington)", searchable: false },
846
+ { name: "county", label: "County Name", searchable: false },
847
+ { name: "assessvalue", label: "Assessed Value", searchable: false },
848
+ { name: "totalvalue", label: "Total Value", searchable: false }
849
+ ],
850
+ sampleQuery: "https://gis.arkansas.gov/arcgis/rest/services/FEATURESERVICES/Planning_Cadastre/FeatureServer/6/query?where=countyfips%3D'05143'+AND+UPPER(ownername)+LIKE+UPPER('%25SMITH%25')&outFields=parcelid,ownername,adrlabel,countyfips&returnGeometry=false&f=json&resultRecordCount=10",
851
+ license: "public",
852
+ licenseUrl: "https://gis.arkansas.gov/",
853
+ status: "live",
854
+ lastVerified: "2026-06-20",
855
+ verifiedBy: "automated"
856
+ }
857
+ ],
858
+ contact: {
859
+ department: "Arkansas GIS Office (AGISO)",
860
+ url: "https://gis.arkansas.gov/",
861
+ email: null
862
+ },
863
+ notes: "Washington County AR (Fayetteville metro; county seat Fayetteville; FIPS 05143; home to University of Arkansas) is served by the Arkansas statewide parcel layer. Filter countyfips='05143' to scope to Washington County. Same schema and endpoint as Pulaski and Benton counties (AR statewide FeatureServer/6). Washington County AR must not be confused with Washington County in other states. Verified 2026-06-20: SMITH query returns Fayetteville-area addresses."
864
+ }
865
+ ]
866
+ };
867
+
677
868
  // data/california.json
678
869
  var california_default = {
679
870
  stateSlug: "california",
@@ -700,13 +891,19 @@ var california_default = {
700
891
  corsEnabled: null,
701
892
  searchFields: [
702
893
  { name: "AIN", label: "Assessor Identification Number (AIN)", searchable: true },
703
- { name: "SitusFullAddress", label: "Situs Address", searchable: true }
894
+ { name: "APN", label: "Assessor Parcel Number (formatted)", searchable: true },
895
+ { name: "SitusFullAddress", label: "Situs Address", searchable: true },
896
+ { name: "SitusCity", label: "City", searchable: false },
897
+ { name: "SitusZIP", label: "ZIP Code", searchable: false },
898
+ { name: "UseCode", label: "Use Code", searchable: false },
899
+ { name: "UseDescription", label: "Use Description", searchable: false },
900
+ { name: "YearBuilt1", label: "Year Built", searchable: false }
704
901
  ],
705
902
  sampleQuery: "https://public.gis.lacounty.gov/public/rest/services/LACounty_Cache/LACounty_Parcel/MapServer/0/query?where=AIN%3D%274321002009%27&outFields=*&f=json",
706
903
  license: "public",
707
904
  licenseUrl: null,
708
- status: "unverified",
709
- lastVerified: "2026-05-07",
905
+ status: "live",
906
+ lastVerified: "2026-06-04",
710
907
  verifiedBy: "manual"
711
908
  }
712
909
  ],
@@ -715,7 +912,52 @@ var california_default = {
715
912
  url: "https://egis-lacounty.hub.arcgis.com/",
716
913
  email: null
717
914
  },
718
- notes: "Los Angeles County is the most populous US county (pop. 10M+) and contains 88 incorporated cities plus a large unincorporated area. The Assessor Identification Number (AIN) is a 10-digit numeric code unique to each parcel. The public LACounty_Cache/LACounty_Parcel MapServer layer exposes AIN and SitusFullAddress only \u2014 owner name is not included, per California Government Code \xA77928.205, which broadly restricts owner name and mailing address from public REST endpoints across California. For ownership data, use the LA County Assessor's portal at assessor.lacounty.gov; the Assessor's office manages roughly 2.5 million parcels and publishes annual assessment rolls. The layer status is marked unverified as of 2026-05-07 \u2014 the endpoint URL structure has shifted between the LACounty_Cache service and the egis-lacounty.hub.arcgis.com open-data platform at different points; verify the MapServer URL is live before building a query workflow. The EGIS open-data hub at egis-lacounty.hub.arcgis.com has downloadable parcel shapefiles. AIN queries use exact match: AIN='4321002009' (no dashes)."
915
+ notes: "Los Angeles County is the most populous US county (pop. 10M+) and contains 88 incorporated cities plus a large unincorporated area. The Assessor Identification Number (AIN) is a 10-digit numeric code unique to each parcel. The public LACounty_Cache/LACounty_Parcel MapServer layer exposes AIN, APN, and SitusFullAddress (no owner name), per California Government Code \xA77928.205, which broadly restricts owner name and mailing address from public REST endpoints across California. For ownership data, use the LA County Assessor's portal at assessor.lacounty.gov; the Assessor's office manages roughly 2.5 million parcels and publishes annual assessment rolls. Re-verified live 2026-06-04, a sample AIN query returned a real parcel. The EGIS open-data hub at egis-lacounty.hub.arcgis.com has downloadable parcel shapefiles. AIN queries use exact match: AIN='4321002009' (no dashes)."
916
+ },
917
+ {
918
+ id: "ca-sacramento",
919
+ state: "CA",
920
+ stateName: "California",
921
+ stateSlug: "california",
922
+ county: "Sacramento",
923
+ countySlug: "sacramento-county",
924
+ countyFips: "06067",
925
+ hasPublicRest: true,
926
+ endpoints: [
927
+ {
928
+ url: "https://services1.arcgis.com/5NARefyPVtAeuJPU/arcgis/rest/services/Parcels/FeatureServer/0",
929
+ serviceType: "FeatureServer",
930
+ layerIndex: 0,
931
+ layerName: "Parcels",
932
+ supportsQuery: true,
933
+ corsEnabled: null,
934
+ searchFields: [
935
+ { name: "APN", label: "Assessor Parcel Number", searchable: true },
936
+ { name: "STREET_NBR", label: "Street Number", searchable: true },
937
+ { name: "STREET_NAM", label: "Street Name", searchable: true },
938
+ { name: "CITY", label: "City", searchable: true },
939
+ { name: "ZIP", label: "ZIP Code", searchable: false },
940
+ { name: "TRA", label: "Tax Rate Area", searchable: false },
941
+ { name: "LANDUSE", label: "Land Use Code", searchable: false },
942
+ { name: "LU_GENERAL", label: "Land Use (General)", searchable: false },
943
+ { name: "LOT_SIZE", label: "Lot Size (sq ft)", searchable: false },
944
+ { name: "JURISDICTION", label: "Jurisdiction", searchable: true },
945
+ { name: "PRCL_TYPE", label: "Parcel Type", searchable: false }
946
+ ],
947
+ sampleQuery: "https://services1.arcgis.com/5NARefyPVtAeuJPU/arcgis/rest/services/Parcels/FeatureServer/0/query?where=JURISDICTION%3D'CITRUS+HEIGHTS'&outFields=APN,STREET_NAM,STREET_NBR,CITY,ZIP,TRA,LANDUSE,LOT_SIZE&returnGeometry=false&f=json&resultRecordCount=10",
948
+ license: "public",
949
+ licenseUrl: "https://data-sacramentocounty.opendata.arcgis.com/",
950
+ status: "live",
951
+ lastVerified: "2026-05-15",
952
+ verifiedBy: "manual"
953
+ }
954
+ ],
955
+ contact: {
956
+ department: "Sacramento County GIS / Planning and Environmental Review",
957
+ url: "https://data-sacramentocounty.opendata.arcgis.com/",
958
+ email: null
959
+ },
960
+ notes: "22 fields confirmed: OBJECTID, APN, LOT_SIZE, NEIBRHC, JURISDICTION, STREET_NBR, STREET_NAM, CITY, ZIP, TRA, SUBDIVISIO, LOT, LANDUSE, LU_GENERAL, LU_SPECIF, LU_DETAIL, LU_USE, LU_SEC_USE, PRCL_KEY, PRCL_TYPE, Shape__Area, Shape__Length. Live query confirmed: JURISDICTION='CITRUS HEIGHTS' returns real Sacramento County parcels. NOTE: Owner name is NOT on this public layer. APN is the 14-character Sacramento County parcel number. Land use fields are detailed (LU_GENERAL, LU_SPECIF, LU_DETAIL). ArcGIS item ID: 8d011b99aebc46d48060b2e5bdd7f4a0. Hosted on ArcGIS Online (services1.arcgis.com/5NARefyPVtAeuJPU). Capabilities: Query, Extract. maxRecordCount=2000."
719
961
  },
720
962
  {
721
963
  id: "ca-sonoma",
@@ -753,7 +995,7 @@ var california_default = {
753
995
  url: "https://gis-sonomacounty.hub.arcgis.com/",
754
996
  email: null
755
997
  },
756
- notes: "Sonoma County (county seat Santa Rosa, pop. 490,000) publishes parcels through the OWTSPublic Cities_GIS_Parcel_Base FeatureServer. APN format is XXX-XXX-XXX with hyphens (e.g. '029-201-001'). Owner name is NOT exposed on this public layer \u2014 California Government Code \xA77928.205 restricts owner and mailing-address data from public REST endpoints. For ownership data, use the Sonoma County Assessor's parcel search at sonomacounty.ca.gov/assessor. The address schema on this layer was refactored in 2026: the prior single SitusAddress string field was replaced by two formatted address lines (SitusFormatted1, SitusFormatted2) plus fully structured components \u2014 SitusStreetNo, SitusDirection, SitusStreetName, SitusStreetType, SitusUnitNumber, SitusCity, SitusState, SitusZip. Queries on the old SitusAddress field name will fail against the current layer; use SitusFormatted1 or SitusStreetName instead. The endpoint is hosted on the county's own ArcGIS server (socogis.sonomacounty.ca.gov). The Sonoma County GIS open-data hub is at gis-sonomacounty.hub.arcgis.com."
998
+ notes: "Sonoma County (county seat Santa Rosa, pop. 490,000) publishes parcels through the OWTSPublic Cities_GIS_Parcel_Base FeatureServer. APN format is XXX-XXX-XXX with hyphens (e.g. '029-201-001'). Owner name is NOT exposed on this public layer, California Government Code \xA77928.205 restricts owner and mailing-address data from public REST endpoints. For ownership data, use the Sonoma County Assessor's parcel search at sonomacounty.ca.gov/assessor. The address schema on this layer was refactored in 2026: the prior single SitusAddress string field was replaced by two formatted address lines (SitusFormatted1, SitusFormatted2) plus fully structured components, SitusStreetNo, SitusDirection, SitusStreetName, SitusStreetType, SitusUnitNumber, SitusCity, SitusState, SitusZip. Queries on the old SitusAddress field name will fail against the current layer; use SitusFormatted1 or SitusStreetName instead. The endpoint is hosted on the county's own ArcGIS server (socogis.sonomacounty.ca.gov). The Sonoma County GIS open-data hub is at gis-sonomacounty.hub.arcgis.com."
757
999
  },
758
1000
  {
759
1001
  id: "ca-orange",
@@ -791,7 +1033,7 @@ var california_default = {
791
1033
  url: "https://data-ocpw.opendata.arcgis.com/",
792
1034
  email: null
793
1035
  },
794
- notes: "Orange County CA (Anaheim/Santa Ana/Irvine) \u2014 687,000+ parcels. Only 6 fields on the public REST endpoint: ASSESSMENT_NO, SITE_ADDRESS, YEAR_BUILT, NBR_BEDROOMS, SHAPE, OBJECTID. Owner name is NOT on this public layer. The ASSESSMENT_NO is the APN with hyphens (e.g. '072-478-23'). Full assessor data is available through the ParcelQuest partnership at the county assessor portal (ocassessor.gov). This domain (ocgis.com) is Orange County California Public Works GIS \u2014 note that Orange County Florida's GIS uses ocfl.net."
1036
+ notes: "Orange County CA (Anaheim/Santa Ana/Irvine), 687,000+ parcels. Only 6 fields on the public REST endpoint: ASSESSMENT_NO, SITE_ADDRESS, YEAR_BUILT, NBR_BEDROOMS, SHAPE, OBJECTID. Owner name is NOT on this public layer. The ASSESSMENT_NO is the APN with hyphens (e.g. '072-478-23'). Full assessor data is available through the ParcelQuest partnership at the county assessor portal (ocassessor.gov). This domain (ocgis.com) is Orange County California Public Works GIS. Note that Orange County Florida's GIS uses ocfl.net."
795
1037
  },
796
1038
  {
797
1039
  id: "ca-san-bernardino",
@@ -827,11 +1069,11 @@ var california_default = {
827
1069
  }
828
1070
  ],
829
1071
  contact: {
830
- department: "County of San Bernardino \u2014 Geographic Information Management Systems (GIMS)",
1072
+ department: "County of San Bernardino, Geographic Information Management Systems (GIMS)",
831
1073
  url: "https://data-sbcounty.opendata.arcgis.com/",
832
1074
  email: null
833
1075
  },
834
- notes: "San Bernardino County is the largest county by land area in the contiguous United States (20,000+ sq mi, extending from the Inland Empire to the Nevada and Arizona borders), with a population of approximately 2.2M. 21 fields confirmed including ParcelNumber (the APN), OwnerName, LandValue, ImprovementValue, PersonalPropertyValue, ExemptionValue, HomeOwnerExemption, Acreage, TaxStatus, TaxRateArea, Zoning, ZoningDescription, Jurisdiction. Critical limitation: the OwnerName field exists in the schema and is returned in query results, but its value is redacted to the string 'Protected Per CA Gov Code 7928.205' on every public record \u2014 this is a deliberate redaction applied server-side under California Assembly Bill 1785 (effective January 2023), not a field that varies by parcel. ParcelNumber, LandValue, ImprovementValue, Zoning, and Acreage remain accessible and unredacted. Hosted on ArcGIS Online (services.arcgis.com/aA3snZwJfFkVyDuP). The county Assessor portal at arc.sbcounty.gov/property-information/ provides ownership data by APN. The Geographic Information Management Systems (GIMS) division manages the spatial data. Open-data hub: data-sbcounty.opendata.arcgis.com."
1076
+ notes: "San Bernardino County is the largest county by land area in the contiguous United States (20,000+ sq mi, extending from the Inland Empire to the Nevada and Arizona borders), with a population of approximately 2.2M. 21 fields confirmed including ParcelNumber (the APN), OwnerName, LandValue, ImprovementValue, PersonalPropertyValue, ExemptionValue, HomeOwnerExemption, Acreage, TaxStatus, TaxRateArea, Zoning, ZoningDescription, Jurisdiction. Critical limitation: the OwnerName field exists in the schema and is returned in query results, but its value is redacted to the string 'Protected Per CA Gov Code 7928.205' on every public record. This is a deliberate redaction applied server-side under California Assembly Bill 1785 (effective January 2023), not a field that varies by parcel. ParcelNumber, LandValue, ImprovementValue, Zoning, and Acreage remain accessible and unredacted. Hosted on ArcGIS Online (services.arcgis.com/aA3snZwJfFkVyDuP). The county Assessor portal at arc.sbcounty.gov/property-information/ provides ownership data by APN. The Geographic Information Management Systems (GIMS) division manages the spatial data. Open-data hub: data-sbcounty.opendata.arcgis.com."
835
1077
  },
836
1078
  {
837
1079
  id: "ca-san-diego",
@@ -875,7 +1117,7 @@ var california_default = {
875
1117
  url: "https://gis-public.sandiegocounty.gov/",
876
1118
  email: null
877
1119
  },
878
- notes: "65 fields confirmed including APN, APN_8, PARCELID, OWN_NAME1/2/3, OWN_ADDR1-4, OWN_ZIP, SITUS_ADDRESS (house number), SITUS_STREET, SITUS_SUFFIX, SITUS_PRE_DIR, SITUS_POST_DIR, SITUS_BUILDING, SITUS_SUITE, SITUS_COMMUNITY, SITUS_ZIP, SITUS_JURIS, OWNEROCC, NUCLEUS_SITUS_FROM_NBR/THRU_NBR, NUCLEUS_USE_CD, NUCLEUS_ZONE_CD. Owner query tested and confirmed \u2014 OWN_NAME1 returns real names (e.g., 'SMITH MARY ANN'). The display field is OWN_NAME1. Copyright: 'SanGIS using legal recorded data provided by the County Recorders and Assessor's Office.' This is the GeocoderMerged MapServer layer 1, which combines assessor parcel data. A sibling PARCELS_ALL service exists at gis-public.sandiegocounty.gov/arcgis/rest/services/sdep_warehouse/PARCELS_ALL/MapServer but returns HTTP 403 to external callers; the webmaps.sandiego.gov endpoint is the publicly accessible equivalent."
1120
+ notes: "65 fields confirmed including APN, APN_8, PARCELID, OWN_NAME1/2/3, OWN_ADDR1-4, OWN_ZIP, SITUS_ADDRESS (house number), SITUS_STREET, SITUS_SUFFIX, SITUS_PRE_DIR, SITUS_POST_DIR, SITUS_BUILDING, SITUS_SUITE, SITUS_COMMUNITY, SITUS_ZIP, SITUS_JURIS, OWNEROCC, NUCLEUS_SITUS_FROM_NBR/THRU_NBR, NUCLEUS_USE_CD, NUCLEUS_ZONE_CD. Owner query tested and confirmed, OWN_NAME1 returns real names (e.g., 'SMITH MARY ANN'). The display field is OWN_NAME1. Copyright: 'SanGIS using legal recorded data provided by the County Recorders and Assessor's Office.' This is the GeocoderMerged MapServer layer 1, which combines assessor parcel data. A sibling PARCELS_ALL service exists at gis-public.sandiegocounty.gov/arcgis/rest/services/sdep_warehouse/PARCELS_ALL/MapServer but returns HTTP 403 to external callers; the webmaps.sandiego.gov endpoint is the publicly accessible equivalent."
879
1121
  },
880
1122
  {
881
1123
  id: "ca-santa-clara",
@@ -914,11 +1156,11 @@ var california_default = {
914
1156
  }
915
1157
  ],
916
1158
  contact: {
917
- department: "County of Santa Clara \u2014 Geographic Information Services",
1159
+ department: "County of Santa Clara, Geographic Information Services",
918
1160
  url: "https://gis.santaclaracounty.gov/",
919
1161
  email: null
920
1162
  },
921
- notes: "19 fields confirmed: FID, ap_lp, apn, number_of_, objectid, shape_area, shape_leng, situs_city, situs_hous, situs_ho_1, situs_stat, situs_stre, situs_st_1, situs_st_2, situs_unit, situs_zip_, tax_rate_a, Shape__Area, Shape__Length. Live query confirmed: situs_city='SAN JOSE' returns real parcel data. NOTE: Owner name is NOT on this public layer \u2014 Santa Clara County restricts owner data per CA Gov Code 7928.205. No value/assessment fields available. APN format is numeric without dashes. ArcGIS item ID: 5d3c68c25b3e443893577fb6ecf54ba7. Hosted on ArcGIS Online (services8.arcgis.com/fpjs8A5Vtkshblnd). Parcel data updated annually around August. Capabilities: Query only. maxRecordCount=2000."
1163
+ notes: "19 fields confirmed: FID, ap_lp, apn, number_of_, objectid, shape_area, shape_leng, situs_city, situs_hous, situs_ho_1, situs_stat, situs_stre, situs_st_1, situs_st_2, situs_unit, situs_zip_, tax_rate_a, Shape__Area, Shape__Length. Live query confirmed: situs_city='SAN JOSE' returns real parcel data. NOTE: Owner name is NOT on this public layer, Santa Clara County restricts owner data per CA Gov Code 7928.205. No value/assessment fields available. APN format is numeric without dashes. ArcGIS item ID: 5d3c68c25b3e443893577fb6ecf54ba7. Hosted on ArcGIS Online (services8.arcgis.com/fpjs8A5Vtkshblnd). Parcel data updated annually around August. Capabilities: Query only. maxRecordCount=2000."
922
1164
  },
923
1165
  {
924
1166
  id: "ca-alameda",
@@ -965,7 +1207,7 @@ var california_default = {
965
1207
  url: "https://data.acgov.org/",
966
1208
  email: null
967
1209
  },
968
- notes: "42 fields confirmed including APN, APN_SORT, BOOK, PAGE, PARCEL, SUB_PARCEL, CLCA_CATEGORY, CENTROID_X, CENTROID_Y, SortParcel, PrintParcel, TRAPrimary, TRASecondary, SitusStreetNumber, SitusStreetName, SitusUnit, SitusCity, SitusZip, SitusZip_4, Land, Imps, CLCALand, CLCAImps, HOEX, OTEX, TotalNetValue, LatestDocument_Prefix, LatestDocumentSeries, LatestDocumentDate, MailingAddressStreet, MailingAddressUnit, MailingAddressCityState, MailingAddressZip, MailingAddressZip_4, UseCode, EconUnit, EconomicUnit, SitusAddress, MailingAddress, Shape__Area, Shape__Length. Live query confirmed: SitusCity='OAKLAND' returns real parcel data (APN='15-1338-24', Land=458816). NOTE: Owner name is NOT on this public layer \u2014 CA Gov Code 7928.205 applies. Mailing address (owner's mailing) is available via MailingAddress/MailingAddressStreet. APN format uses dashes (e.g. '15-1338-24'). ArcGIS item ID: 2b026350b5dd40b18ed7a321fdcdba81. Hosted on ArcGIS Online (services5.arcgis.com/ROBnTHSNjoZ2Wm1P). Capabilities: Query, Extract. maxRecordCount=2000."
1210
+ notes: "42 fields confirmed including APN, APN_SORT, BOOK, PAGE, PARCEL, SUB_PARCEL, CLCA_CATEGORY, CENTROID_X, CENTROID_Y, SortParcel, PrintParcel, TRAPrimary, TRASecondary, SitusStreetNumber, SitusStreetName, SitusUnit, SitusCity, SitusZip, SitusZip_4, Land, Imps, CLCALand, CLCAImps, HOEX, OTEX, TotalNetValue, LatestDocument_Prefix, LatestDocumentSeries, LatestDocumentDate, MailingAddressStreet, MailingAddressUnit, MailingAddressCityState, MailingAddressZip, MailingAddressZip_4, UseCode, EconUnit, EconomicUnit, SitusAddress, MailingAddress, Shape__Area, Shape__Length. Live query confirmed: SitusCity='OAKLAND' returns real parcel data (APN='15-1338-24', Land=458816). NOTE: Owner name is NOT on this public layer, CA Gov Code 7928.205 applies. Mailing address (owner's mailing) is available via MailingAddress/MailingAddressStreet. APN format uses dashes (e.g. '15-1338-24'). ArcGIS item ID: 2b026350b5dd40b18ed7a321fdcdba81. Hosted on ArcGIS Online (services5.arcgis.com/ROBnTHSNjoZ2Wm1P). Capabilities: Query, Extract. maxRecordCount=2000."
969
1211
  },
970
1212
  {
971
1213
  id: "ca-contra-costa",
@@ -1005,57 +1247,12 @@ var california_default = {
1005
1247
  }
1006
1248
  ],
1007
1249
  contact: {
1008
- department: "Contra Costa County GIS / CCMAP \u2014 DOIT GIS Division",
1250
+ department: "Contra Costa County GIS / CCMAP, DOIT GIS Division",
1009
1251
  url: "https://contra-costa-gis-cocogis.hub.arcgis.com/",
1010
1252
  email: null
1011
1253
  },
1012
1254
  notes: "42 fields confirmed including APN, APN_CHECK, TRA, N_STR_NM, N_STR_SUF, N_ODD_EVN, N_STR_NBR, N_FRAC, N_APT_NBR, N_CTY_ST, N_ZIP, N_ZIP_EXT, DESC_, VIEW_, ACREAGE, C_DED_NBR, C_DED_DT, USE_CODE, LAND_VALUE, IMP_VAL, PER_PRPTY, TOT_AREA, XMP_CODE1, XMP_AMT1. Live query confirmed: N_CTY_ST LIKE 'CONCORD%' returns real Concord CA parcels (APN='510052007', LAND_VALUE=512317). NOTE: Owner name is NOT on this public layer per CA Gov Code 7928.205. The CCMAP Assessment Parcels service is the county-maintained assessor parcel layer for Contra Costa County (Concord, Richmond, Walnut Creek, Antioch, etc.). Hosted on the county's GIS server (gis.cccounty.us). The main CCMAP MapServer (/CCMAP/CCMAP) has no external query layer. maxRecordCount=2000. Capabilities: Map, Query, Data."
1013
1255
  },
1014
- {
1015
- id: "ca-sacramento",
1016
- state: "CA",
1017
- stateName: "California",
1018
- stateSlug: "california",
1019
- county: "Sacramento",
1020
- countySlug: "sacramento-county",
1021
- countyFips: "06067",
1022
- hasPublicRest: true,
1023
- endpoints: [
1024
- {
1025
- url: "https://services1.arcgis.com/5NARefyPVtAeuJPU/arcgis/rest/services/Parcels/FeatureServer/0",
1026
- serviceType: "FeatureServer",
1027
- layerIndex: 0,
1028
- layerName: "Parcels",
1029
- supportsQuery: true,
1030
- corsEnabled: null,
1031
- searchFields: [
1032
- { name: "APN", label: "Assessor Parcel Number", searchable: true },
1033
- { name: "STREET_NBR", label: "Street Number", searchable: false },
1034
- { name: "STREET_NAM", label: "Street Name", searchable: true },
1035
- { name: "CITY", label: "City", searchable: true },
1036
- { name: "ZIP", label: "ZIP Code", searchable: false },
1037
- { name: "TRA", label: "Tax Rate Area", searchable: false },
1038
- { name: "LANDUSE", label: "Land Use Code", searchable: false },
1039
- { name: "LU_GENERAL", label: "Land Use (General)", searchable: false },
1040
- { name: "LOT_SIZE", label: "Lot Size (sq ft)", searchable: false },
1041
- { name: "JURISDICTION", label: "Jurisdiction", searchable: true },
1042
- { name: "PRCL_TYPE", label: "Parcel Type", searchable: false }
1043
- ],
1044
- sampleQuery: "https://services1.arcgis.com/5NARefyPVtAeuJPU/arcgis/rest/services/Parcels/FeatureServer/0/query?where=JURISDICTION%3D'CITRUS+HEIGHTS'&outFields=APN,STREET_NAM,STREET_NBR,CITY,ZIP,TRA,LANDUSE,LOT_SIZE&returnGeometry=false&f=json&resultRecordCount=10",
1045
- license: "public",
1046
- licenseUrl: "https://data-sacramentocounty.opendata.arcgis.com/",
1047
- status: "live",
1048
- lastVerified: "2026-05-15",
1049
- verifiedBy: "manual"
1050
- }
1051
- ],
1052
- contact: {
1053
- department: "Sacramento County GIS / Planning and Environmental Review",
1054
- url: "https://data-sacramentocounty.opendata.arcgis.com/",
1055
- email: null
1056
- },
1057
- notes: "22 fields confirmed: OBJECTID, APN, LOT_SIZE, NEIBRHC, JURISDICTION, STREET_NBR, STREET_NAM, CITY, ZIP, TRA, SUBDIVISIO, LOT, LANDUSE, LU_GENERAL, LU_SPECIF, LU_DETAIL, LU_USE, LU_SEC_USE, PRCL_KEY, PRCL_TYPE, Shape__Area, Shape__Length. Live query confirmed: JURISDICTION='CITRUS HEIGHTS' returns real Sacramento County parcels. NOTE: Owner name is NOT on this public layer. APN is the 14-character Sacramento County parcel number. Land use fields are detailed (LU_GENERAL, LU_SPECIF, LU_DETAIL). ArcGIS item ID: 8d011b99aebc46d48060b2e5bdd7f4a0. Hosted on ArcGIS Online (services1.arcgis.com/5NARefyPVtAeuJPU). Capabilities: Query, Extract. maxRecordCount=2000."
1058
- },
1059
1256
  {
1060
1257
  id: "ca-ventura",
1061
1258
  state: "CA",
@@ -1096,7 +1293,7 @@ var california_default = {
1096
1293
  }
1097
1294
  ],
1098
1295
  contact: {
1099
- department: "Ventura County Information Technology Services \u2014 GIS Division",
1296
+ department: "Ventura County Information Technology Services, GIS Division",
1100
1297
  url: "https://venturacountydatadownloads-vcitsgis.hub.arcgis.com/",
1101
1298
  email: null
1102
1299
  },
@@ -1154,11 +1351,11 @@ var colorado_default = {
1154
1351
  }
1155
1352
  ],
1156
1353
  contact: {
1157
- department: "Colorado Governor's Office of Information Technology (OIT) \u2014 Colorado Geographic Information Systems Program",
1354
+ department: "Colorado Governor's Office of Information Technology (OIT), Colorado Geographic Information Systems Program",
1158
1355
  url: "https://gis.colorado.gov/",
1159
1356
  email: null
1160
1357
  },
1161
- notes: "34 fields confirmed including parcel_id, countyName, countyFips, situsAdd, sitAddCty, sitAddZip, owner, owner2, ownerAdd, ownAddCty, ownAddStt, ownAddZip, legalDesc, landSqft, landAcres, block, lot, subCode, subName, zoningCode, zoningDesc, landUseCde, landUseDsc, saleDate, salePrice, apprValTot, asedValTot, URL, dateReceived. This is a statewide composite \u2014 query by countyName='Denver' OR countyFips='031' (note: FIPS here is the 3-digit county portion, not the full 5-digit). Owner query tested and confirmed with real Denver addresses. This same endpoint covers all 64 Colorado counties; filter by countyName or countyFips for any of them. Denver is a consolidated city-county (countyName='Denver' and cityName='Denver' are the same entity)."
1358
+ notes: "34 fields confirmed including parcel_id, countyName, countyFips, situsAdd, sitAddCty, sitAddZip, owner, owner2, ownerAdd, ownAddCty, ownAddStt, ownAddZip, legalDesc, landSqft, landAcres, block, lot, subCode, subName, zoningCode, zoningDesc, landUseCde, landUseDsc, saleDate, salePrice, apprValTot, asedValTot, URL, dateReceived. This is a statewide composite. Query by countyName='Denver' OR countyFips='031' (note: FIPS here is the 3-digit county portion, not the full 5-digit). Owner query tested and confirmed with real Denver addresses. This same endpoint covers all 64 Colorado counties; filter by countyName or countyFips for any of them. Denver is a consolidated city-county (countyName='Denver' and cityName='Denver' are the same entity)."
1162
1359
  },
1163
1360
  {
1164
1361
  id: "co-el-paso",
@@ -1201,11 +1398,11 @@ var colorado_default = {
1201
1398
  }
1202
1399
  ],
1203
1400
  contact: {
1204
- department: "Colorado Governor's Office of Information Technology (OIT) \u2014 Colorado Geographic Information Systems Program",
1401
+ department: "Colorado Governor's Office of Information Technology (OIT), Colorado Geographic Information Systems Program",
1205
1402
  url: "https://gis.colorado.gov/",
1206
1403
  email: null
1207
1404
  },
1208
- notes: "El Paso County (Colorado Springs metro, pop. 730,000, county seat Colorado Springs) is the second-most populous Colorado county and home to Fort Carson, Peterson Space Force Base, and Schriever Space Force Base. Like all Colorado counties, it uses the Colorado Governor's OIT statewide composite endpoint \u2014 query by countyName='El Paso' or countyFips='041' (the statewide layer uses the 3-digit county FIPS, not the full 5-digit '08041'). Owner query confirmed live with real Colorado Springs results (e.g., 'SMITH CHERYL LYNNE'). The composite layer exposes parcel_id, owner/owner2, ownerAdd/ownAddCty/ownAddStt/ownAddZip, situsAdd/sitAddCty/sitAddZip, legalDesc, landSqft/landAcres, zoningCode/zoningDesc, landUseCde/landUseDsc, saleDate, salePrice, apprValTot, asedValTot, and dateReceived (currency indicator for when each county's data was loaded). The El Paso County Assessor at assessor.elpasoco.com handles formal reassessment disputes. Colorado assesses on a biennial cycle \u2014 unlike Illinois or California, which use triennial or annual schedules."
1405
+ notes: "El Paso County (Colorado Springs metro, pop. 730,000, county seat Colorado Springs) is the second-most populous Colorado county and home to Fort Carson, Peterson Space Force Base, and Schriever Space Force Base. Like all Colorado counties, it uses the Colorado Governor's OIT statewide composite endpoint, query by countyName='El Paso' or countyFips='041' (the statewide layer uses the 3-digit county FIPS, not the full 5-digit '08041'). Owner query confirmed live with real Colorado Springs results (e.g., 'SMITH CHERYL LYNNE'). The composite layer exposes parcel_id, owner/owner2, ownerAdd/ownAddCty/ownAddStt/ownAddZip, situsAdd/sitAddCty/sitAddZip, legalDesc, landSqft/landAcres, zoningCode/zoningDesc, landUseCde/landUseDsc, saleDate, salePrice, apprValTot, asedValTot, and dateReceived (currency indicator for when each county's data was loaded). The El Paso County Assessor at assessor.elpasoco.com handles formal reassessment disputes. Colorado assesses on a biennial cycle, unlike Illinois or California, which use triennial or annual schedules."
1209
1406
  },
1210
1407
  {
1211
1408
  id: "co-jefferson",
@@ -1248,11 +1445,11 @@ var colorado_default = {
1248
1445
  }
1249
1446
  ],
1250
1447
  contact: {
1251
- department: "Colorado Governor's Office of Information Technology (OIT) \u2014 Colorado Geographic Information Systems Program",
1448
+ department: "Colorado Governor's Office of Information Technology (OIT), Colorado Geographic Information Systems Program",
1252
1449
  url: "https://gis.colorado.gov/",
1253
1450
  email: null
1254
1451
  },
1255
- notes: "Jefferson County (Denver's west-side suburbs \u2014 Lakewood, Arvada, Wheat Ridge, Evergreen, Golden; pop. 582,000, county seat Golden) is a mixed urban-mountain county extending from the Denver metro edge into the foothills and lower Rockies. Like all Colorado counties, it uses the Colorado Governor's OIT statewide composite endpoint \u2014 query by countyName='Jefferson' or countyFips='059' (3-digit county portion; full 5-digit is '08059'). Owner query confirmed live: returns real Jefferson County results (e.g., 'SMITH STEVEN W' at '7347 W FREMONT DR LITTLETON'). The composite layer exposes parcel_id, owner/owner2 (owner name fields), ownerAdd/ownAddCty/ownAddStt/ownAddZip (owner mailing address), situsAdd/sitAddCty/sitAddZip (situs address), legalDesc, landSqft/landAcres, zoningCode/zoningDesc, landUseCde/landUseDsc, saleDate/salePrice, apprValTot/asedValTot, and dateReceived. The Jefferson County Assessor at jeffco.us/1304/Assessor administers biennial reassessments (Colorado assesses on a two-year cycle, not triennial). Open-data downloads available at jeffco.us/GIS."
1452
+ notes: "Jefferson County (Denver's west-side suburbs, Lakewood, Arvada, Wheat Ridge, Evergreen, Golden; pop. 582,000, county seat Golden) is a mixed urban-mountain county extending from the Denver metro edge into the foothills and lower Rockies. Like all Colorado counties, it uses the Colorado Governor's OIT statewide composite endpoint, query by countyName='Jefferson' or countyFips='059' (3-digit county portion; full 5-digit is '08059'). Owner query confirmed live: returns real Jefferson County results (e.g., 'SMITH STEVEN W' at '7347 W FREMONT DR LITTLETON'). The composite layer exposes parcel_id, owner/owner2 (owner name fields), ownerAdd/ownAddCty/ownAddStt/ownAddZip (owner mailing address), situsAdd/sitAddCty/sitAddZip (situs address), legalDesc, landSqft/landAcres, zoningCode/zoningDesc, landUseCde/landUseDsc, saleDate/salePrice, apprValTot/asedValTot, and dateReceived. The Jefferson County Assessor at jeffco.us/1304/Assessor administers biennial reassessments (Colorado assesses on a two-year cycle, not triennial). Open-data downloads available at jeffco.us/GIS."
1256
1453
  }
1257
1454
  ]
1258
1455
  };
@@ -1262,7 +1459,7 @@ var connecticut_default = {
1262
1459
  stateSlug: "connecticut",
1263
1460
  stateName: "Connecticut",
1264
1461
  stateAbbrev: "CT",
1265
- lastUpdated: "2026-05-15",
1462
+ lastUpdated: "2026-06-20",
1266
1463
  counties: [
1267
1464
  {
1268
1465
  id: "ct-hartford",
@@ -1312,11 +1509,161 @@ var connecticut_default = {
1312
1509
  }
1313
1510
  ],
1314
1511
  contact: {
1315
- department: "Connecticut Office of Policy and Management (OPM) \u2014 GIS Data",
1512
+ department: "Connecticut Office of Policy and Management (OPM), GIS Data",
1513
+ url: "https://portal.ct.gov/OPM/IGPP/Publications/GIS-Data",
1514
+ email: null
1515
+ },
1516
+ notes: "49 fields confirmed including Parcel_ID, Parcel_Typ, Town_Name, Unit_Type, link_1, Location_1, Property_City, Owner, Co_Owner, Mailing_Address, Mailing_City, Mailing_State, Assessed_Total, Assessed_Land, Assessed_Building, Pre_Yr_Assessed_Total, Appraised_Land, Appraised_Building, Appraised_Outbuilding, Valuation_Year, Land_Acres, State_Use, State_Use_Description, Model, Condition, Living_Area, Effective_Area, Total_Rooms, Number_of_Bedroom, Number_of_Baths, Number_of_Half_Baths, Sale_Price, Sale_Date, Qualified, Prior_Sale_Date, Prior_Book_Page, Prior_Sale_Price, Occupancy, Planning_Region, Collection_Year, FIPS_Codes, ayb, eyb. NOTE: Connecticut does not have active county governments. County is a historical/geographic designation only. This statewide CT CAMA 2024 layer covers ALL Connecticut municipalities. Filter by Town_Name for specific towns. Hartford County towns include Hartford, West Hartford, East Hartford, Manchester, Enfield, Bloomfield, Glastonbury, Newington, Windsor, Wethersfield, South Windsor, New Britain, Southington, Bristol, etc. Owner query confirmed returning real residential parcels. This is a town-reported CAMA (Computer Assisted Mass Appraisal) dataset collected by CT OPM."
1517
+ },
1518
+ {
1519
+ id: "ct-new-haven",
1520
+ state: "CT",
1521
+ stateName: "Connecticut",
1522
+ stateSlug: "connecticut",
1523
+ county: "New Haven",
1524
+ countySlug: "new-haven-county",
1525
+ countyFips: "09009",
1526
+ hasPublicRest: true,
1527
+ endpoints: [
1528
+ {
1529
+ url: "https://services3.arcgis.com/3FL1kr7L4LvwA2Kb/arcgis/rest/services/Connecticut_CAMA_and_Parcel_Layer_2024/FeatureServer/0",
1530
+ serviceType: "FeatureServer",
1531
+ layerIndex: 0,
1532
+ layerName: "Connecticut_CAMA_and_Parcel_Layer",
1533
+ supportsQuery: true,
1534
+ corsEnabled: null,
1535
+ searchFields: [
1536
+ { name: "Town_Name", label: "Town Name (REQUIRED filter. Set to a New Haven County town, e.g. New Haven, Waterbury, Meriden, Milford, West Haven, Hamden)", searchable: true },
1537
+ { name: "Owner", label: "Owner Name", searchable: true },
1538
+ { name: "Co_Owner", label: "Co-Owner Name", searchable: true },
1539
+ { name: "Parcel_ID", label: "Parcel ID (may be blank for some towns incl. New Haven)", searchable: true },
1540
+ { name: "Location_1", label: "Property Location / Address", searchable: true },
1541
+ { name: "Property_City", label: "Property City", searchable: false },
1542
+ { name: "Mailing_Address", label: "Mailing Address", searchable: true },
1543
+ { name: "Mailing_City", label: "Mailing City", searchable: false },
1544
+ { name: "Mailing_State", label: "Mailing State", searchable: false },
1545
+ { name: "Assessed_Total", label: "Total Assessed Value", searchable: false },
1546
+ { name: "Assessed_Land", label: "Land Assessed Value", searchable: false },
1547
+ { name: "Assessed_Building", label: "Building Assessed Value", searchable: false },
1548
+ { name: "Valuation_Year", label: "Valuation Year", searchable: false },
1549
+ { name: "Sale_Price", label: "Sale Price", searchable: false },
1550
+ { name: "Sale_Date", label: "Sale Date", searchable: false },
1551
+ { name: "State_Use_Description", label: "Use Description", searchable: false },
1552
+ { name: "Living_Area", label: "Living Area (sq ft)", searchable: false }
1553
+ ],
1554
+ sampleQuery: "https://services3.arcgis.com/3FL1kr7L4LvwA2Kb/arcgis/rest/services/Connecticut_CAMA_and_Parcel_Layer_2024/FeatureServer/0/query?where=Town_Name%3D'New Haven'+AND+UPPER(Owner)+LIKE+UPPER('%25SMITH%25')&outFields=Parcel_ID,Town_Name,Owner,Co_Owner,Location_1,Assessed_Total&returnGeometry=false&f=json&resultRecordCount=10",
1555
+ license: "public",
1556
+ licenseUrl: "https://portal.ct.gov/OPM/IGPP/Publications/GIS-Data",
1557
+ status: "live",
1558
+ lastVerified: "2026-06-20",
1559
+ verifiedBy: "manual"
1560
+ }
1561
+ ],
1562
+ contact: {
1563
+ department: "Connecticut Office of Policy and Management (OPM), GIS Data",
1316
1564
  url: "https://portal.ct.gov/OPM/IGPP/Publications/GIS-Data",
1317
1565
  email: null
1318
1566
  },
1319
- notes: "49 fields confirmed including Parcel_ID, Parcel_Typ, Town_Name, Unit_Type, link_1, Location_1, Property_City, Owner, Co_Owner, Mailing_Address, Mailing_City, Mailing_State, Assessed_Total, Assessed_Land, Assessed_Building, Pre_Yr_Assessed_Total, Appraised_Land, Appraised_Building, Appraised_Outbuilding, Valuation_Year, Land_Acres, State_Use, State_Use_Description, Model, Condition, Living_Area, Effective_Area, Total_Rooms, Number_of_Bedroom, Number_of_Baths, Number_of_Half_Baths, Sale_Price, Sale_Date, Qualified, Prior_Sale_Date, Prior_Book_Page, Prior_Sale_Price, Occupancy, Planning_Region, Collection_Year, FIPS_Codes, ayb, eyb. NOTE: Connecticut does not have active county governments \u2014 county is a historical/geographic designation only. This statewide CT CAMA 2024 layer covers ALL Connecticut municipalities. Filter by Town_Name for specific towns. Hartford County towns include Hartford, West Hartford, East Hartford, Manchester, Enfield, Bloomfield, Glastonbury, Newington, Windsor, Wethersfield, South Windsor, New Britain, Southington, Bristol, etc. Owner query confirmed returning real residential parcels. This is a town-reported CAMA (Computer Assisted Mass Appraisal) dataset collected by CT OPM."
1567
+ notes: "Connecticut has no active county governments, New Haven County is a historical/geographic designation. Property records are maintained per-municipality and aggregated into the statewide CT CAMA & Parcel Layer 2024 (the SAME FeatureServer used for Hartford County). To scope to New Haven County you MUST filter by Town_Name; the layer carries every CT town in one table. New Haven County towns: New Haven, Waterbury, Meriden, Milford, West Haven, Hamden, East Haven, North Haven, Branford, Cheshire, Naugatuck, Wallingford, Guilford, Madison, Seymour, Derby, Ansonia, Orange, Woodbridge, Bethany, Beacon Falls, Middlebury, Oxford, Prospect, Southbury, Wolcott. Verified 2026-06-20: Town_Name='New Haven' returns 27,251 parcels; UPPER(Owner) LIKE '%SMITH%' returns real residential parcels (e.g. '653 WASHINGTON AV'). NOTE: Parcel_ID comes back blank for some towns (New Haven included) because those municipalities did not report it to OPM, Owner + Location_1 remain populated. For authoritative records use the relevant town Assessor's office (e.g. New Haven: cityofnewhaven.com)."
1568
+ },
1569
+ {
1570
+ id: "ct-fairfield",
1571
+ state: "CT",
1572
+ stateName: "Connecticut",
1573
+ stateSlug: "connecticut",
1574
+ county: "Fairfield",
1575
+ countySlug: "fairfield-county",
1576
+ countyFips: "09001",
1577
+ hasPublicRest: true,
1578
+ endpoints: [
1579
+ {
1580
+ url: "https://services3.arcgis.com/3FL1kr7L4LvwA2Kb/arcgis/rest/services/Connecticut_CAMA_and_Parcel_Layer_2024/FeatureServer/0",
1581
+ serviceType: "FeatureServer",
1582
+ layerIndex: 0,
1583
+ layerName: "Connecticut_CAMA_and_Parcel_Layer",
1584
+ supportsQuery: true,
1585
+ corsEnabled: null,
1586
+ searchFields: [
1587
+ { name: "Town_Name", label: "Town Name (REQUIRED filter, set to a Fairfield County town, e.g. Bridgeport, Stamford, Norwalk, Danbury, Fairfield, Westport)", searchable: true },
1588
+ { name: "Owner", label: "Owner Name", searchable: true },
1589
+ { name: "Co_Owner", label: "Co-Owner Name", searchable: true },
1590
+ { name: "Parcel_ID", label: "Parcel ID (may be blank for some towns)", searchable: true },
1591
+ { name: "Location_1", label: "Property Location / Address", searchable: true },
1592
+ { name: "Property_City", label: "Property City", searchable: false },
1593
+ { name: "Mailing_Address", label: "Mailing Address", searchable: true },
1594
+ { name: "Mailing_City", label: "Mailing City", searchable: false },
1595
+ { name: "Mailing_State", label: "Mailing State", searchable: false },
1596
+ { name: "Assessed_Total", label: "Total Assessed Value", searchable: false },
1597
+ { name: "Assessed_Land", label: "Land Assessed Value", searchable: false },
1598
+ { name: "Assessed_Building", label: "Building Assessed Value", searchable: false },
1599
+ { name: "Valuation_Year", label: "Valuation Year", searchable: false },
1600
+ { name: "Sale_Price", label: "Sale Price", searchable: false },
1601
+ { name: "Sale_Date", label: "Sale Date", searchable: false },
1602
+ { name: "State_Use_Description", label: "Use Description", searchable: false },
1603
+ { name: "Living_Area", label: "Living Area (sq ft)", searchable: false }
1604
+ ],
1605
+ sampleQuery: "https://services3.arcgis.com/3FL1kr7L4LvwA2Kb/arcgis/rest/services/Connecticut_CAMA_and_Parcel_Layer_2024/FeatureServer/0/query?where=Town_Name%3D'Stamford'+AND+UPPER(Owner)+LIKE+UPPER('%25SMITH%25')&outFields=Parcel_ID,Town_Name,Owner,Co_Owner,Location_1,Assessed_Total&returnGeometry=false&f=json&resultRecordCount=10",
1606
+ license: "public",
1607
+ licenseUrl: "https://portal.ct.gov/OPM/IGPP/Publications/GIS-Data",
1608
+ status: "live",
1609
+ lastVerified: "2026-06-20",
1610
+ verifiedBy: "manual"
1611
+ }
1612
+ ],
1613
+ contact: {
1614
+ department: "Connecticut Office of Policy and Management (OPM), GIS Data",
1615
+ url: "https://portal.ct.gov/OPM/IGPP/Publications/GIS-Data",
1616
+ email: null
1617
+ },
1618
+ notes: "Connecticut has no active county governments, Fairfield County is a historical/geographic designation. Property records are maintained per-municipality and aggregated into the statewide CT CAMA & Parcel Layer 2024 (the SAME FeatureServer used for Hartford and New Haven Counties). To scope to Fairfield County you MUST filter by Town_Name. Fairfield County towns: Bridgeport, Stamford, Norwalk, Danbury, Fairfield, Westport, Greenwich, Stratford, Trumbull, Shelton, Monroe, Newtown, Ridgefield, Wilton, Weston, New Canaan, Darien, Bethel, Brookfield, Easton, Redding, Sherman, New Fairfield. Verified 2026-06-20: Town_Name='Stamford' returns 25,719 parcels; UPPER(Owner) LIKE '%SMITH%' returns real residential parcels (e.g. '92 SHADY LANE'). NOTE: Parcel_ID may be blank for some towns; Owner + Location_1 remain populated. For authoritative records use the relevant town Assessor's office."
1619
+ }
1620
+ ]
1621
+ };
1622
+
1623
+ // data/delaware.json
1624
+ var delaware_default = {
1625
+ stateSlug: "delaware",
1626
+ stateName: "Delaware",
1627
+ stateAbbrev: "DE",
1628
+ lastUpdated: "2026-06-20",
1629
+ counties: [
1630
+ {
1631
+ id: "de-new-castle",
1632
+ state: "DE",
1633
+ stateName: "Delaware",
1634
+ stateSlug: "delaware",
1635
+ county: "New Castle",
1636
+ countySlug: "new-castle-county",
1637
+ countyFips: "10003",
1638
+ hasPublicRest: true,
1639
+ endpoints: [
1640
+ {
1641
+ url: "https://gis.nccde.org/entserver/rest/services/Foundation/Base_Layers/MapServer/0",
1642
+ serviceType: "MapServer",
1643
+ layerIndex: 0,
1644
+ layerName: "Parcels",
1645
+ supportsQuery: true,
1646
+ corsEnabled: null,
1647
+ searchFields: [
1648
+ { name: "PRCLID", label: "Parcel ID (APN)", searchable: true },
1649
+ { name: "CNTCTLAST", label: "Owner Last Name / Contact", searchable: true },
1650
+ { name: "OWNADDR", label: "Owner Mailing Address", searchable: false },
1651
+ { name: "ADDRESS", label: "Property Address", searchable: true }
1652
+ ],
1653
+ sampleQuery: "https://gis.nccde.org/entserver/rest/services/Foundation/Base_Layers/MapServer/0/query?where=UPPER(CNTCTLAST)+LIKE+UPPER('%25SMITH%25')&outFields=PRCLID,CNTCTLAST,ADDRESS,OWNADDR&returnGeometry=false&f=json&resultRecordCount=10",
1654
+ license: "public",
1655
+ licenseUrl: "https://gis.nccde.org/",
1656
+ status: "live",
1657
+ lastVerified: "2026-06-20",
1658
+ verifiedBy: "manual"
1659
+ }
1660
+ ],
1661
+ contact: {
1662
+ department: "New Castle County Government, Office of Land Use / GIS (NCCDE)",
1663
+ url: "https://gis.nccde.org/",
1664
+ email: null
1665
+ },
1666
+ notes: "New Castle County DE (Wilmington/Newark metro; county seat Wilmington; FIPS 10003; most populous of Delaware's 3 counties, pop. ~570,000) publishes a public ArcGIS MapServer parcel layer hosted by NCCDE GIS (Foundation/Base_Layers/MapServer/0, 'Parcels', ~203,753 features, no token required). Key fields: PRCLID (parcel ID / APN), CNTCTLAST (owner last name / contact, the searchable owner field), OWNADDR (owner mailing address), ADDRESS (property situs address). Owner-name search via UPPER(CNTCTLAST) LIKE UPPER('%NAME%') works. Verified 2026-06-20: UPPER(CNTCTLAST) LIKE UPPER('%SMITH%') returns Wilmington-area parcels. Delaware has only 3 counties (New Castle, Kent, Sussex); Kent and Sussex are served separately. Do not confuse with New Castle in Pennsylvania (Lawrence County, PA)."
1320
1667
  }
1321
1668
  ]
1322
1669
  };
@@ -1326,7 +1673,7 @@ var florida_default = {
1326
1673
  stateSlug: "florida",
1327
1674
  stateName: "Florida",
1328
1675
  stateAbbrev: "FL",
1329
- lastUpdated: "2026-05-15",
1676
+ lastUpdated: "2026-06-06",
1330
1677
  counties: [
1331
1678
  {
1332
1679
  id: "fl-miami-dade",
@@ -1406,7 +1753,7 @@ var florida_default = {
1406
1753
  url: "https://ocgis-datahub-ocfl.hub.arcgis.com/",
1407
1754
  email: null
1408
1755
  },
1409
- notes: "Only 6 fields on this public REST endpoint: ASSESSMENT_NO, SITE_ADDRESS, YEAR_BUILT, NBR_BEDROOMS, SHAPE, OBJECTID. Owner name is NOT available on this layer \u2014 the public REST endpoint is geometry + parcel ID + limited building characteristics only. Owner data lives in the OCPA (Orange County Property Appraiser) portal at ocpa.com and is not exposed via public REST. A second service at ocgis4.ocfl.net/arcgis/rest/services/Public_Dynamic/MapServer exists for county facilities but not full parcel attributes."
1756
+ notes: "Only 6 fields on this public REST endpoint: ASSESSMENT_NO, SITE_ADDRESS, YEAR_BUILT, NBR_BEDROOMS, SHAPE, OBJECTID. Owner name is NOT available on this layer. The public REST endpoint is geometry + parcel ID + limited building characteristics only. Owner data lives in the OCPA (Orange County Property Appraiser) portal at ocpa.com and is not exposed via public REST. A second service at ocgis4.ocfl.net/arcgis/rest/services/Public_Dynamic/MapServer exists for county facilities but not full parcel attributes."
1410
1757
  },
1411
1758
  {
1412
1759
  id: "fl-hillsborough",
@@ -1419,36 +1766,36 @@ var florida_default = {
1419
1766
  hasPublicRest: true,
1420
1767
  endpoints: [
1421
1768
  {
1422
- url: "https://www25.swfwmd.state.fl.us/arcgiswmis/rest/services/r27/LocationInfo/MapServer/71",
1769
+ url: "https://gis.hcpafl.org/arcgis/rest/services/Webmaps/HillsboroughFL_WebParcels/MapServer/0",
1423
1770
  serviceType: "MapServer",
1424
- layerIndex: 71,
1425
- layerName: "Hillsborough County Parcels",
1771
+ layerIndex: 0,
1772
+ layerName: "WebParcels_NonConfidential",
1426
1773
  supportsQuery: true,
1427
1774
  corsEnabled: null,
1428
1775
  searchFields: [
1429
- { name: "PARNO", label: "Parcel Number", searchable: true },
1430
- { name: "OWNNAME", label: "Owner Name", searchable: true },
1431
- { name: "MAILADD", label: "Mailing Address", searchable: true },
1432
- { name: "STNAME", label: "State", searchable: false },
1433
- { name: "CNTYFIPS", label: "County FIPS Code", searchable: false },
1434
- { name: "OWNTYPE", label: "Owner Type", searchable: false },
1435
- { name: "PARUSEDESC", label: "Parcel Use Description", searchable: false },
1436
- { name: "PARVAL", label: "Parcel Value", searchable: false }
1776
+ { name: "folio", label: "Folio Number (Parcel ID)", searchable: true },
1777
+ { name: "Owner1", label: "Owner Name", searchable: true },
1778
+ { name: "Owner2", label: "Owner Name 2", searchable: true },
1779
+ { name: "FullAddress", label: "Site Address", searchable: true },
1780
+ { name: "strap", label: "STRAP (alternate parcel key)", searchable: true },
1781
+ { name: "SiteCity", label: "City", searchable: false },
1782
+ { name: "SiteZip", label: "ZIP Code", searchable: false },
1783
+ { name: "Homestead", label: "Homestead Exemption", searchable: false }
1437
1784
  ],
1438
- sampleQuery: "https://www25.swfwmd.state.fl.us/arcgiswmis/rest/services/r27/LocationInfo/MapServer/71/query?where=UPPER(OWNNAME)%20LIKE%20UPPER('%25SMITH%25')&outFields=PARNO,OWNNAME,MAILADD,PARUSEDESC&returnGeometry=false&f=json&resultRecordCount=10",
1785
+ sampleQuery: "https://gis.hcpafl.org/arcgis/rest/services/Webmaps/HillsboroughFL_WebParcels/MapServer/0/query?where=UPPER(Owner1)+LIKE+UPPER('%25SMITH%25')&outFields=folio,Owner1,FullAddress,SiteCity&returnGeometry=false&f=json&resultRecordCount=10",
1439
1786
  license: "public",
1440
- licenseUrl: "https://www.swfwmd.state.fl.us/resources/data-maps",
1787
+ licenseUrl: "https://www.hcpafl.org/",
1441
1788
  status: "live",
1442
- lastVerified: "2026-05-11",
1443
- verifiedBy: "manual"
1789
+ lastVerified: "2026-06-27",
1790
+ verifiedBy: "automated"
1444
1791
  }
1445
1792
  ],
1446
1793
  contact: {
1447
- department: "Southwest Florida Water Management District (SWFWMD) \u2014 hosts the FL regional parcel layer",
1448
- url: "https://www.swfwmd.state.fl.us/resources/data-maps",
1794
+ department: "Hillsborough County Property Appraiser (HCPA)",
1795
+ url: "https://www.hcpafl.org/",
1449
1796
  email: null
1450
1797
  },
1451
- notes: "20 fields confirmed including PARNO, OWNNAME, MAILADD, OWNTYPE, AREATXT, IMPROVVAL, LANDVAL, PARVAL, PARVALTYPE, PARUSECODE, PARUSEDESC. Owner query returns real results with CNTYFIPS=057 confirming Hillsborough data. This endpoint is on the SWFWMD (regional water management district) server, which aggregates parcel data from multiple FL counties in a single LocationInfo MapServer (layer 71 of 80+). The Hillsborough County Property Appraiser's own REST server at gis.hcpafl.org does not expose a queryable public parcel layer \u2014 only their browser-based property search at gis.hcpafl.org/propertysearch/."
1798
+ notes: "Hillsborough County Property Appraiser (HCPA) public parcel layer at gis.hcpafl.org, 'WebParcels_NonConfidential', ~527,844 parcels exposing Owner1/Owner2 (owner name), folio (parcel ID), strap (alternate key), and FullAddress. Owner search via UPPER(Owner1) LIKE works; field names are CASE-SENSITIVE (Owner1, folio, FullAddress). Records flagged Confidential (state address-confidentiality program) have owner names suppressed. Replaced the prior SWFWMD regional water-district layer (2026-06-08). NOTE 2026-06-27: query endpoint responds in 13-35s (server-side slowness); the liveness check at 12s timeout always flags this FAIL but the endpoint IS live. Metadata returns immediately. If the liveness checker timeout is raised above ~30s for this endpoint, it will pass."
1452
1799
  },
1453
1800
  {
1454
1801
  id: "fl-broward",
@@ -1461,23 +1808,20 @@ var florida_default = {
1461
1808
  hasPublicRest: true,
1462
1809
  endpoints: [
1463
1810
  {
1464
- url: "https://gis.bcpa.net/bcpagis/rest/services/Public/BCPA_EXTERNAL/MapServer/0",
1811
+ url: "https://gisweb-adapters.bcpa.net/arcgis/rest/services/BCPA_EXTERNAL_JAN26/MapServer/16",
1465
1812
  serviceType: "MapServer",
1466
- layerIndex: 0,
1813
+ layerIndex: 16,
1467
1814
  layerName: "Parcels",
1468
1815
  supportsQuery: true,
1469
1816
  corsEnabled: null,
1470
1817
  searchFields: [
1471
- { name: "FOLIO", label: "Folio Number (Parcel ID)", searchable: true },
1472
- { name: "OWNER", label: "Owner Name", searchable: true },
1473
- { name: "SITE_ADDR", label: "Site Address", searchable: true },
1474
- { name: "MAILING_ADDRESS", label: "Mailing Address", searchable: true }
1818
+ { name: "FOLIO", label: "Folio Number (Parcel ID)", searchable: true }
1475
1819
  ],
1476
- sampleQuery: "https://gis.bcpa.net/bcpagis/rest/services/Public/BCPA_EXTERNAL/MapServer/0/query?where=UPPER(OWNER)+LIKE+UPPER('%25SMITH%25')&outFields=FOLIO,OWNER,SITE_ADDR,MAILING_ADDRESS&returnGeometry=false&f=json&resultRecordCount=10",
1820
+ sampleQuery: "https://gisweb-adapters.bcpa.net/arcgis/rest/services/BCPA_EXTERNAL_JAN26/MapServer/16/query?where=FOLIO%3D%27504201090030%27&outFields=FOLIO&returnGeometry=false&f=json&resultRecordCount=10",
1477
1821
  license: "public",
1478
1822
  licenseUrl: "https://www.bcpa.net/",
1479
1823
  status: "live",
1480
- lastVerified: "2026-05-15",
1824
+ lastVerified: "2026-06-06",
1481
1825
  verifiedBy: "manual"
1482
1826
  }
1483
1827
  ],
@@ -1486,7 +1830,7 @@ var florida_default = {
1486
1830
  url: "https://www.bcpa.net/",
1487
1831
  email: null
1488
1832
  },
1489
- notes: "Broward County Property Appraiser public REST endpoint. Fields include FOLIO (13-digit parcel ID), OWNER, SITE_ADDR, MAILING_ADDRESS, LAND_VAL, BLDG_VAL, TOTAL_VAL, SALE_DATE, SALE_PRICE, USE_CODE. Owner name search uses UPPER() LIKE. The FL statewide FDOR cadastral (services9.arcgis.com) is a partitioned FeatureServer that routes to individual county subsets \u2014 the CO_NO field in that dataset uses FDOR-internal county numbers (not FIPS) and queries outside the locally-routed partition return empty. County-specific endpoints are more reliable for Broward."
1833
+ notes: "Broward County Property Appraiser public REST endpoint. The current public layer exposes FOLIO (13-digit parcel ID) only. Owner, site-address, mailing, valuation, and sale fields were removed from public REST in the 2026-06-06 migration (see below). The FL statewide FDOR cadastral (services9.arcgis.com) is a partitioned FeatureServer that routes to individual county subsets. The CO_NO field in that dataset uses FDOR-internal county numbers (not FIPS) and queries outside the locally-routed partition return empty. County-specific endpoints are more reliable for Broward. MIGRATED 2026-06-06: gis.bcpa.net DNS was retired -- the public service moved to gisweb-adapters.bcpa.net (BCPA_EXTERNAL_JAN26/MapServer/16, 556,435 parcels). DEGRADED: the new public layer exposes FOLIO only; the county removed owner, site-address, and mailing fields from public REST. FOLIO lookup only -- owner-name search is no longer possible on this endpoint."
1490
1834
  },
1491
1835
  {
1492
1836
  id: "fl-duval",
@@ -1617,7 +1961,7 @@ var florida_default = {
1617
1961
  url: "https://data-sarco.opendata.arcgis.com/",
1618
1962
  email: null
1619
1963
  },
1620
- notes: "Sarasota County Property Appraiser parcel dataset hosted on ArcGIS Online (Sarasota County Enterprise GIS). Fields include ACCOUNT (parcel account number), NAME1/NAME_ADD2/3/4/5 (owner name lines), LOCN (street number), LOCD/LOCS/LOCT (direction/name/type), CITY, STATE, ZIP, UNIT. Mailing address uses NAME_ADD lines. Verified 2026-05-15: SMITH returns Sarasota-area addresses (LONGBOAT KEY, SUNAPEE NH mailing). Note CITY field contains mailing city not site city \u2014 for site address the LOCN+LOCS+LOCT fields must be concatenated. Sarasota County pop. 464,000."
1964
+ notes: "Sarasota County Property Appraiser parcel dataset hosted on ArcGIS Online (Sarasota County Enterprise GIS). Fields include ACCOUNT (parcel account number), NAME1/NAME_ADD2/3/4/5 (owner name lines), LOCN (street number), LOCD/LOCS/LOCT (direction/name/type), CITY, STATE, ZIP, UNIT. Mailing address uses NAME_ADD lines. Verified 2026-05-15: SMITH returns Sarasota-area addresses (LONGBOAT KEY, SUNAPEE NH mailing). Note CITY field contains mailing city not site city. For site address the LOCN+LOCS+LOCT fields must be concatenated. Sarasota County pop. 464,000."
1621
1965
  },
1622
1966
  {
1623
1967
  id: "fl-palm-beach",
@@ -1656,7 +2000,7 @@ var florida_default = {
1656
2000
  url: "https://opendata2-pbcgov.opendata.arcgis.com/",
1657
2001
  email: null
1658
2002
  },
1659
- notes: "Palm Beach County, Florida (West Palm Beach / Boca Raton, pop. ~1.49M \u2014 3rd most populous FL county) publishes a Property Appraiser parcels FeatureServer through the PBCGOV open-data portal. Owner search uses OWNER_NAME1 (with OWNER_NAME2 as a second owner slot); the combined site address is SITE_ADDR_STR; the parcel control number is PARID; MUNICIPALITY filters by city. Owner LIKE query confirmed live 2026-05-30. Records flagged CONFIDENTIAL under Florida public-records exemptions (s. 119.071, F.S. \u2014 for law enforcement, judges, and similar protected persons) have owner/mailing data suppressed; the majority of parcels are public."
2003
+ notes: "Palm Beach County, Florida (West Palm Beach / Boca Raton, pop. ~1.49M, 3rd most populous FL county) publishes a Property Appraiser parcels FeatureServer through the PBCGOV open-data portal. Owner search uses OWNER_NAME1 (with OWNER_NAME2 as a second owner slot); the combined site address is SITE_ADDR_STR; the parcel control number is PARID; MUNICIPALITY filters by city. Owner LIKE query confirmed live 2026-05-30. Records flagged CONFIDENTIAL under Florida public-records exemptions (s. 119.071, F.S., for law enforcement, judges, and similar protected persons) have owner/mailing data suppressed; the majority of parcels are public."
1660
2004
  },
1661
2005
  {
1662
2006
  id: "fl-pinellas",
@@ -1687,8 +2031,8 @@ var florida_default = {
1687
2031
  license: "public",
1688
2032
  licenseUrl: "https://egis.pinellas.gov/",
1689
2033
  status: "live",
1690
- lastVerified: "2026-05-30",
1691
- verifiedBy: "manual"
2034
+ lastVerified: "2026-06-27",
2035
+ verifiedBy: "automated"
1692
2036
  }
1693
2037
  ],
1694
2038
  contact: {
@@ -1696,7 +2040,7 @@ var florida_default = {
1696
2040
  url: "https://www.pcpao.gov/",
1697
2041
  email: null
1698
2042
  },
1699
- notes: "Pinellas County, Florida (St. Petersburg / Clearwater, pop. ~960K) serves parcels through the Pinellas eGIS PublicWebGIS folder. The sibling AGO/Parcels/MapServer/0 layer on the same host exposes only survey/title fields (PGIS.ParcelsPublic.*) with no mailable owner name -- use PublicWebGIS/Parcels/MapServer/1, which carries OWNER1/OWNER2 plus owner mailing (OWNADD_1/OWNADD_2/OWNCITY/OWNSTATE/OWNZIP), SITE_ADDRESS, PARCELID (18-digit), STRAP, TAXABLE_VALUE, HOMESTEAD_EXEMP, USE_CODE, LAND_VALUE, IMP_VALUE, SALEDATE1, SALEPRICE1. Owner search uses UPPER(OWNER1) LIKE. Verified live 2026-05-30 (OWNER1 = FOUNDATION REALTY LLC). Source data is the Pinellas County Property Appraiser (PCPAO)."
2043
+ notes: "Pinellas County, Florida (St. Petersburg / Clearwater, pop. ~960K) serves parcels through the Pinellas eGIS PublicWebGIS folder. The sibling AGO/Parcels/MapServer/0 layer on the same host exposes only survey/title fields (PGIS.ParcelsPublic.*) with no mailable owner name -- use PublicWebGIS/Parcels/MapServer/1, which carries OWNER1/OWNER2 plus owner mailing (OWNADD_1/OWNADD_2/OWNCITY/OWNSTATE/OWNZIP), SITE_ADDRESS, PARCELID (18-digit), STRAP, TAXABLE_VALUE, HOMESTEAD_EXEMP, USE_CODE, LAND_VALUE, IMP_VALUE, SALEDATE1, SALEPRICE1. Owner search uses UPPER(OWNER1) LIKE. Verified live 2026-05-30. NOTE 2026-06-27: all declared fields confirmed present in live schema; query endpoint responds in 13-35s (server-side slowness); liveness check at 12s timeout flags FAIL but endpoint IS live. Metadata returns immediately."
1700
2044
  },
1701
2045
  {
1702
2046
  id: "fl-lee",
@@ -1786,7 +2130,7 @@ var georgia_default = {
1786
2130
  stateSlug: "georgia",
1787
2131
  stateName: "Georgia",
1788
2132
  stateAbbrev: "GA",
1789
- lastUpdated: "2026-05-15",
2133
+ lastUpdated: "2026-06-20",
1790
2134
  counties: [
1791
2135
  {
1792
2136
  id: "ga-fulton",
@@ -1829,91 +2173,215 @@ var georgia_default = {
1829
2173
  url: "https://fultoncountyga.gov/maps",
1830
2174
  email: null
1831
2175
  },
1832
- notes: "372,900 polygon tax parcels covering Atlanta and the rest of Fulton County. Verified 2026-05-11: UPPER(Owner) LIKE '%SMITH%' returns real owners with full Atlanta-area site addresses (e.g., '6760 JULES TRC', '528 SOUTH MAIN ST'). Owner names use last-name-first concatenated format (e.g., 'SMITH FAITH L SMITH MARIO D' for joint ownership). Both site address AND owner mailing address are exposed. Layer 11 of the PropertyMapViewer composite \u2014 neighbor layers include 'Tax Parcel Address Labels' (id 9) for cartographic use."
2176
+ notes: "372,900 polygon tax parcels covering Atlanta and the rest of Fulton County. Verified 2026-05-11: UPPER(Owner) LIKE '%SMITH%' returns real owners with full Atlanta-area site addresses (e.g., '6760 JULES TRC', '528 SOUTH MAIN ST'). Owner names use last-name-first concatenated format (e.g., 'SMITH FAITH L SMITH MARIO D' for joint ownership). Both site address AND owner mailing address are exposed. Layer 11 of the PropertyMapViewer composite, neighbor layers include 'Tax Parcel Address Labels' (id 9) for cartographic use."
2177
+ },
2178
+ {
2179
+ id: "ga-cobb",
2180
+ state: "GA",
2181
+ stateName: "Georgia",
2182
+ stateSlug: "georgia",
2183
+ county: "Cobb",
2184
+ countySlug: "cobb-county",
2185
+ countyFips: "13067",
2186
+ hasPublicRest: true,
2187
+ endpoints: [
2188
+ {
2189
+ url: "https://gis.cobbcounty.gov/gisserver/rest/services/tax/taxassessorsdaily/MapServer/0",
2190
+ serviceType: "MapServer",
2191
+ layerIndex: 0,
2192
+ layerName: "CobbParcels",
2193
+ supportsQuery: true,
2194
+ corsEnabled: null,
2195
+ searchFields: [
2196
+ { name: "PIN", label: "Parcel Identification Number", searchable: true },
2197
+ { name: "PARID", label: "Parcel Account ID", searchable: true },
2198
+ { name: "OWNER_NAM1", label: "Owner Name 1", searchable: true },
2199
+ { name: "OWNER_NAM2", label: "Owner Name 2", searchable: false },
2200
+ { name: "SITUS_ADDR", label: "Site Address", searchable: true },
2201
+ { name: "OWNER_ADDR", label: "Owner Mailing Address", searchable: false },
2202
+ { name: "OWNER_CITY", label: "Owner City", searchable: false },
2203
+ { name: "OWNER_STAT", label: "Owner State", searchable: false },
2204
+ { name: "OWNER_ZIP", label: "Owner ZIP", searchable: false }
2205
+ ],
2206
+ sampleQuery: "https://gis.cobbcounty.gov/gisserver/rest/services/tax/taxassessorsdaily/MapServer/0/query?where=UPPER(OWNER_NAM1)+LIKE+UPPER('%25SMITH%25')&outFields=PIN,OWNER_NAM1,SITUS_ADDR,OWNER_ADDR,OWNER_CITY&returnGeometry=false&f=json&resultRecordCount=10",
2207
+ license: "public",
2208
+ licenseUrl: "https://www.cobbcounty.gov/information-technology-services/cobb-county-gis",
2209
+ status: "live",
2210
+ lastVerified: "2026-05-15",
2211
+ verifiedBy: "manual"
2212
+ }
2213
+ ],
2214
+ contact: {
2215
+ department: "Cobb County GIS (Information Technology Services)",
2216
+ url: "https://geo-cobbcountyga.hub.arcgis.com/",
2217
+ email: null
2218
+ },
2219
+ notes: "Cobb County (Marietta seat, pop. 766,000; Atlanta metro northwest) maintains a Tax Assessor parcel layer at gis.cobbcounty.org that refreshes nightly from CAMA data -- the service name 'taxassessorsdaily' reflects this cadence. 36+ confirmed fields: PIN, PARID, PARCEL_TYPE, OWNER_NAM1/2 (owner names), SITUS_ADDR (site address), OWNER_ADDR/CITY/STAT/ZIP (owner mailing address), TAXDIST, ACRES, FMV_LAND (fair-market land value), FMV_BLDG, FMV_TOTAL, ASV_LAND (assessed land), ASV_BLDG, ASV_TOTAL, CLASS (property class), NBHOOD_NUM (neighborhood code). Verified 2026-05-15: SMITH returns results from Acworth, Marietta, Powder Springs, and Kennesaw. Cobb County borders Atlanta only in limited segments and has no parcel-boundary overlap with the city. The county's GIS Hub at geo-cobbcountyga.hub.arcgis.com and the Property Search portal at gis.cobbcounty.org/PropertySearch.html both provide web-interface access. The Cobb County Board of Tax Assessors (cobbassessor.org) is the authoritative record for appeals, exemptions, and recent reassessment values."
1833
2220
  },
1834
2221
  {
1835
- id: "ga-cobb",
1836
- state: "GA",
1837
- stateName: "Georgia",
1838
- stateSlug: "georgia",
1839
- county: "Cobb",
1840
- countySlug: "cobb-county",
1841
- countyFips: "13067",
2222
+ id: "ga-dekalb",
2223
+ state: "GA",
2224
+ stateName: "Georgia",
2225
+ stateSlug: "georgia",
2226
+ county: "DeKalb",
2227
+ countySlug: "dekalb-county",
2228
+ countyFips: "13089",
2229
+ hasPublicRest: true,
2230
+ endpoints: [
2231
+ {
2232
+ url: "https://dcgis.dekalbcountyga.gov/hosted/rest/services/Parcels/MapServer/0",
2233
+ serviceType: "MapServer",
2234
+ layerIndex: 0,
2235
+ layerName: "Tax Parcels",
2236
+ supportsQuery: true,
2237
+ corsEnabled: null,
2238
+ searchFields: [
2239
+ { name: "PARCELID", label: "Parcel ID", searchable: true },
2240
+ { name: "OWNERNME1", label: "Owner Name 1", searchable: true },
2241
+ { name: "OWNERNME2", label: "Owner Name 2", searchable: false },
2242
+ { name: "SITEADDRESS", label: "Site Address", searchable: true },
2243
+ { name: "USECD", label: "Use Code", searchable: false },
2244
+ { name: "USEDSCRP", label: "Use Description", searchable: false },
2245
+ { name: "CVTTXCD", label: "City/County Tax Code", searchable: false }
2246
+ ],
2247
+ sampleQuery: "https://dcgis.dekalbcountyga.gov/hosted/rest/services/Parcels/MapServer/0/query?where=UPPER(OWNERNME1)+LIKE+UPPER('%25SMITH%25')&outFields=PARCELID,OWNERNME1,SITEADDRESS,USEDSCRP&returnGeometry=false&f=json&resultRecordCount=10",
2248
+ license: "public",
2249
+ licenseUrl: "https://dcgis-dekalbgis.hub.arcgis.com/",
2250
+ status: "live",
2251
+ lastVerified: "2026-05-15",
2252
+ verifiedBy: "manual"
2253
+ }
2254
+ ],
2255
+ contact: {
2256
+ department: "DeKalb County GIS Department",
2257
+ url: "https://dcgis-dekalbgis.hub.arcgis.com/",
2258
+ email: null
2259
+ },
2260
+ notes: "DeKalb County (pop. 764,000; Atlanta metro east and north core) should not be confused with DeKalb County IL (FIPS 17037) or DeKalb County IN in the atlas. The GA DeKalb parcel REST layer at dcgis.dekalbcountyga.gov/hosted/rest/services/Parcels/MapServer exposes 20+ confirmed fields. PARCELID is an 11-digit identifier with spaces (e.g., '06 249 03 007') reflecting district, map sheet, block, and parcel components. Owner fields: OWNERNME1/2. Site address: SITEADDRESS. The CVTTXCD and CVTTXDSCRP fields identify the city/tax district, which matters because several cities -- Decatur, Brookhaven, Dunwoody, Tucker, Doraville, Stone Mountain -- maintain separate municipal boundaries within the county. SCHLTXCD and SCHLDSCRP identify the school tax district. Classification: USECD, USEDSCRP, CLASSCD, CLASSDSCRP, and PRPRTYDSCRP. Verified 2026-05-15: SMITH returns Doraville and Atlanta-DeKalb addresses. For full assessment and exemption records, the DeKalb County Tax Commissioner portal at tax.dekalbcountyga.gov is the authoritative lookup."
2261
+ },
2262
+ {
2263
+ id: "ga-gwinnett",
2264
+ state: "GA",
2265
+ stateName: "Georgia",
2266
+ stateSlug: "georgia",
2267
+ county: "Gwinnett",
2268
+ countySlug: "gwinnett-county",
2269
+ countyFips: "13135",
2270
+ hasPublicRest: true,
2271
+ endpoints: [
2272
+ {
2273
+ url: "https://services3.arcgis.com/RfpmnkSAQleRbndX/arcgis/rest/services/Property_and_Tax/FeatureServer/3",
2274
+ serviceType: "FeatureServer",
2275
+ layerIndex: 3,
2276
+ layerName: "Tax Master Table",
2277
+ supportsQuery: true,
2278
+ corsEnabled: null,
2279
+ searchFields: [
2280
+ { name: "OWNER1", label: "Owner Name 1", searchable: true },
2281
+ { name: "OWNER2", label: "Owner Name 2", searchable: true },
2282
+ { name: "PIN", label: "Parcel Identification Number", searchable: true },
2283
+ { name: "LOCADDR", label: "Property (Location) Address", searchable: true },
2284
+ { name: "LOCCITY", label: "Property City", searchable: false },
2285
+ { name: "LOCZIP", label: "Property ZIP", searchable: false }
2286
+ ],
2287
+ sampleQuery: "https://services3.arcgis.com/RfpmnkSAQleRbndX/arcgis/rest/services/Property_and_Tax/FeatureServer/3/query?where=UPPER(OWNER1)+LIKE+UPPER('%25SMITH%25')&outFields=PIN,OWNER1,OWNER2,LOCADDR,LOCCITY,LOCZIP&returnGeometry=false&f=json&resultRecordCount=10",
2288
+ license: "public",
2289
+ licenseUrl: "https://gwin-gwinnettcounty.opendata.arcgis.com/",
2290
+ status: "live",
2291
+ lastVerified: "2026-06-20",
2292
+ verifiedBy: "manual"
2293
+ }
2294
+ ],
2295
+ contact: {
2296
+ department: "Gwinnett County GIS / Tax Assessor",
2297
+ url: "https://www.gwinnettcounty.com/web/gwinnett/departments/financialservices/taxassessorsoffice",
2298
+ email: null
2299
+ },
2300
+ notes: "Gwinnett County (pop. ~975,000; Lawrenceville seat; Atlanta metro northeast, Georgia's second-most-populous county) publishes a Property_and_Tax FeatureServer. IMPORTANT: owner data lives on LAYER 3 (the 'Tax Master Table', a non-spatial Table with 35 fields including OWNER1, OWNER2, PIN, LOCADDR, LOCCITY, LOCZIP), NOT on layer 0, which is the parcel geometry layer carrying PIN but no owner name. Query layer 3 for owner-name search; join to layer 0 on PIN if geometry is needed. Verified 2026-06-20: layer 3 holds 314,998 records; UPPER(OWNER1) LIKE '%SMITH%' returns real owners with Duluth/Norcross addresses and ZIPs (e.g. '4078 STILLWATER DR, DULUTH 30096'). Because layer 3 is a Table, query results return no geometry. Cities within the county include Lawrenceville, Duluth, Norcross, Snellville, Suwanee, Lilburn, Buford, Sugar Hill, Grayson, Loganville, Berkeley Lake, Dacula, Auburn, Braselton, Peachtree Corners. For authoritative assessment/appeal records use the Gwinnett County Tax Assessor's office."
2301
+ }
2302
+ ]
2303
+ };
2304
+
2305
+ // data/hawaii.json
2306
+ var hawaii_default = {
2307
+ stateSlug: "hawaii",
2308
+ stateName: "Hawaii",
2309
+ stateAbbrev: "HI",
2310
+ lastUpdated: "2026-06-20",
2311
+ counties: [
2312
+ {
2313
+ id: "hi-kauai",
2314
+ state: "HI",
2315
+ stateName: "Hawaii",
2316
+ stateSlug: "hawaii",
2317
+ county: "Kauai",
2318
+ countySlug: "kauai-county",
2319
+ countyFips: "15007",
1842
2320
  hasPublicRest: true,
1843
2321
  endpoints: [
1844
2322
  {
1845
- url: "https://gis.cobbcounty.gov/gisserver/rest/services/tax/taxassessorsdaily/MapServer/0",
2323
+ url: "https://geodata.hawaii.gov/arcgis/rest/services/ParcelsZoning/MapServer/9",
1846
2324
  serviceType: "MapServer",
1847
- layerIndex: 0,
1848
- layerName: "CobbParcels",
2325
+ layerIndex: 9,
2326
+ layerName: "Kauai County Parcels",
1849
2327
  supportsQuery: true,
1850
2328
  corsEnabled: null,
1851
2329
  searchFields: [
1852
- { name: "PIN", label: "Parcel Identification Number", searchable: true },
1853
- { name: "PARID", label: "Parcel Account ID", searchable: true },
1854
- { name: "OWNER_NAM1", label: "Owner Name 1", searchable: true },
1855
- { name: "OWNER_NAM2", label: "Owner Name 2", searchable: false },
1856
- { name: "SITUS_ADDR", label: "Site Address", searchable: true },
1857
- { name: "OWNER_ADDR", label: "Owner Mailing Address", searchable: false },
1858
- { name: "OWNER_CITY", label: "Owner City", searchable: false },
1859
- { name: "OWNER_STAT", label: "Owner State", searchable: false },
1860
- { name: "OWNER_ZIP", label: "Owner ZIP", searchable: false }
2330
+ { name: "owner", label: "Owner Name", searchable: true },
2331
+ { name: "tmk_txt", label: "Tax Map Key (9-digit TMK / APN)", searchable: true },
2332
+ { name: "cty_tmk", label: "County TMK (8-digit)", searchable: true }
1861
2333
  ],
1862
- sampleQuery: "https://gis.cobbcounty.gov/gisserver/rest/services/tax/taxassessorsdaily/MapServer/0/query?where=UPPER(OWNER_NAM1)+LIKE+UPPER('%25SMITH%25')&outFields=PIN,OWNER_NAM1,SITUS_ADDR,OWNER_ADDR,OWNER_CITY&returnGeometry=false&f=json&resultRecordCount=10",
2334
+ sampleQuery: "https://geodata.hawaii.gov/arcgis/rest/services/ParcelsZoning/MapServer/9/query?where=UPPER(owner)+LIKE+UPPER('%25SMITH%25')&outFields=owner,tmk_txt,cty_tmk&returnGeometry=false&f=json&resultRecordCount=10",
1863
2335
  license: "public",
1864
- licenseUrl: "https://www.cobbcounty.gov/information-technology-services/cobb-county-gis",
2336
+ licenseUrl: "https://geoportal.hawaii.gov/",
1865
2337
  status: "live",
1866
- lastVerified: "2026-05-15",
2338
+ lastVerified: "2026-06-20",
1867
2339
  verifiedBy: "manual"
1868
2340
  }
1869
2341
  ],
1870
2342
  contact: {
1871
- department: "Cobb County GIS (Information Technology Services)",
1872
- url: "https://geo-cobbcountyga.hub.arcgis.com/",
2343
+ department: "State of Hawaii Office of Planning and Sustainable Development, Statewide GIS Program",
2344
+ url: "https://planning.hawaii.gov/gis/",
1873
2345
  email: null
1874
2346
  },
1875
- notes: "Cobb County (Marietta seat, pop. 766,000; Atlanta metro northwest) maintains a Tax Assessor parcel layer at gis.cobbcounty.org that refreshes nightly from CAMA data -- the service name 'taxassessorsdaily' reflects this cadence. 36+ confirmed fields: PIN, PARID, PARCEL_TYPE, OWNER_NAM1/2 (owner names), SITUS_ADDR (site address), OWNER_ADDR/CITY/STAT/ZIP (owner mailing address), TAXDIST, ACRES, FMV_LAND (fair-market land value), FMV_BLDG, FMV_TOTAL, ASV_LAND (assessed land), ASV_BLDG, ASV_TOTAL, CLASS (property class), NBHOOD_NUM (neighborhood code). Verified 2026-05-15: SMITH returns results from Acworth, Marietta, Powder Springs, and Kennesaw. Cobb County borders Atlanta only in limited segments and has no parcel-boundary overlap with the city. The county's GIS Hub at geo-cobbcountyga.hub.arcgis.com and the Property Search portal at gis.cobbcounty.org/PropertySearch.html both provide web-interface access. The Cobb County Board of Tax Assessors (cobbassessor.org) is the authoritative record for appeals, exemptions, and recent reassessment values."
2347
+ notes: "Kauai County HI (the island of Kauai plus Niihau; county seat Lihue; FIPS 15007; pop. ~73,000) parcels are published on the State of Hawaii statewide GIS portal (geodata.hawaii.gov ParcelsZoning/MapServer/9, 'Kauai County Parcels', ~25,119 features, no token required). Hawaii uses the Tax Map Key (TMK) system rather than a conventional APN: tmk_txt is the 9-digit TMK, cty_tmk the 8-digit county form. Key fields: owner (owner name, searchable), tmk_txt (9-digit TMK), cty_tmk (8-digit TMK). Owner-name search via UPPER(owner) LIKE UPPER('%NAME%') works. Verified 2026-06-20: UPPER(owner) LIKE UPPER('%SMITH%') returns Kauai parcels. Hawaii has only 5 county-equivalents statewide; each of the four main counties (Honolulu, Hawaii, Maui, Kauai) is a separate layer on the statewide ParcelsZoning service."
1876
2348
  },
1877
2349
  {
1878
- id: "ga-dekalb",
1879
- state: "GA",
1880
- stateName: "Georgia",
1881
- stateSlug: "georgia",
1882
- county: "DeKalb",
1883
- countySlug: "dekalb-county",
1884
- countyFips: "13089",
2350
+ id: "hi-maui",
2351
+ state: "HI",
2352
+ stateName: "Hawaii",
2353
+ stateSlug: "hawaii",
2354
+ county: "Maui",
2355
+ countySlug: "maui-county",
2356
+ countyFips: "15009",
1885
2357
  hasPublicRest: true,
1886
2358
  endpoints: [
1887
2359
  {
1888
- url: "https://dcgis.dekalbcountyga.gov/hosted/rest/services/Parcels/MapServer/0",
1889
- serviceType: "MapServer",
1890
- layerIndex: 0,
1891
- layerName: "Tax Parcels",
2360
+ url: "https://services1.arcgis.com/x4h61KaW16vFs7PM/arcgis/rest/services/Parcels_2024_Owners/FeatureServer/196",
2361
+ serviceType: "FeatureServer",
2362
+ layerIndex: 196,
2363
+ layerName: "Parcels 2024 Owners",
1892
2364
  supportsQuery: true,
1893
2365
  corsEnabled: null,
1894
2366
  searchFields: [
1895
- { name: "PARCELID", label: "Parcel ID", searchable: true },
1896
- { name: "OWNERNME1", label: "Owner Name 1", searchable: true },
1897
- { name: "OWNERNME2", label: "Owner Name 2", searchable: false },
1898
- { name: "SITEADDRESS", label: "Site Address", searchable: true },
1899
- { name: "USECD", label: "Use Code", searchable: false },
1900
- { name: "USEDSCRP", label: "Use Description", searchable: false },
1901
- { name: "CVTTXCD", label: "City/County Tax Code", searchable: false }
2367
+ { name: "OWNER", label: "Owner Name", searchable: true },
2368
+ { name: "tmk_txt", label: "Tax Map Key (TMK / APN)", searchable: true },
2369
+ { name: "TMK_1", label: "Tax Map Key (alternate)", searchable: true }
1902
2370
  ],
1903
- sampleQuery: "https://dcgis.dekalbcountyga.gov/hosted/rest/services/Parcels/MapServer/0/query?where=UPPER(OWNERNME1)+LIKE+UPPER('%25SMITH%25')&outFields=PARCELID,OWNERNME1,SITEADDRESS,USEDSCRP&returnGeometry=false&f=json&resultRecordCount=10",
2371
+ sampleQuery: "https://services1.arcgis.com/x4h61KaW16vFs7PM/arcgis/rest/services/Parcels_2024_Owners/FeatureServer/196/query?where=OWNER+LIKE+'%25SMITH%25'&outFields=OWNER,tmk_txt,TMK_1&returnGeometry=false&f=json&resultRecordCount=10",
1904
2372
  license: "public",
1905
- licenseUrl: "https://dcgis-dekalbgis.hub.arcgis.com/",
2373
+ licenseUrl: "https://www.mauicounty.gov/1933/GIS-Maps",
1906
2374
  status: "live",
1907
- lastVerified: "2026-05-15",
2375
+ lastVerified: "2026-06-20",
1908
2376
  verifiedBy: "manual"
1909
2377
  }
1910
2378
  ],
1911
2379
  contact: {
1912
- department: "DeKalb County GIS Department",
1913
- url: "https://dcgis-dekalbgis.hub.arcgis.com/",
2380
+ department: "County of Maui, GIS Division",
2381
+ url: "https://www.mauicounty.gov/1933/GIS-Maps",
1914
2382
  email: null
1915
2383
  },
1916
- notes: "DeKalb County (pop. 764,000; Atlanta metro east and north core) should not be confused with DeKalb County IL (FIPS 17037) or DeKalb County IN in the atlas. The GA DeKalb parcel REST layer at dcgis.dekalbcountyga.gov/hosted/rest/services/Parcels/MapServer exposes 20+ confirmed fields. PARCELID is an 11-digit identifier with spaces (e.g., '06 249 03 007') reflecting district, map sheet, block, and parcel components. Owner fields: OWNERNME1/2. Site address: SITEADDRESS. The CVTTXCD and CVTTXDSCRP fields identify the city/tax district, which matters because several cities -- Decatur, Brookhaven, Dunwoody, Tucker, Doraville, Stone Mountain -- maintain separate municipal boundaries within the county. SCHLTXCD and SCHLDSCRP identify the school tax district. Classification: USECD, USEDSCRP, CLASSCD, CLASSDSCRP, and PRPRTYDSCRP. Verified 2026-05-15: SMITH returns Doraville and Atlanta-DeKalb addresses. For full assessment and exemption records, the DeKalb County Tax Commissioner portal at tax.dekalbcountyga.gov is the authoritative lookup."
2384
+ notes: "Maui County HI (the islands of Maui, Molokai, and Lanai; county seat Wailuku; FIPS 15009; pop. ~165,000) publishes a public ArcGIS Online FeatureServer parcel layer (Parcels_2024_Owners/FeatureServer/196, no token required). Hawaii uses the Tax Map Key (TMK) system: tmk_txt and TMK_1 hold the TMK (APN equivalent). Key fields: OWNER (owner name, searchable, already stored UPPERCASE), tmk_txt / TMK_1 (TMK). IMPORTANT. Owner search must use OWNER LIKE '%NAME%' WITHOUT UPPER(): this layer returns HTTP 400 if UPPER() is applied to the field, and the data is already uppercase so no case folding is needed. CAVEAT: multi-owner parcels are duplicated. The layer has one row per owner, so the ~141,239 feature count exceeds the number of unique parcels; dedupe on tmk_txt when counting distinct parcels. Verified 2026-06-20: OWNER LIKE '%SMITH%' returns Maui/Molokai/Lanai parcels."
1917
2385
  }
1918
2386
  ]
1919
2387
  };
@@ -2018,7 +2486,7 @@ var illinois_default = {
2018
2486
  url: "https://www.kanecountyil.gov/pages/gis.aspx",
2019
2487
  email: null
2020
2488
  },
2021
- notes: "Kane County is the highest-impression Illinois county in our GSC data; users search for 'kane county illinois gis rest api mapserver featureserver owner name'. The county migrated their GIS server from gis.co.kane.il.us to gistech.countyofkane.org in 2026 \u2014 the old hostname now NXDOMAINs. The current layer is KanePINList/MapServer/0 (named Kane.DBO.Parcels_v2025), a snapshot of the active parcel polygon layer from the cadastral source. 35+ fields including PIN, TaxName, SiteAddress, MailingAddress, LegalDesc, UseCodeDescription, plus jurisdictional districts (Township, AirportDistrict, AmbulanceDistrict, etc.). Owner-style search uses the TaxName field (legal taxpayer name)."
2489
+ notes: "Kane County is the highest-impression Illinois county in our GSC data; users search for 'kane county illinois gis rest api mapserver featureserver owner name'. The county migrated their GIS server from gis.co.kane.il.us to gistech.countyofkane.org in 2026. The old hostname now NXDOMAINs. The current layer is KanePINList/MapServer/0 (named Kane.DBO.Parcels_v2025), a snapshot of the active parcel polygon layer from the cadastral source. 35+ fields including PIN, TaxName, SiteAddress, MailingAddress, LegalDesc, UseCodeDescription, plus jurisdictional districts (Township, AirportDistrict, AmbulanceDistrict, etc.). Owner-style search uses the TaxName field (legal taxpayer name)."
2022
2490
  },
2023
2491
  {
2024
2492
  id: "il-cook",
@@ -2055,7 +2523,8 @@ var illinois_default = {
2055
2523
  url: "https://www.cookcountyil.gov/agency/geographic-information-systems-gis",
2056
2524
  email: null
2057
2525
  },
2058
- notes: "Cook County uses the 14-digit PIN format (XX-XX-XXX-XXX-XXXX) \u2014 exposed as PIN14_dash on this layer. The legacy cookVwHosted/Cook_County_Parcels/FeatureServer was retired in 2026; the active replacement is CookViewer3Parcels/MapServer/0 (1.86M+ parcels). Public fields are geometry, PIN10, PIN14_dash, and street_address only \u2014 owner name is NOT on this layer. For ownership lookups, use the Cook County Property Tax Portal at cookcountypropertyinfo.com, keyed by PIN. Cook County reassesses on a triennial cycle divided into three geographic triads: the City of Chicago triad, the north suburban triad, and the south/west suburban triad \u2014 each triad goes through a full reassessment every three years on a rotating schedule (north triad reassessed 2025, south/west triad 2026). The county has 5.2M+ residents and 1.86M taxable parcels \u2014 the largest county in Illinois by both metrics. The Assessor's office is the valuation authority; the Treasurer's office (cookcountytreasurer.com) handles tax payment records."
2526
+ notes: "Cook County uses the 14-digit PIN format (XX-XX-XXX-XXX-XXXX), exposed as PIN14_dash on this layer. The legacy cookVwHosted/Cook_County_Parcels/FeatureServer was retired in 2026; the active replacement is CookViewer3Parcels/MapServer/0 (1.86M+ parcels). Public fields are geometry, PIN10, PIN14_dash, and street_address only. Owner name is NOT on this layer. For ownership lookups, use the Cook County Property Tax Portal at cookcountypropertyinfo.com, keyed by PIN. Cook County reassesses on a triennial cycle divided into three geographic triads: the City of Chicago triad, the north suburban triad, and the south/west suburban triad. Each triad goes through a full reassessment every three years on a rotating schedule (north triad reassessed 2025, south/west triad 2026). The county has 5.2M+ residents and 1.86M taxable parcels, the largest county in Illinois by both metrics. The Assessor's office is the valuation authority; the Treasurer's office (cookcountytreasurer.com) handles tax payment records.",
2527
+ relatedPropertyCitySlug: "chicago"
2059
2528
  },
2060
2529
  {
2061
2530
  id: "il-dupage",
@@ -2094,7 +2563,7 @@ var illinois_default = {
2094
2563
  url: "https://www.dupagecounty.gov/government/departments/gis/",
2095
2564
  email: null
2096
2565
  },
2097
- notes: "DuPage County migrated their public GIS server from gis.dupagecounty.gov to gis.dupageco.org in 2026 \u2014 the old hostname now NXDOMAINs. The ParcelsWithRealEstateCC MapServer joins the parcel polygon layer to the weekly real estate file, exposing 60+ fields including PIN, BILLNAME (taxpayer billing name), BILLSTNUM/BILLSTNAME (billing address), PROPSTNUM/PROPSTNAME/PROPCITY (property address), BILLVALUE, TAXAMOUNT, MUNICIPALITY, and taxing district fields. 337k features. The open-data portal at gisdata-dupage.opendata.arcgis.com mirrors the same data. Note on BILLNAME: this is the taxpayer of record for the current tax bill \u2014 it can differ from the legal owner when a recent sale has been deeded but the billing file has not yet been updated, or when a trust holds title but the trustee name appears as BILLNAME. For the chain-of-title legal owner, cross-reference the DuPage County Recorder's instrument search at recorder.dupageco.org. DuPage is Illinois's third-most populous county (pop. 930,000, county seat Wheaton)."
2566
+ notes: "DuPage County migrated their public GIS server from gis.dupagecounty.gov to gis.dupageco.org in 2026. The old hostname now NXDOMAINs. The ParcelsWithRealEstateCC MapServer joins the parcel polygon layer to the weekly real estate file, exposing 60+ fields including PIN, BILLNAME (taxpayer billing name), BILLSTNUM/BILLSTNAME (billing address), PROPSTNUM/PROPSTNAME/PROPCITY (property address), BILLVALUE, TAXAMOUNT, MUNICIPALITY, and taxing district fields. 337k features. The open-data portal at gisdata-dupage.opendata.arcgis.com mirrors the same data. Note on BILLNAME: this is the taxpayer of record for the current tax bill. It can differ from the legal owner when a recent sale has been deeded but the billing file has not yet been updated, or when a trust holds title but the trustee name appears as BILLNAME. For the chain-of-title legal owner, cross-reference the DuPage County Recorder's instrument search at recorder.dupageco.org. DuPage is Illinois's third-most populous county (pop. 930,000, county seat Wheaton)."
2098
2567
  },
2099
2568
  {
2100
2569
  id: "il-dekalb",
@@ -2133,7 +2602,7 @@ var illinois_default = {
2133
2602
  url: "https://dekalbcounty.org/services/property-data-and-maps/",
2134
2603
  email: "gis@dekalbcounty.org"
2135
2604
  },
2136
- notes: "This is DeKalb County, Illinois (county seat Sycamore, home to Northern Illinois University in DeKalb city) \u2014 not to be confused with DeKalb County, Georgia (Atlanta metro, FIPS 13089). The Illinois county (FIPS 17037) is an outer-collar county roughly 60 miles west of Chicago. Hosted on ArcGIS Online (services7.arcgis.com) \u2014 the county's WAB viewer config points at this FeatureServer as the backing data layer. 27 fields total including Parcel_Number, Owner, SiteAddress, MailingAddress, tax_code, net_taxable_value, Zone_Code, and QTAS/Compass hyperlinks. Owner-name search by UPPER() LIKE on the Owner field works directly; no token required. The public-facing viewer at spatial.dekalbcounty.org uses VertiGIS/Geocortex as its front-end but queries the same FeatureServer. DeKalb County GIS is administered by the county's Information Management Office (gis@dekalbcounty.org). Owner and TaxBillMailedTo are distinct fields \u2014 TaxBillMailedTo reflects the current billing addressee, which may differ from the recorded owner in cases involving trusts or recent transfers."
2605
+ notes: "This is DeKalb County, Illinois (county seat Sycamore, home to Northern Illinois University in DeKalb city), not to be confused with DeKalb County, Georgia (Atlanta metro, FIPS 13089). The Illinois county (FIPS 17037) is an outer-collar county roughly 60 miles west of Chicago. Hosted on ArcGIS Online (services7.arcgis.com), the county's WAB viewer config points at this FeatureServer as the backing data layer. 27 fields total including Parcel_Number, Owner, SiteAddress, MailingAddress, tax_code, net_taxable_value, Zone_Code, and QTAS/Compass hyperlinks. Owner-name search by UPPER() LIKE on the Owner field works directly; no token required. The public-facing viewer at spatial.dekalbcounty.org uses VertiGIS/Geocortex as its front-end but queries the same FeatureServer. DeKalb County GIS is administered by the county's Information Management Office (gis@dekalbcounty.org). Owner and TaxBillMailedTo are distinct fields. TaxBillMailedTo reflects the current billing addressee, which may differ from the recorded owner in cases involving trusts or recent transfers."
2137
2606
  },
2138
2607
  {
2139
2608
  id: "il-will",
@@ -2146,20 +2615,20 @@ var illinois_default = {
2146
2615
  hasPublicRest: true,
2147
2616
  endpoints: [
2148
2617
  {
2149
- url: "https://gis.willcountyillinois.com/server/rest/services/Basemap/Parcels_21/MapServer/0",
2618
+ url: "https://gis.willcountyillinois.com/server/rest/services/Basemap/Parcels_20/MapServer/0",
2150
2619
  serviceType: "MapServer",
2151
2620
  layerIndex: 0,
2152
- layerName: "Parcels_21",
2621
+ layerName: "Parcels_20",
2153
2622
  supportsQuery: true,
2154
2623
  corsEnabled: null,
2155
2624
  searchFields: [
2156
2625
  { name: "PIN", label: "Parcel Identification Number", searchable: true }
2157
2626
  ],
2158
- sampleQuery: "https://gis.willcountyillinois.com/server/rest/services/Basemap/Parcels_21/MapServer/0/query?where=PIN%3D'1909142050020000'&outFields=*&f=json",
2627
+ sampleQuery: "https://gis.willcountyillinois.com/server/rest/services/Basemap/Parcels_20/MapServer/0/query?where=PIN%3D'1909142050020000'&outFields=*&f=json",
2159
2628
  license: "public",
2160
2629
  licenseUrl: null,
2161
2630
  status: "live",
2162
- lastVerified: "2026-05-15",
2631
+ lastVerified: "2026-06-27",
2163
2632
  verifiedBy: "automated"
2164
2633
  }
2165
2634
  ],
@@ -2168,7 +2637,11 @@ var illinois_default = {
2168
2637
  url: "https://willcounty.gov/County-Offices/Administration/GIS-Division",
2169
2638
  email: "gis@willcounty.gov"
2170
2639
  },
2171
- notes: "Parcels_21 is the current parcel geometry layer (Parcels_20 is the prior year, also public). Public access confirmed via allowOthersToQuery:true. Owner-name and address fields are NOT exposed in this public endpoint \u2014 only PIN and subtype metadata (Base Parcel, Condo, Leasehold, Mineral Rights, etc.). Owner/address data exists in the county's Geocortex viewer at gisapp.willcountyillinois.com but is not queryable via REST without a token. The ParcelFabric folder on the same server is token-gated."
2640
+ notes: "NOTE 2026-06-27: Parcels_21/MapServer became a zombie service (service listed but layers:[]. All layer queries return HTTP 500 'json' error). Parcels_20/MapServer/0 is the active fallback (prior-year snapshot, 276,644 parcels confirmed live). No Parcels_22 or newer service exists on the server as of 2026-06-27. URL updated from Parcels_21 to Parcels_20. Owner-name and address fields are NOT exposed in this public endpoint, only PIN and subtype metadata (Base Parcel, Condo, Leasehold, Mineral Rights, etc.). Owner/address data exists in the county's Geocortex viewer at gisapp.willcountyillinois.com but is not queryable via REST without a token. The ParcelFabric folder on the same server is token-gated. FIPS 17197 (Joliet / Chicago south suburbs). Contact GIS Division at gis@willcounty.gov for endpoint status updates.",
2641
+ ownerFieldNote: {
2642
+ body: "Will County's public parcel REST layer exposes only the Parcel Identification Number (PIN), no owner-name or address field. Search by PIN below, or look up the owner of record at the Will County Supervisor of Assessments.",
2643
+ source: { label: "Property search at willcountysoa.com", url: "https://www.willcountysoa.com/PropertySearchPortal" }
2644
+ }
2172
2645
  },
2173
2646
  {
2174
2647
  id: "il-mchenry",
@@ -2246,7 +2719,7 @@ var illinois_default = {
2246
2719
  url: "https://www.lakecountyil.gov/636/GISMaps",
2247
2720
  email: null
2248
2721
  },
2249
- notes: "Lake County is the northernmost Illinois collar county, bordering Wisconsin (county seat Waukegan, pop. 710,000). WABParcels/MapServer is a 13-layer service; layer 12 (Tax Parcel Information) is the rich parcel polygon layer with 190+ fields covering PIN, taxpayer_name, situs address, assessment values, building characteristics, flood zone, and political boundaries. Owner-name search works via UPPER() LIKE on the taxpayer_name field. The county also exposes CCAO/TaxParcelViewer/MapServer but its layer 14 has only a Name field \u2014 WABParcels/12 is the correct layer for rich queries. Key fields beyond PIN and taxpayer_name include situs_addr_line_1, situs_addr_city, situs_zip, mail_addr_line_1, mail_city, mail_zip, property_class, tax_rate, tot_assessed_val, year_built, liv_area_sqft, zoning_district, flood_zone, and multiple political-boundary fields (congressional_district, state_rep_district, school_district, fire_district). The endpoint is at maps.lakecountyil.gov \u2014 not to be confused with Lake County Indiana or Lake County Ohio, which use separate GIS systems."
2722
+ notes: "Lake County is the northernmost Illinois collar county, bordering Wisconsin (county seat Waukegan, pop. 710,000). WABParcels/MapServer is a 13-layer service; layer 12 (Tax Parcel Information) is the rich parcel polygon layer with 190+ fields covering PIN, taxpayer_name, situs address, assessment values, building characteristics, flood zone, and political boundaries. Owner-name search works via UPPER() LIKE on the taxpayer_name field. The county also exposes CCAO/TaxParcelViewer/MapServer but its layer 14 has only a Name field. WABParcels/12 is the correct layer for rich queries. Key fields beyond PIN and taxpayer_name include situs_addr_line_1, situs_addr_city, situs_zip, mail_addr_line_1, mail_city, mail_zip, property_class, tax_rate, tot_assessed_val, year_built, liv_area_sqft, zoning_district, flood_zone, and multiple political-boundary fields (congressional_district, state_rep_district, school_district, fire_district). The endpoint is at maps.lakecountyil.gov, not to be confused with Lake County Indiana or Lake County Ohio, which use separate GIS systems."
2250
2723
  },
2251
2724
  {
2252
2725
  id: "il-winnebago",
@@ -2263,7 +2736,7 @@ var illinois_default = {
2263
2736
  url: "https://wingis.org/",
2264
2737
  email: null
2265
2738
  },
2266
- notes: "Winnebago County IL GIS is operated by WinGIS (wingis.org), a regional GIS services company on a subscription model. Their ArcGIS REST server at maps.wingis.org/public/rest/services/PropertySearch/MapServer is indexed as containing Parcel & Lot Lines, Parcel Owner, PIN Labels, and Parcel Dimensions layers \u2014 but all REST queries return HTTP 499 (Token Required) as of 2026-05-15. The word 'public' in the URL path is a directory naming convention, not an access grant. The public-facing search at wingis.org/maps/propertysearch is browser-only and not queryable. No alternative county-hosted ArcGIS REST endpoint was found. The Supervisor of Assessments at assessor.wincoil.gov has a property lookup UI but no public REST API."
2739
+ notes: "Winnebago County IL GIS is operated by WinGIS (wingis.org), a regional GIS services company on a subscription model. Their ArcGIS REST server at maps.wingis.org/public/rest/services/PropertySearch/MapServer is indexed as containing Parcel & Lot Lines, Parcel Owner, PIN Labels, and Parcel Dimensions layers, but all REST queries return HTTP 499 (Token Required) as of 2026-05-15. The word 'public' in the URL path is a directory naming convention, not an access grant. The public-facing search at wingis.org/maps/propertysearch is browser-only and not queryable. No alternative county-hosted ArcGIS REST endpoint was found. The Supervisor of Assessments at assessor.wincoil.gov has a property lookup UI but no public REST API."
2267
2740
  },
2268
2741
  {
2269
2742
  id: "il-st-clair",
@@ -2355,7 +2828,7 @@ var indiana_default = {
2355
2828
  url: "https://www.hamiltoncounty.in.gov/442/GIS-and-Maps",
2356
2829
  email: null
2357
2830
  },
2358
- notes: "Hamilton County IN (Indianapolis north suburbs \u2014 Noblesville, Carmel, Fishers, Westfield) is one of the fastest-growing counties in Indiana. HamCoParcelsPublic/FeatureServer/0 exposes 25+ fields including FMTPRCLNO (formatted parcel number, e.g., '10-11-04-00-00-019.000'), DEEDEDOWNR (full deeded owner), OWNNAME, OWNADDRESS, OWNCITY, OWNSTATE, OWNZIP, OWNCOUNTRY, LOCADDRESS, LOCHSENUMR, LOCSTRDIR, LOCSTRNAME, LOCSTRSUF, LOCCITY, LOCZIP, LEGALDESC, SECTIONNO, TOWNSHIP, RANGE, SUBDIVCODE, SUBDIVNAME, DEEDACRES, PROPCLASS, PROPUSE. Query confirmed live: UPPER(DEEDEDOWNR) LIKE '%SMITH%' returns real results (e.g., 'Smith, Terrance & Alyssa Smith h&w' in Noblesville). Hamilton County IN (FIPS 18057) must not be confused with Hamilton County OH (39061, Cincinnati) or Hamilton County TN (47065, Chattanooga). GeoHub portal at geohub.hamiltoncounty.in.gov. EXPORTDATE field tracks data currency."
2831
+ notes: "Hamilton County IN (Indianapolis north suburbs, Noblesville, Carmel, Fishers, Westfield) is one of the fastest-growing counties in Indiana. HamCoParcelsPublic/FeatureServer/0 exposes 25+ fields including FMTPRCLNO (formatted parcel number, e.g., '10-11-04-00-00-019.000'), DEEDEDOWNR (full deeded owner), OWNNAME, OWNADDRESS, OWNCITY, OWNSTATE, OWNZIP, OWNCOUNTRY, LOCADDRESS, LOCHSENUMR, LOCSTRDIR, LOCSTRNAME, LOCSTRSUF, LOCCITY, LOCZIP, LEGALDESC, SECTIONNO, TOWNSHIP, RANGE, SUBDIVCODE, SUBDIVNAME, DEEDACRES, PROPCLASS, PROPUSE. Query confirmed live: UPPER(DEEDEDOWNR) LIKE '%SMITH%' returns real results (e.g., 'Smith, Terrance & Alyssa Smith h&w' in Noblesville). Hamilton County IN (FIPS 18057) must not be confused with Hamilton County OH (39061, Cincinnati) or Hamilton County TN (47065, Chattanooga). GeoHub portal at geohub.hamiltoncounty.in.gov. EXPORTDATE field tracks data currency."
2359
2832
  },
2360
2833
  {
2361
2834
  id: "in-allen",
@@ -2393,7 +2866,7 @@ var indiana_default = {
2393
2866
  url: "https://www.acimap.us/",
2394
2867
  email: null
2395
2868
  },
2396
- notes: "Allen County IN (Fort Wayne metro, county seat Fort Wayne) provides parcels via gis.acimap.us \u2014 a combined City of Fort Wayne / Allen County GIS platform branded 'iMap'. The parcels/MapServer/0 layer is a lean 11-field service: PIN, GIS_ID, OwnerofRecord, PropertyAddress1, TransferDate, lat_add_pt, long_add_pt, Shape_Area, Shape_Length, Shape, OBJECTID. Owner and address search confirmed working: UPPER(OwnerofRecord) LIKE '%SMITH%' returns real results (e.g., 'Smith Halery W & Anna Catherine' on Pleasant Center Rd). The acimap.us server uses TLS renegotiation \u2014 direct curl calls may timeout on Windows; use HTTPS clients that handle renegotiation. The ASSESSOR folder at gis.acimap.us/services/rest/services/Assessor/ contains additional assessment data but requires authentication. Allen County IN (18003) must not be confused with other Allen counties."
2869
+ notes: "Allen County IN (Fort Wayne metro, county seat Fort Wayne) provides parcels via gis.acimap.us, a combined City of Fort Wayne / Allen County GIS platform branded 'iMap'. The parcels/MapServer/0 layer is a lean 11-field service: PIN, GIS_ID, OwnerofRecord, PropertyAddress1, TransferDate, lat_add_pt, long_add_pt, Shape_Area, Shape_Length, Shape, OBJECTID. Owner and address search confirmed working: UPPER(OwnerofRecord) LIKE '%SMITH%' returns real results (e.g., 'Smith Halery W & Anna Catherine' on Pleasant Center Rd). The acimap.us server uses TLS renegotiation. Direct curl calls may timeout on Windows; use HTTPS clients that handle renegotiation. The ASSESSOR folder at gis.acimap.us/services/rest/services/Assessor/ contains additional assessment data but requires authentication. Allen County IN (18003) must not be confused with other Allen counties."
2397
2870
  },
2398
2871
  {
2399
2872
  id: "in-marion",
@@ -2433,7 +2906,7 @@ var indiana_default = {
2433
2906
  }
2434
2907
  ],
2435
2908
  contact: {
2436
- department: "IndyGIS \u2014 City of Indianapolis / Marion County Information Services",
2909
+ department: "IndyGIS, City of Indianapolis / Marion County Information Services",
2437
2910
  url: "https://maps.indy.gov/",
2438
2911
  email: null
2439
2912
  },
@@ -2532,7 +3005,7 @@ var kansas_default = {
2532
3005
  license: "public",
2533
3006
  licenseUrl: "https://data-sncoks-gis.opendata.arcgis.com/",
2534
3007
  status: "live",
2535
- lastVerified: "2026-05-15",
3008
+ lastVerified: "2026-06-27",
2536
3009
  verifiedBy: "automated"
2537
3010
  }
2538
3011
  ],
@@ -2541,7 +3014,7 @@ var kansas_default = {
2541
3014
  url: "https://snco.gov/ap/mapping.php",
2542
3015
  email: null
2543
3016
  },
2544
- notes: "Shawnee County KS (Topeka metro, county seat and state capital Topeka) provides AppraisalDataPro/MapServer/4 (Current Parcels) via the county appraiser's GIS server. This is a 20-field service: OBJECTID, PARCELNUM, ACRES, PID, QUICKREFID, ONAME (owner name), PADDRESS, PADDRESS2, DBOOKPAGE, SUBS (subdivision), NBHD (neighborhood), TAXUNIT, USD (unified school district), LBCSFUNCTION, LBCSACTIVITY, LDVAL, BLDGVAL, TOTVAL, Shape, Shape area. Query confirmed live: UPPER(ONAME) LIKE '%SMITH%' returns real results (e.g., 'SMITH, NEIL K & JONI' on SE 105TH ST). The same service has layer 0 (Parcel Information with Labels), layer 3 (Parcels 1-1-2024 \u2014 prior year snapshot), and layer 4 (Current Parcels). The Shawnee County Open Data Portal at data-sncoks-gis.opendata.arcgis.com provides additional datasets. The property search app is at gis.sncoapps.us/propertysearch/. Shawnee County KS (FIPS 20177) must not be confused with Shawnee County Ohio or Shawnee Township."
3017
+ notes: "Shawnee County KS (Topeka metro, county seat and state capital Topeka) provides AppraisalDataPro/MapServer/4 (Current Parcels) via the county appraiser's GIS server. This is a 20-field service: OBJECTID, PARCELNUM, ACRES, PID, QUICKREFID, ONAME (owner name), PADDRESS, PADDRESS2, DBOOKPAGE, SUBS (subdivision), NBHD (neighborhood), TAXUNIT, USD (unified school district), LBCSFUNCTION, LBCSACTIVITY, LDVAL, BLDGVAL, TOTVAL, Shape, Shape area. Query confirmed live: UPPER(ONAME) LIKE '%SMITH%' returns real results (e.g., 'SMITH, NEIL K & JONI' on SE 105TH ST). The same service has layer 0 (Parcel Information with Labels), layer 3 (Parcels 1-1-2024, prior year snapshot), and layer 4 (Current Parcels). The Shawnee County Open Data Portal at data-sncoks-gis.opendata.arcgis.com provides additional datasets. The property search app is at gis.sncoapps.us/propertysearch/. Shawnee County KS (FIPS 20177) must not be confused with Shawnee County Ohio or Shawnee Township. NOTE 2026-06-27: query endpoint responds in 13-35s (server-side slowness. Returns 437,436 features when polled with 35s timeout); liveness check at 12s flags FAIL but endpoint IS live. Metadata returns immediately."
2545
3018
  }
2546
3019
  ]
2547
3020
  };
@@ -2595,7 +3068,7 @@ var kentucky_default = {
2595
3068
  url: "https://data-lfucg.hub.arcgis.com/",
2596
3069
  email: null
2597
3070
  },
2598
- notes: "Fayette County (Lexington, pop. 322,000; consolidated city-county) Tax Parcels FeatureServer hosted on ArcGIS Online (LFUCG org). Fayette County is a merged urban county government \u2014 the Lexington-Fayette Urban County Government (LFUCG). Fields confirmed: PAN (numeric parcel account number), PARCEL_SUB, PARCEL_BLOCK, PARCEL_LOT, LRM_GEOM_DOC, RecordDate, LRM_GEOM_DOC_AREA/UNITS, PARCEL_TYPE, PARCEL_POLY_NAME, Owner1/2/3, Mailing_Address. Note: PARCEL_POLY_NAME may be null; PAN is the numeric parcel identifier. Mailing_Address is a single concatenated field. Verified 2026-05-15: Owner1 SMITH returns Lexington-area addresses (e.g., '3875 GEIST RD STE E469', '4951 E JOHN JOHN CT'). A separate Parcels FeatureServer exists at the same org but has no owner fields \u2014 Tax_Parcels is the correct service. Note: distinct from Jefferson County KY (Louisville, FIPS 21111) already in atlas."
3071
+ notes: "Fayette County (Lexington, pop. 322,000; consolidated city-county) Tax Parcels FeatureServer hosted on ArcGIS Online (LFUCG org). Fayette County is a merged urban county government, the Lexington-Fayette Urban County Government (LFUCG). Fields confirmed: PAN (numeric parcel account number), PARCEL_SUB, PARCEL_BLOCK, PARCEL_LOT, LRM_GEOM_DOC, RecordDate, LRM_GEOM_DOC_AREA/UNITS, PARCEL_TYPE, PARCEL_POLY_NAME, Owner1/2/3, Mailing_Address. Note: PARCEL_POLY_NAME may be null; PAN is the numeric parcel identifier. Mailing_Address is a single concatenated field. Verified 2026-05-15: Owner1 SMITH returns Lexington-area addresses (e.g., '3875 GEIST RD STE E469', '4951 E JOHN JOHN CT'). A separate Parcels FeatureServer exists at the same org but has no owner fields, Tax_Parcels is the correct service. Note: distinct from Jefferson County KY (Louisville, FIPS 21111) already in atlas."
2599
3072
  }
2600
3073
  ]
2601
3074
  };
@@ -2650,7 +3123,7 @@ var louisiana_default = {
2650
3123
  url: "https://web-ebrgis.opendata.arcgis.com/",
2651
3124
  email: null
2652
3125
  },
2653
- notes: "East Baton Rouge Parish (Baton Rouge, pop. 456,000; state capital) Tax Parcel layer. Louisiana uses 'parish' instead of 'county' \u2014 East Baton Rouge Parish is the combined city/parish government. 21 fields confirmed: ID, ASSESSMENT_NUM, PRONO, OWNER, OWNER_ADDRESS, OWNER_CITY_STATE_ZIP, PHYSICAL_ADDRESS, SUBDIVISION, WARD_SECTION, LOT, BLOCK, LEGAL_DESCRIPTION, FLOOD_ZONE, SALE_YEAR, STATUS, SUM_HOMESTEAD_EXEMPTION, SUM_LOT_VALUE, SUM_LAND_VALUE, SUM_IMPROVEMENT_VALUE, SUM_FAIR_MARKET_VALUE, SUM_ASSESSED_VALUE. Verified 2026-05-15: SMITH returns Baton Rouge addresses (e.g., '12523 MERLIN AVE', '9758 W TAMS DR'). EBRGIS manages 200+ public datasets."
3126
+ notes: "East Baton Rouge Parish (Baton Rouge, pop. 456,000; state capital) Tax Parcel layer. Louisiana uses 'parish' instead of 'county'. East Baton Rouge Parish is the combined city/parish government. 21 fields confirmed: ID, ASSESSMENT_NUM, PRONO, OWNER, OWNER_ADDRESS, OWNER_CITY_STATE_ZIP, PHYSICAL_ADDRESS, SUBDIVISION, WARD_SECTION, LOT, BLOCK, LEGAL_DESCRIPTION, FLOOD_ZONE, SALE_YEAR, STATUS, SUM_HOMESTEAD_EXEMPTION, SUM_LOT_VALUE, SUM_LAND_VALUE, SUM_IMPROVEMENT_VALUE, SUM_FAIR_MARKET_VALUE, SUM_ASSESSED_VALUE. Verified 2026-05-15: SMITH returns Baton Rouge addresses (e.g., '12523 MERLIN AVE', '9758 W TAMS DR'). EBRGIS manages 200+ public datasets."
2654
3127
  },
2655
3128
  {
2656
3129
  id: "la-orleans-parish",
@@ -2672,9 +3145,9 @@ var louisiana_default = {
2672
3145
  searchFields: [
2673
3146
  { name: "PARCELID", label: "Parcel ID", searchable: true },
2674
3147
  { name: "TAXBILLID", label: "Tax Bill ID", searchable: true },
2675
- { name: "OWNERNME1", label: "Owner Name 1", searchable: true },
3148
+ { name: "OWNERNME1", label: "Owner Name 1", searchable: false },
2676
3149
  { name: "OWNERNME2", label: "Owner Name 2", searchable: false },
2677
- { name: "SITEADDRESS", label: "Site Address", searchable: true },
3150
+ { name: "SITEADDRESS", label: "Site Address", searchable: false },
2678
3151
  { name: "BUILDING", label: "Building Number", searchable: false },
2679
3152
  { name: "UNIT", label: "Unit", searchable: false },
2680
3153
  { name: "PSTLADDRESS", label: "Postal (Mailing) Address", searchable: false },
@@ -2686,12 +3159,12 @@ var louisiana_default = {
2686
3159
  { name: "SQUARE", label: "Square", searchable: false },
2687
3160
  { name: "PARID", label: "Parcel Account ID", searchable: true }
2688
3161
  ],
2689
- sampleQuery: "https://gis.nola.gov/arcgis/rest/services/apps/property3/MapServer/15/query?where=UPPER(OWNERNME1)+LIKE+UPPER('%25SMITH%25')&outFields=PARCELID,OWNERNME1,SITEADDRESS,PSTLADDRESS,PSTLCITY&returnGeometry=false&f=json&resultRecordCount=10",
3162
+ sampleQuery: "https://gis.nola.gov/arcgis/rest/services/apps/property3/MapServer/15/query?where=PARCELID+IS+NOT+NULL&outFields=PARCELID,OWNERNME1,SITEADDRESS,PSTLADDRESS,PSTLCITY&returnGeometry=false&f=json&resultRecordCount=5",
2690
3163
  license: "public",
2691
3164
  licenseUrl: "https://gis.nola.gov/",
2692
3165
  status: "live",
2693
- lastVerified: "2026-05-15",
2694
- verifiedBy: "manual"
3166
+ lastVerified: "2026-06-27",
3167
+ verifiedBy: "automated"
2695
3168
  }
2696
3169
  ],
2697
3170
  contact: {
@@ -2699,7 +3172,7 @@ var louisiana_default = {
2699
3172
  url: "https://gis.nola.gov/",
2700
3173
  email: null
2701
3174
  },
2702
- notes: "Orleans Parish (New Orleans, pop. 383,000) Property Information layer at index 15 of the apps/property3 composite MapServer. Note: the 'LandBase/Parcels' MapServer at gis.nola.gov only exposes GEOPIN (parcel geometry key, no attributes). For owner + address data, use apps/property3/MapServer/15 which is an assessor join. 20 fields confirmed: OBJECTID, BUILDING, UNIT, SITEADDRESS, OWNERNME1/2, PSTLADDRESS/CITY/STATE/ZIP5/ZIP4, USECD, PRPRTYDSCRP, PARCELID, TAXBILLID, LOT, SQUARE, BLOCK, PARID. New Orleans uses a Square/Lot system (not typical street address) for legal parcel identification. Verified 2026-05-15: SMITH returns New Orleans addresses. The countySlug 'orleans-parish' matches countySlugFromName('Orleans Parish') per atlas slugify rules."
3175
+ notes: "Orleans Parish (New Orleans, pop. 383,000) Property Information layer at index 15 of the apps/property3 composite MapServer. Note: the 'LandBase/Parcels' MapServer at gis.nola.gov only exposes GEOPIN (parcel geometry key, no attributes). For owner + address data, use apps/property3/MapServer/15 which is an assessor join. 20 fields confirmed: OBJECTID, BUILDING, UNIT, SITEADDRESS, OWNERNME1/2, PSTLADDRESS/CITY/STATE/ZIP5/ZIP4, USECD, PRPRTYDSCRP, PARCELID, TAXBILLID, LOT, SQUARE, BLOCK, PARID. New Orleans uses a Square/Lot system (not typical street address) for legal parcel identification. NOTE 2026-06-27: the liveness check 'fetch failed' was transient (metadata at /MapServer/15?f=json now returns 200). However, this ArcGIS Server 10.4 instance has two persistent query limitations: (1) LIKE/UPPER() queries return HTTP 400; (2) count-all queries (where=1=1&returnCountOnly=true) timeout >35s. PARCELID equality queries (where=PARCELID='...') return valid JSON structure. OWNERNME1 and SITEADDRESS marked searchable:false accordingly; sampleQuery changed to IS NOT NULL filter. For PARCELID-based lookups use the PARCELID or PARID fields. The countySlug 'orleans-parish' matches countySlugFromName('Orleans Parish') per atlas slugify rules."
2703
3176
  }
2704
3177
  ]
2705
3178
  };
@@ -2778,7 +3251,7 @@ var maine_default = {
2778
3251
  url: "https://www.maine.gov/geolib/data/index.html",
2779
3252
  email: null
2780
3253
  },
2781
- notes: "Maine GeoLibrary statewide organized-towns parcel service. Layer 10 carries polygon geometry with COUNTY, TOWN, and location fields. Layer 9 is the assessor attribute table (no geometry) with OWNER1/OWNER2 and mailing address \u2014 join on MAP_BK_LOT. Filter Cumberland County with COUNTY='CUMBERLAND'; includes Portland, South Portland, Westbrook, Scarborough, Gorham, Windham, etc. Note: submissions are voluntary from municipalities and some towns may have stale data (updated irregularly). Unorganized territories use a separate service (gis.maine.gov/mapservices)."
3254
+ notes: "Maine GeoLibrary statewide organized-towns parcel service. Layer 10 carries polygon geometry with COUNTY, TOWN, and location fields. Layer 9 is the assessor attribute table (no geometry) with OWNER1/OWNER2 and mailing address, join on MAP_BK_LOT. Filter Cumberland County with COUNTY='CUMBERLAND'; includes Portland, South Portland, Westbrook, Scarborough, Gorham, Windham, etc. Note: submissions are voluntary from municipalities and some towns may have stale data (updated irregularly). Unorganized territories use a separate service (gis.maine.gov/mapservices)."
2782
3255
  },
2783
3256
  {
2784
3257
  id: "me-york",
@@ -2844,6 +3317,102 @@ var maine_default = {
2844
3317
  ]
2845
3318
  };
2846
3319
 
3320
+ // data/maryland.json
3321
+ var maryland_default = {
3322
+ stateSlug: "maryland",
3323
+ stateName: "Maryland",
3324
+ stateAbbrev: "MD",
3325
+ lastUpdated: "2026-06-05",
3326
+ counties: [
3327
+ {
3328
+ id: "md-montgomery",
3329
+ state: "MD",
3330
+ stateName: "Maryland",
3331
+ stateSlug: "maryland",
3332
+ county: "Montgomery",
3333
+ countySlug: "montgomery-county",
3334
+ countyFips: "24031",
3335
+ hasPublicRest: true,
3336
+ endpoints: [
3337
+ {
3338
+ url: "https://mcmaps.org/server11/rest/services/Overlays/MCAtlas_Property_Points/FeatureServer/0",
3339
+ serviceType: "FeatureServer",
3340
+ layerIndex: 0,
3341
+ layerName: "Property Points",
3342
+ supportsQuery: true,
3343
+ corsEnabled: null,
3344
+ searchFields: [
3345
+ { name: "TAX_NO", label: "Tax Account Number", searchable: true },
3346
+ { name: "OWNERS_NAME", label: "Owner Name", searchable: true },
3347
+ { name: "OWNERS_NAME2", label: "Owner Name 2", searchable: true },
3348
+ { name: "PREMISE_ADDR_HOUSENO", label: "Site House Number", searchable: true },
3349
+ { name: "PREMISE_ADDR_STREET", label: "Site Street Name", searchable: true },
3350
+ { name: "PREMISE_ADDR_CITY", label: "Site City", searchable: true },
3351
+ { name: "OWNERS_ADDR1", label: "Owner Mailing Address", searchable: true },
3352
+ { name: "OWNERS_CITY", label: "Owner Mailing City", searchable: true }
3353
+ ],
3354
+ sampleQuery: "https://mcmaps.org/server11/rest/services/Overlays/MCAtlas_Property_Points/FeatureServer/0/query?where=UPPER(OWNERS_NAME)+LIKE+UPPER('%25SMITH%25')&outFields=TAX_NO,OWNERS_NAME,PREMISE_ADDR_HOUSENO,PREMISE_ADDR_STREET,PREMISE_ADDR_CITY,OWNERS_ADDR1&returnGeometry=false&f=json&resultRecordCount=10",
3355
+ license: "public",
3356
+ licenseUrl: "https://www.montgomerycountymd.gov/gis/",
3357
+ status: "live",
3358
+ lastVerified: "2026-06-05",
3359
+ verifiedBy: "automated"
3360
+ }
3361
+ ],
3362
+ contact: {
3363
+ department: "Montgomery County Maryland GIS (MCAtlas)",
3364
+ url: "https://www.montgomerycountymd.gov/gis/",
3365
+ email: null
3366
+ },
3367
+ notes: "Montgomery County is Maryland's most populous county (pop. 1.06 million; county seat Rockville) and one of the wealthiest in the US. The MCAtlas_Property_Points FeatureServer on mcmaps.org (mcmaps.org/server11) is the county's ArcGIS Server backing the MCAtlas web viewer; it exposes 97 fields as point geometry. Live query confirmed 351,703 parcels. Owner-name search uses UPPER() LIKE on OWNERS_NAME. Key fields: TAX_NO (Maryland 8-digit tax account number), OWNERS_NAME, OWNERS_NAME2, OWNERS_ADDR1/ADDR2/ADDR3, OWNERS_CITY/STATE/ZIP (full mailing address), PREMISE_ADDR_HOUSENO/STREET/STREET_TYPE/CITY/ZIP (situs address components), LAND_ASSMT, IMPROV_ASSMT, LEGAL_DESC, TRANSFER_DATE, SALES_PRICE, YEAR_BUILT, LANDUSE_CODE. The county uses Maryland SDAT (State Department of Assessments and Taxation) as the authoritative property record; mcmaps.org mirrors a subset of that data. Note: property points are centroid-located, not parcel polygons. For polygon geometry, Maryland's statewide parcel boundary layer is at geodata.md.gov/imap/rest/services/PlanningCadastre/MD_ParcelBoundaries/MapServer but does not expose owner data directly."
3368
+ },
3369
+ {
3370
+ id: "md-prince-georges",
3371
+ state: "MD",
3372
+ stateName: "Maryland",
3373
+ stateSlug: "maryland",
3374
+ county: "Prince George's",
3375
+ countySlug: "prince-georges-county",
3376
+ countyFips: "24033",
3377
+ hasPublicRest: true,
3378
+ endpoints: [
3379
+ {
3380
+ url: "https://gis.princegeorgescountymd.gov/arcgis/rest/services/Property/Property_Flattened/MapServer/0",
3381
+ serviceType: "MapServer",
3382
+ layerIndex: 0,
3383
+ layerName: "Property Flattened",
3384
+ supportsQuery: true,
3385
+ corsEnabled: null,
3386
+ searchFields: [
3387
+ { name: "ACCOUNT", label: "Account Number", searchable: true },
3388
+ { name: "PROPERTY_ID", label: "Property ID", searchable: true },
3389
+ { name: "OWNER_NAME", label: "Owner Name", searchable: true },
3390
+ { name: "ICO_NAME", label: "In Care Of Name", searchable: true },
3391
+ { name: "HOUSE_NUMBER", label: "Site House Number", searchable: true },
3392
+ { name: "STREET_NAME", label: "Site Street Name", searchable: true },
3393
+ { name: "STREET_TYPE", label: "Site Street Type", searchable: true },
3394
+ { name: "MAIL_STREET", label: "Mailing Street Address", searchable: true },
3395
+ { name: "MAIL_CITY", label: "Mailing City", searchable: true },
3396
+ { name: "MAIL_ZIP5", label: "Mailing ZIP", searchable: true }
3397
+ ],
3398
+ sampleQuery: "https://gis.princegeorgescountymd.gov/arcgis/rest/services/Property/Property_Flattened/MapServer/0/query?where=UPPER(OWNER_NAME)+LIKE+UPPER('%25SMITH%25')&outFields=ACCOUNT,PROPERTY_ID,OWNER_NAME,HOUSE_NUMBER,STREET_NAME,STREET_TYPE,MAIL_STREET,MAIL_CITY,MAIL_ZIP5&returnGeometry=false&f=json&resultRecordCount=10",
3399
+ license: "public",
3400
+ licenseUrl: "https://www.princegeorgescountymd.gov/665/Geographic-Information-Systems-GIS",
3401
+ status: "live",
3402
+ lastVerified: "2026-06-05",
3403
+ verifiedBy: "automated"
3404
+ }
3405
+ ],
3406
+ contact: {
3407
+ department: "Prince George's County Maryland GIS",
3408
+ url: "https://www.princegeorgescountymd.gov/665/Geographic-Information-Systems-GIS",
3409
+ email: null
3410
+ },
3411
+ notes: "Prince George's County is Maryland's second-most populous county (pop. 910,000; county seat Upper Marlboro). The Property_Flattened MapServer on gis.princegeorgescountymd.gov (ArcGIS Server 11.5) is the county's canonical public property layer with 112 fields and 352,791 parcels. Live query confirmed OWNER_NAME exposure. Key fields: ACCOUNT (county account number, 7 digits), PROPERTY_ID (prefixed as '12' + ACCOUNT for the full 9-digit SDAT account number), OWNER_NAME, ICO_NAME (in-care-of), HOUSE_NUMBER (zero-padded 6-digit, e.g. '002909'), STREET_NAME, STREET_TYPE, STREET_DIRECTION, MAIL_STREET/CITY/STATE/ZIP5 (owner mailing address), ASSESS_DIST (assessment district), LAND_AREA_ACRE, LAND_AREA_SQFT, LIBER, FOLIO, SUB_NAME, CONDO_UNIT_NUMBER, TAXMAPGRID. The situs address is split across HOUSE_NUMBER + STREET_NAME + STREET_TYPE. There is no single combined site address field on this layer. The county belongs to the M-NCPPC (Maryland-National Capital Park and Planning Commission) planning region and uses Maryland SDAT for the authoritative ownership record. Prince George's County borders DC and contains the University of Maryland (College Park) and Joint Base Andrews."
3412
+ }
3413
+ ]
3414
+ };
3415
+
2847
3416
  // data/massachusetts.json
2848
3417
  var massachusetts_default = {
2849
3418
  stateSlug: "massachusetts",
@@ -2919,7 +3488,7 @@ var massachusetts_default = {
2919
3488
  url: "https://www.mass.gov/info-details/massgis-data-property-tax-parcels",
2920
3489
  email: null
2921
3490
  },
2922
- notes: "MassGIS Level 3 (L3) Standardized Assessors' Parcel data \u2014 a single statewide service covering all 351 Massachusetts municipalities including all 6 target counties: Suffolk (Boston), Middlesex, Worcester, Norfolk, Essex, and Plymouth. Parcels are organized by municipality (TOWN_ID numeric code), not by county. To filter by county: Suffolk towns include Boston (274), Chelsea (54), Revere (223), Winthrop (349); Middlesex includes Cambridge (49), Lowell (168), Newton (195); use the MassGIS town-code lookup at mass.gov for the full list. Two-layer workflow: layer 1 (Tax Parcels) carries polygon geometry and parcel ID; layer 4 (L3_ASSESS table, no geometry) carries owner name, address, and assessment data \u2014 join on LOC_ID. OWNER_NAME field is public."
3491
+ notes: "MassGIS Level 3 (L3) Standardized Assessors' Parcel data, a single statewide service covering all 351 Massachusetts municipalities including all 6 target counties: Suffolk (Boston), Middlesex, Worcester, Norfolk, Essex, and Plymouth. Parcels are organized by municipality (TOWN_ID numeric code), not by county. To filter by county: Suffolk towns include Boston (274), Chelsea (54), Revere (223), Winthrop (349); Middlesex includes Cambridge (49), Lowell (168), Newton (195); use the MassGIS town-code lookup at mass.gov for the full list. Two-layer workflow: layer 1 (Tax Parcels) carries polygon geometry and parcel ID; layer 4 (L3_ASSESS table, no geometry) carries owner name, address, and assessment data, join on LOC_ID. OWNER_NAME field is public."
2923
3492
  }
2924
3493
  ]
2925
3494
  };
@@ -2929,7 +3498,7 @@ var michigan_default = {
2929
3498
  stateSlug: "michigan",
2930
3499
  stateName: "Michigan",
2931
3500
  stateAbbrev: "MI",
2932
- lastUpdated: "2026-05-15",
3501
+ lastUpdated: "2026-06-06",
2933
3502
  counties: [
2934
3503
  {
2935
3504
  id: "mi-kent",
@@ -2961,9 +3530,9 @@ var michigan_default = {
2961
3530
  sampleQuery: "https://gis.kentcountymi.gov/agisprod/rest/services/ParcelsWithCondos/MapServer/0/query?where=UPPER(OWNERNAME1)%20LIKE%20UPPER('%25SMITH%25')&outFields=PPN,OWNERNAME1,PROPERTYADDRESS,PROPADDRESSCITY&returnGeometry=false&f=json&resultRecordCount=10",
2962
3531
  license: "public",
2963
3532
  licenseUrl: "https://www.kentcountymi-accesskent.opendata.arcgis.com/",
2964
- status: "live",
2965
- lastVerified: "2026-05-15",
2966
- verifiedBy: "automated"
3533
+ status: "unreachable",
3534
+ lastVerified: "2026-06-06",
3535
+ verifiedBy: "manual"
2967
3536
  }
2968
3537
  ],
2969
3538
  contact: {
@@ -2971,7 +3540,7 @@ var michigan_default = {
2971
3540
  url: "https://www.kentcountymi.gov/246/Geographic-Information-System-GIS",
2972
3541
  email: null
2973
3542
  },
2974
- notes: "Kent County (Grand Rapids metro) hosts ParcelsWithCondos/MapServer/0 \u2014 a countywide parcel layer including condominium units. 22 fields: PPN, TAXPARCEL_FLAG, OWNERNAME1, OWNERNAME2, OWNERCAREOF, OWNERADDRESS, OWNERCITY, OWNERZIPCODE, PROPERTYADDRESS, PROPADDRESSCITY, PROPADDRESSSTATE_ZIPCODE, PROPERTYCLASS, GOVERNMENTALUNIT, SCHOOLDISTRICT, SEV/TAXABLE fields (2 tribunals), ACREAGE, PNUM, geometry. Query confirmed live: UPPER(OWNERNAME1) LIKE '%SMITH%' returns real owner names (e.g., 'SMITH TIMOTHY J & STARKS-SMITH MARY'). Owner mailing address is in OWNERADDRESS/OWNERCITY/OWNERZIPCODE. The county's open data hub at kentcountymi-accesskent.opendata.arcgis.com mirrors the same data. Michigan parcel ID (PPN) format is 10-digit county-township-parcel."
3543
+ notes: "Kent County (Grand Rapids metro) hosts ParcelsWithCondos/MapServer/0, a countywide parcel layer including condominium units. 22 fields: PPN, TAXPARCEL_FLAG, OWNERNAME1, OWNERNAME2, OWNERCAREOF, OWNERADDRESS, OWNERCITY, OWNERZIPCODE, PROPERTYADDRESS, PROPADDRESSCITY, PROPADDRESSSTATE_ZIPCODE, PROPERTYCLASS, GOVERNMENTALUNIT, SCHOOLDISTRICT, SEV/TAXABLE fields (2 tribunals), ACREAGE, PNUM, geometry. Query confirmed live: UPPER(OWNERNAME1) LIKE '%SMITH%' returns real owner names (e.g., 'SMITH TIMOTHY J & STARKS-SMITH MARY'). Owner mailing address is in OWNERADDRESS/OWNERCITY/OWNERZIPCODE. The county's open data hub at kentcountymi-accesskent.opendata.arcgis.com mirrors the same data. Michigan parcel ID (PPN) format is 10-digit county-township-parcel. INFRASTRUCTURE OUTAGE (verified 2026-06-06): the entire agisprod ArcGIS server is offline ('Could not access any server machines') -- every service and the portal are affected. Looks transient rather than a retirement; recheck around 2026-07-06."
2975
3544
  },
2976
3545
  {
2977
3546
  id: "mi-oakland",
@@ -3023,7 +3592,7 @@ var minnesota_default = {
3023
3592
  stateSlug: "minnesota",
3024
3593
  stateName: "Minnesota",
3025
3594
  stateAbbrev: "MN",
3026
- lastUpdated: "2026-05-15",
3595
+ lastUpdated: "2026-06-06",
3027
3596
  counties: [
3028
3597
  {
3029
3598
  id: "mn-ramsey",
@@ -3099,9 +3668,9 @@ var minnesota_default = {
3099
3668
  sampleQuery: "https://gis.hennepin.us/arcgis/rest/services/HennepinData/LAND_PROPERTY/MapServer/1/query?where=UPPER(OWNER_NM)+LIKE+UPPER(%27%25SMITH%25%27)&outFields=PID,OWNER_NM,STREET_NM,MAILING_MUNIC_NM&returnGeometry=false&f=json&resultRecordCount=10",
3100
3669
  license: "public",
3101
3670
  licenseUrl: "https://gis-hennepin.hub.arcgis.com/",
3102
- status: "unreachable",
3103
- lastVerified: "2026-05-15",
3104
- verifiedBy: "automated"
3671
+ status: "live",
3672
+ lastVerified: "2026-06-06",
3673
+ verifiedBy: "manual"
3105
3674
  }
3106
3675
  ],
3107
3676
  contact: {
@@ -3109,7 +3678,7 @@ var minnesota_default = {
3109
3678
  url: "https://gis-hennepin.hub.arcgis.com/",
3110
3679
  email: null
3111
3680
  },
3112
- 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 \u2014 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. CURRENT OUTAGE (2026-05-15): the HennepinData/LAND_PROPERTY/MapServer service returns HTTP 500 'Service not started' \u2014 county-side outage, not a permanent retirement. The county's open-data hub at gis-hennepin.opendata.arcgis.com is also returning 404 'Domain record not found'. Recheck weekly via the liveness script \u2014 restore status to 'live' once the service returns."
3681
+ 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)."
3113
3682
  }
3114
3683
  ]
3115
3684
  };
@@ -3119,7 +3688,7 @@ var mississippi_default = {
3119
3688
  stateSlug: "mississippi",
3120
3689
  stateName: "Mississippi",
3121
3690
  stateAbbrev: "MS",
3122
- lastUpdated: "2026-05-15",
3691
+ lastUpdated: "2026-06-06",
3123
3692
  counties: [
3124
3693
  {
3125
3694
  id: "ms-hinds",
@@ -3162,7 +3731,7 @@ var mississippi_default = {
3162
3731
  }
3163
3732
  ],
3164
3733
  contact: {
3165
- department: "Mississippi Department of Environmental Quality (MDEQ) OPCGIS \u2014 hosts county parcel layers",
3734
+ department: "Mississippi Department of Environmental Quality (MDEQ) OPCGIS. Hosts county parcel layers",
3166
3735
  url: "https://www.gis.ms.gov/",
3167
3736
  email: null
3168
3737
  },
@@ -3179,9 +3748,9 @@ var mississippi_default = {
3179
3748
  hasPublicRest: true,
3180
3749
  endpoints: [
3181
3750
  {
3182
- url: "https://maps.desotocountyms.gov/arcgis/rest/services/Layers/MapServer/28",
3751
+ url: "https://maps.desotocountyms.gov/arcgis/rest/services/CountyWebMap/Tax_Assessors_County_Web_Map/MapServer/29",
3183
3752
  serviceType: "MapServer",
3184
- layerIndex: 28,
3753
+ layerIndex: 29,
3185
3754
  layerName: "Tax Parcels",
3186
3755
  supportsQuery: true,
3187
3756
  corsEnabled: null,
@@ -3194,15 +3763,13 @@ var mississippi_default = {
3194
3763
  { name: "STATE", label: "State", searchable: false },
3195
3764
  { name: "ZIP_CODE", label: "ZIP Code", searchable: false },
3196
3765
  { name: "FULL_ADDR", label: "Full Site Address", searchable: true },
3197
- { name: "ACREAGE", label: "Acreage", searchable: false },
3198
- { name: "DEED_BOOK1", label: "Deed Book", searchable: false },
3199
- { name: "DEED_PAGE1", label: "Deed Page", searchable: false }
3766
+ { name: "ACREAGE", label: "Acreage", searchable: false }
3200
3767
  ],
3201
- sampleQuery: "https://maps.desotocountyms.gov/arcgis/rest/services/Layers/MapServer/28/query?where=UPPER(OWNER_NAME)+LIKE+UPPER('%25SMITH%25')&outFields=PIN,OWNER_NAME,FULL_ADDR,CITY&returnGeometry=false&f=json&resultRecordCount=10",
3768
+ sampleQuery: "https://maps.desotocountyms.gov/arcgis/rest/services/CountyWebMap/Tax_Assessors_County_Web_Map/MapServer/29/query?where=UPPER(OWNER_NAME)+LIKE+UPPER('%25SMITH%25')&outFields=PIN,OWNER_NAME,FULL_ADDR,CITY&returnGeometry=false&f=json&resultRecordCount=10",
3202
3769
  license: "public",
3203
3770
  licenseUrl: "https://www.desotocountyms.gov/205/GIS-Maps-Data",
3204
3771
  status: "live",
3205
- lastVerified: "2026-05-15",
3772
+ lastVerified: "2026-06-06",
3206
3773
  verifiedBy: "manual"
3207
3774
  }
3208
3775
  ],
@@ -3211,7 +3778,7 @@ var mississippi_default = {
3211
3778
  url: "https://desotocounty-dcms-gis.hub.arcgis.com/",
3212
3779
  email: null
3213
3780
  },
3214
- notes: "DeSoto County (Southaven and Olive Branch; pop. 185,000; Memphis metro south) is Mississippi's fastest-growing county and carries the highest parcel-lookup demand in the state. The Tax Parcels layer sits at index 28 of the DeSoto County Layers MapServer (maps.desotocountyms.gov). 15 confirmed fields: PIN, ACREAGE, FULL_ADDR (site address), OWNER_NAME, SECOND_OWNER (co-owner), OWNER_ADDRESS, CITY, STATE, ZIP_CODE, DEED_BOOK1, DEED_PAGE1, WD_Link (warranty deed hyperlink), Tax_Info (hyperlink to county tax record), and Tax_Map (tax map hyperlink). Owner-name queries confirmed live 2026-05-15; SMITH returns Olive Branch MS addresses. WD_Link and Tax_Info are URL fields that deep-link directly into the county's deed and tax systems -- a convenience not common in Mississippi public layers. DeSoto County's GIS Hub at desotocounty-dcms-gis.hub.arcgis.com provides bulk downloads. The county tax assessor portal at desotocountyms.gov handles exemption and appeal records not surfaced in the REST layer."
3781
+ notes: "DeSoto County (Southaven and Olive Branch; pop. 185,000; Memphis metro south) is Mississippi's fastest-growing county and carries the highest parcel-lookup demand in the state. The Tax Parcels layer sits at index 28 of the DeSoto County Layers MapServer (maps.desotocountyms.gov). 15 confirmed fields: PIN, ACREAGE, FULL_ADDR (site address), OWNER_NAME, SECOND_OWNER (co-owner), OWNER_ADDRESS, CITY, STATE, ZIP_CODE, DEED_BOOK1, DEED_PAGE1, WD_Link (warranty deed hyperlink), Tax_Info (hyperlink to county tax record), and Tax_Map (tax map hyperlink). Owner-name queries confirmed live 2026-05-15; SMITH returns Olive Branch MS addresses. WD_Link and Tax_Info are URL fields that deep-link directly into the county's deed and tax systems -- a convenience not common in Mississippi public layers. DeSoto County's GIS Hub at desotocounty-dcms-gis.hub.arcgis.com provides bulk downloads. The county tax assessor portal at desotocountyms.gov handles exemption and appeal records not surfaced in the REST layer. MIGRATED 2026-06-06: Layer 28 of Layers/MapServer was retired (ArcGIS 404) -- parcels now at CountyWebMap/Tax_Assessors_County_Web_Map/MapServer/29 (84,713 parcels; OWNER_NAME search re-verified live). Deed/tax hyperlink fields from the old layer are not confirmed on the new one."
3215
3782
  }
3216
3783
  ]
3217
3784
  };
@@ -3221,8 +3788,55 @@ var missouri_default = {
3221
3788
  stateSlug: "missouri",
3222
3789
  stateName: "Missouri",
3223
3790
  stateAbbrev: "MO",
3224
- lastUpdated: "2026-05-15",
3791
+ lastUpdated: "2026-06-20",
3225
3792
  counties: [
3793
+ {
3794
+ id: "mo-jackson",
3795
+ state: "MO",
3796
+ stateName: "Missouri",
3797
+ stateSlug: "missouri",
3798
+ county: "Jackson",
3799
+ countySlug: "jackson-county",
3800
+ countyFips: "29095",
3801
+ hasPublicRest: true,
3802
+ endpoints: [
3803
+ {
3804
+ url: "https://gis.mijackson.org/countygis/rest/services/RealEstate/RealEstateParcels/FeatureServer/0",
3805
+ serviceType: "FeatureServer",
3806
+ layerIndex: 0,
3807
+ layerName: "RealEstateParcels",
3808
+ supportsQuery: true,
3809
+ corsEnabled: null,
3810
+ searchFields: [
3811
+ { name: "PIN", label: "Parcel Identification Number", searchable: true },
3812
+ { name: "OWNER", label: "Owner Name", searchable: true },
3813
+ { name: "OWNER2", label: "Owner Name 2", searchable: false },
3814
+ { name: "O_ADDRESS", label: "Owner Address", searchable: false },
3815
+ { name: "O_CITY", label: "Owner City", searchable: false },
3816
+ { name: "O_STATE", label: "Owner State", searchable: false },
3817
+ { name: "O_ZIP", label: "Owner ZIP", searchable: false },
3818
+ { name: "P_FULLADD", label: "Property Full Address", searchable: true },
3819
+ { name: "P_CITY", label: "Property City", searchable: false },
3820
+ { name: "P_STATE", label: "Property State", searchable: false },
3821
+ { name: "P_ZIP", label: "Property ZIP", searchable: false },
3822
+ { name: "P_ACREAGE", label: "Acreage", searchable: false },
3823
+ { name: "LIBERPAGE", label: "Liber/Page (deed reference)", searchable: false }
3824
+ ],
3825
+ sampleQuery: "https://gis.mijackson.org/countygis/rest/services/RealEstate/RealEstateParcels/FeatureServer/0/query?where=UPPER(OWNER)+LIKE+UPPER('%25SMITH%25')&outFields=PIN,OWNER,OWNER2,O_ADDRESS,O_CITY,P_FULLADD,P_CITY&returnGeometry=false&f=json&resultRecordCount=10",
3826
+ license: "public",
3827
+ licenseUrl: "https://gis.mijackson.org/",
3828
+ status: "live",
3829
+ lastVerified: "2026-06-20",
3830
+ verifiedBy: "automated"
3831
+ }
3832
+ ],
3833
+ contact: {
3834
+ department: "Jackson County GIS (Assessed Services Division)",
3835
+ url: "https://jacksongov.org/residents/property-information",
3836
+ email: null
3837
+ },
3838
+ notes: "Jackson County MO (Kansas City metro; county seat Kansas City; FIPS 29095; pop. 715,000, largest county in MO) provides parcel data via gis.mijackson.org. The RealEstate/RealEstateParcels/FeatureServer/0 layer exposes 20 fields: PIN (parcel ID), LIBERPAGE, O_CITY, OWNER, OWNER2, O_STATE, O_ADDRESS, O_ZIP, P_CITY, P_FULLADD, P_STATE, P_ZIP, P_STATUS, P_ACREAGE, P_ASSMBOR1-4, P_HPERCENT. Owner search via UPPER(OWNER) LIKE works well. Verified 2026-06-20: SMITH returns Kansas City-area addresses. Jackson County MO includes Kansas City proper and inner suburbs (Independence, Lee's Summit, Blue Springs). Do not confuse with Jackson County in other states. The GIS portal is at gis.mijackson.org."
3839
+ },
3226
3840
  {
3227
3841
  id: "mo-st-louis",
3228
3842
  state: "MO",
@@ -3265,7 +3879,205 @@ var missouri_default = {
3265
3879
  url: "https://gis.stlouiscountymo.gov/",
3266
3880
  email: null
3267
3881
  },
3268
- notes: "St. Louis County MO (St. Louis metro west/south, county seat Clayton \u2014 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."
3882
+ 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."
3883
+ }
3884
+ ]
3885
+ };
3886
+
3887
+ // data/montana.json
3888
+ var montana_default = {
3889
+ stateSlug: "montana",
3890
+ stateName: "Montana",
3891
+ stateAbbrev: "MT",
3892
+ lastUpdated: "2026-06-20",
3893
+ counties: [
3894
+ {
3895
+ id: "mt-yellowstone",
3896
+ state: "MT",
3897
+ stateName: "Montana",
3898
+ stateSlug: "montana",
3899
+ county: "Yellowstone",
3900
+ countySlug: "yellowstone-county",
3901
+ countyFips: "30111",
3902
+ hasPublicRest: true,
3903
+ endpoints: [
3904
+ {
3905
+ url: "https://gisservicemt.gov/arcgis/rest/services/MSDI_Framework/Parcels/MapServer/0",
3906
+ serviceType: "MapServer",
3907
+ layerIndex: 0,
3908
+ layerName: "Parcels",
3909
+ supportsQuery: true,
3910
+ corsEnabled: null,
3911
+ searchFields: [
3912
+ { name: "PARCELID", label: "Parcel ID", searchable: true },
3913
+ { name: "OwnerName", label: "Owner Name", searchable: true },
3914
+ { name: "OwnerAddress1", label: "Owner Address Line 1", searchable: false },
3915
+ { name: "OwnerAddress2", label: "Owner Address Line 2", searchable: false },
3916
+ { name: "OwnerCity", label: "Owner City", searchable: false },
3917
+ { name: "OwnerState", label: "Owner State", searchable: false },
3918
+ { name: "OwnerZipCode", label: "Owner ZIP Code", searchable: false },
3919
+ { name: "AddressLine1", label: "Property Address", searchable: true },
3920
+ { name: "CityStateZip", label: "Property City/State/ZIP", searchable: false },
3921
+ { name: "CountyName", label: "County Name (Yellowstone)", searchable: false },
3922
+ { name: "COUNTYCD", label: "County Code (3 = Yellowstone)", searchable: false },
3923
+ { name: "TotalValue", label: "Total Assessed Value", searchable: false },
3924
+ { name: "TaxYear", label: "Tax Year", searchable: false }
3925
+ ],
3926
+ sampleQuery: "https://gisservicemt.gov/arcgis/rest/services/MSDI_Framework/Parcels/MapServer/0/query?where=CountyName%3D'Yellowstone'+AND+UPPER(OwnerName)+LIKE+UPPER('%25SMITH%25')&outFields=PARCELID,OwnerName,AddressLine1,CityStateZip,CountyName&returnGeometry=false&f=json&resultRecordCount=10",
3927
+ license: "public",
3928
+ licenseUrl: "https://gisservicemt.gov/",
3929
+ status: "live",
3930
+ lastVerified: "2026-06-20",
3931
+ verifiedBy: "automated"
3932
+ }
3933
+ ],
3934
+ contact: {
3935
+ department: "Montana State Library / Montana Spatial Data Infrastructure (MSDI)",
3936
+ url: "https://msl.mt.gov/geoinfo/",
3937
+ email: null
3938
+ },
3939
+ notes: "Yellowstone County MT (Billings metro; county seat Billings; FIPS 30111; most populous MT county, pop. 164,000) is served by the Montana statewide parcel layer hosted by the Montana State Library / MSDI Framework. Filter CountyName='Yellowstone' (TitleCase) to scope to Yellowstone County (COUNTYCD=3). Key fields: PARCELID, PropertyID, AssessmentCode, OwnerName, OwnerAddress1/2, OwnerCity, OwnerState, OwnerZipCode, AddressLine1, AddressLine2, CityStateZip, PropType, PropAccess, LevyDistrict, Township, Range, Section, LegalDescriptionShort, GISAcres, TotalBuildingValue, TotalLandValue, TotalValue, TaxYear. Verified 2026-06-20: CountyName='Yellowstone' AND SMITH returns Billings-area addresses. Do not confuse with Yellowstone National Park (in WY, ID, and MT, not a county)."
3940
+ },
3941
+ {
3942
+ id: "mt-missoula",
3943
+ state: "MT",
3944
+ stateName: "Montana",
3945
+ stateSlug: "montana",
3946
+ county: "Missoula",
3947
+ countySlug: "missoula-county",
3948
+ countyFips: "30063",
3949
+ hasPublicRest: true,
3950
+ endpoints: [
3951
+ {
3952
+ url: "https://gisservicemt.gov/arcgis/rest/services/MSDI_Framework/Parcels/MapServer/0",
3953
+ serviceType: "MapServer",
3954
+ layerIndex: 0,
3955
+ layerName: "Parcels",
3956
+ supportsQuery: true,
3957
+ corsEnabled: null,
3958
+ searchFields: [
3959
+ { name: "PARCELID", label: "Parcel ID", searchable: true },
3960
+ { name: "OwnerName", label: "Owner Name", searchable: true },
3961
+ { name: "OwnerAddress1", label: "Owner Address Line 1", searchable: false },
3962
+ { name: "OwnerAddress2", label: "Owner Address Line 2", searchable: false },
3963
+ { name: "OwnerCity", label: "Owner City", searchable: false },
3964
+ { name: "OwnerState", label: "Owner State", searchable: false },
3965
+ { name: "OwnerZipCode", label: "Owner ZIP Code", searchable: false },
3966
+ { name: "AddressLine1", label: "Property Address", searchable: true },
3967
+ { name: "CityStateZip", label: "Property City/State/ZIP", searchable: false },
3968
+ { name: "CountyName", label: "County Name (Missoula)", searchable: false },
3969
+ { name: "COUNTYCD", label: "County Code (4 = Missoula)", searchable: false },
3970
+ { name: "TotalValue", label: "Total Assessed Value", searchable: false },
3971
+ { name: "TaxYear", label: "Tax Year", searchable: false }
3972
+ ],
3973
+ sampleQuery: "https://gisservicemt.gov/arcgis/rest/services/MSDI_Framework/Parcels/MapServer/0/query?where=CountyName%3D'Missoula'+AND+UPPER(OwnerName)+LIKE+UPPER('%25SMITH%25')&outFields=PARCELID,OwnerName,AddressLine1,CityStateZip,CountyName&returnGeometry=false&f=json&resultRecordCount=10",
3974
+ license: "public",
3975
+ licenseUrl: "https://gisservicemt.gov/",
3976
+ status: "live",
3977
+ lastVerified: "2026-06-20",
3978
+ verifiedBy: "automated"
3979
+ }
3980
+ ],
3981
+ contact: {
3982
+ department: "Montana State Library / Montana Spatial Data Infrastructure (MSDI)",
3983
+ url: "https://msl.mt.gov/geoinfo/",
3984
+ email: null
3985
+ },
3986
+ notes: "Missoula County MT (Missoula; county seat Missoula; FIPS 30063; home to University of Montana) is served by the Montana statewide parcel layer (COUNTYCD=4). Filter CountyName='Missoula' to scope to this county. Same schema and endpoint as other Montana counties (MSDI Framework Parcels/MapServer/0). Verified 2026-06-20: SMITH query returns Missoula-area addresses."
3987
+ },
3988
+ {
3989
+ id: "mt-cascade",
3990
+ state: "MT",
3991
+ stateName: "Montana",
3992
+ stateSlug: "montana",
3993
+ county: "Cascade",
3994
+ countySlug: "cascade-county",
3995
+ countyFips: "30013",
3996
+ hasPublicRest: true,
3997
+ endpoints: [
3998
+ {
3999
+ url: "https://gisservicemt.gov/arcgis/rest/services/MSDI_Framework/Parcels/MapServer/0",
4000
+ serviceType: "MapServer",
4001
+ layerIndex: 0,
4002
+ layerName: "Parcels",
4003
+ supportsQuery: true,
4004
+ corsEnabled: null,
4005
+ searchFields: [
4006
+ { name: "PARCELID", label: "Parcel ID", searchable: true },
4007
+ { name: "OwnerName", label: "Owner Name", searchable: true },
4008
+ { name: "OwnerAddress1", label: "Owner Address Line 1", searchable: false },
4009
+ { name: "OwnerAddress2", label: "Owner Address Line 2", searchable: false },
4010
+ { name: "OwnerCity", label: "Owner City", searchable: false },
4011
+ { name: "OwnerState", label: "Owner State", searchable: false },
4012
+ { name: "OwnerZipCode", label: "Owner ZIP Code", searchable: false },
4013
+ { name: "AddressLine1", label: "Property Address", searchable: true },
4014
+ { name: "CityStateZip", label: "Property City/State/ZIP", searchable: false },
4015
+ { name: "CountyName", label: "County Name (Cascade)", searchable: false },
4016
+ { name: "COUNTYCD", label: "County Code (2 = Cascade)", searchable: false },
4017
+ { name: "TotalValue", label: "Total Assessed Value", searchable: false },
4018
+ { name: "TaxYear", label: "Tax Year", searchable: false }
4019
+ ],
4020
+ sampleQuery: "https://gisservicemt.gov/arcgis/rest/services/MSDI_Framework/Parcels/MapServer/0/query?where=CountyName%3D'Cascade'+AND+UPPER(OwnerName)+LIKE+UPPER('%25SMITH%25')&outFields=PARCELID,OwnerName,AddressLine1,CityStateZip,CountyName&returnGeometry=false&f=json&resultRecordCount=10",
4021
+ license: "public",
4022
+ licenseUrl: "https://gisservicemt.gov/",
4023
+ status: "live",
4024
+ lastVerified: "2026-06-20",
4025
+ verifiedBy: "automated"
4026
+ }
4027
+ ],
4028
+ contact: {
4029
+ department: "Montana State Library / Montana Spatial Data Infrastructure (MSDI)",
4030
+ url: "https://msl.mt.gov/geoinfo/",
4031
+ email: null
4032
+ },
4033
+ notes: "Cascade County MT (Great Falls; county seat Great Falls; FIPS 30013) is served by the Montana statewide parcel layer (COUNTYCD=2). Filter CountyName='Cascade' to scope to this county. Same schema and endpoint as other Montana counties. Verified 2026-06-20: SMITH query returns Great Falls-area addresses."
4034
+ },
4035
+ {
4036
+ id: "mt-flathead",
4037
+ state: "MT",
4038
+ stateName: "Montana",
4039
+ stateSlug: "montana",
4040
+ county: "Flathead",
4041
+ countySlug: "flathead-county",
4042
+ countyFips: "30029",
4043
+ hasPublicRest: true,
4044
+ endpoints: [
4045
+ {
4046
+ url: "https://gisservicemt.gov/arcgis/rest/services/MSDI_Framework/Parcels/MapServer/0",
4047
+ serviceType: "MapServer",
4048
+ layerIndex: 0,
4049
+ layerName: "Parcels",
4050
+ supportsQuery: true,
4051
+ corsEnabled: null,
4052
+ searchFields: [
4053
+ { name: "PARCELID", label: "Parcel ID", searchable: true },
4054
+ { name: "OwnerName", label: "Owner Name", searchable: true },
4055
+ { name: "OwnerAddress1", label: "Owner Address Line 1", searchable: false },
4056
+ { name: "OwnerAddress2", label: "Owner Address Line 2", searchable: false },
4057
+ { name: "OwnerCity", label: "Owner City", searchable: false },
4058
+ { name: "OwnerState", label: "Owner State", searchable: false },
4059
+ { name: "OwnerZipCode", label: "Owner ZIP Code", searchable: false },
4060
+ { name: "AddressLine1", label: "Property Address", searchable: true },
4061
+ { name: "CityStateZip", label: "Property City/State/ZIP", searchable: false },
4062
+ { name: "CountyName", label: "County Name (Flathead)", searchable: false },
4063
+ { name: "COUNTYCD", label: "County Code (7 = Flathead)", searchable: false },
4064
+ { name: "TotalValue", label: "Total Assessed Value", searchable: false },
4065
+ { name: "TaxYear", label: "Tax Year", searchable: false }
4066
+ ],
4067
+ sampleQuery: "https://gisservicemt.gov/arcgis/rest/services/MSDI_Framework/Parcels/MapServer/0/query?where=CountyName%3D'Flathead'+AND+UPPER(OwnerName)+LIKE+UPPER('%25SMITH%25')&outFields=PARCELID,OwnerName,AddressLine1,CityStateZip,CountyName&returnGeometry=false&f=json&resultRecordCount=10",
4068
+ license: "public",
4069
+ licenseUrl: "https://gisservicemt.gov/",
4070
+ status: "live",
4071
+ lastVerified: "2026-06-20",
4072
+ verifiedBy: "automated"
4073
+ }
4074
+ ],
4075
+ contact: {
4076
+ department: "Montana State Library / Montana Spatial Data Infrastructure (MSDI)",
4077
+ url: "https://msl.mt.gov/geoinfo/",
4078
+ email: null
4079
+ },
4080
+ notes: "Flathead County MT (Kalispell; county seat Kalispell; FIPS 30029; gateway to Glacier National Park) is served by the Montana statewide parcel layer (COUNTYCD=7). Filter CountyName='Flathead' to scope to this county. Same schema and endpoint as other Montana counties. Verified 2026-06-20: SMITH query returns Kalispell-area addresses."
3269
4081
  }
3270
4082
  ]
3271
4083
  };
@@ -3320,7 +4132,7 @@ var nebraska_default = {
3320
4132
  url: "https://dogis.org/",
3321
4133
  email: null
3322
4134
  },
3323
- notes: "Douglas County NE (Omaha metro, county seat Omaha) is served by DOGIS (Douglas-Omaha Geographic Information System), a joint city-county GIS agency. The Parcels_public FeatureServer/0 exposes 25 fields: PIN, OWNER_NAME, ADDRESS1/2 (owner mailing), OWNER_CITY, OWNER_STAT, OWNER_ZIP, PROPERTY_A (property address), HOUSE, STREET_DIR, STREET_NAM, STREET_TYP, APARTMENT, PROP_CITY, PROP_ZIP, SEC_TWN_RN, ADDITION_N, BLOCK, LOT, LEGAL1/2/3/4, DCAACCTYPE. Query confirmed live: UPPER(OWNER_NAME) LIKE '%SMITH%' returns real results (e.g., 'SMITH MARKITA T'). Note that PROPERTY_A and PROP_CITY may be empty \u2014 the address join may be incomplete for some parcels; use HOUSE + STREET_NAM for address search if needed. The main DOGIS portal is at dogis.org and the open data portal at data-dogis.opendata.arcgis.com. The dcgis.org server also hosts engineering/project imagery \u2014 the vector/ folder is the correct path for parcel data. Douglas County NE (FIPS 31055) must not be confused with Douglas County CO (08035), Douglas County GA (13097), or other Douglas counties."
4135
+ notes: "Douglas County NE (Omaha metro, county seat Omaha) is served by DOGIS (Douglas-Omaha Geographic Information System), a joint city-county GIS agency. The Parcels_public FeatureServer/0 exposes 25 fields: PIN, OWNER_NAME, ADDRESS1/2 (owner mailing), OWNER_CITY, OWNER_STAT, OWNER_ZIP, PROPERTY_A (property address), HOUSE, STREET_DIR, STREET_NAM, STREET_TYP, APARTMENT, PROP_CITY, PROP_ZIP, SEC_TWN_RN, ADDITION_N, BLOCK, LOT, LEGAL1/2/3/4, DCAACCTYPE. Query confirmed live: UPPER(OWNER_NAME) LIKE '%SMITH%' returns real results (e.g., 'SMITH MARKITA T'). Note that PROPERTY_A and PROP_CITY may be empty. The address join may be incomplete for some parcels; use HOUSE + STREET_NAM for address search if needed. The main DOGIS portal is at dogis.org and the open data portal at data-dogis.opendata.arcgis.com. The dcgis.org server also hosts engineering/project imagery. The vector/ folder is the correct path for parcel data. Douglas County NE (FIPS 31055) must not be confused with Douglas County CO (08035), Douglas County GA (13097), or other Douglas counties."
3324
4136
  },
3325
4137
  {
3326
4138
  id: "ne-lancaster",
@@ -3362,7 +4174,7 @@ var nebraska_default = {
3362
4174
  url: "https://www.lancaster.ne.gov/1485/GIS",
3363
4175
  email: null
3364
4176
  },
3365
- notes: "Lancaster County NE (Lincoln metro, county seat Lincoln \u2014 state capital) uses a joint City/County GIS server at gis.lincoln.ne.gov. The Assessor/TaxParcels/MapServer/0 layer uses Local Government Information Model (LGIM) schema: PARCELID, LOWPARCELID, OWNERNME1, OWNERNME2, CNVYNAME, PSTLADDRES, PSTLCITYSTZIP, SITEADDRESS, CVTTXCD, CVTTXDSCRP, SCHLTXCD, SCHLDSCRP, LGLSTARTDT, CLASSCD, CLASSDSCRP, NBHDCD, TAXABLEVALU, TOTVALUEBASE, RESYRBLT, RESFLRAREA. Query confirmed live: UPPER(OWNERNME1) LIKE '%SMITH%' returns real results (e.g., 'SMITH, DOUGLAS R LIFE ESTATE'). Three alternate GIS servers cover Lancaster County: gis.lincoln.ne.gov (multiple subfolders), gisext.lincoln.ne.gov (Assessor/Pub_Parcels, Assessor/Asr_Landbase), and gis.lincoln.ne.gov/public (Assessor/ParcelLinesAerial). Lancaster County NE (FIPS 31109) must not be confused with Lancaster County PA (42071), Lancaster County SC (45057), or Lancaster County VA (51103). The TaxParcels service (integration subfolder) is the richest public-access parcel layer."
4177
+ notes: "Lancaster County NE (Lincoln metro, county seat Lincoln, state capital) uses a joint City/County GIS server at gis.lincoln.ne.gov. The Assessor/TaxParcels/MapServer/0 layer uses Local Government Information Model (LGIM) schema: PARCELID, LOWPARCELID, OWNERNME1, OWNERNME2, CNVYNAME, PSTLADDRES, PSTLCITYSTZIP, SITEADDRESS, CVTTXCD, CVTTXDSCRP, SCHLTXCD, SCHLDSCRP, LGLSTARTDT, CLASSCD, CLASSDSCRP, NBHDCD, TAXABLEVALU, TOTVALUEBASE, RESYRBLT, RESFLRAREA. Query confirmed live: UPPER(OWNERNME1) LIKE '%SMITH%' returns real results (e.g., 'SMITH, DOUGLAS R LIFE ESTATE'). Three alternate GIS servers cover Lancaster County: gis.lincoln.ne.gov (multiple subfolders), gisext.lincoln.ne.gov (Assessor/Pub_Parcels, Assessor/Asr_Landbase), and gis.lincoln.ne.gov/public (Assessor/ParcelLinesAerial). Lancaster County NE (FIPS 31109) must not be confused with Lancaster County PA (42071), Lancaster County SC (45057), or Lancaster County VA (51103). The TaxParcels service (integration subfolder) is the richest public-access parcel layer."
3366
4178
  },
3367
4179
  {
3368
4180
  id: "ne-sarpy",
@@ -3404,7 +4216,7 @@ var nebraska_default = {
3404
4216
  url: "https://www.sarpy.gov/187/Geographic-Information-System-GIS",
3405
4217
  email: null
3406
4218
  },
3407
- notes: "Sarpy County NE (Omaha south/west suburbs \u2014 Bellevue, Papillion, La Vista, Gretna) hosts LandRecordsSearch/FeatureServer with 10 layers; layer 5 (Tax Parcels) is the polygon parcel layer with ownership data. Fields follow LGIM schema: PARCELID, OWNERNME1, OWNERNME2, CNVYNAME, PSTLADDRES, SITEADDRESS, CVTTXCD/CVTTXDSCRP, SCHLTXCD/SCHLDSCRP, USEDSCRP, NGHBRHDCD, CLASSCD, CLASSDSCRP, LNDVALUE, CNTASSDVAL, CNTTXBLVAL, RESFLRAREA, RESYRBLT. Query confirmed live: UPPER(OWNERNME1) LIKE '%SMITH%' returns real results (e.g., 'SMITH/SHAWN L' at '11106 S 18TH CIR BELLEVUE NE 68123'). The Cadastral/LandRecordsDynamic/MapServer provides the same parcels as a cached tile service. Sarpy County is the fastest-growing county in Nebraska. GIS portal at gis.sarpy.gov and open data at data2-sarpy.opendata.arcgis.com. The SIMS parcel viewer (maps.sarpy.gov/html5viewer/?Viewer=SIMS) is the public-facing tool."
4219
+ notes: "Sarpy County NE (Omaha south/west suburbs, Bellevue, Papillion, La Vista, Gretna) hosts LandRecordsSearch/FeatureServer with 10 layers; layer 5 (Tax Parcels) is the polygon parcel layer with ownership data. Fields follow LGIM schema: PARCELID, OWNERNME1, OWNERNME2, CNVYNAME, PSTLADDRES, SITEADDRESS, CVTTXCD/CVTTXDSCRP, SCHLTXCD/SCHLDSCRP, USEDSCRP, NGHBRHDCD, CLASSCD, CLASSDSCRP, LNDVALUE, CNTASSDVAL, CNTTXBLVAL, RESFLRAREA, RESYRBLT. Query confirmed live: UPPER(OWNERNME1) LIKE '%SMITH%' returns real results (e.g., 'SMITH/SHAWN L' at '11106 S 18TH CIR BELLEVUE NE 68123'). The Cadastral/LandRecordsDynamic/MapServer provides the same parcels as a cached tile service. Sarpy County is the fastest-growing county in Nebraska. GIS portal at gis.sarpy.gov and open data at data2-sarpy.opendata.arcgis.com. The SIMS parcel viewer (maps.sarpy.gov/html5viewer/?Viewer=SIMS) is the public-facing tool."
3408
4220
  }
3409
4221
  ]
3410
4222
  };
@@ -3504,7 +4316,7 @@ var nevada_default = {
3504
4316
  url: "https://explore-washoe.opendata.arcgis.com/",
3505
4317
  email: null
3506
4318
  },
3507
- notes: "71 fields confirmed including OBJECTID, APN, REGION, PIN, RECMAP, BOOK, PAGE, BLOCK, PARCEL, SUBNAME, TOWNSHIP, RANGE, SECTION_, FLOOR, MAPLINK, FLR, Shape, Shape.STArea(), STREETNUM, STREETDIR, STREET, CITY, SITUSZIP, FIRSTNAME, LASTNAME, MAILING1, MAILING2, MAILCITY, MAILSTATE, MAILZIP, LAND_USE, Zoning, WATER, SEWER, ACREAGE, TAXDIST, BEDROOMS, BATHS, YEARBLT, LANDASS, BUILDASS, TOTALASS, LANDAPR, BUILDAPR, TOTALAPR, DEPRECIATION, SALEDATE, SALEPRICE, OCCUPANCY, PROPCODE, TAXYEAR, STORIES, TOWNHOUSE, SQFEET, UNITS, AVCONSYEAR, BUILDINGTYPE, NBHD, SPECPROPCODE, QC, LAND_BASE, NBC, Fireplaces, HeatType, SecHeatType, Agency, AG_ABBR, FullAddress, ZoningWithDetail, Zoning_GIS, STRAP. Owner name available as FIRSTNAME + LASTNAME (split fields) \u2014 live query confirmed: APN 134087 returns 'MIEKO E SPAHR' in RENO 89503. maxRecordCount=1000. Covers Reno, Sparks, and unincorporated Washoe County (pop. 480,000). Note: owner name is public per Nevada law (unlike Clark County which also has a public layer but no owner). Current version 11.4."
4319
+ notes: "71 fields confirmed including OBJECTID, APN, REGION, PIN, RECMAP, BOOK, PAGE, BLOCK, PARCEL, SUBNAME, TOWNSHIP, RANGE, SECTION_, FLOOR, MAPLINK, FLR, Shape, Shape.STArea(), STREETNUM, STREETDIR, STREET, CITY, SITUSZIP, FIRSTNAME, LASTNAME, MAILING1, MAILING2, MAILCITY, MAILSTATE, MAILZIP, LAND_USE, Zoning, WATER, SEWER, ACREAGE, TAXDIST, BEDROOMS, BATHS, YEARBLT, LANDASS, BUILDASS, TOTALASS, LANDAPR, BUILDAPR, TOTALAPR, DEPRECIATION, SALEDATE, SALEPRICE, OCCUPANCY, PROPCODE, TAXYEAR, STORIES, TOWNHOUSE, SQFEET, UNITS, AVCONSYEAR, BUILDINGTYPE, NBHD, SPECPROPCODE, QC, LAND_BASE, NBC, Fireplaces, HeatType, SecHeatType, Agency, AG_ABBR, FullAddress, ZoningWithDetail, Zoning_GIS, STRAP. Owner name available as FIRSTNAME + LASTNAME (split fields). Live query confirmed: APN 134087 returns 'MIEKO E SPAHR' in RENO 89503. maxRecordCount=1000. Covers Reno, Sparks, and unincorporated Washoe County (pop. 480,000). Note: owner name is public per Nevada law (unlike Clark County which also has a public layer but no owner). Current version 11.4."
3508
4320
  }
3509
4321
  ]
3510
4322
  };
@@ -3648,11 +4460,11 @@ var new_jersey_default = {
3648
4460
  }
3649
4461
  ],
3650
4462
  contact: {
3651
- department: "NJ Office of GIS (NJOGIS) \u2014 Statewide MOD-IV Composite",
4463
+ department: "NJ Office of GIS (NJOGIS), Statewide MOD-IV Composite",
3652
4464
  url: "https://www.njogis.com/",
3653
4465
  email: null
3654
4466
  },
3655
- notes: "NJ statewide MOD-IV Composite parcel layer \u2014 covers all 21 counties; filter by COUNTY='BERGEN' (uppercase county name). Bergen County has 20,553+ parcels confirmed. IMPORTANT: OWNER_NAME field is present in the schema but intentionally blank for all records \u2014 NJ state policy restricts bulk owner-name lookup via the public REST layer. Parcel data includes address, assessed values, sale price, year built, deed book/page, and building description. For owner lookup, see NJ MOD-IV database via county tax assessors or NJACTB. This hosted service (Web Mercator 3857 projection) is maintained by NJOGIS and mirrors the official New Jersey Division of Taxation MOD-IV database."
4467
+ notes: "NJ statewide MOD-IV Composite parcel layer, covers all 21 counties; filter by COUNTY='BERGEN' (uppercase county name). Bergen County has 20,553+ parcels confirmed. IMPORTANT: OWNER_NAME field is present in the schema but intentionally blank for all records, NJ state policy restricts bulk owner-name lookup via the public REST layer. Parcel data includes address, assessed values, sale price, year built, deed book/page, and building description. For owner lookup, see NJ MOD-IV database via county tax assessors or NJACTB. This hosted service (Web Mercator 3857 projection) is maintained by NJOGIS and mirrors the official New Jersey Division of Taxation MOD-IV database."
3656
4468
  },
3657
4469
  {
3658
4470
  id: "nj-monmouth",
@@ -4030,20 +4842,71 @@ var new_jersey_default = {
4030
4842
  searchable: false
4031
4843
  }
4032
4844
  ],
4033
- sampleQuery: "https://maps.nj.gov/arcgis/rest/services/Framework/Cadastral/MapServer/0/query?where=COUNTY%3D'MORRIS'+AND+UPPER(OWNER_NAME)+LIKE+UPPER('%25SMITH%25')&outFields=COUNTY,MUN_NAME,PAMS_PIN,PROP_LOC,OWNER_NAME,NET_VALUE&returnGeometry=false&f=json&resultRecordCount=10",
4845
+ sampleQuery: "https://maps.nj.gov/arcgis/rest/services/Framework/Cadastral/MapServer/0/query?where=COUNTY%3D'MORRIS'+AND+UPPER(OWNER_NAME)+LIKE+UPPER('%25SMITH%25')&outFields=COUNTY,MUN_NAME,PAMS_PIN,PROP_LOC,OWNER_NAME,NET_VALUE&returnGeometry=false&f=json&resultRecordCount=10",
4846
+ license: "public",
4847
+ licenseUrl: "https://www.nj.gov/njgin/",
4848
+ status: "live",
4849
+ lastVerified: "2026-05-15",
4850
+ verifiedBy: "manual"
4851
+ }
4852
+ ],
4853
+ contact: {
4854
+ department: "NJ Office of Information Technology, Office of GIS (NJOGIS)",
4855
+ url: "https://www.nj.gov/njgin/",
4856
+ email: null
4857
+ },
4858
+ notes: "Morris County (pop. 510,000; northern NJ exurbs) has no county-direct REST parcel layer that exposes owner data. The local morrisgisapps.co.morris.nj.us MapServer exists but returns only PAMS_PIN and shape geometry -- insufficient for owner or address lookup. The NJOGIS statewide cadastral layer at maps.nj.gov (Framework/Cadastral/MapServer/0) is the practical choice; filter with COUNTY='MORRIS'. Fields include OWNER_NAME, PAMS_PIN, PROP_LOC, MUN_NAME, PROP_CLASS, LAND_VAL, IMPRVT_VAL, NET_VALUE, SALE_PRICE, YR_CONSTR, and CALC_ACRE. Morris County's 39 municipalities include Morristown, Parsippany-Troy Hills, Dover, Rockaway Township, Randolph, and several with significant commercial and industrial parcels along I-80 and Route 10. The MOD-IV quarterly update cycle applies; data reflects the prior quarter's county submission. NJ Daniel's Law address-redaction applies. For recorded instruments, the Morris County Clerk document portal is at morriscountyclerk.org."
4859
+ }
4860
+ ]
4861
+ };
4862
+
4863
+ // data/new-mexico.json
4864
+ var new_mexico_default = {
4865
+ stateSlug: "new-mexico",
4866
+ stateName: "New Mexico",
4867
+ stateAbbrev: "NM",
4868
+ lastUpdated: "2026-06-05",
4869
+ counties: [
4870
+ {
4871
+ id: "nm-bernalillo",
4872
+ state: "NM",
4873
+ stateName: "New Mexico",
4874
+ stateSlug: "new-mexico",
4875
+ county: "Bernalillo",
4876
+ countySlug: "bernalillo-county",
4877
+ countyFips: "35001",
4878
+ hasPublicRest: true,
4879
+ endpoints: [
4880
+ {
4881
+ url: "https://assessormap.bernco.gov/server/rest/services/Enterprise_Assessment_And_Tax/Public_Access_Parcel_Data_EAT/MapServer/0",
4882
+ serviceType: "MapServer",
4883
+ layerIndex: 0,
4884
+ layerName: "Parcels",
4885
+ supportsQuery: true,
4886
+ corsEnabled: null,
4887
+ searchFields: [
4888
+ { name: "UPC", label: "Unique Parcel Code (APN)", searchable: true },
4889
+ { name: "OWNER", label: "Owner Name", searchable: true },
4890
+ { name: "SITUSADD", label: "Situs Address", searchable: true },
4891
+ { name: "SITUSCITY", label: "Situs City", searchable: true },
4892
+ { name: "OWNADD", label: "Owner Mailing Address", searchable: true },
4893
+ { name: "OWNCITY", label: "Owner Mailing City", searchable: true },
4894
+ { name: "OWNZIPCODE", label: "Owner ZIP Code", searchable: true }
4895
+ ],
4896
+ sampleQuery: "https://assessormap.bernco.gov/server/rest/services/Enterprise_Assessment_And_Tax/Public_Access_Parcel_Data_EAT/MapServer/0/query?where=UPPER(OWNER)+LIKE+UPPER('%25SMITH%25')&outFields=UPC,OWNER,SITUSADD,SITUSCITY,OWNADD,OWNCITY,OWNZIPCODE&returnGeometry=false&f=json&resultRecordCount=10",
4034
4897
  license: "public",
4035
- licenseUrl: "https://www.nj.gov/njgin/",
4898
+ licenseUrl: "https://www.bernco.gov/assessor/assessors-gis-maps/",
4036
4899
  status: "live",
4037
- lastVerified: "2026-05-15",
4038
- verifiedBy: "manual"
4900
+ lastVerified: "2026-06-05",
4901
+ verifiedBy: "automated"
4039
4902
  }
4040
4903
  ],
4041
4904
  contact: {
4042
- department: "NJ Office of Information Technology, Office of GIS (NJOGIS)",
4043
- url: "https://www.nj.gov/njgin/",
4905
+ department: "Bernalillo County Assessor's Office GIS",
4906
+ url: "https://www.bernco.gov/assessor/assessors-gis-maps/",
4044
4907
  email: null
4045
4908
  },
4046
- notes: "Morris County (pop. 510,000; northern NJ exurbs) has no county-direct REST parcel layer that exposes owner data. The local morrisgisapps.co.morris.nj.us MapServer exists but returns only PAMS_PIN and shape geometry -- insufficient for owner or address lookup. The NJOGIS statewide cadastral layer at maps.nj.gov (Framework/Cadastral/MapServer/0) is the practical choice; filter with COUNTY='MORRIS'. Fields include OWNER_NAME, PAMS_PIN, PROP_LOC, MUN_NAME, PROP_CLASS, LAND_VAL, IMPRVT_VAL, NET_VALUE, SALE_PRICE, YR_CONSTR, and CALC_ACRE. Morris County's 39 municipalities include Morristown, Parsippany-Troy Hills, Dover, Rockaway Township, Randolph, and several with significant commercial and industrial parcels along I-80 and Route 10. The MOD-IV quarterly update cycle applies; data reflects the prior quarter's county submission. NJ Daniel's Law address-redaction applies. For recorded instruments, the Morris County Clerk document portal is at morriscountyclerk.org."
4909
+ notes: "Bernalillo County is New Mexico's most populous county (pop. 680,000; county seat Albuquerque, which contains roughly 90% of the county population). The Public_Access_Parcel_Data_EAT MapServer on assessormap.bernco.gov (ArcGIS Server 11.1) is the Bernalillo County Assessor's enterprise assessment and tax parcel layer. Live query confirmed 256,034 parcels with full owner-name and situs-address exposure. Key fields: UPC (Unique Parcel Code, a 20-character alphanumeric ID, e.g. '102106049820341601AL'), TAXYR, OWNER, SITUSADD (full situs address, e.g. '3501 JUAN TABO NE J1'), SITUSCITY, SITUSSTATE, SITUSZIP, OWNADD, OWNADD2, OWNCITY, OWNSTATE, OWNCOUNTRY, OWNZIPCODE, OWNZIP4 (full owner mailing address), TAXDIST, LEGALDESC, ROLLTYPE, VALCLASS, PROPCLASS, LANDVALUE, AGVALUE, IMPTVALUE, TOTVALUE, TOTTXBLE, NETTAXABLE, ACREAGE. UPC format encodes township/range/section/parcel in a compound alphanumeric string. Owner-name search via UPPER() LIKE on OWNER works. The assessor also maintains a public property search UI at assessor.bernco.gov. Note: assessormap.bernco.gov is a separate subdomain from the county's PDS GIS server at pdsgismaps.bernco.gov. Both are public; only assessormap.bernco.gov has the parcel-with-owner layer. The county GIS server at pdsgismaps.bernco.gov has the canvass parcel polygons (BernCo_Public_Canvass_Update/MapServer layer 6) but that layer has only UPC + situs address, not owner name."
4047
4910
  }
4048
4911
  ]
4049
4912
  };
@@ -4124,7 +4987,7 @@ var new_york_default = {
4124
4987
  url: "https://nycplanning.github.io/db-pluto/",
4125
4988
  email: null
4126
4989
  },
4127
- notes: "New York County (FIPS 36061) is the formal name for the borough of Manhattan, but both endpoints below cover ALL FIVE NYC boroughs. Use either to query Brooklyn (Kings, 36047), Queens (36081), Bronx (36005), or Staten Island (Richmond, 36085). MAPPLUTO (96 fields) is the DCP-maintained primary source: BBL as the unique identifier, OwnerName, full zoning (ZoneDist1-4, overlays, FAR), building characteristics, political geography. Filter MAPPLUTO by Borough field with codes MN/BX/BK/QN/SI. The NYS Tax Parcels service (75+ fields) covers all 62 NY counties \u2014 filter by COUNTY_NAME='Kings'/'Queens'/'New York'/'Bronx'/'Richmond' for NYC boroughs, or any upstate county name for statewide reach."
4990
+ notes: "New York County (FIPS 36061) is the formal name for the borough of Manhattan, but both endpoints below cover ALL FIVE NYC boroughs. Use either to query Brooklyn (Kings, 36047), Queens (36081), Bronx (36005), or Staten Island (Richmond, 36085). MAPPLUTO (96 fields) is the DCP-maintained primary source: BBL as the unique identifier, OwnerName, full zoning (ZoneDist1-4, overlays, FAR), building characteristics, political geography. Filter MAPPLUTO by Borough field with codes MN/BX/BK/QN/SI. The NYS Tax Parcels service (75+ fields) covers all 62 NY counties, filter by COUNTY_NAME='Kings'/'Queens'/'New York'/'Bronx'/'Richmond' for NYC boroughs, or any upstate county name for statewide reach."
4128
4991
  },
4129
4992
  {
4130
4993
  id: "ny-erie",
@@ -4169,7 +5032,7 @@ var new_york_default = {
4169
5032
  }
4170
5033
  ],
4171
5034
  contact: {
4172
- department: "Erie County Department of Environment and Planning \u2014 GIS Division",
5035
+ department: "Erie County Department of Environment and Planning, GIS Division",
4173
5036
  url: "https://www.erie.gov/environment/gis",
4174
5037
  email: null
4175
5038
  },
@@ -4265,7 +5128,7 @@ var new_york_default = {
4265
5128
  url: "https://gisservices.its.ny.gov/arcgis/rest/services/NYS_Tax_Parcels_Public/MapServer",
4266
5129
  email: null
4267
5130
  },
4268
- notes: "Onondaga County (Syracuse, FIPS 36067) is served by the NYS Tax Parcels Public statewide layer \u2014 filter with COUNTY_NAME='Onondaga'. 75+ fields including PRIMARY_OWNER, PARCEL_ADDR, SWIS_SBL_ID, PRINT_KEY, MAIL_ADDR, MAIL_CITY, TOTAL_AV, PROP_CLASS, YR_BLT. Owner query confirmed returning real residential parcels (Smith, Gregg S at 2647 Ellsworth Rd). This same statewide endpoint covers all 62 NY counties; see the NYC entry for borough-specific filtering. Note: Monroe County (Rochester, 36055) has its own dedicated hosted service with richer attributes \u2014 see ny-monroe entry. The NYS statewide service may not always return Monroe data; use the dedicated Monroe endpoint for that county."
5131
+ notes: "Onondaga County (Syracuse, FIPS 36067) is served by the NYS Tax Parcels Public statewide layer, filter with COUNTY_NAME='Onondaga'. 75+ fields including PRIMARY_OWNER, PARCEL_ADDR, SWIS_SBL_ID, PRINT_KEY, MAIL_ADDR, MAIL_CITY, TOTAL_AV, PROP_CLASS, YR_BLT. Owner query confirmed returning real residential parcels (Smith, Gregg S at 2647 Ellsworth Rd). This same statewide endpoint covers all 62 NY counties; see the NYC entry for borough-specific filtering. Note: Monroe County (Rochester, 36055) has its own dedicated hosted service with richer attributes, see ny-monroe entry. The NYS statewide service may not always return Monroe data; use the dedicated Monroe endpoint for that county."
4269
5132
  },
4270
5133
  {
4271
5134
  id: "ny-suffolk",
@@ -4285,7 +5148,7 @@ var new_york_default = {
4285
5148
  supportsQuery: true,
4286
5149
  corsEnabled: null,
4287
5150
  searchFields: [
4288
- { name: "COUNTY_NAME", label: "County Name \u2014 filter with 'Suffolk'", searchable: true },
5151
+ { name: "COUNTY_NAME", label: "County Name, filter with 'Suffolk'", searchable: true },
4289
5152
  { name: "PRIMARY_OWNER", label: "Primary Owner Name", searchable: true },
4290
5153
  { name: "ADD_OWNER", label: "Additional Owner Name", searchable: true },
4291
5154
  { name: "PARCEL_ADDR", label: "Parcel Address", searchable: true },
@@ -4315,7 +5178,7 @@ var new_york_default = {
4315
5178
  url: "https://www.its.ny.gov/gis",
4316
5179
  email: null
4317
5180
  },
4318
- notes: "75+ fields confirmed. This is the same NYS Tax Parcels Public statewide endpoint used for New York County (Manhattan) \u2014 filter by COUNTY_NAME='Suffolk' for Suffolk County. Suffolk is the most populous county on Long Island (~1.5M residents). SWIS_SBL_ID is the canonical parcel identifier (26-character SWIS + SBL concatenation); PRINT_KEY is the human-readable tax map reference (e.g. '1.-1-1'). PRIMARY_OWNER is the assessed owner. Note the NYC-area MAPPLUTO endpoint does NOT cover Suffolk \u2014 that endpoint is for the five NYC boroughs only. This statewide layer has 75+ attributes including assessed values, market values, year built, building style, heat/fuel type, bedrooms, school district, sewer/water type. Data is the annual NYS Real Property System roll export updated each September/October. ROLL_YR=2025 confirmed in live query results. Municipalities within Suffolk include Babylon, Brookhaven, East Hampton, Huntington, Islip, Riverhead, Shelter Island, Smithtown, Southampton, Southold \u2014 all accessible via the same COUNTY_NAME='Suffolk' filter."
5181
+ notes: "75+ fields confirmed. This is the same NYS Tax Parcels Public statewide endpoint used for New York County (Manhattan), filter by COUNTY_NAME='Suffolk' for Suffolk County. Suffolk is the most populous county on Long Island (~1.5M residents). SWIS_SBL_ID is the canonical parcel identifier (26-character SWIS + SBL concatenation); PRINT_KEY is the human-readable tax map reference (e.g. '1.-1-1'). PRIMARY_OWNER is the assessed owner. Note the NYC-area MAPPLUTO endpoint does NOT cover Suffolk. That endpoint is for the five NYC boroughs only. This statewide layer has 75+ attributes including assessed values, market values, year built, building style, heat/fuel type, bedrooms, school district, sewer/water type. Data is the annual NYS Real Property System roll export updated each September/October. ROLL_YR=2025 confirmed in live query results. Municipalities within Suffolk include Babylon, Brookhaven, East Hampton, Huntington, Islip, Riverhead, Shelter Island, Smithtown, Southampton, Southold, all accessible via the same COUNTY_NAME='Suffolk' filter."
4319
5182
  },
4320
5183
  {
4321
5184
  id: "ny-westchester",
@@ -4335,7 +5198,7 @@ var new_york_default = {
4335
5198
  supportsQuery: true,
4336
5199
  corsEnabled: null,
4337
5200
  searchFields: [
4338
- { name: "COUNTY_NAME", label: "County Name \u2014 filter with 'Westchester'", searchable: true },
5201
+ { name: "COUNTY_NAME", label: "County Name, filter with 'Westchester'", searchable: true },
4339
5202
  { name: "PRIMARY_OWNER", label: "Primary Owner Name", searchable: true },
4340
5203
  { name: "ADD_OWNER", label: "Additional Owner Name", searchable: true },
4341
5204
  { name: "PARCEL_ADDR", label: "Parcel Address", searchable: true },
@@ -4362,7 +5225,7 @@ var new_york_default = {
4362
5225
  url: "https://www.its.ny.gov/gis",
4363
5226
  email: null
4364
5227
  },
4365
- notes: "75+ fields confirmed. Same NYS Tax Parcels Public statewide endpoint as New York County (Manhattan) and Suffolk County \u2014 filter by COUNTY_NAME='Westchester'. Westchester is the most affluent large county in the lower Hudson Valley (~1M residents), and a high-search-intent county for public notice tools. PRIMARY_OWNER is the assessed owner name. Municipalities within Westchester accessible via this layer include Yonkers, White Plains, New Rochelle, Mount Vernon, Scarsdale, Ardsley, Tarrytown, Port Chester, Mamaroneck, and 35+ other cities/towns/villages \u2014 all filtered by COUNTY_NAME='Westchester'. Data is NYS RPS annual roll export (ROLL_YR=2025 confirmed in live query). The Westchester County GIS portal at gis.westchestergov.com offers a browser-based property viewer but does NOT expose a separate county-run public parcel REST endpoint for owner-name search; the NYS statewide service is the only public REST option. For both Suffolk and Westchester, always pair COUNTY_NAME with the owner query (as shown in sampleQuery) to avoid cross-county false matches in this multi-county statewide layer."
5228
+ notes: "75+ fields confirmed. Same NYS Tax Parcels Public statewide endpoint as New York County (Manhattan) and Suffolk County, filter by COUNTY_NAME='Westchester'. Westchester is the most affluent large county in the lower Hudson Valley (~1M residents), and a high-search-intent county for public notice tools. PRIMARY_OWNER is the assessed owner name. Municipalities within Westchester accessible via this layer include Yonkers, White Plains, New Rochelle, Mount Vernon, Scarsdale, Ardsley, Tarrytown, Port Chester, Mamaroneck, and 35+ other cities/towns/villages, all filtered by COUNTY_NAME='Westchester'. Data is NYS RPS annual roll export (ROLL_YR=2025 confirmed in live query). The Westchester County GIS portal at gis.westchestergov.com offers a browser-based property viewer but does NOT expose a separate county-run public parcel REST endpoint for owner-name search; the NYS statewide service is the only public REST option. For both Suffolk and Westchester, always pair COUNTY_NAME with the owner query (as shown in sampleQuery) to avoid cross-county false matches in this multi-county statewide layer."
4366
5229
  }
4367
5230
  ]
4368
5231
  };
@@ -4451,11 +5314,11 @@ var north_carolina_default = {
4451
5314
  }
4452
5315
  ],
4453
5316
  contact: {
4454
- department: "Mecklenburg County GIS \u2014 Geospatial Information Services (Charlotte-Mecklenburg joint GIS)",
5317
+ department: "Mecklenburg County GIS, Geospatial Information Services (Charlotte-Mecklenburg joint GIS)",
4455
5318
  url: "https://gis.mecknc.gov/",
4456
5319
  email: null
4457
5320
  },
4458
- notes: "Mecklenburg County (Charlotte, pop. 1.2M) GIS endpoint is hosted on Charlotte's ArcGIS server (gis.charlottenc.gov). 13 fields on this public layer: OBJECTID, MAP_BOOK, MAP_PAGE, MAP_BLOCK, LOT_NUM, NC_PIN, PID, PARCEL_TYPE, CONDO_TOWN_FLAG, Legal_From, Shape. NOTE: Owner name and address are NOT exposed on this public REST endpoint \u2014 the Charlotte/Mecklenburg POLARIS system provides owner-name lookups at polaris3g.mecklenburgcountync.gov but does not expose a public REST API. For parcel + owner data, Mecklenburg County's Geospatial Information Services (GIS) division provides full POLARIS data through the county open mapping site. This endpoint is geometry + PIN only."
5321
+ notes: "Mecklenburg County (Charlotte, pop. 1.2M) GIS endpoint is hosted on Charlotte's ArcGIS server (gis.charlottenc.gov). 13 fields on this public layer: OBJECTID, MAP_BOOK, MAP_PAGE, MAP_BLOCK, LOT_NUM, NC_PIN, PID, PARCEL_TYPE, CONDO_TOWN_FLAG, Legal_From, Shape. NOTE: Owner name and address are NOT exposed on this public REST endpoint. The Charlotte/Mecklenburg POLARIS system provides owner-name lookups at polaris3g.mecklenburgcountync.gov but does not expose a public REST API. For parcel + owner data, Mecklenburg County's Geospatial Information Services (GIS) division provides full POLARIS data through the county open mapping site. This endpoint is geometry + PIN only."
4459
5322
  },
4460
5323
  {
4461
5324
  id: "nc-forsyth",
@@ -4496,7 +5359,7 @@ var north_carolina_default = {
4496
5359
  }
4497
5360
  ],
4498
5361
  contact: {
4499
- department: "NC OneMap / NC Geographic Information Coordinating Council (GICC) \u2014 statewide parcel layer",
5362
+ department: "NC OneMap / NC Geographic Information Coordinating Council (GICC), statewide parcel layer",
4500
5363
  url: "https://www.nconemap.gov/pages/parcels",
4501
5364
  email: null
4502
5365
  },
@@ -4536,7 +5399,7 @@ var north_carolina_default = {
4536
5399
  }
4537
5400
  ],
4538
5401
  contact: {
4539
- department: "NC OneMap / NC Geographic Information Coordinating Council (GICC) \u2014 statewide parcel layer",
5402
+ department: "NC OneMap / NC Geographic Information Coordinating Council (GICC), statewide parcel layer",
4540
5403
  url: "https://www.nconemap.gov/pages/parcels",
4541
5404
  email: null
4542
5405
  },
@@ -4620,7 +5483,7 @@ var north_carolina_default = {
4620
5483
  }
4621
5484
  ],
4622
5485
  contact: {
4623
- department: "NC OneMap / NC Geographic Information Coordinating Council (GICC) \u2014 statewide parcel layer",
5486
+ department: "NC OneMap / NC Geographic Information Coordinating Council (GICC), statewide parcel layer",
4624
5487
  url: "https://www.nconemap.gov/pages/parcels",
4625
5488
  email: null
4626
5489
  },
@@ -4672,6 +5535,65 @@ var north_carolina_default = {
4672
5535
  ]
4673
5536
  };
4674
5537
 
5538
+ // data/north-dakota.json
5539
+ var north_dakota_default = {
5540
+ stateSlug: "north-dakota",
5541
+ stateName: "North Dakota",
5542
+ stateAbbrev: "ND",
5543
+ lastUpdated: "2026-06-20",
5544
+ counties: [
5545
+ {
5546
+ id: "nd-cass",
5547
+ state: "ND",
5548
+ stateName: "North Dakota",
5549
+ stateSlug: "north-dakota",
5550
+ county: "Cass",
5551
+ countySlug: "cass-county",
5552
+ countyFips: "38017",
5553
+ hasPublicRest: true,
5554
+ endpoints: [
5555
+ {
5556
+ url: "https://gisweb.casscountynd.gov/arcgis/rest/services/Public/CountyParcels/MapServer/0",
5557
+ serviceType: "MapServer",
5558
+ layerIndex: 0,
5559
+ layerName: "CountyParcels",
5560
+ supportsQuery: true,
5561
+ corsEnabled: null,
5562
+ searchFields: [
5563
+ { name: "GISPIN", label: "GIS Parcel ID", searchable: true },
5564
+ { name: "PIN", label: "Parcel Identification Number", searchable: true },
5565
+ { name: "DASHPIN", label: "Dash PIN", searchable: true },
5566
+ { name: "Name", label: "Owner Name", searchable: true },
5567
+ { name: "PropertyAddress", label: "Property Address", searchable: true },
5568
+ { name: "LMVENU", label: "Land Market Value (per unit)", searchable: false },
5569
+ { name: "VENUDESC", label: "Venue Description", searchable: false },
5570
+ { name: "Section", label: "Section", searchable: false },
5571
+ { name: "Lot", label: "Lot", searchable: false },
5572
+ { name: "CommRes", label: "Commercial/Residential flag", searchable: false },
5573
+ { name: "Exempt", label: "Exempt flag", searchable: false },
5574
+ { name: "ACRES", label: "Acres", searchable: false },
5575
+ { name: "LGDESC", label: "Legal Description", searchable: false },
5576
+ { name: "SchoolDistrict", label: "School District", searchable: false },
5577
+ { name: "FireDistrict", label: "Fire District", searchable: false }
5578
+ ],
5579
+ sampleQuery: "https://gisweb.casscountynd.gov/arcgis/rest/services/Public/CountyParcels/MapServer/0/query?where=UPPER(Name)+LIKE+UPPER('%25SMITH%25')&outFields=GISPIN,PIN,Name,PropertyAddress,SchoolDistrict&returnGeometry=false&f=json&resultRecordCount=10",
5580
+ license: "public",
5581
+ licenseUrl: "https://gisweb.casscountynd.gov/",
5582
+ status: "live",
5583
+ lastVerified: "2026-06-20",
5584
+ verifiedBy: "automated"
5585
+ }
5586
+ ],
5587
+ contact: {
5588
+ department: "Cass County GIS / Cass County Commission",
5589
+ url: "https://www.casscountynd.gov/county/depts/gis/Pages/default.aspx",
5590
+ email: null
5591
+ },
5592
+ notes: "Cass County ND (Fargo metro; county seat Fargo; FIPS 38017; most populous county in ND, pop. 193,000) provides parcel data via gisweb.casscountynd.gov. The Public/CountyParcels/MapServer/0 layer exposes 20 fields: OBJECTID, GISPIN (14-digit GIS parcel ID, e.g., '64160000340000'), DASHPIN, PIN, ALTPIN, LMVENU, VENUDESC, Name (owner name), Section, Lot, CommRes, Exempt, As400Acres, ACRES, LGDESC (legal description), PLATID, PropertyAddress, SchoolDistrict, FireDistrict. Owner search via UPPER(Name) LIKE returns full owner name strings. Verified 2026-06-20: SMITH returns Fargo-area addresses (e.g., GISPIN '01001000210000', owner 'DANIEL N & LORETTA K WENTZ' at 2315 UNIVERSITY DR N). Note: the Name field holds the full owner name as a single string. Cass County ND (FIPS 38017) must not be confused with Cass County MO, NE, IL, or TX."
5593
+ }
5594
+ ]
5595
+ };
5596
+
4675
5597
  // data/ohio.json
4676
5598
  var ohio_default = {
4677
5599
  stateSlug: "ohio",
@@ -4804,7 +5726,7 @@ var ohio_default = {
4804
5726
  url: "https://data-franklincova.opendata.arcgis.com/",
4805
5727
  email: null
4806
5728
  },
4807
- notes: "Franklin County, Ohio (Columbus metro, pop. 1.35M, county seat Columbus) is the most populous Ohio county. In Ohio, the county Auditor \u2014 not the Assessor \u2014 is the statutory data custodian for parcel records; the Franklin County Auditor's office publishes this GIS layer. 115+ fields confirmed including OWNERNME1/2/3, SITEADDRESS, PSTLADDRES, PSTLCITYSTZIP, CLASSCD/CLASSDSCRP, NBHDCD, CVTTXCD (tax district code), SCHLTXCD (school district), LNDVALUEBASE, BLDVALUEBASE, TOTVALUEBASE, SALEDATE, SALEPRICE, RESFLRAREA, RESYRBLT, RESSTRTYP, FLOORCOUNT, ROOMS, BATHS, HBATHS, BEDRMS, FIREPLC, AIRCOND, WALL, COND, GRADE, FLOOD, WATERSERV, SEWERSERV, OWNEROCCUPIED, RENTAL. Max record count 3000; owner query tested and confirmed returning real Columbus-area results. Parcel ID format: 'XXX-XXXXXX' (3-digit + 6-digit with hyphen). The service follows the ESRI Local Government Information Model (LGIM) parcel schema. Layer is updated Monday through Friday at 7:00 PM Eastern. Open-data downloads available at auditor-fca.opendata.arcgis.com. The Auditor's parcel viewer at property.franklincountyauditor.com is the browser-facing interface over the same data."
5729
+ notes: "Franklin County, Ohio (Columbus metro, pop. 1.35M, county seat Columbus) is the most populous Ohio county. In Ohio, the county Auditor, not the Assessor, is the statutory data custodian for parcel records; the Franklin County Auditor's office publishes this GIS layer. 115+ fields confirmed including OWNERNME1/2/3, SITEADDRESS, PSTLADDRES, PSTLCITYSTZIP, CLASSCD/CLASSDSCRP, NBHDCD, CVTTXCD (tax district code), SCHLTXCD (school district), LNDVALUEBASE, BLDVALUEBASE, TOTVALUEBASE, SALEDATE, SALEPRICE, RESFLRAREA, RESYRBLT, RESSTRTYP, FLOORCOUNT, ROOMS, BATHS, HBATHS, BEDRMS, FIREPLC, AIRCOND, WALL, COND, GRADE, FLOOD, WATERSERV, SEWERSERV, OWNEROCCUPIED, RENTAL. Max record count 3000; owner query tested and confirmed returning real Columbus-area results. Parcel ID format: 'XXX-XXXXXX' (3-digit + 6-digit with hyphen). The service follows the ESRI Local Government Information Model (LGIM) parcel schema. Layer is updated Monday through Friday at 7:00 PM Eastern. Open-data downloads available at auditor-fca.opendata.arcgis.com. The Auditor's parcel viewer at property.franklincountyauditor.com is the browser-facing interface over the same data."
4808
5730
  },
4809
5731
  {
4810
5732
  id: "oh-cuyahoga",
@@ -4849,7 +5771,7 @@ var ohio_default = {
4849
5771
  url: "https://fiscalhub.gis.cuyahogacounty.gov/",
4850
5772
  email: "gis@cuyahogacounty.us"
4851
5773
  },
4852
- notes: "80+ fields confirmed including parcel_owner, deeded_owner, grantor, grantee, transfer_date, sales_amount, par_addr_all, par_city, par_zip, tax_luc, tax_luc_description, zoning_code, zoning_use, property_class, certified_tax_land, certified_tax_building, certified_tax_total, total_acreage, total_square_ft, res_bldg_count, total_res_liv_area. Owner query tested and returning real results (par_addr_all includes city and state in one field). The MyPLACE service (WGS84 projection) is the public-facing layer backing the county's MyPlace property search portal. Layer 0 = Point Parcel, Layer 1 = Air Parcel, Layer 2 = the full polygon parcel layer. The earlier 'saledate' field was renamed 'transfer_date' in 2026 \u2014 joined record retains the same semantics."
5774
+ notes: "80+ fields confirmed including parcel_owner, deeded_owner, grantor, grantee, transfer_date, sales_amount, par_addr_all, par_city, par_zip, tax_luc, tax_luc_description, zoning_code, zoning_use, property_class, certified_tax_land, certified_tax_building, certified_tax_total, total_acreage, total_square_ft, res_bldg_count, total_res_liv_area. Owner query tested and returning real results (par_addr_all includes city and state in one field). The MyPLACE service (WGS84 projection) is the public-facing layer backing the county's MyPlace property search portal. Layer 0 = Point Parcel, Layer 1 = Air Parcel, Layer 2 = the full polygon parcel layer. The earlier 'saledate' field was renamed 'transfer_date' in 2026, joined record retains the same semantics."
4853
5775
  },
4854
5776
  {
4855
5777
  id: "oh-hamilton",
@@ -4891,7 +5813,7 @@ var ohio_default = {
4891
5813
  }
4892
5814
  ],
4893
5815
  contact: {
4894
- department: "CAGIS (Cincinnati Area Geographic Information System) \u2014 Hamilton County Auditor",
5816
+ department: "CAGIS (Cincinnati Area Geographic Information System), Hamilton County Auditor",
4895
5817
  url: "https://www.hamilton-co.org/auditor/maps",
4896
5818
  email: null
4897
5819
  },
@@ -4978,12 +5900,63 @@ var ohio_default = {
4978
5900
  ]
4979
5901
  };
4980
5902
 
5903
+ // data/oklahoma.json
5904
+ var oklahoma_default = {
5905
+ stateSlug: "oklahoma",
5906
+ stateName: "Oklahoma",
5907
+ stateAbbrev: "OK",
5908
+ lastUpdated: "2026-06-05",
5909
+ counties: [
5910
+ {
5911
+ id: "ok-oklahoma",
5912
+ state: "OK",
5913
+ stateName: "Oklahoma",
5914
+ stateSlug: "oklahoma",
5915
+ county: "Oklahoma",
5916
+ countySlug: "oklahoma-county",
5917
+ countyFips: "40109",
5918
+ hasPublicRest: true,
5919
+ endpoints: [
5920
+ {
5921
+ url: "https://services8.arcgis.com/euhkr1dAJeQBIjV0/arcgis/rest/services/TaxParcelsPublics_view/FeatureServer/0",
5922
+ serviceType: "FeatureServer",
5923
+ layerIndex: 0,
5924
+ layerName: "TaxParcelPublic",
5925
+ supportsQuery: true,
5926
+ corsEnabled: null,
5927
+ searchFields: [
5928
+ { name: "accountno", label: "Account Number (APN)", searchable: true },
5929
+ { name: "name1", label: "Owner Name (Primary)", searchable: true },
5930
+ { name: "name2", label: "Owner Name 2", searchable: true },
5931
+ { name: "name3", label: "Owner Name 3", searchable: true },
5932
+ { name: "location", label: "Property Address", searchable: true },
5933
+ { name: "locationcity", label: "Property City", searchable: true },
5934
+ { name: "mailingaddress1", label: "Mailing Address", searchable: true }
5935
+ ],
5936
+ sampleQuery: "https://services8.arcgis.com/euhkr1dAJeQBIjV0/arcgis/rest/services/TaxParcelsPublics_view/FeatureServer/0/query?where=UPPER(name1)+LIKE+UPPER('%25SMITH%25')&outFields=accountno,name1,name2,mailingaddress1,city,location,locationcity&returnGeometry=false&f=json&resultRecordCount=10",
5937
+ license: "public",
5938
+ licenseUrl: "https://ok-county-gis-hub-ok-co.hub.arcgis.com/",
5939
+ status: "live",
5940
+ lastVerified: "2026-06-05",
5941
+ verifiedBy: "automated"
5942
+ }
5943
+ ],
5944
+ contact: {
5945
+ department: "Oklahoma County GIS",
5946
+ url: "https://ok-county-gis-hub-ok-co.hub.arcgis.com/",
5947
+ email: null
5948
+ },
5949
+ notes: "Oklahoma County is Oklahoma's most populous county (pop. 810,000; county seat Oklahoma City). The TaxParcelsPublics_view FeatureServer is hosted on ArcGIS Online (services8.arcgis.com, org ID euhkr1dAJeQBIjV0) and published via the OK County GIS Hub at ok-county-gis-hub-ok-co.hub.arcgis.com. Live query confirmed 336,922 parcels and owner-name exposure. Key fields: accountno (R-prefixed account number, e.g. 'R189878000'), name1/name2/name3 (up to three owners), mailingaddress1, city (mailing city), location (combined property address when populated, e.g. '17622 N INDIAN MERIDIAN RD OKLAHOMA CITY'), locationcity (property city), propertyid (numeric internal ID), taxdistrict, taxdistrictname, currentmarket, currentassessed, currenttaxable, landvalue, legal (legal description), subname, lot, block, section, township, range, acreage. Note: location and locationcity fields may be null for some rural parcels, when null, use legal/section/township/range for location. The former county ArcGIS Server at oklahomacounty.geocortex.com is no longer reachable (DNS fails as of 2026-06); the ArcGIS Online hosted view is the current canonical public layer. Oklahoma County Assessor portal at assessor.oklahomacounty.org provides the full record with appeals and valuation history."
5950
+ }
5951
+ ]
5952
+ };
5953
+
4981
5954
  // data/oregon.json
4982
5955
  var oregon_default = {
4983
5956
  stateSlug: "oregon",
4984
5957
  stateName: "Oregon",
4985
5958
  stateAbbrev: "OR",
4986
- lastUpdated: "2026-05-15",
5959
+ lastUpdated: "2026-06-06",
4987
5960
  counties: [
4988
5961
  {
4989
5962
  id: "or-multnomah",
@@ -5015,7 +5988,7 @@ var oregon_default = {
5015
5988
  { name: "SITUS_CITY", label: "Situs City", searchable: true },
5016
5989
  { name: "SITUS_ZIP", label: "Situs ZIP", searchable: false },
5017
5990
  { name: "RMV_PROPER", label: "Real Market Value (Property)", searchable: false },
5018
- { name: "PROP_TYPE", label: "Property Type", searchable: false }
5991
+ { name: "PROPERTY_C", label: "Property Class", searchable: false }
5019
5992
  ],
5020
5993
  sampleQuery: "https://services3.arcgis.com/tNPgIZWOB0Efvm0g/ArcGIS/rest/services/Tax_Lots/FeatureServer/0/query?where=UPPER(MAILING_NA)+LIKE+UPPER('%25SMITH%25')&outFields=TLID,MAILING_NA,M_ADDRESS,SITUS_HOUS,SITUS_STRE,SITUS_CITY&returnGeometry=false&f=json&resultRecordCount=10",
5021
5994
  license: "public",
@@ -5026,11 +5999,11 @@ var oregon_default = {
5026
5999
  }
5027
6000
  ],
5028
6001
  contact: {
5029
- department: "Multnomah County Department of Assessment, Recording and Taxation \u2014 GIS",
6002
+ department: "Multnomah County Department of Assessment, Recording and Taxation, GIS",
5030
6003
  url: "https://gis-multco.opendata.arcgis.com/",
5031
6004
  email: null
5032
6005
  },
5033
- notes: "46 fields confirmed including TLID, GlobalID, StatedArea, ID, account_id, tax_status, map_tax, MAP, Taxlot, S_I_TYPE, SI_NUMBER, MAILING_NA, IN_CARE_OF, AGENT, M_ADDRESS, M_CITY, M_STATE, zip, YEAR, ma, sa, nh, RMV_PROPER, PROPERTY_C, CODE_AREA, SUM_OF_ACR, SUM_OF_SQF, SITUS_HOUS (house number), SITUS_STRE, SITUS_ST_1, SITUS_DIRE, SITUS_UNIT, SITUS_CITY, SITUS_STAT, SITUS_ZIP, SITUS_PRE_. Owner name search via UPPER() LIKE on MAILING_NA returns real results (e.g., 'SMITH TIMOTHY BLAIR & KAREN KAY'). Hosted on ArcGIS Online (services3.arcgis.com/tNPgIZWOB0Efvm0g). Parcel boundaries are approximated \u2014 not for determining legal property boundaries. This data is from Multnomah County Assessment, Recording and Taxation, covering Portland and all of Multnomah County (pop. 830,000). Capabilities: Query, Sync."
6006
+ notes: "46 fields confirmed including TLID, GlobalID, StatedArea, ID, account_id, tax_status, map_tax, MAP, Taxlot, S_I_TYPE, SI_NUMBER, MAILING_NA, IN_CARE_OF, AGENT, M_ADDRESS, M_CITY, M_STATE, zip, YEAR, ma, sa, nh, RMV_PROPER, PROPERTY_C, CODE_AREA, SUM_OF_ACR, SUM_OF_SQF, SITUS_HOUS (house number), SITUS_STRE, SITUS_ST_1, SITUS_DIRE, SITUS_UNIT, SITUS_CITY, SITUS_STAT, SITUS_ZIP, SITUS_PRE_. Owner name search via UPPER() LIKE on MAILING_NA returns real results (e.g., 'SMITH TIMOTHY BLAIR & KAREN KAY'). Hosted on ArcGIS Online (services3.arcgis.com/tNPgIZWOB0Efvm0g). Parcel boundaries are approximated, not for determining legal property boundaries. This data is from Multnomah County Assessment, Recording and Taxation, covering Portland and all of Multnomah County (pop. 830,000). Capabilities: Query, Sync."
5034
6007
  },
5035
6008
  {
5036
6009
  id: "or-lane",
@@ -5043,7 +6016,7 @@ var oregon_default = {
5043
6016
  hasPublicRest: true,
5044
6017
  endpoints: [
5045
6018
  {
5046
- url: "http://lcmaps.lanecounty.org/arcgis/rest/services/AT/AddressParcelSales/MapServer/2",
6019
+ url: "https://lcgispubags.lanecountyor.gov/arcgis/rest/services/LaneCountyMaps/AddressParcel/MapServer/2",
5047
6020
  serviceType: "MapServer",
5048
6021
  layerIndex: 2,
5049
6022
  layerName: "Parcels",
@@ -5058,28 +6031,22 @@ var oregon_default = {
5058
6031
  { name: "ADDR3", label: "Owner Address Line 3", searchable: true },
5059
6032
  { name: "OWNERCITY", label: "Owner City", searchable: false },
5060
6033
  { name: "OWNERPRVST", label: "Owner State", searchable: false },
5061
- { name: "OWNERZIP", label: "Owner ZIP", searchable: false },
5062
- { name: "SITUS", label: "Situs Address", searchable: true },
5063
- { name: "GEOCITY", label: "Geographic City", searchable: true },
5064
- { name: "MAPACRES", label: "Map Acreage", searchable: false },
5065
- { name: "RMVLND", label: "Real Market Value (Land)", searchable: false },
5066
- { name: "RMVIMP", label: "Real Market Value (Improvements)", searchable: false },
5067
- { name: "RMVTOTAL", label: "Real Market Value (Total)", searchable: false }
6034
+ { name: "OWNERZIP", label: "Owner ZIP", searchable: false }
5068
6035
  ],
5069
- sampleQuery: "http://lcmaps.lanecounty.org/arcgis/rest/services/AT/AddressParcelSales/MapServer/2/query?where=UPPER(OWNNAME)+LIKE+UPPER('%25SMITH%25')&outFields=RLID,MAPTAXLOT,OWNNAME,SITUS,GEOCITY,MAPACRES,RMVTOTAL&returnGeometry=false&f=json&resultRecordCount=10",
6036
+ sampleQuery: "https://lcgispubags.lanecountyor.gov/arcgis/rest/services/LaneCountyMaps/AddressParcel/MapServer/2/query?where=UPPER(OWNNAME)+LIKE+UPPER('%25SMITH%25')&outFields=RLID,MAPTAXLOT,OWNNAME,ADDR1&returnGeometry=false&f=json&resultRecordCount=10",
5070
6037
  license: "public",
5071
6038
  licenseUrl: "https://www.lanecounty.org/business/maps",
5072
6039
  status: "live",
5073
- lastVerified: "2026-05-15",
6040
+ lastVerified: "2026-06-06",
5074
6041
  verifiedBy: "manual"
5075
6042
  }
5076
6043
  ],
5077
6044
  contact: {
5078
- department: "Lane County Information Services \u2014 Maps & GIS",
6045
+ department: "Lane County Information Services, Maps & GIS",
5079
6046
  url: "https://www.lanecounty.org/business/maps",
5080
6047
  email: null
5081
6048
  },
5082
- notes: "24 fields confirmed including OBJECTID, RLID, PROPACCT, MAPTAXLOT, MAPNUMBER, TAXLOT, ACCTNO, OWNNAME, ADDR1, ADDR2, ADDR3, OWNERCITY, OWNERPRVST, OWNERZIP, OWNERCNTRY, MAPACRES, GEOCITY, UGB, AscendAcres, Shape_Length, Shape_Area, zoningdesc, plandesdesc. Owner name confirmed live: OWNNAME field returns real owner names (e.g., 'SMITH, BENJAMIN C 25%...'). This is Layer 2 (Parcels polygon) on the AddressParcelSales MapServer; Layer 0 is Site Address points; Layer 1 is recent sales. The base URL uses HTTP (not HTTPS) \u2014 the server redirects HTTPS to HTTP. RLID is the Regional Land Information Database identifier. Real Market Value fields are available (RMVLND, RMVIMP, RMVTOTAL). maxRecordCount=1000. Capabilities: Map, Query, Data."
6049
+ notes: "24 fields confirmed including OBJECTID, RLID, PROPACCT, MAPTAXLOT, MAPNUMBER, TAXLOT, ACCTNO, OWNNAME, ADDR1, ADDR2, ADDR3, OWNERCITY, OWNERPRVST, OWNERZIP, OWNERCNTRY, MAPACRES, GEOCITY, UGB, AscendAcres, Shape_Length, Shape_Area, zoningdesc, plandesdesc. Owner name confirmed live: OWNNAME field returns real owner names (e.g., 'SMITH, BENJAMIN C 25%...'). MIGRATED 2026-06-06: lcmaps.lanecounty.org was retired (HTTP 500) -- the service moved to lcgispubags.lanecountyor.gov LaneCountyMaps/AddressParcel/MapServer/2 over HTTPS (159,028 parcels; OWNNAME search re-verified live). Situs and market-value columns from the old layer are not yet confirmed on the new one -- searchFields trimmed to confirmed columns. RLID is the Regional Land Information Database identifier. Real Market Value fields are available (RMVLND, RMVIMP, RMVTOTAL). maxRecordCount=1000. Capabilities: Map, Query, Data."
5083
6050
  },
5084
6051
  {
5085
6052
  id: "or-marion",
@@ -5167,11 +6134,11 @@ var pennsylvania_default = {
5167
6134
  }
5168
6135
  ],
5169
6136
  contact: {
5170
- department: "Allegheny County Department of Information Technology \u2014 GIS Division",
6137
+ department: "Allegheny County Department of Information Technology, GIS Division",
5171
6138
  url: "https://openac-alcogis.opendata.arcgis.com/",
5172
6139
  email: "gis@alleghenycounty.us"
5173
6140
  },
5174
- notes: "Only 5 fields on the public Web_Parcels endpoint: OBJECTID, PIN, MAPBLOCKLOT, SHAPE, SHAPE.STArea(), SHAPE.STLength(). This is geometry + parcel ID only \u2014 owner name is NOT exposed on the public REST layer. The EGIS folder on gisdata.alleghenycounty.us contains only 4 services (Web_Parcels, Buildings, Municipalities, AC_AddressPointsWithLabels). Full owner/address data is accessible through the Allegheny County Real Estate portal at alleghenyco.us/property-assessment and the county's block-lot lookup at property.alleghenycounty.us \u2014 these are browser-only, not REST-queryable. The WPRDC open data portal at data.wprdc.org has property assessment data as a CSV/API download."
6141
+ notes: "Only 5 fields on the public Web_Parcels endpoint: OBJECTID, PIN, MAPBLOCKLOT, SHAPE, SHAPE.STArea(), SHAPE.STLength(). This is geometry + parcel ID only. Owner name is NOT exposed on the public REST layer. The EGIS folder on gisdata.alleghenycounty.us contains only 4 services (Web_Parcels, Buildings, Municipalities, AC_AddressPointsWithLabels). Full owner/address data is accessible through the Allegheny County Real Estate portal at alleghenyco.us/property-assessment and the county's block-lot lookup at property.alleghenycounty.us. These are browser-only, not REST-queryable. The WPRDC open data portal at data.wprdc.org has property assessment data as a CSV/API download."
5175
6142
  },
5176
6143
  {
5177
6144
  id: "pa-philadelphia",
@@ -5209,7 +6176,7 @@ var pennsylvania_default = {
5209
6176
  }
5210
6177
  ],
5211
6178
  contact: {
5212
- department: "City of Philadelphia \u2014 Office of Innovation and Technology (OIT) CityGeo / Philadelphia Water Department",
6179
+ department: "City of Philadelphia, Office of Innovation and Technology (OIT) CityGeo / Philadelphia Water Department",
5213
6180
  url: "https://data-phl.opendata.arcgis.com/",
5214
6181
  email: null
5215
6182
  },
@@ -5240,7 +6207,7 @@ var rhode_island_default = {
5240
6207
  url: "https://www.rigis.org/",
5241
6208
  email: null
5242
6209
  },
5243
- notes: "No public queryable REST endpoint found for Providence County parcel data. Rhode Island has no county government \u2014 GIS and parcel authority rests with individual municipalities. RIGIS (risegis.ri.gov) hosts only a MuniGIS_Resources MapServer that tracks metadata (last-updated status) per municipality, not actual parcel polygons. The state GIS server at gis.ri.gov/arcgis/rest/services/RIDOA/Muni_Parcel/MapServer was unreachable at time of research. Providence City has its own GIS portal (webgis.providenceri.gov, pvdgis.maps.arcgis.com) with parcel data, but the server was refusing connections in May 2026. Fallback: download shapefiles for individual RI cities and towns from RIGIS data distribution (rigis.org). Commercial options: Regrid covers RI with full parcel attribute data."
6210
+ notes: "No public queryable REST endpoint found for Providence County parcel data. Rhode Island has no county government, GIS and parcel authority rests with individual municipalities. RIGIS (risegis.ri.gov) hosts only a MuniGIS_Resources MapServer that tracks metadata (last-updated status) per municipality, not actual parcel polygons. The state GIS server at gis.ri.gov/arcgis/rest/services/RIDOA/Muni_Parcel/MapServer was unreachable at time of research. Providence City has its own GIS portal (webgis.providenceri.gov, pvdgis.maps.arcgis.com) with parcel data, but the server was refusing connections in May 2026. Fallback: download shapefiles for individual RI cities and towns from RIGIS data distribution (rigis.org). Commercial options: Regrid covers RI with full parcel attribute data."
5244
6211
  }
5245
6212
  ]
5246
6213
  };
@@ -5250,7 +6217,7 @@ var south_carolina_default = {
5250
6217
  stateSlug: "south-carolina",
5251
6218
  stateName: "South Carolina",
5252
6219
  stateAbbrev: "SC",
5253
- lastUpdated: "2026-05-15",
6220
+ lastUpdated: "2026-06-06",
5254
6221
  counties: [
5255
6222
  {
5256
6223
  id: "sc-greenville",
@@ -5298,7 +6265,7 @@ var south_carolina_default = {
5298
6265
  url: "https://www.gcgis.org/",
5299
6266
  email: "gis@greenvillecounty.org"
5300
6267
  },
5301
- notes: "Greenville County (pop. 530,000; seat: Greenville) Tax Parcel layer is within the Map_Layers_JS composite MapServer at layer index 52. 20 fields confirmed: PIN, OWNAM1/2, STREET, CITY, STATE, ZIP5, NAMECO, POWNNM, DEEDDATE, CUBOOK, CUPAGE, PLTBK1, PPAGE1, DIST, MKTAREA, JURIS, LANDUSE, DESCR, SUBDIV. Verified 2026-05-15: SMITH returns Greenville SC addresses (e.g., '124 MCDANIEL GREENE', '218 BUTLER AVE'). The same MapServer contains 95+ other layers (zoning, census, drainage, etc.) \u2014 layer 52 is specifically Tax Parcel. The GCGIS GreenvilleJS MapServer is the public-facing viewer service."
6268
+ notes: "Greenville County (pop. 530,000; seat: Greenville) Tax Parcel layer is within the Map_Layers_JS composite MapServer at layer index 52. 20 fields confirmed: PIN, OWNAM1/2, STREET, CITY, STATE, ZIP5, NAMECO, POWNNM, DEEDDATE, CUBOOK, CUPAGE, PLTBK1, PPAGE1, DIST, MKTAREA, JURIS, LANDUSE, DESCR, SUBDIV. Verified 2026-05-15: SMITH returns Greenville SC addresses (e.g., '124 MCDANIEL GREENE', '218 BUTLER AVE'). The same MapServer contains 95+ other layers (zoning, census, drainage, etc.). Layer 52 is specifically Tax Parcel. The GCGIS GreenvilleJS MapServer is the public-facing viewer service."
5302
6269
  },
5303
6270
  {
5304
6271
  id: "sc-charleston",
@@ -5311,31 +6278,30 @@ var south_carolina_default = {
5311
6278
  hasPublicRest: true,
5312
6279
  endpoints: [
5313
6280
  {
5314
- url: "https://gisccapps.charlestoncounty.org/arcgis/rest/services/GIS_VIEWER/Parcel_Search/MapServer/4",
6281
+ url: "https://gisccapps.charlestoncounty.org/arcgis/rest/services/GIS_VIEWER/New_Parcel_Search/MapServer/61",
5315
6282
  serviceType: "MapServer",
5316
- layerIndex: 4,
6283
+ layerIndex: 61,
5317
6284
  layerName: "Parcels",
5318
6285
  supportsQuery: true,
5319
6286
  corsEnabled: null,
5320
6287
  searchFields: [
5321
- { name: "PID", label: "Parcel ID (FEATURES.SDE.P_POLY_PARCEL.PID)", searchable: true },
5322
- { name: "GPIN", label: "GIS Parcel ID (FEATURES.SDE.P_POLY_PARCEL.GPIN)", searchable: true },
5323
- { name: "OWNER1", label: "Owner Name 1 (FEATURES.SDE.CAMA.OWNER1)", searchable: true },
5324
- { name: "OWNER2", label: "Owner Name 2 (FEATURES.SDE.CAMA.OWNER2)", searchable: false },
5325
- { name: "MAIL_ST_NAME", label: "Mailing Street Name (FEATURES.SDE.CAMA.MAIL_ST_NAME)", searchable: false },
5326
- { name: "MAIL_ST_NO", label: "Mailing Street Number (FEATURES.SDE.CAMA.MAIL_ST_NO)", searchable: false },
5327
- { name: "MAIL_CITY", label: "Mailing City (FEATURES.SDE.CAMA.MAIL_CITY)", searchable: false },
5328
- { name: "MAIL_STATE", label: "Mailing State (FEATURES.SDE.CAMA.MAIL_STATE)", searchable: false },
5329
- { name: "MAIL_ZIP", label: "Mailing ZIP (FEATURES.SDE.CAMA.MAIL_ZIP)", searchable: false },
5330
- { name: "TAX_DISTRICT", label: "Tax District (FEATURES.SDE.CAMA.TAX_DISTRICT)", searchable: false },
5331
- { name: "LEGAL_DESCR", label: "Legal Description (FEATURES.SDE.CAMA.LEGAL_DESCR)", searchable: false },
5332
- { name: "SUBDIVISION", label: "Subdivision (FEATURES.SDE.CAMA.SUBDIVISION)", searchable: false }
6288
+ { name: "PID", label: "Parcel ID", searchable: true },
6289
+ { name: "OWNER1", label: "Owner Name 1", searchable: true },
6290
+ { name: "OWNER2", label: "Owner Name 2", searchable: false },
6291
+ { name: "MAIL_ST_NAME", label: "Mailing Street Name", searchable: false },
6292
+ { name: "MAIL_ST_NO", label: "Mailing Street Number", searchable: false },
6293
+ { name: "MAIL_CITY", label: "Mailing City", searchable: false },
6294
+ { name: "MAIL_STATE", label: "Mailing State", searchable: false },
6295
+ { name: "MAIL_ZIP", label: "Mailing ZIP", searchable: false },
6296
+ { name: "TAX_DISTRICT", label: "Tax District", searchable: false },
6297
+ { name: "LEGAL_DESCR", label: "Legal Description", searchable: false },
6298
+ { name: "SUBDIVISION", label: "Subdivision", searchable: false }
5333
6299
  ],
5334
- sampleQuery: "https://gisccapps.charlestoncounty.org/arcgis/rest/services/GIS_VIEWER/Parcel_Search/MapServer/4/query?where=UPPER%28%22FEATURES.SDE.CAMA.OWNER1%22%29+LIKE+UPPER%28%27%25SMITH%25%27%29&outFields=FEATURES.SDE.P_POLY_PARCEL.PID%2CFEATURES.SDE.CAMA.OWNER1%2CFEATURES.SDE.CAMA.MAIL_ST_NAME%2CFEATURES.SDE.CAMA.MAIL_CITY&returnGeometry=false&f=json&resultRecordCount=10",
6300
+ sampleQuery: "https://gisccapps.charlestoncounty.org/arcgis/rest/services/GIS_VIEWER/New_Parcel_Search/MapServer/61/query?where=UPPER(OWNER1)+LIKE+UPPER(%27%25SMITH%25%27)&outFields=PID,OWNER1,OWNER2,MAIL_ST_NAME&returnGeometry=false&f=json&resultRecordCount=10",
5335
6301
  license: "public",
5336
6302
  licenseUrl: "https://charleston-county-gis-chascogis.hub.arcgis.com/",
5337
6303
  status: "live",
5338
- lastVerified: "2026-05-15",
6304
+ lastVerified: "2026-06-06",
5339
6305
  verifiedBy: "manual"
5340
6306
  }
5341
6307
  ],
@@ -5344,7 +6310,67 @@ var south_carolina_default = {
5344
6310
  url: "https://charleston-county-gis-chascogis.hub.arcgis.com/",
5345
6311
  email: null
5346
6312
  },
5347
- notes: 'Charleston County (pop. 430,000; includes Charleston, North Charleston, Mount Pleasant) Parcel_Search MapServer layer 4. This layer is a spatial join of parcel geometry (FEATURES.SDE.P_POLY_PARCEL) with CAMA assessor data (FEATURES.SDE.CAMA), so field names are fully qualified with schema prefix. 20 fields confirmed: PID, GPIN, ACRES_CAL, OWNER1/2, TAX_DISTRICT, CLASS_CODE, MAIL_ST_NO/ST_NAME/ST_TYPE, MAIL_2ND_ADDR/ADDT, MAIL_CITY/STATE/ZIP/COUNTRY, LEGAL_DESCR, SUBDIVISION. IMPORTANT: field names in WHERE clause must be double-quoted due to dot notation (e.g., UPPER("FEATURES.SDE.CAMA.OWNER1") LIKE ...). Verified 2026-05-15: SMITH returns Edisto Island and Spring City area addresses.'
6313
+ notes: 'Charleston County (pop. 430,000; includes Charleston, North Charleston, Mount Pleasant) Parcel_Search MapServer layer 4. This layer is a spatial join of parcel geometry (FEATURES.SDE.P_POLY_PARCEL) with CAMA assessor data (FEATURES.SDE.CAMA), so field names are fully qualified with schema prefix. 20 fields confirmed: PID, GPIN, ACRES_CAL, OWNER1/2, TAX_DISTRICT, CLASS_CODE, MAIL_ST_NO/ST_NAME/ST_TYPE, MAIL_2ND_ADDR/ADDT, MAIL_CITY/STATE/ZIP/COUNTRY, LEGAL_DESCR, SUBDIVISION. IMPORTANT: field names in WHERE clause must be double-quoted due to dot notation (e.g., UPPER("FEATURES.SDE.CAMA.OWNER1") LIKE ...). Verified 2026-05-15: SMITH returns Edisto Island and Spring City area addresses. MIGRATED 2026-06-06: GIS_VIEWER/Parcel_Search/MapServer/4 was retired (ArcGIS 404) -- parcels now at GIS_VIEWER/New_Parcel_Search/MapServer/61 (197,306 parcels; OWNER1 search re-verified live). Field names are unqualified on the new layer (PID, OWNER1, ...); the FEATURES.SDE.* prefixes no longer apply and GPIN is not in the new schema.'
6314
+ }
6315
+ ]
6316
+ };
6317
+
6318
+ // data/south-dakota.json
6319
+ var south_dakota_default = {
6320
+ stateSlug: "south-dakota",
6321
+ stateName: "South Dakota",
6322
+ stateAbbrev: "SD",
6323
+ lastUpdated: "2026-06-20",
6324
+ counties: [
6325
+ {
6326
+ id: "sd-minnehaha",
6327
+ state: "SD",
6328
+ stateName: "South Dakota",
6329
+ stateSlug: "south-dakota",
6330
+ county: "Minnehaha",
6331
+ countySlug: "minnehaha-county",
6332
+ countyFips: "46099",
6333
+ hasPublicRest: true,
6334
+ endpoints: [
6335
+ {
6336
+ url: "https://gis.minnehahacounty.org/minnemap/rest/services/Parcels/MapServer/0",
6337
+ serviceType: "MapServer",
6338
+ layerIndex: 0,
6339
+ layerName: "Parcels",
6340
+ supportsQuery: true,
6341
+ corsEnabled: null,
6342
+ searchFields: [
6343
+ { name: "TAG", label: "Parcel Tag (Parcel ID)", searchable: true },
6344
+ { name: "MRTNM1", label: "Owner Name 1", searchable: true },
6345
+ { name: "MRTNM2", label: "Owner Name 2", searchable: false },
6346
+ { name: "MRTCTY", label: "Owner City", searchable: false },
6347
+ { name: "MRTSTATE", label: "Owner State", searchable: false },
6348
+ { name: "MRTZPC", label: "Owner ZIP", searchable: false },
6349
+ { name: "FULL_ADDRESS", label: "Property Full Address", searchable: true },
6350
+ { name: "NWLOCN", label: "New Location (property street number)", searchable: false },
6351
+ { name: "NWPRED", label: "Street Pre-directional", searchable: false },
6352
+ { name: "NWLOCS", label: "Street Name", searchable: true },
6353
+ { name: "NWSTYP", label: "Street Type", searchable: false },
6354
+ { name: "MAP_ID", label: "Map ID", searchable: false },
6355
+ { name: "LOT", label: "Lot", searchable: false },
6356
+ { name: "BLOCK", label: "Block", searchable: false },
6357
+ { name: "TRACT", label: "Tract", searchable: false },
6358
+ { name: "SUBDIVISION", label: "Subdivision", searchable: false }
6359
+ ],
6360
+ sampleQuery: "https://gis.minnehahacounty.org/minnemap/rest/services/Parcels/MapServer/0/query?where=UPPER(MRTNM1)+LIKE+UPPER('%25SMITH%25')&outFields=TAG,MRTNM1,MRTNM2,MRTCTY,FULL_ADDRESS&returnGeometry=false&f=json&resultRecordCount=10",
6361
+ license: "public",
6362
+ licenseUrl: "https://gis.minnehahacounty.org/",
6363
+ status: "live",
6364
+ lastVerified: "2026-06-20",
6365
+ verifiedBy: "automated"
6366
+ }
6367
+ ],
6368
+ contact: {
6369
+ department: "Minnehaha County GIS / Minnehaha County Equalization",
6370
+ url: "https://www.minnehahacounty.org/dept/eq/eq.php",
6371
+ email: null
6372
+ },
6373
+ notes: "Minnehaha County SD (Sioux Falls metro; county seat Sioux Falls; FIPS 46099; most populous county in SD, pop. 210,000) provides parcel data via gis.minnehahacounty.org. The Parcels/MapServer/0 layer exposes 20 fields: OBJECTID, FULL_ADDRESS, TAG (parcel ID), MAP_ID, MRRDID, MRTNM1 (owner name 1), MRTNM2 (owner name 2), MRTCTY (owner city), MRTSTATE, MRTZPC (ZIP), MRTZPC2, NWLOCN, NWPRED, NWLOCS (street name), NWSTYP, NWPOSD, LOT, BLOCK, TRACT, SUBDIVISION. Owner search via UPPER(MRTNM1) LIKE on MRTNM1. To get both owners, also query MRTNM2. Verified 2026-06-20: SMITH query returns Sioux Falls addresses. Minnehaha County SD (FIPS 46099) must not be confused with Minnehaha County in any other state."
5348
6374
  }
5349
6375
  ]
5350
6376
  };
@@ -5354,7 +6380,7 @@ var tennessee_default = {
5354
6380
  stateSlug: "tennessee",
5355
6381
  stateName: "Tennessee",
5356
6382
  stateAbbrev: "TN",
5357
- lastUpdated: "2026-05-15",
6383
+ lastUpdated: "2026-06-06",
5358
6384
  counties: [
5359
6385
  {
5360
6386
  id: "tn-davidson",
@@ -5405,11 +6431,12 @@ var tennessee_default = {
5405
6431
  }
5406
6432
  ],
5407
6433
  contact: {
5408
- department: "Metro Nashville GIS \u2014 Planning Department",
6434
+ department: "Metro Nashville GIS, Planning Department",
5409
6435
  url: "https://maps.nashville.gov/",
5410
6436
  email: null
5411
6437
  },
5412
- notes: "57 fields confirmed including ParID, DateEst, IsActive, FeatureType, Tract, Council, TaxDist, ParType, Owner, OwnDate, SaleCode, SaleSrc, ValidSale, OwnInstr, OwnAddr1/2/3, OwnCity, OwnState, OwnCountry, OwnZip, PropAddr, PropHouse, PropStreet, PropSuite, PropCity, PropState, PropZip, LegalDesc, PropInstr, PropDate, Front, Side, IsRegular, LUCode, LUDesc, AssessDate, PropFraction, StatedArea, SalePrice, Acres, LandAppr, ImprAppr, TotlAppr, LandAssd, ImprAssd, TotlAssd, STANPAR, DeededAcreage, APN. Owner query tested and confirmed: returns real Nashville addresses (e.g., 'SMITH, BRADLEY N JR' at '8300 SAWYER BROWN RD A-304 NASHVILLE'). Davidson County is a consolidated city-county with Nashville as the metro seat (pop. 715,000). APN is the assessor parcel number; STANPAR is the state parcel number. A separate Parcels_SP (State Plane) service exists at the same path with different spatial reference."
6438
+ notes: "57 fields confirmed including ParID, DateEst, IsActive, FeatureType, Tract, Council, TaxDist, ParType, Owner, OwnDate, SaleCode, SaleSrc, ValidSale, OwnInstr, OwnAddr1/2/3, OwnCity, OwnState, OwnCountry, OwnZip, PropAddr, PropHouse, PropStreet, PropSuite, PropCity, PropState, PropZip, LegalDesc, PropInstr, PropDate, Front, Side, IsRegular, LUCode, LUDesc, AssessDate, PropFraction, StatedArea, SalePrice, Acres, LandAppr, ImprAppr, TotlAppr, LandAssd, ImprAssd, TotlAssd, STANPAR, DeededAcreage, APN. Owner query tested and confirmed: returns real Nashville addresses (e.g., 'SMITH, BRADLEY N JR' at '8300 SAWYER BROWN RD A-304 NASHVILLE'). Davidson County is a consolidated city-county with Nashville as the metro seat (pop. 715,000). APN is the assessor parcel number; STANPAR is the state parcel number. A separate Parcels_SP (State Plane) service exists at the same path with different spatial reference.",
6439
+ relatedPropertyCitySlug: "nashville"
5413
6440
  },
5414
6441
  {
5415
6442
  id: "tn-shelby",
@@ -5447,7 +6474,7 @@ var tennessee_default = {
5447
6474
  license: "public",
5448
6475
  licenseUrl: "https://www.shelbycountytn.gov/467/REGIS-Regional-GIS",
5449
6476
  status: "live",
5450
- lastVerified: "2026-05-15",
6477
+ lastVerified: "2026-06-06",
5451
6478
  verifiedBy: "manual"
5452
6479
  }
5453
6480
  ],
@@ -5456,7 +6483,7 @@ var tennessee_default = {
5456
6483
  url: "https://www.shelbycountytn.gov/467/REGIS-Regional-GIS",
5457
6484
  email: null
5458
6485
  },
5459
- notes: "Shelby County (Memphis and suburbs, pop. 934,000) hosts parcel data through ReGIS (Regional Geographic Information Systems), a multi-jurisdictional GIS consortium established by the Shelby County Commission in 2004. The CurrentParcels MapServer at scgis.shelbycountytn.gov exposes 47 confirmed fields. Parcel identifiers: PARCELID (primary display key) and PARID (the CAMA account ID used by the Shelby County Assessor of Property). Owner field is OWNER; OWNER_EXT holds overflow text. Mailing address is split across OWN_ADRNO, ADRPREDIR, ADRSTR, ADRSUF, ADRPOSTDIR for the street component, plus OWN_CITY, OWN_STATE, OWN_ZIP/ZIP4; also available concatenated as OWN_ADDR1/2/3. The MUNI field identifies the municipality -- Memphis, Bartlett, Collierville, Germantown, Lakeland, Millington, or blank for unincorporated Shelby County. That distinction carries real workflow consequences: Memphis's Division of Planning handles incorporated parcels, while the Shelby County Land Use Control Board handles unincorporated ones. Verified 2026-05-15: SMITH returns results from Germantown, Arlington, and unincorporated areas. Last countywide reappraisal was 2025; next scheduled 2029."
6486
+ notes: "Shelby County (Memphis and suburbs, pop. 934,000) hosts parcel data through ReGIS (Regional Geographic Information Systems), a multi-jurisdictional GIS consortium established by the Shelby County Commission in 2004. The CurrentParcels MapServer at scgis.shelbycountytn.gov exposes 47 confirmed fields. Parcel identifiers: PARCELID (primary display key) and PARID (the CAMA account ID used by the Shelby County Assessor of Property). Owner field is OWNER; OWNER_EXT holds overflow text. Mailing address is split across OWN_ADRNO, ADRPREDIR, ADRSTR, ADRSUF, ADRPOSTDIR for the street component, plus OWN_CITY, OWN_STATE, OWN_ZIP/ZIP4; also available concatenated as OWN_ADDR1/2/3. The MUNI field identifies the municipality -- Memphis, Bartlett, Collierville, Germantown, Lakeland, Millington, or blank for unincorporated Shelby County. That distinction carries real workflow consequences: Memphis's Division of Planning handles incorporated parcels, while the Shelby County Land Use Control Board handles unincorporated ones. Verified 2026-05-15: SMITH returns results from Germantown, Arlington, and unincorporated areas. Last countywide reappraisal was 2025; next scheduled 2029. LEGACY TLS (first documented 2026-06-06, confirmed 2026-06-27): scgis.shelbycountytn.gov requires legacy TLS renegotiation (UNSAFE_LEGACY_RENEGOTIATION). Modern runtimes (Node.js 18+, undici fetch, Python 3.10+ ssl, standard curl) reject the handshake; curl --legacy-server-connect or OpenSSL OP_LEGACY_SERVER_CONNECT succeeds. The endpoint itself is live (353,448 parcels). The atlas liveness check will always flag this endpoint FAIL because Node's native fetch rejects the TLS handshake. This is expected behavior, NOT a server outage. FIX NEEDED (flagged for lead): add a narrow per-host legacy-TLS fetch path in atlas-liveness-check.mjs and in the server-side parcel fetch for this specific host. Weakening TLS globally is not an option."
5460
6487
  },
5461
6488
  {
5462
6489
  id: "tn-hamilton",
@@ -5489,8 +6516,8 @@ var tennessee_default = {
5489
6516
  sampleQuery: "https://mapsdev.hamiltontn.gov/hcwa03/rest/services/Live_Parcels/MapServer/0/query?where=UPPER(OWNERNAME1)+LIKE+UPPER('%25SMITH%25')&outFields=PBA_NUM,OWNERNAME1,ADDRESS,GISLINK&returnGeometry=false&f=json&resultRecordCount=10",
5490
6517
  license: "public",
5491
6518
  licenseUrl: "https://gis.hamiltontn.gov/",
5492
- status: "live",
5493
- lastVerified: "2026-05-15",
6519
+ status: "unreachable",
6520
+ lastVerified: "2026-06-06",
5494
6521
  verifiedBy: "manual"
5495
6522
  }
5496
6523
  ],
@@ -5499,7 +6526,7 @@ var tennessee_default = {
5499
6526
  url: "https://gis.hamiltontn.gov/",
5500
6527
  email: null
5501
6528
  },
5502
- notes: "Hamilton County (Chattanooga, pop. 375,000) Live_Parcels layer \u2014 service name 'Live' indicates real-time feed from the assessor. Service is on mapsdev.hamiltontn.gov (hcwa03 subdirectory). 15 fields confirmed: OBJECTID, PARCEL_TYP, PBA_NUM, GISLINK, OWNERNAME1/2, STNUM, DIRPFX, STNAME, TYPESFX, ADDRESS, MAP, GROUP_, PARCEL. PBA_NUM is the full parcel book/account number (e.g., '033006 00302P000'); GISLINK is the trimmed parcel ID. Verified 2026-05-15: SMITH returns addresses like '16909 DAYTON PIKE', '703 GRAYSVILLE RD'. Note: distinct from Hamilton County OH (Cincinnati, FIPS 39061) in the atlas."
6529
+ notes: "Hamilton County (Chattanooga, pop. 375,000) Live_Parcels layer, service name 'Live' indicates real-time feed from the assessor. Service is on mapsdev.hamiltontn.gov (hcwa03 subdirectory). 15 fields confirmed: OBJECTID, PARCEL_TYP, PBA_NUM, GISLINK, OWNERNAME1/2, STNUM, DIRPFX, STNAME, TYPESFX, ADDRESS, MAP, GROUP_, PARCEL. PBA_NUM is the full parcel book/account number (e.g., '033006 00302P000'); GISLINK is the trimmed parcel ID. Verified 2026-05-15: SMITH returns addresses like '16909 DAYTON PIKE', '703 GRAYSVILLE RD'. Note: distinct from Hamilton County OH (Cincinnati, FIPS 39061) in the atlas. SERVICE RETIRED (verified 2026-06-06): Live_Parcels/MapServer was removed from mapsdev.hamiltontn.gov ('Could not find service'). No public REST replacement exists -- Live_RealProperty is a 155-record county-owned-property inventory, not a parcel layer, and assessor.hamiltontn.gov has no REST API. Status set to unreachable pending a county-side replacement."
5503
6530
  }
5504
6531
  ]
5505
6532
  };
@@ -5509,7 +6536,7 @@ var texas_default = {
5509
6536
  stateSlug: "texas",
5510
6537
  stateName: "Texas",
5511
6538
  stateAbbrev: "TX",
5512
- lastUpdated: "2026-05-14",
6539
+ lastUpdated: "2026-06-06",
5513
6540
  counties: [
5514
6541
  {
5515
6542
  id: "tx-harris",
@@ -5552,7 +6579,7 @@ var texas_default = {
5552
6579
  url: "https://geo-harriscounty.opendata.arcgis.com/",
5553
6580
  email: null
5554
6581
  },
5555
- notes: "Harris County, Texas (Houston metro, pop. 4.7M, county seat Houston) is the most populous Texas county and third-most populous in the US. The data authority is HCAD \u2014 Harris Central Appraisal District \u2014 which maintains property appraisal records independently of the county government. 62 fields confirmed, including HCAD_NUM (parcel ID), acct_num, owner_name_1/2/3 (up to three ownership slots with own_pct_1/2/3 percentage shares), site_str_num, site_str_name, site_city, site_zip, mail_addr_1/2/3, mail_city, mail_state, mail_zip, land_use, land_value, bld_value, total_appraised_val, new_owner_date, and yr_impr. Owner name is public under the Texas Public Information Act; Texas Tax Code \xA725.025 allows certain categories of persons (peace officers, judges, domestic violence victims, and others) to request suppression of their home address from appraisal district records. Owner-name LIKE query confirmed live. Max record count = 1000 per query. The HCAD open-data hub at geo-harriscounty.opendata.arcgis.com provides bulk downloads. A sibling service on the same server covers HCAD_MUD (Municipal Utility District) boundaries."
6582
+ notes: "Harris County, Texas (Houston metro, pop. 4.7M, county seat Houston) is the most populous Texas county and third-most populous in the US. The data authority is HCAD, Harris Central Appraisal District, which maintains property appraisal records independently of the county government. 62 fields confirmed, including HCAD_NUM (parcel ID), acct_num, owner_name_1/2/3 (up to three ownership slots with own_pct_1/2/3 percentage shares), site_str_num, site_str_name, site_city, site_zip, mail_addr_1/2/3, mail_city, mail_state, mail_zip, land_use, land_value, bld_value, total_appraised_val, new_owner_date, and yr_impr. Owner name is public under the Texas Public Information Act; Texas Tax Code \xA725.025 allows certain categories of persons (peace officers, judges, domestic violence victims, and others) to request suppression of their home address from appraisal district records. Owner-name LIKE query confirmed live. Max record count = 1000 per query. The HCAD open-data hub at geo-harriscounty.opendata.arcgis.com provides bulk downloads. A sibling service on the same server covers HCAD_MUD (Municipal Utility District) boundaries."
5556
6583
  },
5557
6584
  {
5558
6585
  id: "tx-travis",
@@ -5565,26 +6592,22 @@ var texas_default = {
5565
6592
  hasPublicRest: true,
5566
6593
  endpoints: [
5567
6594
  {
5568
- url: "https://gis.traviscountytx.gov/server1/rest/services/Boundaries_and_Jurisdictions/TCAD_public/MapServer/0",
5569
- serviceType: "MapServer",
6595
+ url: "https://services.arcgis.com/0L95CJ0VTaxqcmED/arcgis/rest/services/EXTERNAL_tcad_parcel/FeatureServer/0",
6596
+ serviceType: "FeatureServer",
5570
6597
  layerIndex: 0,
5571
6598
  layerName: "TCAD Parcels",
5572
6599
  supportsQuery: true,
5573
6600
  corsEnabled: null,
5574
6601
  searchFields: [
5575
6602
  { name: "PROP_ID", label: "Property ID", searchable: true },
5576
- { name: "geo_id", label: "Geo ID", searchable: true },
5577
- { name: "situs_address", label: "Situs Address (combined)", searchable: true },
5578
- { name: "situs_num", label: "Situs Street Number", searchable: true },
5579
- { name: "situs_street", label: "Situs Street Name", searchable: true },
5580
- { name: "situs_city", label: "Situs City", searchable: true },
5581
- { name: "situs_zip", label: "Situs ZIP", searchable: true }
6603
+ { name: "PID_10", label: "Parcel ID (10-char)", searchable: true },
6604
+ { name: "SITUS", label: "Situs Address", searchable: true }
5582
6605
  ],
5583
- sampleQuery: "https://gis.traviscountytx.gov/server1/rest/services/Boundaries_and_Jurisdictions/TCAD_public/MapServer/0/query?where=situs_address+LIKE+'%25CONGRESS%25'&outFields=PROP_ID,geo_id,situs_address,situs_city&returnGeometry=false&f=json&resultRecordCount=10",
6606
+ sampleQuery: "https://services.arcgis.com/0L95CJ0VTaxqcmED/arcgis/rest/services/EXTERNAL_tcad_parcel/FeatureServer/0/query?where=SITUS+LIKE+'%25CONGRESS%25'&outFields=PROP_ID,PID_10,SITUS&returnGeometry=false&f=json&resultRecordCount=10",
5584
6607
  license: "public",
5585
6608
  licenseUrl: "https://tnr-traviscountytx.opendata.arcgis.com/",
5586
6609
  status: "live",
5587
- lastVerified: "2026-05-11",
6610
+ lastVerified: "2026-06-20",
5588
6611
  verifiedBy: "manual"
5589
6612
  }
5590
6613
  ],
@@ -5593,7 +6616,13 @@ var texas_default = {
5593
6616
  url: "https://tnr-traviscountytx.opendata.arcgis.com/",
5594
6617
  email: null
5595
6618
  },
5596
- notes: "Travis County, Texas (Austin metro, pop. 1.3M, county seat Austin) is home to the state capital and the University of Texas at Austin. The REST layer is sourced from Travis Central Appraisal District (TCAD) and published by Travis County Transportation and Natural Resources (TNR) GIS. 20 fields confirmed: geometry, PROP_ID, geo_id, situs_address (combined), situs_num, situs_street, situs_city, situs_zip, and a handful of district fields \u2014 owner name is NOT included. Travis County publishes the parcel geometry and identifiers as a public planning layer while keeping ownership data behind TCAD's property search portal at tcad.org. For owner-name lookups, search tcad.org by address or property ID. Texas Tax Code \xA725.025 permits certain persons (peace officers, judges, domestic violence victims, and similar categories) to request that their home address be withheld from appraisal records; such records may appear with address fields redacted at TCAD's portal. A second endpoint at taxmaps.traviscountytx.gov/arcgis/rest/services/Parcels/MapServer did not respond in testing. Open-data hub: tnr-traviscountytx.opendata.arcgis.com."
6619
+ notes: `Travis County, Texas (Austin metro, pop. 1.3M, county seat Austin) is home to the state capital and the University of Texas at Austin. The REST layer ("TCAD Parcels", an ArcGIS Online hosted FeatureServer, ~386,682 parcels) is sourced from Travis Central Appraisal District (TCAD) and published through Travis County Transportation and Natural Resources (TNR) GIS. Searchable fields: PROP_ID (property ID), PID_10 (10-character parcel key), and SITUS (combined situs address). Owner name is NOT included. Travis County publishes the parcel geometry and identifiers as a public layer while keeping ownership data behind TCAD's property search portal at traviscad.org. For owner-name lookups, search traviscad.org by address or property ID. Texas Tax Code \xA725.025 permits certain persons (peace officers, judges, domestic violence victims, and similar categories) to request that their home address be withheld from appraisal records; such records may appear with address fields redacted at TCAD's portal. The county's former on-premise endpoint at gis.traviscountytx.gov/server1 went offline in 2026 (the ArcGIS host returned an HTTP 500 .NET host error); this hosted FeatureServer is the current public source. Open-data hub: tnr-traviscountytx.opendata.arcgis.com.`,
6620
+ ownerFieldNote: {
6621
+ body: "Owner name isn't in Travis County / TCAD's public REST layer. It exposes Property ID (PROP_ID), the 10-character parcel key, and situs address only. Search by property ID or address below, or look up the owner of record at the Travis Central Appraisal District.",
6622
+ source: { label: "Owner search at traviscad.org", url: "https://traviscad.org/propertysearch/" }
6623
+ },
6624
+ relatedZoningCitySlug: "austin",
6625
+ relatedPropertyCitySlug: "austin"
5597
6626
  },
5598
6627
  {
5599
6628
  id: "tx-tarrant",
@@ -5634,7 +6663,7 @@ var texas_default = {
5634
6663
  url: "https://gis-tad.opendata.arcgis.com/",
5635
6664
  email: null
5636
6665
  },
5637
- notes: "Tarrant County, Texas (Fort Worth / Arlington metro, pop. 2.1M, county seat Fort Worth) is the fourth-most populous Texas county. The data authority is TAD \u2014 Tarrant Appraisal District. 56 fields confirmed including TAXPIN, ACCOUNT, OWNER_NAME, SITUS_ADDR, OWNER_ADDR, OWNER_CITY, ZIPCODE, DEED_DATE, DEED_BOOK, DEED_PAGE, YEAR_BUILT, LIVING_ARE, BEDROOMS, BATHROOMS, SW_POOL, LAND_ACRES, APPRAISEDV, LAND_VALUE, IMPR_VALUE, and TOTAL_VALU. Owner-name query via UPPER() LIKE on OWNER_NAME returns real results. Texas Tax Code \xA725.025 (address-confidentiality program) permits certain protected persons \u2014 peace officers, judges, domestic violence victims, and similar categories \u2014 to request that their address be withheld from public appraisal records; records subject to \xA725.025 may not appear in REST query results or may appear with address fields suppressed. A sibling TADParcelsApp/MapServer/0 exists on the same server but carries only TAXPIN geometry \u2014 it is the display layer for TAD's parcel viewer and has no attribute data. TAD open-data hub: gis-tad.opendata.arcgis.com. Tarrant County open data: data-tarrantcounty.opendata.arcgis.com."
6666
+ notes: "Tarrant County, Texas (Fort Worth / Arlington metro, pop. 2.1M, county seat Fort Worth) is the fourth-most populous Texas county. The data authority is TAD, Tarrant Appraisal District. 56 fields confirmed including TAXPIN, ACCOUNT, OWNER_NAME, SITUS_ADDR, OWNER_ADDR, OWNER_CITY, ZIPCODE, DEED_DATE, DEED_BOOK, DEED_PAGE, YEAR_BUILT, LIVING_ARE, BEDROOMS, BATHROOMS, SW_POOL, LAND_ACRES, APPRAISEDV, LAND_VALUE, IMPR_VALUE, and TOTAL_VALU. Owner-name query via UPPER() LIKE on OWNER_NAME returns real results. Texas Tax Code \xA725.025 (address-confidentiality program) permits certain protected persons, peace officers, judges, domestic violence victims, and similar categories, to request that their address be withheld from public appraisal records; records subject to \xA725.025 may not appear in REST query results or may appear with address fields suppressed. A sibling TADParcelsApp/MapServer/0 exists on the same server but carries only TAXPIN geometry. It is the display layer for TAD's parcel viewer and has no attribute data. TAD open-data hub: gis-tad.opendata.arcgis.com. Tarrant County open data: data-tarrantcounty.opendata.arcgis.com."
5638
6667
  },
5639
6668
  {
5640
6669
  id: "tx-dallas",
@@ -5682,7 +6711,12 @@ var texas_default = {
5682
6711
  url: "https://www.dallascad.org/",
5683
6712
  email: null
5684
6713
  },
5685
- notes: "41 fields confirmed including ACCT (17-digit DCAD account number), TAXPANAME1/2 (taxpayer names), TAXPAADD1-4, TAXPACITY, TAXPASTA, TAXPAZIP, ST_NUM, ST_NAME, ST_TYPE, ST_DIR, CITY, COUNTY, SCHOOL, SPTBCODE (special purpose district), PROP_CL, BLDG_CL, LEGAL_1-5, MAPSCO_GR, TOTEXEMPT, BUSNAME, PROPNAM, ResCom, APPRAISALYEAR. Owner search uses TAXPANAME1 (the taxpayer of record). APPRAISALYEAR in live records reads 2019 \u2014 this is the snapshot vintage of the City of Dallas GIS's DallasTaxParcels layer, which sources from DCAD annual export. The authoritative real-time DCAD parcel lookup is at dcad.org; the gis.dallascounty.org REST server does NOT expose a public parcel service (only SampleWorldCities and CommissionerDistricts). This layer covers all of Dallas County, not just the City of Dallas city limits \u2014 CITY field contains the incorporated municipality (Dallas, Rowlett, Garland, Irving, etc.). The COUNTY field confirms 'DALLAS COUNTY' for all records. Texas Tax Code \xA725.025 (address-confidentiality program for protected persons \u2014 peace officers, judges, victims of family violence, etc.) may suppress some owner names in a future data refresh; query TAXPANAME2 as fallback. maxRecordCount=1000."
6714
+ notes: "41 fields confirmed including ACCT (17-digit DCAD account number), TAXPANAME1/2 (taxpayer names), TAXPAADD1-4, TAXPACITY, TAXPASTA, TAXPAZIP, ST_NUM, ST_NAME, ST_TYPE, ST_DIR, CITY, COUNTY, SCHOOL, SPTBCODE (special purpose district), PROP_CL, BLDG_CL, LEGAL_1-5, MAPSCO_GR, TOTEXEMPT, BUSNAME, PROPNAM, ResCom, APPRAISALYEAR. Owner search uses TAXPANAME1 (the taxpayer of record). APPRAISALYEAR in live records reads 2019. This is the snapshot vintage of the City of Dallas GIS's DallasTaxParcels layer, which sources from DCAD annual export. The authoritative real-time DCAD parcel lookup is at dcad.org; the gis.dallascounty.org REST server does NOT expose a public parcel service (only SampleWorldCities and CommissionerDistricts). This layer covers all of Dallas County, not just the City of Dallas city limits. CITY field contains the incorporated municipality (Dallas, Rowlett, Garland, Irving, etc.). The COUNTY field confirms 'DALLAS COUNTY' for all records. Texas Tax Code \xA725.025 (address-confidentiality program for protected persons, peace officers, judges, victims of family violence, etc.) may suppress some owner names in a future data refresh; query TAXPANAME2 as fallback. maxRecordCount=1000.",
6715
+ dataVintage: {
6716
+ body: "This layer is a DCAD annual-export snapshot, its APPRAISALYEAR field reads 2019. Account numbers, owner names, and addresses still locate a parcel, but for the current owner of record and 2025 appraised value, use DCAD's live records. It covers every incorporated city in Dallas County via the CITY field (Dallas, Garland, Irving, Rowlett, and the rest), not just the City of Dallas.",
6717
+ source: { label: "Current records at dallascad.org", url: "https://www.dallascad.org/" }
6718
+ },
6719
+ relatedPropertyCitySlug: "dallas"
5686
6720
  },
5687
6721
  {
5688
6722
  id: "tx-bexar",
@@ -5727,11 +6761,11 @@ var texas_default = {
5727
6761
  }
5728
6762
  ],
5729
6763
  contact: {
5730
- department: "Bexar County Information Technology \u2014 GIS Division / Bexar County Appraisal District (BCAD)",
6764
+ department: "Bexar County Information Technology, GIS Division / Bexar County Appraisal District (BCAD)",
5731
6765
  url: "https://www.bexar.org/2720/GIS-Data",
5732
6766
  email: null
5733
6767
  },
5734
- notes: "39 fields confirmed including PropID (numeric parcel ID), AcctNumb (BCAD formatted account number, e.g. '04126-236-0090'), Owner, Situs (situs address), AddrLn1/2/3, AddrCity, AddrSt, Country, Zip, Zip4, DBA, LglDesc, LandVal, ImprVal, TotVal, Nbhd (neighborhood code), GBA, TOT_GBA, YrBlt, Stories, NumRooms, Houses, Detached, State_cd, LglAcres, Acres, TaxUnits, Exempts, IS_UDI, UDIPARNT, Roll, SWP, PropUse. Owner LIKE search (including UPPER()) returns real results. The service description notes the data was sourced from BCAD FTP as of October 2022 and was last updated October 2021 \u2014 this is a periodic export, not a live feed. The current version is ArcGIS Server 11.3. The supportsQuery field shows null in layer-level metadata (common with this ArcGIS version); the service capabilities string 'Map,Query,Data' confirms query support. maps.bexar.org is the authoritative Bexar County GIS host; gis.bexar.org NXDOMAINs. BCAD's own server (bcad.org) does not expose a public REST parcel endpoint. maxRecordCount=1000. Texas Tax Code \xA725.025 (address-confidentiality program for protected persons) may suppress certain owner names."
6768
+ notes: "39 fields confirmed including PropID (numeric parcel ID), AcctNumb (BCAD formatted account number, e.g. '04126-236-0090'), Owner, Situs (situs address), AddrLn1/2/3, AddrCity, AddrSt, Country, Zip, Zip4, DBA, LglDesc, LandVal, ImprVal, TotVal, Nbhd (neighborhood code), GBA, TOT_GBA, YrBlt, Stories, NumRooms, Houses, Detached, State_cd, LglAcres, Acres, TaxUnits, Exempts, IS_UDI, UDIPARNT, Roll, SWP, PropUse. Owner LIKE search (including UPPER()) returns real results. The service description notes the data was sourced from BCAD FTP as of October 2022 and was last updated October 2021. This is a periodic export, not a live feed. The current version is ArcGIS Server 11.3. The supportsQuery field shows null in layer-level metadata (common with this ArcGIS version); the service capabilities string 'Map,Query,Data' confirms query support. maps.bexar.org is the authoritative Bexar County GIS host; gis.bexar.org NXDOMAINs. BCAD's own server (bcad.org) does not expose a public REST parcel endpoint. maxRecordCount=1000. Texas Tax Code \xA725.025 (address-confidentiality program for protected persons) may suppress certain owner names."
5735
6769
  },
5736
6770
  {
5737
6771
  id: "tx-collin",
@@ -5769,7 +6803,7 @@ var texas_default = {
5769
6803
  url: "https://www.collincad.org/",
5770
6804
  email: null
5771
6805
  },
5772
- notes: "Collin County, Texas (Plano / Frisco / McKinney, pop. ~1.1M \u2014 among the fastest-growing US counties) publishes Collin Central Appraisal District (CCAD) parcels through a City of Allen ArcGIS MapServer. Owner search uses the joined field GIS_DBO_AD_Entity_file_as_name; the situs (site) address is GIS_DBO_AD_Entity_situs_display; the parcel key is GIS_DBO_Parcel_PROP_ID. The GIS_DBO_ table-join prefixes must be used verbatim in WHERE clauses. Owner LIKE query confirmed live 2026-05-30. Texas Tax Code \xA725.025 lets protected persons (peace officers, judges, family-violence victims) suppress owner/address records."
6806
+ notes: "Collin County, Texas (Plano / Frisco / McKinney, pop. ~1.1M, among the fastest-growing US counties) publishes Collin Central Appraisal District (CCAD) parcels through a City of Allen ArcGIS MapServer. Owner search uses the joined field GIS_DBO_AD_Entity_file_as_name; the situs (site) address is GIS_DBO_AD_Entity_situs_display; the parcel key is GIS_DBO_Parcel_PROP_ID. The GIS_DBO_ table-join prefixes must be used verbatim in WHERE clauses. Owner LIKE query confirmed live 2026-05-30. Texas Tax Code \xA725.025 lets protected persons (peace officers, judges, family-violence victims) suppress owner/address records."
5773
6807
  },
5774
6808
  {
5775
6809
  id: "tx-denton",
@@ -5807,7 +6841,7 @@ var texas_default = {
5807
6841
  url: "https://gis.dentoncounty.gov/",
5808
6842
  email: null
5809
6843
  },
5810
- notes: "Denton County, Texas (north Dallas\u2013Fort Worth metroplex \u2014 Frisco, Flower Mound, Lewisville, pop. ~900K) serves parcels via a Denton County GIS MapServer. Owner search uses OWNER_NAME; the combined site address is SITUS; CITY holds the municipality; the appraisal-district identifier is prop_id. Owner LIKE query confirmed live 2026-05-30. Texas Tax Code \xA725.025 confidentiality provisions apply to protected persons."
6844
+ notes: "Denton County, Texas (north Dallas\u2013Fort Worth metroplex, Frisco, Flower Mound, Lewisville, pop. ~900K) serves parcels via a Denton County GIS MapServer. Owner search uses OWNER_NAME; the combined site address is SITUS; CITY holds the municipality; the appraisal-district identifier is prop_id. Owner LIKE query confirmed live 2026-05-30. Texas Tax Code \xA725.025 confidentiality provisions apply to protected persons."
5811
6845
  },
5812
6846
  {
5813
6847
  id: "tx-el-paso",
@@ -5857,25 +6891,25 @@ var texas_default = {
5857
6891
  hasPublicRest: true,
5858
6892
  endpoints: [
5859
6893
  {
5860
- url: "https://gisweb.fortbendcountytx.gov/arcgis/rest/services/General/Parcels/MapServer/0",
5861
- serviceType: "MapServer",
5862
- layerIndex: 0,
6894
+ url: "https://gisportal.fortbendcountytx.gov/arcgis/rest/services/InteractiveMap/Parcels_Public/FeatureServer/1",
6895
+ serviceType: "FeatureServer",
6896
+ layerIndex: 1,
5863
6897
  layerName: "Parcels",
5864
6898
  supportsQuery: true,
5865
6899
  corsEnabled: null,
5866
6900
  searchFields: [
5867
- { name: "CAD_Reference_Number", label: "CAD Reference Number (R-number)", searchable: true },
6901
+ { name: "CADReferenceNumber", label: "CAD Reference Number (R-number)", searchable: true },
5868
6902
  { name: "PropertyNumber", label: "Property Number", searchable: true },
5869
6903
  { name: "OwnerName", label: "Owner Name", searchable: true },
5870
6904
  { name: "Situs", label: "Situs Address", searchable: true },
5871
6905
  { name: "OwnerAddress1", label: "Owner Mailing Address", searchable: false },
5872
6906
  { name: "OwnerCity", label: "Owner City", searchable: false }
5873
6907
  ],
5874
- sampleQuery: "https://gisweb.fortbendcountytx.gov/arcgis/rest/services/General/Parcels/MapServer/0/query?where=UPPER(OwnerName)%20LIKE%20UPPER('%25SMITH%25')&outFields=CAD_Reference_Number,OwnerName,Situs&returnGeometry=false&f=json&resultRecordCount=10",
6908
+ sampleQuery: "https://gisportal.fortbendcountytx.gov/arcgis/rest/services/InteractiveMap/Parcels_Public/FeatureServer/1/query?where=UPPER(OwnerName)%20LIKE%20UPPER('%25SMITH%25')&outFields=CADReferenceNumber,OwnerName,Situs&returnGeometry=false&f=json&resultRecordCount=10",
5875
6909
  license: "public",
5876
6910
  licenseUrl: "https://fbcad-open-data-hub-fortbend.hub.arcgis.com/",
5877
6911
  status: "live",
5878
- lastVerified: "2026-05-30",
6912
+ lastVerified: "2026-06-06",
5879
6913
  verifiedBy: "manual"
5880
6914
  }
5881
6915
  ],
@@ -5884,7 +6918,7 @@ var texas_default = {
5884
6918
  url: "https://www.fbcad.org/",
5885
6919
  email: null
5886
6920
  },
5887
- notes: "Fort Bend County, Texas (Katy / Sugar Land / Missouri City, southwest Houston metro, pop. ~880K) serves parcels from a Fort Bend County GIS MapServer sourced from Fort Bend Central Appraisal District (FBCAD). Owner name is OwnerName (the layer display field); owner mailing is OwnerAddress1/2/3 with OwnerCity/OwnerState/OwnerZip; the site address is Situs; identifiers are CAD_Reference_Number (R-number, e.g. R328356) and PropertyNumber. Owner search uses UPPER(OwnerName) LIKE. Verified live 2026-05-30 (OwnerName = Shimmel John). Under Texas Tax Code \xA725.025, protected persons (peace officers, judges, family-violence victims) may have their owner/address records withheld."
6921
+ notes: "Fort Bend County, Texas (Katy / Sugar Land / Missouri City, southwest Houston metro, pop. ~880K) serves parcels from a Fort Bend County GIS MapServer sourced from Fort Bend Central Appraisal District (FBCAD). Owner name is OwnerName (the layer display field); owner mailing is OwnerAddress1/2/3 with OwnerCity/OwnerState/OwnerZip; the site address is Situs; identifiers are CAD_Reference_Number (R-number, e.g. R328356) and PropertyNumber. Owner search uses UPPER(OwnerName) LIKE. Verified live 2026-05-30 (OwnerName = Shimmel John). Under Texas Tax Code \xA725.025, protected persons (peace officers, judges, family-violence victims) may have their owner/address records withheld. MIGRATED 2026-06-06: gisweb.fortbendcountytx.gov was decommissioned (Cloudflare 522) -- the public service moved to gisportal.fortbendcountytx.gov InteractiveMap/Parcels_Public/FeatureServer/1 (ArcGIS 11.3, 359,954 parcels; OwnerName search re-verified live). Field names dropped underscores (CAD_Reference_Number is now CADReferenceNumber)."
5888
6922
  },
5889
6923
  {
5890
6924
  id: "tx-williamson",
@@ -5979,7 +7013,7 @@ var utah_default = {
5979
7013
  url: "https://gis.utah.gov/data/cadastre/parcels/",
5980
7014
  email: null
5981
7015
  },
5982
- notes: "30 fields confirmed including PARCEL_ID, COUNTY_NAME, COUNTY_ID, ASSESSOR_SRC, BOUNDARY_SRC, CURRENT_ASOF, PARCEL_ADD, PARCEL_CITY, TAXEXEMPT_TYPE, TAX_DISTRICT, TOTAL_MKT_VALUE, LAND_MKT_VALUE, PARCEL_ACRES, PROP_CLASS, PRIMARY_RES, HOUSE_CNT, SUBDIV_NAME, BLDG_SQFT, FLOORS_CNT, BUILT_YR, EFFBUILT_YR, CONST_MATERIAL, PROP_TYPE. Query confirmed: returns real Salt Lake City addresses with market values. NOTE: Owner name is NOT included in this public LIR (Land Information Record) layer \u2014 owner data is available through the Salt Lake County Assessor's Parcel Viewer at apps.saltlakecounty.gov/assessor/new/ParcelViewer/. PARCEL_ID is the 14-digit serial number. This dataset is maintained by UGRC (Utah Geospatial Resource Center) in coordination with the Salt Lake County Assessor; data is updated monthly. A basic geometry-only version (Parcels_SaltLake) also exists on the same service with 17 fields and no value data."
7016
+ notes: "30 fields confirmed including PARCEL_ID, COUNTY_NAME, COUNTY_ID, ASSESSOR_SRC, BOUNDARY_SRC, CURRENT_ASOF, PARCEL_ADD, PARCEL_CITY, TAXEXEMPT_TYPE, TAX_DISTRICT, TOTAL_MKT_VALUE, LAND_MKT_VALUE, PARCEL_ACRES, PROP_CLASS, PRIMARY_RES, HOUSE_CNT, SUBDIV_NAME, BLDG_SQFT, FLOORS_CNT, BUILT_YR, EFFBUILT_YR, CONST_MATERIAL, PROP_TYPE. Query confirmed: returns real Salt Lake City addresses with market values. NOTE: Owner name is NOT included in this public LIR (Land Information Record) layer. Owner data is available through the Salt Lake County Assessor's Parcel Viewer at apps.saltlakecounty.gov/assessor/new/ParcelViewer/. PARCEL_ID is the 14-digit serial number. This dataset is maintained by UGRC (Utah Geospatial Resource Center) in coordination with the Salt Lake County Assessor; data is updated monthly. A basic geometry-only version (Parcels_SaltLake) also exists on the same service with 17 fields and no value data."
5983
7017
  },
5984
7018
  {
5985
7019
  id: "ut-davis",
@@ -6025,7 +7059,7 @@ var utah_default = {
6025
7059
  url: "https://gis.utah.gov/data/cadastre/parcels/",
6026
7060
  email: null
6027
7061
  },
6028
- notes: "Davis County (Salt Lake metro north, pop. 365,000, county seat Farmington) includes Bountiful, Layton, Clearfield, Kaysville, and Hill Air Force Base. This layer follows the Utah Geospatial Resource Center (UGRC) standardized Land Information Record (LIR) schema, established under HB113 (2005) which directed UGRC to aggregate county assessor data into a common statewide format. 29 fields confirmed: COUNTY_NAME, COUNTY_ID, ASSESSOR_SRC, BOUNDARY_SRC, DISCLAIMER, CURRENT_ASOF (data currency date), PARCEL_ID (14-digit serial number), SERIAL_NUM, PARCEL_ADD, PARCEL_CITY, TAXEXEMPT_TYPE, TAX_DISTRICT, TOTAL_MKT_VALUE, LAND_MKT_VALUE, PARCEL_ACRES, PROP_CLASS, PRIMARY_RES, HOUSE_CNT, SUBDIV_NAME, BLDG_SQFT, BLDG_SQFT_INFO, FLOORS_CNT, FLOORS_INFO, BUILT_YR, EFFBUILT_YR, CONST_MATERIAL, Shape__Area, Shape__Length. Owner name is NOT included in any UGRC LIR layer \u2014 county assessors provide annual tax assessment data voluntarily to UGRC, but ownership names are not part of the agreed-upon LIR schema. For owner lookup, use the Davis County Assessor's property search at assessor.co.davis.ut.us. Endpoint hosted on ArcGIS Online (services1.arcgis.com/99lidPhWCzftIe9K). maxRecordCount=2000."
7062
+ notes: "Davis County (Salt Lake metro north, pop. 365,000, county seat Farmington) includes Bountiful, Layton, Clearfield, Kaysville, and Hill Air Force Base. This layer follows the Utah Geospatial Resource Center (UGRC) standardized Land Information Record (LIR) schema, established under HB113 (2005) which directed UGRC to aggregate county assessor data into a common statewide format. 29 fields confirmed: COUNTY_NAME, COUNTY_ID, ASSESSOR_SRC, BOUNDARY_SRC, DISCLAIMER, CURRENT_ASOF (data currency date), PARCEL_ID (14-digit serial number), SERIAL_NUM, PARCEL_ADD, PARCEL_CITY, TAXEXEMPT_TYPE, TAX_DISTRICT, TOTAL_MKT_VALUE, LAND_MKT_VALUE, PARCEL_ACRES, PROP_CLASS, PRIMARY_RES, HOUSE_CNT, SUBDIV_NAME, BLDG_SQFT, BLDG_SQFT_INFO, FLOORS_CNT, FLOORS_INFO, BUILT_YR, EFFBUILT_YR, CONST_MATERIAL, Shape__Area, Shape__Length. Owner name is NOT included in any UGRC LIR layer, county assessors provide annual tax assessment data voluntarily to UGRC, but ownership names are not part of the agreed-upon LIR schema. For owner lookup, use the Davis County Assessor's property search at assessor.co.davis.ut.us. Endpoint hosted on ArcGIS Online (services1.arcgis.com/99lidPhWCzftIe9K). maxRecordCount=2000."
6029
7063
  },
6030
7064
  {
6031
7065
  id: "ut-utah",
@@ -6071,7 +7105,7 @@ var utah_default = {
6071
7105
  url: "https://gis.utah.gov/data/cadastre/parcels/",
6072
7106
  email: null
6073
7107
  },
6074
- notes: "Utah County (pop. 660,000, county seat Provo) is the second-most populous Utah county and should not be confused with the state of Utah itself. It contains Provo, Orem, American Fork, Springville, Spanish Fork, Payson, and the Brigham Young University campus. This layer follows the same UGRC LIR schema as all Utah county LIR layers (established under HB113, 2005). 29 fields confirmed: same structure as Salt Lake and Davis LIR layers \u2014 PARCEL_ID (14-digit serial number), PARCEL_ADD, PARCEL_CITY, CURRENT_ASOF (data currency date), TOTAL_MKT_VALUE, LAND_MKT_VALUE, PARCEL_ACRES, PROP_CLASS, PRIMARY_RES, HOUSE_CNT, SUBDIV_NAME, BLDG_SQFT, FLOORS_CNT, BUILT_YR, EFFBUILT_YR, CONST_MATERIAL, TAX_DISTRICT, TAXEXEMPT_TYPE, and boundary/source metadata fields. Owner name is NOT included \u2014 this is an intentional exclusion across all UGRC LIR layers, not a per-county decision. For ownership data, use the Utah County Assessor's property search at assessor.utahcounty.gov. Endpoint hosted on ArcGIS Online (services1.arcgis.com/99lidPhWCzftIe9K). Capabilities: Query, Extract. maxRecordCount=2000."
7108
+ notes: "Utah County (pop. 660,000, county seat Provo) is the second-most populous Utah county and should not be confused with the state of Utah itself. It contains Provo, Orem, American Fork, Springville, Spanish Fork, Payson, and the Brigham Young University campus. This layer follows the same UGRC LIR schema as all Utah county LIR layers (established under HB113, 2005). 29 fields confirmed: same structure as Salt Lake and Davis LIR layers, PARCEL_ID (14-digit serial number), PARCEL_ADD, PARCEL_CITY, CURRENT_ASOF (data currency date), TOTAL_MKT_VALUE, LAND_MKT_VALUE, PARCEL_ACRES, PROP_CLASS, PRIMARY_RES, HOUSE_CNT, SUBDIV_NAME, BLDG_SQFT, FLOORS_CNT, BUILT_YR, EFFBUILT_YR, CONST_MATERIAL, TAX_DISTRICT, TAXEXEMPT_TYPE, and boundary/source metadata fields. Owner name is NOT included. This is an intentional exclusion across all UGRC LIR layers, not a per-county decision. For ownership data, use the Utah County Assessor's property search at assessor.utahcounty.gov. Endpoint hosted on ArcGIS Online (services1.arcgis.com/99lidPhWCzftIe9K). Capabilities: Query, Extract. maxRecordCount=2000."
6075
7109
  },
6076
7110
  {
6077
7111
  id: "ut-weber",
@@ -6117,7 +7151,7 @@ var utah_default = {
6117
7151
  url: "https://gis.utah.gov/data/cadastre/parcels/",
6118
7152
  email: null
6119
7153
  },
6120
- notes: "Weber County (pop. 260,000, county seat Ogden) anchors the northern end of the Wasatch Front urban corridor, roughly 35 miles north of Salt Lake City. It contains Ogden, Roy, Layton (shared with Davis County), Riverdale, and portions of the Ogden metro. This layer follows the same UGRC LIR schema as all Utah county LIR layers (established under HB113, 2005). 29 fields confirmed: same structure as Salt Lake, Davis, and Utah County LIR layers \u2014 PARCEL_ID (14-digit serial number), PARCEL_ADD, PARCEL_CITY, CURRENT_ASOF (data currency date), TOTAL_MKT_VALUE, LAND_MKT_VALUE, PARCEL_ACRES, PROP_CLASS, PRIMARY_RES, HOUSE_CNT, SUBDIV_NAME, BLDG_SQFT, FLOORS_CNT, BUILT_YR, EFFBUILT_YR, CONST_MATERIAL, TAX_DISTRICT, and TAXEXEMPT_TYPE. Owner name is NOT included \u2014 a deliberate exclusion in the statewide LIR schema agreement between UGRC and county assessors. For ownership data, use the Weber County property search at webercountyutah.gov/assessor or the statewide UGRC parcel viewer at parcels.utah.gov. Endpoint hosted on ArcGIS Online (services1.arcgis.com/99lidPhWCzftIe9K). maxRecordCount=2000."
7154
+ notes: "Weber County (pop. 260,000, county seat Ogden) anchors the northern end of the Wasatch Front urban corridor, roughly 35 miles north of Salt Lake City. It contains Ogden, Roy, Layton (shared with Davis County), Riverdale, and portions of the Ogden metro. This layer follows the same UGRC LIR schema as all Utah county LIR layers (established under HB113, 2005). 29 fields confirmed: same structure as Salt Lake, Davis, and Utah County LIR layers, PARCEL_ID (14-digit serial number), PARCEL_ADD, PARCEL_CITY, CURRENT_ASOF (data currency date), TOTAL_MKT_VALUE, LAND_MKT_VALUE, PARCEL_ACRES, PROP_CLASS, PRIMARY_RES, HOUSE_CNT, SUBDIV_NAME, BLDG_SQFT, FLOORS_CNT, BUILT_YR, EFFBUILT_YR, CONST_MATERIAL, TAX_DISTRICT, and TAXEXEMPT_TYPE. Owner name is NOT included, a deliberate exclusion in the statewide LIR schema agreement between UGRC and county assessors. For ownership data, use the Weber County property search at webercountyutah.gov/assessor or the statewide UGRC parcel viewer at parcels.utah.gov. Endpoint hosted on ArcGIS Online (services1.arcgis.com/99lidPhWCzftIe9K). maxRecordCount=2000."
6121
7155
  }
6122
7156
  ]
6123
7157
  };
@@ -6147,7 +7181,7 @@ var vermont_default = {
6147
7181
  supportsQuery: true,
6148
7182
  corsEnabled: null,
6149
7183
  searchFields: [
6150
- { name: "SPAN", label: "School Property Account Number (SPAN) \u2014 VT parcel key", searchable: true },
7184
+ { name: "SPAN", label: "School Property Account Number (SPAN), VT parcel key", searchable: true },
6151
7185
  { name: "TOWN", label: "Town Numeric ID", searchable: true },
6152
7186
  { name: "TNAME", label: "Town Name", searchable: true },
6153
7187
  { name: "OWNER1", label: "Owner Name (line 1)", searchable: true },
@@ -6178,7 +7212,7 @@ var vermont_default = {
6178
7212
  url: "https://vcgi.vermont.gov/data-and-programs/parcel-program",
6179
7213
  email: null
6180
7214
  },
6181
- notes: "VCGI statewide VT parcel service \u2014 layer 1 is active parcels (layer 0 = inactive/historical). This single endpoint covers all 14 Vermont counties; filter Chittenden County municipalities by TNAME: BURLINGTON, SOUTH BURLINGTON, WILLISTON, ESSEX, COLCHESTER, WINOOSKI, SHELBURNE, etc. SPAN is the Vermont-standard parcel key joining to the Tax Department grand list. OWNER1/OWNER2 and E911ADDR are public. Data is joined from the annual grand list and updated by VCGI in coordination with municipalities. The Parcel Viewer v4 (released 2024-04-24) uses this service."
7215
+ notes: "VCGI statewide VT parcel service, layer 1 is active parcels (layer 0 = inactive/historical). This single endpoint covers all 14 Vermont counties; filter Chittenden County municipalities by TNAME: BURLINGTON, SOUTH BURLINGTON, WILLISTON, ESSEX, COLCHESTER, WINOOSKI, SHELBURNE, etc. SPAN is the Vermont-standard parcel key joining to the Tax Department grand list. OWNER1/OWNER2 and E911ADDR are public. Data is joined from the annual grand list and updated by VCGI in coordination with municipalities. The Parcel Viewer v4 (released 2024-04-24) uses this service."
6182
7216
  }
6183
7217
  ]
6184
7218
  };
@@ -6188,7 +7222,7 @@ var virginia_default = {
6188
7222
  stateSlug: "virginia",
6189
7223
  stateName: "Virginia",
6190
7224
  stateAbbrev: "VA",
6191
- lastUpdated: "2026-05-11",
7225
+ lastUpdated: "2026-06-20",
6192
7226
  counties: [
6193
7227
  {
6194
7228
  id: "va-fairfax",
@@ -6227,6 +7261,48 @@ var virginia_default = {
6227
7261
  email: null
6228
7262
  },
6229
7263
  notes: "Fairfax County (Northern Virginia, pop. 1.15 million) is the most populous jurisdiction in Virginia and covers 406 square miles, entirely distinct from Fairfax City -- a separate independent city (FIPS 51600) that sits geographically within the county but is governed and assessed independently. The county-direct parcel layer at fairfaxcounty.gov/mercator/rest/services/OpenData/OpenData_A9/MapServer/0 exposes PIN, PARCEL_KEY, PARCEL_TYPE (ORDINARY vs. CONDO), and SRC_CONTROL -- but no owner name. Fairfax keeps ownership data in a non-spatial table not exposed on this REST endpoint. For owner-name lookup, use the Fairfax County Real Estate Assessment Database at realestate.fairfaxcounty.gov; it supports search by address, parcel ID, and owner name. The GIS/Property MapServer at fairfaxcounty.gov/euclid/rest has 54 layers (parcels, tax districts, easements, flood zones, annotations) but also does not surface owner in the queryable parcel layer. PIN format is space-padded with section/block/lot grouping (e.g., '0304 39 0029'). Verified 2026-05-11: 369,267 polygon parcels. Updated daily from county cadastral."
7264
+ },
7265
+ {
7266
+ id: "va-prince-william",
7267
+ state: "VA",
7268
+ stateName: "Virginia",
7269
+ stateSlug: "virginia",
7270
+ county: "Prince William",
7271
+ countySlug: "prince-william-county",
7272
+ countyFips: "51153",
7273
+ hasPublicRest: true,
7274
+ endpoints: [
7275
+ {
7276
+ url: "https://gisweb.pwcva.gov/arcgis/rest/services/OpenData/OpenData/MapServer/0",
7277
+ serviceType: "MapServer",
7278
+ layerIndex: 0,
7279
+ layerName: "Parcels",
7280
+ supportsQuery: true,
7281
+ corsEnabled: null,
7282
+ searchFields: [
7283
+ { name: "CAMA_OWNER_CUR", label: "Owner Name (current, from CAMA)", searchable: true },
7284
+ { name: "CAMA_DEEDOWNER", label: "Deed Owner Name", searchable: true },
7285
+ { name: "GPIN", label: "GPIN (Geographic Parcel ID, e.g. 7201-09-8851)", searchable: true },
7286
+ { name: "ST_NO", label: "Street Number", searchable: true },
7287
+ { name: "ST_NAME", label: "Street Name", searchable: true },
7288
+ { name: "ST_TYPE", label: "Street Type", searchable: false },
7289
+ { name: "CITY", label: "City", searchable: false },
7290
+ { name: "ZIP", label: "ZIP Code", searchable: false }
7291
+ ],
7292
+ sampleQuery: "https://gisweb.pwcva.gov/arcgis/rest/services/OpenData/OpenData/MapServer/0/query?where=UPPER(CAMA_OWNER_CUR)+LIKE+UPPER('%25SMITH%25')&outFields=GPIN,CAMA_OWNER_CUR,ST_NO,ST_NAME,ST_TYPE,CITY,ZIP&returnGeometry=false&f=json&resultRecordCount=10",
7293
+ license: "public",
7294
+ licenseUrl: "https://www.pwcva.gov/department/geographic-information-systems-gis",
7295
+ status: "live",
7296
+ lastVerified: "2026-06-20",
7297
+ verifiedBy: "manual"
7298
+ }
7299
+ ],
7300
+ contact: {
7301
+ department: "Prince William County GIS",
7302
+ url: "https://www.pwcva.gov/department/geographic-information-systems-gis",
7303
+ email: null
7304
+ },
7305
+ notes: "Prince William County (Northern Virginia, pop. ~490,000; county seat unincorporated, courts in Manassas) publishes an Open Data parcel MapServer at gisweb.pwcva.gov (note the host is gisweb.pwcva.gov, NOT pwcgov.org). Layer 0 exposes 49 fields and -- unlike neighboring Fairfax County -- includes owner name directly: CAMA_OWNER_CUR (current owner from the CAMA system) and CAMA_DEEDOWNER (deed owner). Parcel identifier is GPIN, a hyphenated geographic id (e.g. '7201-09-8851'). Site address is split across ST_NO / ST_NAME / ST_TYPE / CITY / ZIP. Verified 2026-06-20: 159,174 parcels; UPPER(CAMA_OWNER_CUR) LIKE '%SMITH%' returns real owners with Haymarket/Manassas-area addresses and ZIPs. IMPORTANT: this entry covers Prince William COUNTY only. The independent cities of Manassas (FIPS 51683) and Manassas Park (FIPS 51685) sit within the county's geographic bounds but are separate Census FIPS jurisdictions, governed and assessed independently. For authoritative assessment records use the PWC Real Estate Assessments office."
6230
7306
  }
6231
7307
  ]
6232
7308
  };
@@ -6236,7 +7312,7 @@ var washington_default = {
6236
7312
  stateSlug: "washington",
6237
7313
  stateName: "Washington",
6238
7314
  stateAbbrev: "WA",
6239
- lastUpdated: "2026-05-15",
7315
+ lastUpdated: "2026-06-06",
6240
7316
  counties: [
6241
7317
  {
6242
7318
  id: "wa-king",
@@ -6263,8 +7339,8 @@ var washington_default = {
6263
7339
  sampleQuery: "https://gismaps.kingcounty.gov/arcgis/rest/services/Property/KingCo_Parcels/MapServer/0/query?where=PIN%3D%270000200001%27&outFields=*&f=json",
6264
7340
  license: "public",
6265
7341
  licenseUrl: "https://kingcounty.gov/services/gis/GISData.aspx",
6266
- status: "unverified",
6267
- lastVerified: "2026-05-07",
7342
+ status: "live",
7343
+ lastVerified: "2026-06-06",
6268
7344
  verifiedBy: "manual"
6269
7345
  }
6270
7346
  ],
@@ -6273,7 +7349,8 @@ var washington_default = {
6273
7349
  url: "https://kingcounty.gov/services/gis.aspx",
6274
7350
  email: null
6275
7351
  },
6276
- notes: "King County, Washington (Seattle metro, pop. 2.3M, county seat Seattle) is the most populous Washington county, containing Seattle, Bellevue, Redmond, Renton, and Kent. The KingCo_Parcels MapServer layer publishes parcel polygons with three identifier fields: PIN (10-digit Parcel Identification Number), MAJOR (first 6 digits of PIN, identifying the parcel block), and MINOR (last 4 digits, the parcel within the block). No owner name, situs address, or assessment values are on this public REST layer. Washington State law broadly restricts owner-name exposure on public REST endpoints; King County follows this consistently. The layer status is 'unverified' as of 2026-05-07 \u2014 the endpoint URL is the documented canonical path but was not confirmed live at last check. For ownership lookups, use the King County Assessor's eReal Property portal at info.kingcounty.gov/assessor/emap/ (search by address, PIN, or complex name). The interactive Parcel Viewer is at gismaps.kingcounty.gov/parcelviewer2/. Bulk GIS downloads: kingcounty.gov/services/gis/GISData.aspx."
7352
+ notes: "King County, Washington (Seattle metro, pop. 2.3M, county seat Seattle) is the most populous Washington county, containing Seattle, Bellevue, Redmond, Renton, and Kent. The KingCo_Parcels MapServer layer publishes parcel polygons with three identifier fields: PIN (10-digit Parcel Identification Number), MAJOR (first 6 digits of PIN, identifying the parcel block), and MINOR (last 4 digits, the parcel within the block). No owner name, situs address, or assessment values are on this public REST layer. Washington State law broadly restricts owner-name exposure on public REST endpoints; King County follows this consistently. Confirmed live 2026-06-06 -- 638,577 parcels, PIN-searchable. For ownership lookups, use the King County Assessor's eReal Property portal at info.kingcounty.gov/assessor/emap/ (search by address, PIN, or complex name). The interactive Parcel Viewer is at gismaps.kingcounty.gov/parcelviewer2/. Bulk GIS downloads: kingcounty.gov/services/gis/GISData.aspx.\n\nKing County's open-data portal at data.kingcounty.gov runs on Socrata and does not carry a live, address-searchable parcel master table. The id tise-fzs9 surfaces in King County parcel searches; it identifies a Metro vanpool-ridership dataset, not parcels. Two Socrata tables carry the same PIN format used above and stay current: Property Legal Descriptions (id 4854-i48r, filter by parcel_number, https://data.kingcounty.gov/resource/4854-i48r.csv) and Real Property Tax Receivables (id dkna-i698, filter by account_number, https://data.kingcounty.gov/resource/dkna-i698.csv). Resolve an address to a PIN with eReal Property or Parcel Viewer above, then query either table with that PIN as the filter value. Parcel 0000200001, the same PIN in the ArcGIS sample query, returns its legal description at https://data.kingcounty.gov/resource/4854-i48r.csv?parcel_number=0000200001.",
7353
+ relatedPropertyCitySlug: "seattle"
6277
7354
  },
6278
7355
  {
6279
7356
  id: "wa-spokane",
@@ -6317,7 +7394,7 @@ var washington_default = {
6317
7394
  url: "https://gisdatacatalog-spokanecounty.opendata.arcgis.com/",
6318
7395
  email: null
6319
7396
  },
6320
- notes: "43 fields confirmed including PID_NUM, ACO_NUM, PIDMAP, parcel, exmp_code, exmp_amt, nbhd_code, nbhd_name, prop_use_code, prop_use_desc, tax_year, site_address, site_str_nbr, site_str_nbr_suf, site_str_dir, site_str_dir_suf, site_str_name, site_str_type, site_apartment, site_city, site_state, site_zip, soil_id, bldg_only_flag, vacant_land_flag, res_com_flag, appraiser_id, acreage, assessed_amt, taxable_amt, tax_code_area, inspection_cycle, parcel_location, land_value, asmt_year_exmp_code, asmt_year_exmp_amt, eff_from_date, eff_to_date, asmt_year, seg_status, Shape__Area, Shape__Length. Live query confirmed: parcel LIKE '35163%' returns Spokane addresses with assessed values. NOTE: Owner name is NOT on this public FeatureServer \u2014 per Washington State law (RCW 42.56.070(8)) owner name data is restricted. Hosted on ArcGIS Online (services1.arcgis.com/ozNll27nt9ZtPWOn). Item ID: 228db1be1d6940a3b5e3f2104e470134. maxRecordCount=2000."
7397
+ notes: "43 fields confirmed including PID_NUM, ACO_NUM, PIDMAP, parcel, exmp_code, exmp_amt, nbhd_code, nbhd_name, prop_use_code, prop_use_desc, tax_year, site_address, site_str_nbr, site_str_nbr_suf, site_str_dir, site_str_dir_suf, site_str_name, site_str_type, site_apartment, site_city, site_state, site_zip, soil_id, bldg_only_flag, vacant_land_flag, res_com_flag, appraiser_id, acreage, assessed_amt, taxable_amt, tax_code_area, inspection_cycle, parcel_location, land_value, asmt_year_exmp_code, asmt_year_exmp_amt, eff_from_date, eff_to_date, asmt_year, seg_status, Shape__Area, Shape__Length. Live query confirmed: parcel LIKE '35163%' returns Spokane addresses with assessed values. NOTE: Owner name is NOT on this public FeatureServer, per Washington State law (RCW 42.56.070(8)) owner name data is restricted. Hosted on ArcGIS Online (services1.arcgis.com/ozNll27nt9ZtPWOn). Item ID: 228db1be1d6940a3b5e3f2104e470134. maxRecordCount=2000."
6321
7398
  },
6322
7399
  {
6323
7400
  id: "wa-snohomish",
@@ -6338,7 +7415,6 @@ var washington_default = {
6338
7415
  corsEnabled: null,
6339
7416
  searchFields: [
6340
7417
  { name: "PARCEL_ID", label: "Parcel ID", searchable: true },
6341
- { name: "LRSN", label: "LRSN (Assessor Account Number)", searchable: true },
6342
7418
  { name: "OWNERNAME", label: "Owner Name", searchable: true },
6343
7419
  { name: "TAXPRNAME", label: "Taxpayer Name", searchable: true },
6344
7420
  { name: "SITUSHOUSE", label: "Situs House Number", searchable: false },
@@ -6355,8 +7431,8 @@ var washington_default = {
6355
7431
  license: "public",
6356
7432
  licenseUrl: "https://snohomish-county-open-data-portal-snoco-gis.hub.arcgis.com/",
6357
7433
  status: "live",
6358
- lastVerified: "2026-05-15",
6359
- verifiedBy: "manual"
7434
+ lastVerified: "2026-06-27",
7435
+ verifiedBy: "automated"
6360
7436
  }
6361
7437
  ],
6362
7438
  contact: {
@@ -6364,7 +7440,7 @@ var washington_default = {
6364
7440
  url: "https://snohomish-county-open-data-portal-snoco-gis.hub.arcgis.com/",
6365
7441
  email: null
6366
7442
  },
6367
- notes: "51 fields confirmed including PARCEL_ID, PAR_OID, LRSN, TAX_YEAR, STATUS, CREATEDATE, CORRDATE, RETIREDATE, GIS_SQ_FT, GIS_ACRES, TAB_ACRES, TCANUMBER, USECODE, TVR, MKIMP, MKLND, CUIMP, CULND, MKTTL, XMPTDESCR, SITUSLINE1, SITUSHOUSE, SITUSPREFX, SITUSSTRT, SITUSTTYP, SITUSPOSTD, SITUSUNIT, SITUSCITY, SITUSSTATE, SITUSZIP, TAXPRNAME, TAXPRLINE1-3, TAXPRCITY, TAXPRSTATE, TAXPRZIP, OWNERNAME, OWNERLINE1-3, OWNERCITY, OWNERSTATE, OWNERZIP, X_COORD, Y_COORD, SHAPE__Area, SHAPE__Length. Owner name confirmed live (OWNERNAME LIKE '%SMITH%' returns real results, e.g. 'SMITH STANLEY M'). Unlike most WA counties, Snohomish exposes OWNERNAME on the public layer. Hosted on ArcGIS Online (services6.arcgis.com/z6WYi9VRHfgwgtyW). Item ID: 60a6a62688db48e2a5f2ab7712b95658. Updated 3x/week. maxRecordCount=2000."
7443
+ notes: "54 fields in live schema as of 2026-06-27: OBJECTID, PARCEL_ID, PAR_OID, REVOBJID, TAX_YEAR, STATUS, CREATEDATE, CORRDATE, RETIREDATE, SOURCE, COMMENT, GIS_SQ_FT, GIS_ACRES, TAB_ACRES, TCANUMBER, USECODE, TVR, MKIMP, MKLND, CUIMP, CULND, MKTTL, XMPTDESCR, SITUSLINE1, SITUSHOUSE, SITUSPREFX, SITUSSTRT, SITUSSTTYP, SITUSPOSTD, SITUSUNIT, SITUSCITY, SITUSSTATE, SITUSZIP, TAXPRNAME, TAXPRLINE1-3, TAXPRCITY, TAXPRSTATE, TAXPRZIP, OWNERNAME, OWNERLINE1-3, OWNERCITY, OWNERSTATE, OWNERZIP, NBHDCODE, STACKED, FLATTEN, X_COORD, Y_COORD, SHAPE__Area, SHAPE__Length. NOTE 2026-06-27: LRSN (Assessor Account Number) is no longer in the live schema (schema drift), removed from searchFields. REVOBJID is a revision object identifier present in the live schema but is not a direct replacement for LRSN. Owner name confirmed live (OWNERNAME field present). Unlike most WA counties, Snohomish exposes OWNERNAME on the public layer. Hosted on ArcGIS Online (services6.arcgis.com/z6WYi9VRHfgwgtyW). Item ID: 60a6a62688db48e2a5f2ab7712b95658. Updated 3x/week. maxRecordCount=2000. Verified 2026-06-27: metadata 200, query 200, 319K parcels."
6368
7444
  },
6369
7445
  {
6370
7446
  id: "wa-thurston",
@@ -6416,6 +7492,184 @@ var washington_default = {
6416
7492
  ]
6417
7493
  };
6418
7494
 
7495
+ // data/west-virginia.json
7496
+ var west_virginia_default = {
7497
+ stateSlug: "west-virginia",
7498
+ stateName: "West Virginia",
7499
+ stateAbbrev: "WV",
7500
+ lastUpdated: "2026-06-20",
7501
+ counties: [
7502
+ {
7503
+ id: "wv-kanawha",
7504
+ state: "WV",
7505
+ stateName: "West Virginia",
7506
+ stateSlug: "west-virginia",
7507
+ county: "Kanawha",
7508
+ countySlug: "kanawha-county",
7509
+ countyFips: "54039",
7510
+ hasPublicRest: true,
7511
+ endpoints: [
7512
+ {
7513
+ url: "https://services.wvgis.wvu.edu/arcgis/rest/services/Planning_Cadastre/WV_Parcels/MapServer/0",
7514
+ serviceType: "MapServer",
7515
+ layerIndex: 0,
7516
+ layerName: "WVParcels",
7517
+ supportsQuery: true,
7518
+ corsEnabled: null,
7519
+ searchFields: [
7520
+ { name: "CleanParcelID", label: "Parcel ID (20-digit compound)", searchable: true },
7521
+ { name: "FullOwnerName", label: "Full Owner Name", searchable: true },
7522
+ { name: "FullPhysicalAddress", label: "Physical (Situs) Address", searchable: true },
7523
+ { name: "FullOwnerAddress", label: "Owner Mailing Address", searchable: false },
7524
+ { name: "FullLegalDescription", label: "Legal Description", searchable: false },
7525
+ { name: "CountyID", label: "County ID string ('20' = Kanawha)", searchable: false },
7526
+ { name: "GISPID", label: "GIS Parcel ID", searchable: false },
7527
+ { name: "Acres_C", label: "Calculated Acres", searchable: false }
7528
+ ],
7529
+ sampleQuery: "https://services.wvgis.wvu.edu/arcgis/rest/services/Planning_Cadastre/WV_Parcels/MapServer/0/query?where=CountyID%3D'20'+AND+UPPER(FullOwnerName)+LIKE+UPPER('%25SMITH%25')&outFields=CleanParcelID,FullOwnerName,FullPhysicalAddress,FullOwnerAddress,CountyID&returnGeometry=false&f=json&resultRecordCount=10",
7530
+ license: "public",
7531
+ licenseUrl: "https://www.mapwv.gov/parcel/",
7532
+ status: "live",
7533
+ lastVerified: "2026-06-20",
7534
+ verifiedBy: "automated"
7535
+ }
7536
+ ],
7537
+ contact: {
7538
+ department: "WV GIS Technical Center (WVGISTC) / West Virginia University",
7539
+ url: "https://www.mapwv.gov/",
7540
+ email: null
7541
+ },
7542
+ notes: "Kanawha County WV (Charleston; state capital; county seat Charleston; FIPS 54039; most populous WV county, pop. 178,000) uses the statewide WV parcel layer hosted by the WV GIS Technical Center (WVGISTC) at WVU (services.wvgis.wvu.edu). CRITICAL: CountyID is a zero-padded 2-digit string ('20' for Kanawha, NOT integer 20), use WHERE CountyID='20' with quotes. Key fields: CleanParcelID (20-digit: CountyID-District-Map-ParcelPrefix-ParcelSuffix-SpecialID), FullOwnerName, FullOwnerAddress, FullPhysicalAddress, FullLegalDescription, GISPID, CountyID, Acres_C. All 55 WV counties share this single statewide endpoint. Verified 2026-06-20: CountyID='20' AND SMITH returns Charleston-area owner names. The mapwv.gov/parcel public viewer uses this same WVU-hosted layer. Updated from legacy WV DOH/Transportation server URL to authoritative WVU WVGISTC server 2026-06-20."
7543
+ },
7544
+ {
7545
+ id: "wv-monongalia",
7546
+ state: "WV",
7547
+ stateName: "West Virginia",
7548
+ stateSlug: "west-virginia",
7549
+ county: "Monongalia",
7550
+ countySlug: "monongalia-county",
7551
+ countyFips: "54061",
7552
+ hasPublicRest: true,
7553
+ endpoints: [
7554
+ {
7555
+ url: "https://services.wvgis.wvu.edu/arcgis/rest/services/Planning_Cadastre/WV_Parcels/MapServer/0",
7556
+ serviceType: "MapServer",
7557
+ layerIndex: 0,
7558
+ layerName: "WVParcels",
7559
+ supportsQuery: true,
7560
+ corsEnabled: null,
7561
+ searchFields: [
7562
+ { name: "CleanParcelID", label: "Parcel ID (20-digit compound)", searchable: true },
7563
+ { name: "FullOwnerName", label: "Full Owner Name", searchable: true },
7564
+ { name: "FullPhysicalAddress", label: "Physical (Situs) Address", searchable: true },
7565
+ { name: "FullOwnerAddress", label: "Owner Mailing Address", searchable: false },
7566
+ { name: "FullLegalDescription", label: "Legal Description", searchable: false },
7567
+ { name: "CountyID", label: "County ID string ('31' = Monongalia)", searchable: false },
7568
+ { name: "GISPID", label: "GIS Parcel ID", searchable: false },
7569
+ { name: "Acres_C", label: "Calculated Acres", searchable: false }
7570
+ ],
7571
+ sampleQuery: "https://services.wvgis.wvu.edu/arcgis/rest/services/Planning_Cadastre/WV_Parcels/MapServer/0/query?where=CountyID%3D'31'+AND+UPPER(FullOwnerName)+LIKE+UPPER('%25SMITH%25')&outFields=CleanParcelID,FullOwnerName,FullPhysicalAddress,FullOwnerAddress,CountyID&returnGeometry=false&f=json&resultRecordCount=10",
7572
+ license: "public",
7573
+ licenseUrl: "https://www.mapwv.gov/parcel/",
7574
+ status: "live",
7575
+ lastVerified: "2026-06-20",
7576
+ verifiedBy: "automated"
7577
+ }
7578
+ ],
7579
+ contact: {
7580
+ department: "WV GIS Technical Center (WVGISTC) / West Virginia University",
7581
+ url: "https://www.mapwv.gov/",
7582
+ email: null
7583
+ },
7584
+ notes: "Monongalia County WV (Morgantown; county seat Morgantown; FIPS 54061; home to WVU main campus) uses the statewide WV parcel layer (CountyID='31'). CRITICAL: CountyID is a string, use CountyID='31' (with quotes). Verified 2026-06-20: SMITH query returns Morgantown-area addresses. Same endpoint and schema as all WV counties on the WVU WVGISTC server."
7585
+ },
7586
+ {
7587
+ id: "wv-raleigh",
7588
+ state: "WV",
7589
+ stateName: "West Virginia",
7590
+ stateSlug: "west-virginia",
7591
+ county: "Raleigh",
7592
+ countySlug: "raleigh-county",
7593
+ countyFips: "54081",
7594
+ hasPublicRest: true,
7595
+ endpoints: [
7596
+ {
7597
+ url: "https://services.wvgis.wvu.edu/arcgis/rest/services/Planning_Cadastre/WV_Parcels/MapServer/0",
7598
+ serviceType: "MapServer",
7599
+ layerIndex: 0,
7600
+ layerName: "WVParcels",
7601
+ supportsQuery: true,
7602
+ corsEnabled: null,
7603
+ searchFields: [
7604
+ { name: "CleanParcelID", label: "Parcel ID (20-digit compound)", searchable: true },
7605
+ { name: "FullOwnerName", label: "Full Owner Name", searchable: true },
7606
+ { name: "FullPhysicalAddress", label: "Physical (Situs) Address", searchable: true },
7607
+ { name: "FullOwnerAddress", label: "Owner Mailing Address", searchable: false },
7608
+ { name: "FullLegalDescription", label: "Legal Description", searchable: false },
7609
+ { name: "CountyID", label: "County ID string ('40' = Raleigh)", searchable: false },
7610
+ { name: "GISPID", label: "GIS Parcel ID", searchable: false },
7611
+ { name: "Acres_C", label: "Calculated Acres", searchable: false }
7612
+ ],
7613
+ sampleQuery: "https://services.wvgis.wvu.edu/arcgis/rest/services/Planning_Cadastre/WV_Parcels/MapServer/0/query?where=CountyID%3D'40'+AND+UPPER(FullOwnerName)+LIKE+UPPER('%25SMITH%25')&outFields=CleanParcelID,FullOwnerName,FullPhysicalAddress,FullOwnerAddress,CountyID&returnGeometry=false&f=json&resultRecordCount=10",
7614
+ license: "public",
7615
+ licenseUrl: "https://www.mapwv.gov/parcel/",
7616
+ status: "live",
7617
+ lastVerified: "2026-06-20",
7618
+ verifiedBy: "automated"
7619
+ }
7620
+ ],
7621
+ contact: {
7622
+ department: "WV GIS Technical Center (WVGISTC) / West Virginia University",
7623
+ url: "https://www.mapwv.gov/",
7624
+ email: null
7625
+ },
7626
+ notes: "Raleigh County WV (Beckley; county seat Beckley; FIPS 54081) uses the statewide WV parcel layer (CountyID='40'). CRITICAL: CountyID is a string, use CountyID='40' (with quotes). Verified 2026-06-20: SMITH query returns Beckley-area addresses. Same endpoint and schema as all WV counties on the WVU WVGISTC server."
7627
+ },
7628
+ {
7629
+ id: "wv-cabell",
7630
+ state: "WV",
7631
+ stateName: "West Virginia",
7632
+ stateSlug: "west-virginia",
7633
+ county: "Cabell",
7634
+ countySlug: "cabell-county",
7635
+ countyFips: "54011",
7636
+ hasPublicRest: true,
7637
+ endpoints: [
7638
+ {
7639
+ url: "https://services.wvgis.wvu.edu/arcgis/rest/services/Planning_Cadastre/WV_Parcels/MapServer/0",
7640
+ serviceType: "MapServer",
7641
+ layerIndex: 0,
7642
+ layerName: "WVParcels",
7643
+ supportsQuery: true,
7644
+ corsEnabled: null,
7645
+ searchFields: [
7646
+ { name: "CleanParcelID", label: "Parcel ID (20-digit compound)", searchable: true },
7647
+ { name: "FullOwnerName", label: "Full Owner Name", searchable: true },
7648
+ { name: "FullPhysicalAddress", label: "Physical (Situs) Address", searchable: true },
7649
+ { name: "FullOwnerAddress", label: "Owner Mailing Address", searchable: false },
7650
+ { name: "FullLegalDescription", label: "Legal Description", searchable: false },
7651
+ { name: "CountyID", label: "County ID string ('06' = Cabell)", searchable: false },
7652
+ { name: "GISPID", label: "GIS Parcel ID", searchable: false },
7653
+ { name: "Acres_C", label: "Calculated Acres", searchable: false }
7654
+ ],
7655
+ sampleQuery: "https://services.wvgis.wvu.edu/arcgis/rest/services/Planning_Cadastre/WV_Parcels/MapServer/0/query?where=CountyID%3D'06'+AND+UPPER(FullOwnerName)+LIKE+UPPER('%25SMITH%25')&outFields=CleanParcelID,FullOwnerName,FullPhysicalAddress,FullOwnerAddress,CountyID&returnGeometry=false&f=json&resultRecordCount=10",
7656
+ license: "public",
7657
+ licenseUrl: "https://www.mapwv.gov/parcel/",
7658
+ status: "live",
7659
+ lastVerified: "2026-06-20",
7660
+ verifiedBy: "automated"
7661
+ }
7662
+ ],
7663
+ contact: {
7664
+ department: "WV GIS Technical Center (WVGISTC) / West Virginia University",
7665
+ url: "https://www.mapwv.gov/",
7666
+ email: null
7667
+ },
7668
+ notes: "Cabell County WV (Huntington; county seat Huntington; FIPS 54011) uses the statewide WV parcel layer (CountyID='06'). CRITICAL: CountyID is a zero-padded string, use CountyID='06' (with quotes and leading zero). Verified 2026-06-20: SMITH query returns Huntington-area addresses. Same endpoint and schema as all WV counties on the WVU WVGISTC server."
7669
+ }
7670
+ ]
7671
+ };
7672
+
6419
7673
  // data/wisconsin.json
6420
7674
  var wisconsin_default = {
6421
7675
  stateSlug: "wisconsin",
@@ -6787,7 +8041,67 @@ var wisconsin_default = {
6787
8041
  url: "https://www.browncountywi.gov/departments/planning-and-land-services/land-information-office/",
6788
8042
  email: null
6789
8043
  },
6790
- notes: "Brown County (Green Bay metro, county seat Green Bay) hosts ParcelPolygons/MapServer with 2 layers; layer 1 (TaxParcel) is the polygon tax parcel layer with ownership fields. Fields include PARCELID, ParcelType, Municipality, MunicipalZoning, OWNERNME1, OWNERNME2, PSTLADRESS, SITEADRESS, PublicOwner, FirstName1/LastName1/FirstName2/LastName2/StreetName fields (individual name parts), RecentOwnershipChangeDate, Parcels2005/2010/2014/2017 (historical vintage flags), Surveys, ROD (Register of Deeds). Query confirmed live: UPPER(OWNERNME1) LIKE '%SMITH%' returns real results (e.g., 'SMITH SUSAN C REVOCABLE TRUST' at '2674 FOXFIRE DR'). Layer 0 (TaxParcel-smallScale) is the same polygon layer rendered at smaller scales. ParcelslDynamic/MapServer/6 (TaxParcels) is an alternate service containing the same ownership data. The county's BrownDog Online GIS map at gis.browncountywi.gov is the public viewer. PublicOwner field is present but may be null for many records \u2014 use OWNERNME1/OWNERNME2 for owner search."
8044
+ notes: "Brown County (Green Bay metro, county seat Green Bay) hosts ParcelPolygons/MapServer with 2 layers; layer 1 (TaxParcel) is the polygon tax parcel layer with ownership fields. Fields include PARCELID, ParcelType, Municipality, MunicipalZoning, OWNERNME1, OWNERNME2, PSTLADRESS, SITEADRESS, PublicOwner, FirstName1/LastName1/FirstName2/LastName2/StreetName fields (individual name parts), RecentOwnershipChangeDate, Parcels2005/2010/2014/2017 (historical vintage flags), Surveys, ROD (Register of Deeds). Query confirmed live: UPPER(OWNERNME1) LIKE '%SMITH%' returns real results (e.g., 'SMITH SUSAN C REVOCABLE TRUST' at '2674 FOXFIRE DR'). Layer 0 (TaxParcel-smallScale) is the same polygon layer rendered at smaller scales. ParcelslDynamic/MapServer/6 (TaxParcels) is an alternate service containing the same ownership data. The county's BrownDog Online GIS map at gis.browncountywi.gov is the public viewer. PublicOwner field is present but may be null for many records, use OWNERNME1/OWNERNME2 for owner search."
8045
+ }
8046
+ ]
8047
+ };
8048
+
8049
+ // data/wyoming.json
8050
+ var wyoming_default = {
8051
+ stateSlug: "wyoming",
8052
+ stateName: "Wyoming",
8053
+ stateAbbrev: "WY",
8054
+ lastUpdated: "2026-06-20",
8055
+ counties: [
8056
+ {
8057
+ id: "wy-laramie",
8058
+ state: "WY",
8059
+ stateName: "Wyoming",
8060
+ stateSlug: "wyoming",
8061
+ county: "Laramie",
8062
+ countySlug: "laramie-county",
8063
+ countyFips: "56021",
8064
+ hasPublicRest: true,
8065
+ endpoints: [
8066
+ {
8067
+ url: "https://maps.laramiecounty.com/arcgis/rest/services/Planning/SmartGovParcels/MapServer/1",
8068
+ serviceType: "MapServer",
8069
+ layerIndex: 1,
8070
+ layerName: "SmartGovParcels",
8071
+ supportsQuery: true,
8072
+ corsEnabled: null,
8073
+ searchFields: [
8074
+ { name: "statepidn", label: "State Parcel ID Number", searchable: true },
8075
+ { name: "accountno", label: "Account Number", searchable: true },
8076
+ { name: "owner_name1", label: "Owner Name 1", searchable: true },
8077
+ { name: "owner_name2", label: "Owner Name 2", searchable: false },
8078
+ { name: "owner_address", label: "Owner Address", searchable: false },
8079
+ { name: "owner_town", label: "Owner Town", searchable: false },
8080
+ { name: "owner_state", label: "Owner State", searchable: false },
8081
+ { name: "owner_zip", label: "Owner ZIP", searchable: false },
8082
+ { name: "site_address1", label: "Site Address", searchable: true },
8083
+ { name: "site_address2", label: "Site Address 2", searchable: false },
8084
+ { name: "site_town", label: "Site Town", searchable: false },
8085
+ { name: "site_state", label: "Site State", searchable: false },
8086
+ { name: "site_zip", label: "Site ZIP", searchable: false },
8087
+ { name: "trsec", label: "Township/Range/Section", searchable: false },
8088
+ { name: "fema_zone", label: "FEMA Flood Zone", searchable: false },
8089
+ { name: "latitude", label: "Latitude", searchable: false }
8090
+ ],
8091
+ sampleQuery: "https://maps.laramiecounty.com/arcgis/rest/services/Planning/SmartGovParcels/MapServer/1/query?where=UPPER(owner_name1)+LIKE+UPPER('%25SMITH%25')&outFields=statepidn,owner_name1,owner_name2,owner_address,owner_town,site_address1,site_town&returnGeometry=false&f=json&resultRecordCount=10",
8092
+ license: "public",
8093
+ licenseUrl: "https://maps.laramiecounty.com/",
8094
+ status: "live",
8095
+ lastVerified: "2026-06-20",
8096
+ verifiedBy: "automated"
8097
+ }
8098
+ ],
8099
+ contact: {
8100
+ department: "Laramie County GIS / Laramie County Planning and Development",
8101
+ url: "https://www.laramiecounty.com/171/GIS",
8102
+ email: null
8103
+ },
8104
+ notes: "Laramie County WY (Cheyenne; county seat Cheyenne; state capital; FIPS 56021; most populous county in WY, pop. 100,000) provides parcel data via maps.laramiecounty.com. The Planning/SmartGovParcels/MapServer layer at layerIndex=1 (NOT layer 0) exposes 20 fields: objectid, statepidn (14-digit state parcel ID, e.g., '12600210000200'), accountno, fema_zone, trsec, site_address1/2, site_town, site_state, site_zip, owner_name1, owner_name2, owner_address, owner_town, owner_state, owner_zip, latitude, and shape fields. CRITICAL: use layerIndex=1 (the /1 suffix). Layer 0 is a different geometry layer. Owner search via UPPER(owner_name1) LIKE works well. Verified 2026-06-20: SMITH query returns Cheyenne-area addresses (e.g., owner_name1 'BAKER, KATHARINE M LIVING TR' at '261 ROAD 164' Pine Bluffs). Laramie County WY (FIPS 56021) must not be confused with the City of Laramie (Albany County WY). The county seat is Cheyenne, not Laramie city."
6791
8105
  }
6792
8106
  ]
6793
8107
  };
@@ -6798,11 +8112,14 @@ var POPULATED_STATES = {
6798
8112
  alabama: alabama_default,
6799
8113
  alaska: alaska_default,
6800
8114
  arizona: arizona_default,
8115
+ arkansas: arkansas_default,
6801
8116
  california: california_default,
6802
8117
  colorado: colorado_default,
6803
8118
  connecticut: connecticut_default,
8119
+ delaware: delaware_default,
6804
8120
  florida: florida_default,
6805
8121
  georgia: georgia_default,
8122
+ hawaii: hawaii_default,
6806
8123
  idaho: idaho_default,
6807
8124
  illinois: illinois_default,
6808
8125
  indiana: indiana_default,
@@ -6811,29 +8128,37 @@ var POPULATED_STATES = {
6811
8128
  kentucky: kentucky_default,
6812
8129
  louisiana: louisiana_default,
6813
8130
  maine: maine_default,
8131
+ maryland: maryland_default,
6814
8132
  massachusetts: massachusetts_default,
6815
8133
  michigan: michigan_default,
6816
8134
  minnesota: minnesota_default,
6817
8135
  mississippi: mississippi_default,
6818
8136
  missouri: missouri_default,
8137
+ montana: montana_default,
6819
8138
  nebraska: nebraska_default,
6820
8139
  nevada: nevada_default,
6821
8140
  "new-hampshire": new_hampshire_default,
6822
8141
  "new-jersey": new_jersey_default,
8142
+ "new-mexico": new_mexico_default,
6823
8143
  "new-york": new_york_default,
6824
8144
  "north-carolina": north_carolina_default,
8145
+ "north-dakota": north_dakota_default,
6825
8146
  ohio: ohio_default,
8147
+ oklahoma: oklahoma_default,
6826
8148
  oregon: oregon_default,
6827
8149
  pennsylvania: pennsylvania_default,
6828
8150
  "rhode-island": rhode_island_default,
6829
8151
  "south-carolina": south_carolina_default,
8152
+ "south-dakota": south_dakota_default,
6830
8153
  tennessee: tennessee_default,
6831
8154
  texas: texas_default,
6832
8155
  utah: utah_default,
6833
8156
  vermont: vermont_default,
6834
8157
  virginia: virginia_default,
6835
8158
  washington: washington_default,
6836
- wisconsin: wisconsin_default
8159
+ "west-virginia": west_virginia_default,
8160
+ wisconsin: wisconsin_default,
8161
+ wyoming: wyoming_default
6837
8162
  };
6838
8163
  var atlas = {
6839
8164
  version: atlasIndex.version,