@urbankitstudio/atlas 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
1
  // data/index.json
2
2
  var data_default = {
3
- version: "0.3.0",
4
- lastUpdated: "2026-05-16",
3
+ version: "0.4.0",
4
+ lastUpdated: "2026-05-31",
5
5
  totals: {
6
6
  states: 50,
7
- counties: 117,
8
- endpoints: 117
7
+ counties: 128,
8
+ endpoints: 128
9
9
  },
10
10
  states: [
11
11
  {
@@ -76,8 +76,8 @@ var data_default = {
76
76
  slug: "florida",
77
77
  name: "Florida",
78
78
  abbrev: "FL",
79
- countyCount: 7,
80
- endpointCount: 7,
79
+ countyCount: 11,
80
+ endpointCount: 11,
81
81
  populated: true
82
82
  },
83
83
  {
@@ -284,8 +284,8 @@ var data_default = {
284
284
  slug: "ohio",
285
285
  name: "Ohio",
286
286
  abbrev: "OH",
287
- countyCount: 5,
288
- endpointCount: 5,
287
+ countyCount: 7,
288
+ endpointCount: 7,
289
289
  populated: true
290
290
  },
291
291
  {
@@ -348,8 +348,8 @@ var data_default = {
348
348
  slug: "texas",
349
349
  name: "Texas",
350
350
  abbrev: "TX",
351
- countyCount: 5,
352
- endpointCount: 5,
351
+ countyCount: 10,
352
+ endpointCount: 10,
353
353
  populated: true
354
354
  },
355
355
  {
@@ -411,6 +411,118 @@ var data_default = {
411
411
  ]
412
412
  };
413
413
 
414
+ // data/alabama.json
415
+ var alabama_default = {
416
+ stateSlug: "alabama",
417
+ stateName: "Alabama",
418
+ stateAbbrev: "AL",
419
+ lastUpdated: "2026-05-15",
420
+ counties: [
421
+ {
422
+ id: "al-jefferson",
423
+ state: "AL",
424
+ stateName: "Alabama",
425
+ stateSlug: "alabama",
426
+ county: "Jefferson",
427
+ countySlug: "jefferson-county",
428
+ countyFips: "01073",
429
+ hasPublicRest: true,
430
+ endpoints: [
431
+ {
432
+ url: "https://jccgis.jccal.org/server/rest/services/Basemap/Parcels/MapServer/0",
433
+ serviceType: "MapServer",
434
+ layerIndex: 0,
435
+ layerName: "Parcels",
436
+ supportsQuery: true,
437
+ corsEnabled: null,
438
+ searchFields: [
439
+ { name: "PARCELID", label: "Parcel ID", searchable: true },
440
+ { name: "OWNERNAME", label: "Owner Name", searchable: true },
441
+ { name: "PROP_MAIL", label: "Property Mailing Address", searchable: false },
442
+ { name: "Street_Name", label: "Street Name", searchable: true },
443
+ { name: "Bldg_Number", label: "Building Number", searchable: false },
444
+ { name: "ADDR_PSPR", label: "Address (Street Number+Prefix)", searchable: false },
445
+ { name: "APARTMENT", label: "Apartment", searchable: false },
446
+ { name: "CITYMAIL", label: "Mailing City", searchable: false },
447
+ { name: "ZIP_MAIL", label: "Mailing ZIP", searchable: false },
448
+ { name: "STATE_Mail", label: "Mailing State", searchable: false },
449
+ { name: "Legal_Desc", label: "Legal Description", searchable: false },
450
+ { name: "Property_City", label: "Property City", searchable: false },
451
+ { name: "ZONING_BOE", label: "Zoning (Board of Equalization)", searchable: false },
452
+ { name: "ACRES_APR", label: "Appraised Acres", searchable: false },
453
+ { name: "AssdValue", label: "Assessed Value", searchable: false }
454
+ ],
455
+ sampleQuery: "https://jccgis.jccal.org/server/rest/services/Basemap/Parcels/MapServer/0/query?where=UPPER(OWNERNAME)+LIKE+UPPER('%25SMITH%25')&outFields=PARCELID,OWNERNAME,PROP_MAIL,Street_Name,Property_City&returnGeometry=false&f=json&resultRecordCount=10",
456
+ license: "public",
457
+ licenseUrl: "https://www.jccal.org/Default.asp?ID=1220&pg=Enterprise+GIS",
458
+ status: "live",
459
+ lastVerified: "2026-05-15",
460
+ verifiedBy: "manual"
461
+ }
462
+ ],
463
+ contact: {
464
+ department: "Jefferson County Commission GIS / Information Technology Services \u2014 EGIS",
465
+ url: "https://data-jeffco-al.opendata.arcgis.com/",
466
+ email: null
467
+ },
468
+ 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."
469
+ }
470
+ ]
471
+ };
472
+
473
+ // data/alaska.json
474
+ var alaska_default = {
475
+ stateSlug: "alaska",
476
+ stateName: "Alaska",
477
+ stateAbbrev: "AK",
478
+ lastUpdated: "2026-05-15",
479
+ counties: [
480
+ {
481
+ id: "ak-anchorage",
482
+ state: "AK",
483
+ stateName: "Alaska",
484
+ stateSlug: "alaska",
485
+ county: "Anchorage",
486
+ countySlug: "anchorage-municipality",
487
+ countyFips: "02020",
488
+ hasPublicRest: true,
489
+ endpoints: [
490
+ {
491
+ url: "https://services1.arcgis.com/7HDiw78fcUiM2BWn/arcgis/rest/services/AK_Parcels/FeatureServer/0",
492
+ serviceType: "FeatureServer",
493
+ layerIndex: 0,
494
+ layerName: "AK_Parcels",
495
+ supportsQuery: true,
496
+ corsEnabled: null,
497
+ searchFields: [
498
+ { name: "parcel_id", label: "Parcel ID", searchable: true },
499
+ { name: "owner", label: "Owner Name", searchable: true },
500
+ { name: "alt_owner", label: "Alternate Owner Name", searchable: true },
501
+ { name: "property_type", label: "Property Type (Residential/Commercial/etc.)", searchable: false },
502
+ { name: "property_use", label: "Property Use Description", searchable: false },
503
+ { name: "land_value", label: "Land Value", searchable: false },
504
+ { name: "building_value", label: "Building Value", searchable: false },
505
+ { name: "total_value", label: "Total Assessed Value", searchable: false },
506
+ { name: "local_gov", label: "Local Government (filter: Anchorage Municipality)", searchable: true }
507
+ ],
508
+ sampleQuery: "https://services1.arcgis.com/7HDiw78fcUiM2BWn/arcgis/rest/services/AK_Parcels/FeatureServer/0/query?where=UPPER(local_gov)+LIKE+'%25ANCHORAGE%25'+AND+UPPER(owner)+LIKE+UPPER('%25SMITH%25')&outFields=parcel_id,owner,alt_owner,property_type,land_value,total_value,local_gov&returnGeometry=false&f=json&resultRecordCount=10",
509
+ license: "public",
510
+ licenseUrl: "https://services1.arcgis.com/7HDiw78fcUiM2BWn/arcgis/rest/services/AK_Parcels/FeatureServer",
511
+ status: "live",
512
+ lastVerified: "2026-05-15",
513
+ verifiedBy: "manual"
514
+ }
515
+ ],
516
+ contact: {
517
+ department: "Alaska Statewide Parcel Layer (combined from local government sources)",
518
+ url: "https://services1.arcgis.com/7HDiw78fcUiM2BWn/arcgis/rest/services/AK_Parcels/FeatureServer",
519
+ email: null
520
+ },
521
+ 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."
522
+ }
523
+ ]
524
+ };
525
+
414
526
  // data/arizona.json
415
527
  var arizona_default = {
416
528
  stateSlug: "arizona",
@@ -601,7 +713,7 @@ var california_default = {
601
713
  url: "https://egis-lacounty.hub.arcgis.com/",
602
714
  email: null
603
715
  },
604
- notes: "Los Angeles County uses the 10-digit AIN format. The public LACounty_Cache MapServer is the long-standing endpoint exposed via the Parcel Lookup example URLs. Owner names are not on this public layer \u2014 for owner search, use the Assessor's portal."
716
+ 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)."
605
717
  },
606
718
  {
607
719
  id: "ca-sonoma",
@@ -639,7 +751,7 @@ var california_default = {
639
751
  url: "https://gis-sonomacounty.hub.arcgis.com/",
640
752
  email: null
641
753
  },
642
- notes: "Sonoma County publishes parcels through the OWTSPublic FeatureService. APN format is XXX-XXX-XXX with hyphens. Owner names are not exposed on this public layer. The address schema was refactored 2026 \u2014 the old single SitusAddress field was replaced by SitusFormatted1/SitusFormatted2 plus structured parts (SitusStreetNo, SitusDirection, SitusStreetName, SitusStreetType, SitusUnitNumber, SitusCity)."
754
+ 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."
643
755
  },
644
756
  {
645
757
  id: "ca-orange",
@@ -717,7 +829,7 @@ var california_default = {
717
829
  url: "https://data-sbcounty.opendata.arcgis.com/",
718
830
  email: null
719
831
  },
720
- notes: "21 fields confirmed including ParcelNumber, OwnerName, LandValue, ImprovementValue, PersonalPropertyValue, ExemptionValue, HomeOwnerExemption, Acreage, TaxStatus, TaxRateArea, Zoning, ZoningDescription, Jurisdiction. IMPORTANT: The OwnerName field exists but is redacted on all public records ('Protected Per CA Gov Code 7928.205') per California Assembly Bill 1785 (effective January 2023). Parcel Number and value fields remain accessible. Hosted on ArcGIS Online (services.arcgis.com/aA3snZwJfFkVyDuP). For owner name data, use the county assessor portal at arc.sbcounty.gov/property-information/."
832
+ 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."
721
833
  },
722
834
  {
723
835
  id: "ca-san-diego",
@@ -1091,7 +1203,7 @@ var colorado_default = {
1091
1203
  url: "https://gis.colorado.gov/",
1092
1204
  email: null
1093
1205
  },
1094
- notes: "El Paso County (Colorado Springs metro, pop. 730,000) is the second-most populous Colorado county. Uses the same Colorado statewide composite endpoint as Denver \u2014 query by countyName='El Paso' or countyFips='041'. Owner query confirmed: returns real El Paso County results (e.g., 'SMITH CHERYL LYNNE'). See the Denver entry for full field list. Colorado OIT 3-digit FIPS for El Paso is '041' (full 5-digit is '08041')."
1206
+ 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."
1095
1207
  },
1096
1208
  {
1097
1209
  id: "co-jefferson",
@@ -1138,7 +1250,71 @@ var colorado_default = {
1138
1250
  url: "https://gis.colorado.gov/",
1139
1251
  email: null
1140
1252
  },
1141
- notes: "Jefferson County (Lakewood/Arvada/Golden, Denver west suburbs, pop. 582,000). Uses the same Colorado statewide composite endpoint as Denver \u2014 query by countyName='Jefferson' or countyFips='059'. Owner query confirmed: returns real Jefferson County results (e.g., 'SMITH STEVEN W' at '7347 W FREMONT DR LITTLETON'). Colorado OIT 3-digit FIPS for Jefferson is '059' (full 5-digit is '08059')."
1253
+ 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."
1254
+ }
1255
+ ]
1256
+ };
1257
+
1258
+ // data/connecticut.json
1259
+ var connecticut_default = {
1260
+ stateSlug: "connecticut",
1261
+ stateName: "Connecticut",
1262
+ stateAbbrev: "CT",
1263
+ lastUpdated: "2026-05-15",
1264
+ counties: [
1265
+ {
1266
+ id: "ct-hartford",
1267
+ state: "CT",
1268
+ stateName: "Connecticut",
1269
+ stateSlug: "connecticut",
1270
+ county: "Hartford",
1271
+ countySlug: "hartford-county",
1272
+ countyFips: "09003",
1273
+ hasPublicRest: true,
1274
+ endpoints: [
1275
+ {
1276
+ url: "https://services3.arcgis.com/3FL1kr7L4LvwA2Kb/arcgis/rest/services/Connecticut_CAMA_and_Parcel_Layer_2024/FeatureServer/0",
1277
+ serviceType: "FeatureServer",
1278
+ layerIndex: 0,
1279
+ layerName: "Connecticut_CAMA_and_Parcel_Layer",
1280
+ supportsQuery: true,
1281
+ corsEnabled: null,
1282
+ searchFields: [
1283
+ { name: "Parcel_ID", label: "Parcel ID", searchable: true },
1284
+ { name: "Town_Name", label: "Town Name (filter to Hartford-area towns, e.g. Hartford, West Hartford, East Hartford)", searchable: true },
1285
+ { name: "Owner", label: "Owner Name", searchable: true },
1286
+ { name: "Co_Owner", label: "Co-Owner Name", searchable: true },
1287
+ { name: "Mailing_Address", label: "Mailing Address", searchable: true },
1288
+ { name: "Mailing_City", label: "Mailing City", searchable: false },
1289
+ { name: "Mailing_State", label: "Mailing State", searchable: false },
1290
+ { name: "Location_1", label: "Property Location / Address", searchable: true },
1291
+ { name: "Property_City", label: "Property City", searchable: false },
1292
+ { name: "Assessed_Total", label: "Total Assessed Value", searchable: false },
1293
+ { name: "Assessed_Land", label: "Land Assessed Value", searchable: false },
1294
+ { name: "Assessed_Building", label: "Building Assessed Value", searchable: false },
1295
+ { name: "Appraised_Land", label: "Appraised Land Value", searchable: false },
1296
+ { name: "Appraised_Building", label: "Appraised Building Value", searchable: false },
1297
+ { name: "Valuation_Year", label: "Valuation Year", searchable: false },
1298
+ { name: "Sale_Price", label: "Sale Price", searchable: false },
1299
+ { name: "Sale_Date", label: "Sale Date", searchable: false },
1300
+ { name: "State_Use", label: "State Use Code", searchable: false },
1301
+ { name: "State_Use_Description", label: "Use Description", searchable: false },
1302
+ { name: "Living_Area", label: "Living Area (sq ft)", searchable: false }
1303
+ ],
1304
+ sampleQuery: "https://services3.arcgis.com/3FL1kr7L4LvwA2Kb/arcgis/rest/services/Connecticut_CAMA_and_Parcel_Layer_2024/FeatureServer/0/query?where=Town_Name%3D'Hartford'+AND+UPPER(Owner)+LIKE+UPPER('%25SMITH%25')&outFields=Parcel_ID,Town_Name,Owner,Location_1,Assessed_Total&returnGeometry=false&f=json&resultRecordCount=10",
1305
+ license: "public",
1306
+ licenseUrl: "https://portal.ct.gov/OPM/IGPP/Publications/GIS-Data",
1307
+ status: "live",
1308
+ lastVerified: "2026-05-15",
1309
+ verifiedBy: "manual"
1310
+ }
1311
+ ],
1312
+ contact: {
1313
+ department: "Connecticut Office of Policy and Management (OPM) \u2014 GIS Data",
1314
+ url: "https://portal.ct.gov/OPM/IGPP/Publications/GIS-Data",
1315
+ email: null
1316
+ },
1317
+ 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."
1142
1318
  }
1143
1319
  ]
1144
1320
  };
@@ -1190,7 +1366,7 @@ var florida_default = {
1190
1366
  url: "https://gis-mdc.opendata.arcgis.com/",
1191
1367
  email: null
1192
1368
  },
1193
- notes: "44 fields confirmed. Layer 26 is within the 80-layer MD_LandInformation MapServer. Fields include TRUE_OWNER1/2/3, TRUE_SITE_ADDR, TRUE_MAILING_ADDR1-3, DOR_CODE_CUR, DOR_DESC, PRIMARY_ZONE, SUBDIVISION, BEDROOM_COUNT, BATHROOM_COUNT, YEAR_BUILT, LAND_VAL_CUR, BUILDING_VAL_CUR, TOTAL_VAL_CUR, SALE_DATE, SALE_PRICE, LOT_SIZE. Owner search works via UPPER() LIKE on TRUE_OWNER1. Folio number is the Miami-Dade parcel identifier (13 digits). Also in this service: Property @ PaGis (layer 24) \u2014 point layer, fewer fields."
1369
+ notes: "Miami-Dade County (pop. 2.7 million) uses a folio number as its parcel identifier -- a 13-digit code, not an APN; the county abbreviates its Property Appraiser office as PA or MDPA. The parcel layer is at gisweb.miamidade.gov (MD_LandInformation MapServer, layer 26) and exposes 44 confirmed fields. Owner-name search uses UPPER() LIKE on TRUE_OWNER1; the fields TRUE_OWNER1/2/3 cover up to three named owners. TRUE_SITE_ADDR is the formatted site address. TRUE_MAILING_ADDR1-3 holds the mailing address lines. Valuation fields include LAND_VAL_CUR, BUILDING_VAL_CUR, and TOTAL_VAL_CUR (all current-year). DOR_CODE_CUR and DOR_DESC identify the Florida Department of Revenue land-use classification. A sibling layer (Property @ PaGis, layer 24 of the same service) is a point layer with fewer fields -- use layer 26 for full attribute access. The MDPA portal at miamidade.gov/pa provides the authoritative full-record view including exemptions, appeals, and prior-year values not available on the REST layer. For folio-based lookups, the PA's PAPA search at miamidade.gov/pa/property_search.asp is publicly accessible."
1194
1370
  },
1195
1371
  {
1196
1372
  id: "fl-orange",
@@ -1395,7 +1571,7 @@ var florida_default = {
1395
1571
  url: "https://www.manateepao.com/",
1396
1572
  email: null
1397
1573
  },
1398
- notes: "Manatee County Property Appraiser GIS Parcel Search layer. This is an exceptionally rich dataset \u2014 200+ fields confirmed including PAR_OWNER_NAME1/2, PARID, SITUS_ADDRESS, SITUS_POSTAL_CITY/ZIP, PAR_MAIL_ADDR1/2/CITY/STATE/POSTALCD, CAD_JUST_VALUE, CAD_ASSESSED_CTY, SALE_PRICE_LAST, SALE_DATE_LAST, LAND_ACREAGE_CAMA, PAR_ZONING, PAR_SUBDIV_NAME, PAR_TYPE, BLDG_R1_YRBUILT, BLDG_R1_SQFTLIVNG, BLDG_R1_BEDRMS. Verified 2026-05-15: SMITH returns Bradenton addresses (SITUS_POSTAL_CITY: BRADENTON). Manatee County seat is Bradenton (pop. 370,000 county-wide)."
1574
+ notes: "Manatee County (Bradenton metro, pop. 420,000) Property Appraiser publishes one of the richest public parcel REST layers in Florida, with 200+ confirmed fields on the PARID-keyed parcel service. Owner fields: PAR_OWNER_NAME1/2. Site address: SITUS_ADDRESS, SITUS_POSTAL_CITY, SITUS_ZIP. Mailing address: PAR_MAIL_ADDR1/2/CITY/STATE/POSTALCD. Valuation: CAD_JUST_VALUE (just value), CAD_ASSESSED_CTY (county assessed), SALE_PRICE_LAST, SALE_DATE_LAST. Land: LAND_ACREAGE_CAMA, PAR_ZONING, PAR_SUBDIV_NAME, PAR_TYPE. Building (prefix BLDG_R1_): YRBUILT, SQFTLIVNG, BEDRMS, BATHSF (full), BATHSH (half), GRGEUNITS, HTDAREA, STORIES. Verified 2026-05-15: owner-name queries return Bradenton and Palmetto area results (SITUS_POSTAL_CITY). Unlike many county layers, Manatee exposes CAMA-grade building detail without requiring a separate records request. The Manatee County Property Appraiser portal at manateepao.com provides the full assessor record view for exemptions and prior-year values not surfaced in the REST layer."
1399
1575
  },
1400
1576
  {
1401
1577
  id: "fl-sarasota",
@@ -1440,6 +1616,165 @@ var florida_default = {
1440
1616
  email: null
1441
1617
  },
1442
1618
  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."
1619
+ },
1620
+ {
1621
+ id: "fl-palm-beach",
1622
+ state: "FL",
1623
+ stateName: "Florida",
1624
+ stateSlug: "florida",
1625
+ county: "Palm Beach",
1626
+ countySlug: "palm-beach-county",
1627
+ countyFips: "12099",
1628
+ hasPublicRest: true,
1629
+ endpoints: [
1630
+ {
1631
+ url: "https://services1.arcgis.com/ZWOoUZbtaYePLlPw/arcgis/rest/services/Parcels_and_Property_Details_WebMercator/FeatureServer/0",
1632
+ serviceType: "FeatureServer",
1633
+ layerIndex: 0,
1634
+ layerName: "Parcels and Property Details",
1635
+ supportsQuery: true,
1636
+ corsEnabled: null,
1637
+ searchFields: [
1638
+ { name: "OWNER_NAME1", label: "Owner Name (Primary)", searchable: true },
1639
+ { name: "OWNER_NAME2", label: "Owner Name 2", searchable: true },
1640
+ { name: "SITE_ADDR_STR", label: "Site Address", searchable: true },
1641
+ { name: "PARID", label: "Parcel Control Number (PCN)", searchable: true },
1642
+ { name: "MUNICIPALITY", label: "Municipality", searchable: true }
1643
+ ],
1644
+ sampleQuery: "https://services1.arcgis.com/ZWOoUZbtaYePLlPw/arcgis/rest/services/Parcels_and_Property_Details_WebMercator/FeatureServer/0/query?where=UPPER(OWNER_NAME1)%20LIKE%20UPPER('%25SMITH%25')&outFields=PARID,OWNER_NAME1,SITE_ADDR_STR,MUNICIPALITY&returnGeometry=false&f=json&resultRecordCount=10",
1645
+ license: "public",
1646
+ licenseUrl: "https://opendata2-pbcgov.opendata.arcgis.com/",
1647
+ status: "live",
1648
+ lastVerified: "2026-05-30",
1649
+ verifiedBy: "manual"
1650
+ }
1651
+ ],
1652
+ contact: {
1653
+ department: "Palm Beach County Property Appraiser (PAPA) / PBCGOV GIS",
1654
+ url: "https://opendata2-pbcgov.opendata.arcgis.com/",
1655
+ email: null
1656
+ },
1657
+ 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."
1658
+ },
1659
+ {
1660
+ id: "fl-pinellas",
1661
+ state: "FL",
1662
+ stateName: "Florida",
1663
+ stateSlug: "florida",
1664
+ county: "Pinellas",
1665
+ countySlug: "pinellas-county",
1666
+ countyFips: "12103",
1667
+ hasPublicRest: true,
1668
+ endpoints: [
1669
+ {
1670
+ url: "https://egis.pinellas.gov/gis/rest/services/PublicWebGIS/Parcels/MapServer/1",
1671
+ serviceType: "MapServer",
1672
+ layerIndex: 1,
1673
+ layerName: "Parcels",
1674
+ supportsQuery: true,
1675
+ corsEnabled: null,
1676
+ searchFields: [
1677
+ { name: "PARCELID", label: "Parcel ID (18-digit)", searchable: true },
1678
+ { name: "STRAP", label: "STRAP Number", searchable: true },
1679
+ { name: "OWNER1", label: "Owner Name (Primary)", searchable: true },
1680
+ { name: "OWNER2", label: "Owner Name 2", searchable: true },
1681
+ { name: "SITE_ADDRESS", label: "Site Address", searchable: true },
1682
+ { name: "OWNADD_1", label: "Mailing Address", searchable: false }
1683
+ ],
1684
+ sampleQuery: "https://egis.pinellas.gov/gis/rest/services/PublicWebGIS/Parcels/MapServer/1/query?where=UPPER(OWNER1)%20LIKE%20UPPER('%25SMITH%25')&outFields=PARCELID,OWNER1,SITE_ADDRESS&returnGeometry=false&f=json&resultRecordCount=10",
1685
+ license: "public",
1686
+ licenseUrl: "https://egis.pinellas.gov/",
1687
+ status: "live",
1688
+ lastVerified: "2026-05-30",
1689
+ verifiedBy: "manual"
1690
+ }
1691
+ ],
1692
+ contact: {
1693
+ department: "Pinellas County Property Appraiser (PCPAO) / Pinellas County Enterprise GIS",
1694
+ url: "https://www.pcpao.gov/",
1695
+ email: null
1696
+ },
1697
+ 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)."
1698
+ },
1699
+ {
1700
+ id: "fl-lee",
1701
+ state: "FL",
1702
+ stateName: "Florida",
1703
+ stateSlug: "florida",
1704
+ county: "Lee",
1705
+ countySlug: "lee-county",
1706
+ countyFips: "12071",
1707
+ hasPublicRest: true,
1708
+ endpoints: [
1709
+ {
1710
+ url: "https://services2.arcgis.com/LvWGAAhHwbCJ2GMP/arcgis/rest/services/Lee_County_Parcels/FeatureServer/0",
1711
+ serviceType: "FeatureServer",
1712
+ layerIndex: 0,
1713
+ layerName: "Lee County Parcels",
1714
+ supportsQuery: true,
1715
+ corsEnabled: null,
1716
+ searchFields: [
1717
+ { name: "STRAP", label: "STRAP Number (16-char)", searchable: true },
1718
+ { name: "FOLIOID", label: "Folio ID", searchable: true },
1719
+ { name: "O_NAME", label: "Owner Name", searchable: true },
1720
+ { name: "O_OTHERS", label: "Other Owners", searchable: false },
1721
+ { name: "SITEADDR", label: "Site Address", searchable: true },
1722
+ { name: "O_ADDR1", label: "Owner Mailing Address", searchable: false }
1723
+ ],
1724
+ sampleQuery: "https://services2.arcgis.com/LvWGAAhHwbCJ2GMP/arcgis/rest/services/Lee_County_Parcels/FeatureServer/0/query?where=UPPER(O_NAME)%20LIKE%20UPPER('%25SMITH%25')&outFields=STRAP,O_NAME,SITEADDR&returnGeometry=false&f=json&resultRecordCount=10",
1725
+ license: "public",
1726
+ licenseUrl: "https://hub.arcgis.com/datasets/LeeGIS::lee-county-parcels/explore",
1727
+ status: "live",
1728
+ lastVerified: "2026-05-30",
1729
+ verifiedBy: "manual"
1730
+ }
1731
+ ],
1732
+ contact: {
1733
+ department: "Lee County Property Appraiser / Lee County GIS (LeeGIS)",
1734
+ url: "https://www.leepa.org/",
1735
+ email: null
1736
+ },
1737
+ notes: "Lee County, Florida (Fort Myers / Cape Coral, pop. ~760K) publishes parcels via an ArcGIS Online FeatureServer hosted by Lee County GIS (org LvWGAAhHwbCJ2GMP). Owner name is O_NAME (with O_OTHERS for additional owners); owner mailing is O_ADDR1/O_ADDR2/O_CITY/O_STATE/O_ZIP; the site address is SITEADDR/SITECITY; the parcel identifier is STRAP (16-character) with a numeric FOLIOID. Owner search uses UPPER(O_NAME) LIKE. Verified live 2026-05-30 (O_NAME = BECK DEAN R TR). The authoritative full record (exemptions, prior-year values) is at the Lee County Property Appraiser, leepa.org."
1738
+ },
1739
+ {
1740
+ id: "fl-pasco",
1741
+ state: "FL",
1742
+ stateName: "Florida",
1743
+ stateSlug: "florida",
1744
+ county: "Pasco",
1745
+ countySlug: "pasco-county",
1746
+ countyFips: "12101",
1747
+ hasPublicRest: true,
1748
+ endpoints: [
1749
+ {
1750
+ url: "https://maps.pascopa.com/arcgis/rest/services/Parcels/MapServer/3",
1751
+ serviceType: "MapServer",
1752
+ layerIndex: 3,
1753
+ layerName: "Parcels",
1754
+ supportsQuery: true,
1755
+ corsEnabled: null,
1756
+ searchFields: [
1757
+ { name: "ParcelID", label: "Parcel ID", searchable: true },
1758
+ { name: "NAD_NAME_1", label: "Owner Name 1", searchable: true },
1759
+ { name: "NAD_NAME_2", label: "Owner Name 2", searchable: true },
1760
+ { name: "PHYS_STREET", label: "Site Street Address", searchable: true },
1761
+ { name: "PHYS_CITY", label: "Site City", searchable: false },
1762
+ { name: "NAD_ADD_1", label: "Mailing Address", searchable: false }
1763
+ ],
1764
+ sampleQuery: "https://maps.pascopa.com/arcgis/rest/services/Parcels/MapServer/3/query?where=UPPER(NAD_NAME_1)%20LIKE%20UPPER('%25SMITH%25')&outFields=ParcelID,NAD_NAME_1,PHYS_STREET&returnGeometry=false&f=json&resultRecordCount=10",
1765
+ license: "public",
1766
+ licenseUrl: "https://maps.pascopa.com/",
1767
+ status: "live",
1768
+ lastVerified: "2026-05-30",
1769
+ verifiedBy: "manual"
1770
+ }
1771
+ ],
1772
+ contact: {
1773
+ department: "Pasco County Property Appraiser (PA) GIS",
1774
+ url: "https://pascopa.com/",
1775
+ email: null
1776
+ },
1777
+ notes: "Pasco County, Florida (New Port Richey / Wesley Chapel / Zephyrhills, pop. ~600K) serves parcels from the Pasco County Property Appraiser GIS (maps.pascopa.com). Owner names are NAD_NAME_1/NAD_NAME_2; owner mailing is NAD_ADD_1/NAD_ADD_2/NAD_CITY/NAD_STATE/NAD_ZIP; the site address is PHYS_STREET/PHYS_CITY/PHYS_STATE; the parcel identifier is ParcelID (format 12-26-15-0020-05200-0220). Owner search uses UPPER(NAD_NAME_1) LIKE. Verified live 2026-05-30 (NAD_NAME_1 = PWS HOLDINGS LLC)."
1443
1778
  }
1444
1779
  ]
1445
1780
  };
@@ -1535,7 +1870,7 @@ var georgia_default = {
1535
1870
  url: "https://geo-cobbcountyga.hub.arcgis.com/",
1536
1871
  email: null
1537
1872
  },
1538
- notes: "Cobb County Tax Assessor daily-refreshed parcel layer. Service name 'taxassessorsdaily' confirms it is updated nightly from CAMA data. 36+ fields including PIN, PARID, PARCEL_TYPE, OWNER_NAM1/2, SITUS_ADDR, OWNER_ADDR/CITY/STAT/ZIP, TAXDIST, ACRES, FMV_LAND, FMV_BLDG, FMV_TOTAL, ASV_LAND, ASV_BLDG, ASV_TOTAL, CLASS, NBHOOD_NUM. Verified 2026-05-15: SMITH returns Acworth/Marietta area addresses. Cobb County (Marietta seat, pop. 766,000) is the Atlanta metro NW county \u2014 one of the wealthiest counties in the SE US."
1873
+ 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."
1539
1874
  },
1540
1875
  {
1541
1876
  id: "ga-dekalb",
@@ -1576,7 +1911,63 @@ var georgia_default = {
1576
1911
  url: "https://dcgis-dekalbgis.hub.arcgis.com/",
1577
1912
  email: null
1578
1913
  },
1579
- notes: "DeKalb County (Atlanta metro east core, pop. 764,000) tax parcel layer. PARCELID is an 11-digit parcel identifier (e.g., '06 249 03 007'). 20+ fields confirmed including PARCELID, OWNERNME1/2, SITEADDRESS, CVTTXCD, CVTTXDSCRP, SCHLTXCD, SCHLDSCRP, USECD, USEDSCRP, NGHBRHDCD, CLASSCD, CLASSDSCRP, PRPRTYDSCRP, CNVYNAME, LOWPARCELID, BUILDING, UNIT, STATEDAREA, LGLSTARTDT. Verified 2026-05-15: SMITH returns Doraville/Atlanta area addresses. Note: distinct from DeKalb County IL (FIPS 17037) and DeKalb County IN in the atlas."
1914
+ 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."
1915
+ }
1916
+ ]
1917
+ };
1918
+
1919
+ // data/idaho.json
1920
+ var idaho_default = {
1921
+ stateSlug: "idaho",
1922
+ stateName: "Idaho",
1923
+ stateAbbrev: "ID",
1924
+ lastUpdated: "2026-05-15",
1925
+ counties: [
1926
+ {
1927
+ id: "id-ada",
1928
+ state: "ID",
1929
+ stateName: "Idaho",
1930
+ stateSlug: "idaho",
1931
+ county: "Ada",
1932
+ countySlug: "ada-county",
1933
+ countyFips: "16001",
1934
+ hasPublicRest: true,
1935
+ endpoints: [
1936
+ {
1937
+ url: "https://services2.arcgis.com/dgGjZc6xAH5m5JyP/arcgis/rest/services/Parcels/FeatureServer/5",
1938
+ serviceType: "FeatureServer",
1939
+ layerIndex: 5,
1940
+ layerName: "Parcel",
1941
+ supportsQuery: true,
1942
+ corsEnabled: null,
1943
+ searchFields: [
1944
+ { name: "PARCEL", label: "Parcel Number", searchable: true },
1945
+ { name: "ADDRESS", label: "Property Address", searchable: true },
1946
+ { name: "PROPADDNUM", label: "Address Number", searchable: true },
1947
+ { name: "PROPSTNM", label: "Street Name", searchable: true },
1948
+ { name: "CITY_STATE", label: "City and State", searchable: false },
1949
+ { name: "TOTALVALUE", label: "Total Assessed Value", searchable: false },
1950
+ { name: "ZONING", label: "Zoning Code", searchable: false },
1951
+ { name: "ACRES", label: "Acreage", searchable: false },
1952
+ { name: "HOMEEXEMPT", label: "Homeowner Exemption", searchable: false },
1953
+ { name: "PROPYEAR", label: "Property Year", searchable: false },
1954
+ { name: "SUBNM", label: "Subdivision Name", searchable: false },
1955
+ { name: "CODEAREA", label: "Tax Code Area", searchable: false }
1956
+ ],
1957
+ sampleQuery: "https://services2.arcgis.com/dgGjZc6xAH5m5JyP/arcgis/rest/services/Parcels/FeatureServer/5/query?where=UPPER(ADDRESS)+LIKE+UPPER('%25MAIN+ST%25')&outFields=PARCEL,ADDRESS,CITY_STATE,TOTALVALUE,ZONING&returnGeometry=false&f=json&resultRecordCount=10",
1958
+ license: "public",
1959
+ licenseUrl: "https://www.adacounty.id.gov/assessor/gis/",
1960
+ status: "live",
1961
+ lastVerified: "2026-05-15",
1962
+ verifiedBy: "manual"
1963
+ }
1964
+ ],
1965
+ contact: {
1966
+ department: "Ada County Assessor's Office GIS",
1967
+ url: "https://www.adacounty.id.gov/assessor/gis/",
1968
+ email: null
1969
+ },
1970
+ notes: "28 fields confirmed. This is the Ada County Assessor parcel layer backing the county's GIS parcel viewer. Key fields: PARCEL (parcel number), ADDRESS (full formatted address), property address components (PROPADDNUM, PROPPREDIR, PROPSTNM, PROPSTTYPE, PROPPOST, PROPUNIT, PROPUNUM), CITY_STATE, legal description lines (LEGAL1-LEGAL5), ZONING, BANKCODE, CODEAREA (tax code area), TOTALVALUE (total assessed value), HOMEEXEMPT (homeowner exemption amount), ACRES, SECTION, SUBNM (subdivision name). NOTE: Owner name is NOT available on this public REST layer. Ada County keeps ownership data in a separate non-public table. For owner lookup, use the Ada County Assessor property search portal at assessor.adacounty.id.gov. Ada County, ID is the Boise metropolitan area (FIPS 16001); Boise is the state capital of Idaho."
1580
1971
  }
1581
1972
  ]
1582
1973
  };
@@ -1662,7 +2053,7 @@ var illinois_default = {
1662
2053
  url: "https://www.cookcountyil.gov/agency/geographic-information-systems-gis",
1663
2054
  email: null
1664
2055
  },
1665
- 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, geometry + PIN10/PIN14_dash + street_address only). Owner name lookups happen through the separate Cook County Assessor's portal, not this layer. For owner-name searches, point the Parcel Lookup tool at the Assessor's REST endpoint instead."
2056
+ 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."
1666
2057
  },
1667
2058
  {
1668
2059
  id: "il-dupage",
@@ -1701,7 +2092,7 @@ var illinois_default = {
1701
2092
  url: "https://www.dupagecounty.gov/government/departments/gis/",
1702
2093
  email: null
1703
2094
  },
1704
- 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."
2095
+ 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)."
1705
2096
  },
1706
2097
  {
1707
2098
  id: "il-dekalb",
@@ -1740,7 +2131,7 @@ var illinois_default = {
1740
2131
  url: "https://dekalbcounty.org/services/property-data-and-maps/",
1741
2132
  email: "gis@dekalbcounty.org"
1742
2133
  },
1743
- notes: "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 works. The public-facing viewer at spatial.dekalbcounty.org uses VertiGIS/Geocortex as the front-end."
2134
+ 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."
1744
2135
  },
1745
2136
  {
1746
2137
  id: "il-will",
@@ -1815,7 +2206,7 @@ var illinois_default = {
1815
2206
  url: "https://data-mchenrycountygis.opendata.arcgis.com/",
1816
2207
  email: "gis@mchenrycountyil.gov"
1817
2208
  },
1818
- notes: "McHenry County's legacy on-prem server at mchenrycountygis.org/arcgis/rest/services/parcels/MapServer was firewalled (HTTP 403) in early 2026. The replacement now lives on the county's ArcGIS Online open-data hub at data-mchenrycountygis.opendata.arcgis.com, with the McHenry_County_TaxParcels FeatureServer (services1.arcgis.com/6iYC5AXXYapRVNzl/...) as the canonical public endpoint. 150k parcels, 50+ fields including ParcelNumber, Owner, MailToAddress1-2, MailToCity/State/Zip, SiteAddress, SiteAddressHouseNumber/StreetName/Suffix, SiteAddressCity/Zip, PropertyClass, TaxStatus, plus taxing-district fields (Library, ParkDistrict, FireDistrict, GradeSchool/HighSchool, etc.). Owner-name search via UPPER() LIKE on Owner works."
2209
+ notes: "McHenry County (northernmost Illinois collar county, bordering Wisconsin; county seat Woodstock, pop. 315,000) includes Crystal Lake, Elgin (partial), and the Fox River corridor. The legacy on-prem server at mchenrycountygis.org/arcgis/rest/services/parcels/MapServer was firewalled (HTTP 403) in early 2026. The replacement is now hosted on the county's ArcGIS Online open-data hub at data-mchenrycountygis.opendata.arcgis.com, with the McHenry_County_TaxParcels FeatureServer (services1.arcgis.com/6iYC5AXXYapRVNzl) as the canonical public endpoint. The license is 'open-data', permitting unrestricted use. Roughly 150k parcels, 50+ fields including ParcelNumber, Owner (owner name, searchable via UPPER() LIKE), MailToAddress1, MailToAddress2, MailToCity, MailToState, MailToZip, SiteAddress, SiteAddressHouseNumber, SiteAddressStreetName, SiteAddressStreetType, SiteAddressSuffix, SiteAddressCity, SiteAddressZip, PropertyClass, TaxStatus, and taxing-district assignment fields (Library, ParkDistrict, FireDistrict, GradeSchoolDistrict, HighSchoolDistrict). Owner field exposes the legal owner name; MailToAddress reflects the billing addressee, which may differ for trusts and entities. The open-data hub at data-mchenrycountygis.opendata.arcgis.com has bulk download links for the same dataset."
1819
2210
  },
1820
2211
  {
1821
2212
  id: "il-lake",
@@ -1853,7 +2244,7 @@ var illinois_default = {
1853
2244
  url: "https://www.lakecountyil.gov/636/GISMaps",
1854
2245
  email: null
1855
2246
  },
1856
- notes: "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 taxpayer_name. 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."
2247
+ 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."
1857
2248
  },
1858
2249
  {
1859
2250
  id: "il-winnebago",
@@ -2153,61 +2544,439 @@ var kansas_default = {
2153
2544
  ]
2154
2545
  };
2155
2546
 
2156
- // data/michigan.json
2157
- var michigan_default = {
2158
- stateSlug: "michigan",
2159
- stateName: "Michigan",
2160
- stateAbbrev: "MI",
2547
+ // data/kentucky.json
2548
+ var kentucky_default = {
2549
+ stateSlug: "kentucky",
2550
+ stateName: "Kentucky",
2551
+ stateAbbrev: "KY",
2161
2552
  lastUpdated: "2026-05-15",
2162
2553
  counties: [
2163
2554
  {
2164
- id: "mi-kent",
2165
- state: "MI",
2166
- stateName: "Michigan",
2167
- stateSlug: "michigan",
2168
- county: "Kent",
2169
- countySlug: "kent-county",
2170
- countyFips: "26081",
2555
+ id: "ky-fayette",
2556
+ state: "KY",
2557
+ stateName: "Kentucky",
2558
+ stateSlug: "kentucky",
2559
+ county: "Fayette",
2560
+ countySlug: "fayette-county",
2561
+ countyFips: "21067",
2171
2562
  hasPublicRest: true,
2172
2563
  endpoints: [
2173
2564
  {
2174
- url: "https://gis.kentcountymi.gov/agisprod/rest/services/ParcelsWithCondos/MapServer/0",
2175
- serviceType: "MapServer",
2565
+ url: "https://services.arcgis.com/f4rR7WnIfGBdVYFd/arcgis/rest/services/Tax_Parcels/FeatureServer/0",
2566
+ serviceType: "FeatureServer",
2176
2567
  layerIndex: 0,
2177
- layerName: "Parcels With Condos",
2568
+ layerName: "Tax_Parcels",
2178
2569
  supportsQuery: true,
2179
2570
  corsEnabled: null,
2180
2571
  searchFields: [
2181
- { name: "PPN", label: "Parcel Permanent Number", searchable: true },
2182
- { name: "OWNERNAME1", label: "Owner Name (Primary)", searchable: true },
2183
- { name: "OWNERNAME2", label: "Owner Name 2", searchable: true },
2184
- { name: "OWNERADDRESS", label: "Owner Address", searchable: true },
2185
- { name: "OWNERCITY", label: "Owner City", searchable: true },
2186
- { name: "PROPERTYADDRESS", label: "Property Address", searchable: true },
2187
- { name: "PROPADDRESSCITY", label: "Property Address City", searchable: true },
2188
- { name: "PROPERTYCLASS", label: "Property Class", searchable: false }
2572
+ { name: "PAN", label: "Parcel Account Number (Parcel ID)", searchable: true },
2573
+ { name: "Owner1", label: "Owner Name 1", searchable: true },
2574
+ { name: "Owner2", label: "Owner Name 2", searchable: false },
2575
+ { name: "Owner3", label: "Owner Name 3", searchable: false },
2576
+ { name: "Mailing_Address", label: "Mailing Address", searchable: false },
2577
+ { name: "PARCEL_SUB", label: "Parcel Sub-Identifier", searchable: false },
2578
+ { name: "PARCEL_BLOCK", label: "Block", searchable: false },
2579
+ { name: "PARCEL_LOT", label: "Lot", searchable: false },
2580
+ { name: "PARCEL_TYPE", label: "Parcel Type", searchable: false },
2581
+ { name: "RecordDate", label: "Record Date", searchable: false }
2189
2582
  ],
2190
- 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",
2583
+ sampleQuery: "https://services.arcgis.com/f4rR7WnIfGBdVYFd/arcgis/rest/services/Tax_Parcels/FeatureServer/0/query?where=UPPER(Owner1)+LIKE+UPPER('%25SMITH%25')&outFields=PAN,Owner1,Mailing_Address,PARCEL_TYPE&returnGeometry=false&f=json&resultRecordCount=10",
2191
2584
  license: "public",
2192
- licenseUrl: "https://www.kentcountymi-accesskent.opendata.arcgis.com/",
2585
+ licenseUrl: "https://data-lfucg.hub.arcgis.com/",
2193
2586
  status: "live",
2194
2587
  lastVerified: "2026-05-15",
2195
- verifiedBy: "automated"
2588
+ verifiedBy: "manual"
2196
2589
  }
2197
2590
  ],
2198
2591
  contact: {
2199
- department: "Kent County GIS",
2200
- url: "https://www.kentcountymi.gov/246/Geographic-Information-System-GIS",
2592
+ department: "Lexington-Fayette Urban County Government (LFUCG) GIS",
2593
+ url: "https://data-lfucg.hub.arcgis.com/",
2201
2594
  email: null
2202
2595
  },
2203
- 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."
2204
- },
2596
+ 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."
2597
+ }
2598
+ ]
2599
+ };
2600
+
2601
+ // data/louisiana.json
2602
+ var louisiana_default = {
2603
+ stateSlug: "louisiana",
2604
+ stateName: "Louisiana",
2605
+ stateAbbrev: "LA",
2606
+ lastUpdated: "2026-05-15",
2607
+ counties: [
2205
2608
  {
2206
- id: "mi-oakland",
2207
- state: "MI",
2208
- stateName: "Michigan",
2209
- stateSlug: "michigan",
2210
- county: "Oakland",
2609
+ id: "la-east-baton-rouge-parish",
2610
+ state: "LA",
2611
+ stateName: "Louisiana",
2612
+ stateSlug: "louisiana",
2613
+ county: "East Baton Rouge Parish",
2614
+ countySlug: "east-baton-rouge-parish",
2615
+ countyFips: "22033",
2616
+ hasPublicRest: true,
2617
+ endpoints: [
2618
+ {
2619
+ url: "https://maps.brla.gov/gis/rest/services/Cadastral/Tax_Parcel/MapServer/0",
2620
+ serviceType: "MapServer",
2621
+ layerIndex: 0,
2622
+ layerName: "Tax Parcel",
2623
+ supportsQuery: true,
2624
+ corsEnabled: null,
2625
+ searchFields: [
2626
+ { name: "ASSESSMENT_NUM", label: "Assessment Number (Parcel ID)", searchable: true },
2627
+ { name: "PRONO", label: "Property Number", searchable: true },
2628
+ { name: "OWNER", label: "Owner Name", searchable: true },
2629
+ { name: "OWNER_ADDRESS", label: "Owner Address", searchable: false },
2630
+ { name: "OWNER_CITY_STATE_ZIP", label: "Owner City/State/ZIP", searchable: false },
2631
+ { name: "PHYSICAL_ADDRESS", label: "Physical Address", searchable: true },
2632
+ { name: "SUBDIVISION", label: "Subdivision", searchable: false },
2633
+ { name: "WARD_SECTION", label: "Ward/Section", searchable: false },
2634
+ { name: "SALE_YEAR", label: "Sale Year", searchable: false },
2635
+ { name: "SUM_FAIR_MARKET_VALUE", label: "Fair Market Value", searchable: false },
2636
+ { name: "SUM_ASSESSED_VALUE", label: "Assessed Value", searchable: false }
2637
+ ],
2638
+ sampleQuery: "https://maps.brla.gov/gis/rest/services/Cadastral/Tax_Parcel/MapServer/0/query?where=UPPER(OWNER)+LIKE+UPPER('%25SMITH%25')&outFields=ASSESSMENT_NUM,OWNER,OWNER_ADDRESS,PHYSICAL_ADDRESS&returnGeometry=false&f=json&resultRecordCount=10",
2639
+ license: "public",
2640
+ licenseUrl: "https://web-ebrgis.opendata.arcgis.com/",
2641
+ status: "live",
2642
+ lastVerified: "2026-05-15",
2643
+ verifiedBy: "manual"
2644
+ }
2645
+ ],
2646
+ contact: {
2647
+ department: "East Baton Rouge Parish / City of Baton Rouge GIS Program (EBRGIS)",
2648
+ url: "https://web-ebrgis.opendata.arcgis.com/",
2649
+ email: null
2650
+ },
2651
+ 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."
2652
+ },
2653
+ {
2654
+ id: "la-orleans-parish",
2655
+ state: "LA",
2656
+ stateName: "Louisiana",
2657
+ stateSlug: "louisiana",
2658
+ county: "Orleans Parish",
2659
+ countySlug: "orleans-parish",
2660
+ countyFips: "22071",
2661
+ hasPublicRest: true,
2662
+ endpoints: [
2663
+ {
2664
+ url: "https://gis.nola.gov/arcgis/rest/services/apps/property3/MapServer/15",
2665
+ serviceType: "MapServer",
2666
+ layerIndex: 15,
2667
+ layerName: "Property Information [Parcels]",
2668
+ supportsQuery: true,
2669
+ corsEnabled: null,
2670
+ searchFields: [
2671
+ { name: "PARCELID", label: "Parcel ID", searchable: true },
2672
+ { name: "TAXBILLID", label: "Tax Bill ID", searchable: true },
2673
+ { name: "OWNERNME1", label: "Owner Name 1", searchable: true },
2674
+ { name: "OWNERNME2", label: "Owner Name 2", searchable: false },
2675
+ { name: "SITEADDRESS", label: "Site Address", searchable: true },
2676
+ { name: "BUILDING", label: "Building Number", searchable: false },
2677
+ { name: "UNIT", label: "Unit", searchable: false },
2678
+ { name: "PSTLADDRESS", label: "Postal (Mailing) Address", searchable: false },
2679
+ { name: "PSTLCITY", label: "Postal City", searchable: false },
2680
+ { name: "PSTLSTATE", label: "Postal State", searchable: false },
2681
+ { name: "PSTLZIP5", label: "Postal ZIP", searchable: false },
2682
+ { name: "USECD", label: "Use Code", searchable: false },
2683
+ { name: "LOT", label: "Lot", searchable: false },
2684
+ { name: "SQUARE", label: "Square", searchable: false },
2685
+ { name: "PARID", label: "Parcel Account ID", searchable: true }
2686
+ ],
2687
+ 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",
2688
+ license: "public",
2689
+ licenseUrl: "https://gis.nola.gov/",
2690
+ status: "live",
2691
+ lastVerified: "2026-05-15",
2692
+ verifiedBy: "manual"
2693
+ }
2694
+ ],
2695
+ contact: {
2696
+ department: "City of New Orleans GIS (NOLA GIS)",
2697
+ url: "https://gis.nola.gov/",
2698
+ email: null
2699
+ },
2700
+ 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."
2701
+ }
2702
+ ]
2703
+ };
2704
+
2705
+ // data/maine.json
2706
+ var maine_default = {
2707
+ stateSlug: "maine",
2708
+ stateName: "Maine",
2709
+ stateAbbrev: "ME",
2710
+ lastUpdated: "2026-05-15",
2711
+ counties: [
2712
+ {
2713
+ id: "me-cumberland",
2714
+ state: "ME",
2715
+ stateName: "Maine",
2716
+ stateSlug: "maine",
2717
+ county: "Cumberland",
2718
+ countySlug: "cumberland-county",
2719
+ countyFips: "23005",
2720
+ hasPublicRest: true,
2721
+ endpoints: [
2722
+ {
2723
+ url: "https://services1.arcgis.com/RbMX0mRVOFNTdLzd/arcgis/rest/services/Maine_Parcels_Organized_Towns/FeatureServer/10",
2724
+ serviceType: "FeatureServer",
2725
+ layerIndex: 10,
2726
+ layerName: "Maine Parcels Organized Towns (polygon)",
2727
+ supportsQuery: true,
2728
+ corsEnabled: null,
2729
+ searchFields: [
2730
+ { name: "COUNTY", label: "County Name (e.g. CUMBERLAND)", searchable: true },
2731
+ { name: "TOWN", label: "Municipality Name", searchable: true },
2732
+ { name: "PROP_LOC", label: "Property Location / Address", searchable: true },
2733
+ { name: "MAP_BK_LOT", label: "Map-Book-Lot Parcel ID", searchable: true },
2734
+ { name: "STATE_ID", label: "State Parcel ID", searchable: true },
2735
+ { name: "GEOCODE", label: "Geocode", searchable: true },
2736
+ { name: "TYPE", label: "Polygon Type", searchable: false },
2737
+ { name: "FMUPDAT", label: "Last Update Date", searchable: false }
2738
+ ],
2739
+ sampleQuery: "https://services1.arcgis.com/RbMX0mRVOFNTdLzd/arcgis/rest/services/Maine_Parcels_Organized_Towns/FeatureServer/10/query?where=COUNTY%3D'CUMBERLAND'+AND+UPPER(PROP_LOC)+LIKE+UPPER('%25MAIN%25')&outFields=COUNTY,TOWN,PROP_LOC,MAP_BK_LOT,STATE_ID&returnGeometry=false&f=json&resultRecordCount=10",
2740
+ license: "public",
2741
+ licenseUrl: "https://www.maine.gov/geolib/data/index.html",
2742
+ status: "live",
2743
+ lastVerified: "2026-05-15",
2744
+ verifiedBy: "manual"
2745
+ },
2746
+ {
2747
+ url: "https://services1.arcgis.com/RbMX0mRVOFNTdLzd/arcgis/rest/services/Maine_Parcels_Organized_Towns/FeatureServer/9",
2748
+ serviceType: "FeatureServer",
2749
+ layerIndex: 9,
2750
+ layerName: "Maine Parcels Organized Towns ADB (assessor table)",
2751
+ supportsQuery: true,
2752
+ corsEnabled: null,
2753
+ searchFields: [
2754
+ { name: "MAP_BK_LOT", label: "Map-Book-Lot (join key to polygon layer 10)", searchable: true },
2755
+ { name: "OWNER1", label: "Owner Name (line 1)", searchable: true },
2756
+ { name: "OWNER2", label: "Owner Name (line 2)", searchable: true },
2757
+ { name: "OWN_ADDR1", label: "Owner Mailing Address Line 1", searchable: false },
2758
+ { name: "OWN_CITY", label: "Owner Mailing City", searchable: false },
2759
+ { name: "OWN_STATE", label: "Owner Mailing State", searchable: false },
2760
+ { name: "OWN_ZIP", label: "Owner Mailing ZIP", searchable: false },
2761
+ { name: "LAND_VAL", label: "Land Value", searchable: false },
2762
+ { name: "BLDG_VAL", label: "Building Value", searchable: false },
2763
+ { name: "LOT_SIZE", label: "Lot Size", searchable: false },
2764
+ { name: "LAND_USE", label: "Land Use Code", searchable: false }
2765
+ ],
2766
+ sampleQuery: "https://services1.arcgis.com/RbMX0mRVOFNTdLzd/arcgis/rest/services/Maine_Parcels_Organized_Towns/FeatureServer/9/query?where=UPPER(OWNER1)+LIKE+UPPER('%25SMITH%25')&outFields=OWNER1,OWN_ADDR1,OWN_CITY,OWN_STATE,MAP_BK_LOT,LAND_VAL,BLDG_VAL&returnGeometry=false&f=json&resultRecordCount=10",
2767
+ license: "public",
2768
+ licenseUrl: "https://www.maine.gov/geolib/data/index.html",
2769
+ status: "live",
2770
+ lastVerified: "2026-05-15",
2771
+ verifiedBy: "manual"
2772
+ }
2773
+ ],
2774
+ contact: {
2775
+ department: "Maine Office of GIS (MEGIS) / Maine GeoLibrary",
2776
+ url: "https://www.maine.gov/geolib/data/index.html",
2777
+ email: null
2778
+ },
2779
+ 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)."
2780
+ },
2781
+ {
2782
+ id: "me-york",
2783
+ state: "ME",
2784
+ stateName: "Maine",
2785
+ stateSlug: "maine",
2786
+ county: "York",
2787
+ countySlug: "york-county",
2788
+ countyFips: "23031",
2789
+ hasPublicRest: true,
2790
+ endpoints: [
2791
+ {
2792
+ url: "https://services1.arcgis.com/RbMX0mRVOFNTdLzd/arcgis/rest/services/Maine_Parcels_Organized_Towns/FeatureServer/10",
2793
+ serviceType: "FeatureServer",
2794
+ layerIndex: 10,
2795
+ layerName: "Maine Parcels Organized Towns (polygon)",
2796
+ supportsQuery: true,
2797
+ corsEnabled: null,
2798
+ searchFields: [
2799
+ { name: "COUNTY", label: "County Name (use 'YORK')", searchable: true },
2800
+ { name: "TOWN", label: "Municipality Name", searchable: true },
2801
+ { name: "PROP_LOC", label: "Property Location / Address", searchable: true },
2802
+ { name: "MAP_BK_LOT", label: "Map-Book-Lot Parcel ID", searchable: true },
2803
+ { name: "STATE_ID", label: "State Parcel ID", searchable: true }
2804
+ ],
2805
+ sampleQuery: "https://services1.arcgis.com/RbMX0mRVOFNTdLzd/arcgis/rest/services/Maine_Parcels_Organized_Towns/FeatureServer/10/query?where=COUNTY%3D'YORK'&outFields=COUNTY,TOWN,PROP_LOC,MAP_BK_LOT,STATE_ID&returnGeometry=false&f=json&resultRecordCount=10",
2806
+ license: "public",
2807
+ licenseUrl: "https://www.maine.gov/geolib/data/index.html",
2808
+ status: "live",
2809
+ lastVerified: "2026-05-15",
2810
+ verifiedBy: "manual"
2811
+ },
2812
+ {
2813
+ url: "https://services1.arcgis.com/RbMX0mRVOFNTdLzd/arcgis/rest/services/Maine_Parcels_Organized_Towns/FeatureServer/9",
2814
+ serviceType: "FeatureServer",
2815
+ layerIndex: 9,
2816
+ layerName: "Maine Parcels Organized Towns ADB (assessor table)",
2817
+ supportsQuery: true,
2818
+ corsEnabled: null,
2819
+ searchFields: [
2820
+ { name: "MAP_BK_LOT", label: "Map-Book-Lot (join key to polygon layer 10)", searchable: true },
2821
+ { name: "OWNER1", label: "Owner Name (line 1)", searchable: true },
2822
+ { name: "OWNER2", label: "Owner Name (line 2)", searchable: true },
2823
+ { name: "OWN_ADDR1", label: "Owner Mailing Address Line 1", searchable: false },
2824
+ { name: "OWN_CITY", label: "Owner Mailing City", searchable: false },
2825
+ { name: "LAND_VAL", label: "Land Value", searchable: false }
2826
+ ],
2827
+ sampleQuery: "https://services1.arcgis.com/RbMX0mRVOFNTdLzd/arcgis/rest/services/Maine_Parcels_Organized_Towns/FeatureServer/9/query?where=UPPER(OWNER1)+LIKE+UPPER('%25SMITH%25')&outFields=OWNER1,OWN_ADDR1,OWN_CITY,OWN_STATE,MAP_BK_LOT,LAND_VAL&returnGeometry=false&f=json&resultRecordCount=10",
2828
+ license: "public",
2829
+ licenseUrl: "https://www.maine.gov/geolib/data/index.html",
2830
+ status: "live",
2831
+ lastVerified: "2026-05-15",
2832
+ verifiedBy: "manual"
2833
+ }
2834
+ ],
2835
+ contact: {
2836
+ department: "Maine Office of GIS (MEGIS) / Maine GeoLibrary",
2837
+ url: "https://www.maine.gov/geolib/data/index.html",
2838
+ email: null
2839
+ },
2840
+ notes: "York County is Maine's southernmost county and its most densely populated outside the Portland area, with seasonal coastal communities driving heavy property-lookup demand. The data comes from the same Maine GeoLibrary statewide organized-towns service used by Cumberland County. Layer 10 (FeatureServer/10) carries polygon geometry with COUNTY, TOWN, PROP_LOC, MAP_BK_LOT, and STATE_ID. Layer 9 (FeatureServer/9) is the assessor attribute table -- no geometry -- carrying OWNER1/OWNER2 and mailing address fields; join to layer 10 on MAP_BK_LOT. Filter to York County with COUNTY='YORK'; municipalities include Biddeford, Saco, Sanford, Kennebunk, York, Kittery, Wells, and Berwick. Important caveat: GeoLibrary submissions are voluntary and asynchronous -- some towns update quarterly, others lag by a year or more. For current ownership or assessment, check the individual town assessor's office or the Maine Revenue Services PAS database. Unorganized territories in York County use a separate MEGIS service."
2841
+ }
2842
+ ]
2843
+ };
2844
+
2845
+ // data/massachusetts.json
2846
+ var massachusetts_default = {
2847
+ stateSlug: "massachusetts",
2848
+ stateName: "Massachusetts",
2849
+ stateAbbrev: "MA",
2850
+ lastUpdated: "2026-05-15",
2851
+ counties: [
2852
+ {
2853
+ id: "ma-statewide",
2854
+ state: "MA",
2855
+ stateName: "Massachusetts",
2856
+ stateSlug: "massachusetts",
2857
+ county: "Statewide",
2858
+ countySlug: "statewide",
2859
+ countyFips: null,
2860
+ hasPublicRest: true,
2861
+ endpoints: [
2862
+ {
2863
+ url: "https://arcgisserver.digital.mass.gov/arcgisserver/rest/services/AGOL/MassachusettsPropertyTaxParcels/FeatureServer/1",
2864
+ serviceType: "FeatureServer",
2865
+ layerIndex: 1,
2866
+ layerName: "Tax Parcels",
2867
+ supportsQuery: true,
2868
+ corsEnabled: null,
2869
+ searchFields: [
2870
+ { name: "TOWN_ID", label: "Town/City Numeric ID (filter by municipality)", searchable: true },
2871
+ { name: "MAP_PAR_ID", label: "Map-Parcel Identifier", searchable: true },
2872
+ { name: "LOC_ID", label: "Location ID (links to L3_ASSESS table)", searchable: true },
2873
+ { name: "POLY_TYPE", label: "Polygon Type Code", searchable: false },
2874
+ { name: "LU_CODES", label: "Land Use Codes", searchable: false }
2875
+ ],
2876
+ sampleQuery: "https://arcgisserver.digital.mass.gov/arcgisserver/rest/services/AGOL/MassachusettsPropertyTaxParcels/FeatureServer/1/query?where=TOWN_ID%3D274&outFields=TOWN_ID,MAP_PAR_ID,LOC_ID,LU_CODES&returnGeometry=false&f=json&resultRecordCount=10",
2877
+ license: "public",
2878
+ licenseUrl: "https://www.mass.gov/info-details/massgis-data-property-tax-parcels",
2879
+ status: "live",
2880
+ lastVerified: "2026-05-15",
2881
+ verifiedBy: "manual"
2882
+ },
2883
+ {
2884
+ url: "https://arcgisserver.digital.mass.gov/arcgisserver/rest/services/AGOL/MassachusettsPropertyTaxParcels/FeatureServer/4",
2885
+ serviceType: "FeatureServer",
2886
+ layerIndex: 4,
2887
+ layerName: "GISDATA.L3_ASSESS (Assessor Table)",
2888
+ supportsQuery: true,
2889
+ corsEnabled: null,
2890
+ searchFields: [
2891
+ { name: "LOC_ID", label: "Location ID (join key to Tax Parcels layer 1)", searchable: true },
2892
+ { name: "PROP_ID", label: "Property ID", searchable: true },
2893
+ { name: "MA_PROP_ID", label: "Statewide Property ID", searchable: true },
2894
+ { name: "OWNER1", label: "Owner Name", searchable: true },
2895
+ { name: "SITE_ADDR", label: "Site Address", searchable: true },
2896
+ { name: "FULL_STR", label: "Full Street Name", searchable: true },
2897
+ { name: "CITY", label: "City / Town", searchable: true },
2898
+ { name: "ZIP", label: "ZIP Code", searchable: false },
2899
+ { name: "TOTAL_VAL", label: "Total Assessed Value", searchable: false },
2900
+ { name: "LAND_VAL", label: "Land Value", searchable: false },
2901
+ { name: "BLDG_VAL", label: "Building Value", searchable: false },
2902
+ { name: "USE_CODE", label: "Use Code", searchable: false },
2903
+ { name: "YEAR_BUILT", label: "Year Built", searchable: false },
2904
+ { name: "ZONING", label: "Zoning Code", searchable: false },
2905
+ { name: "TOWN_ID", label: "Town Numeric ID", searchable: true }
2906
+ ],
2907
+ sampleQuery: "https://arcgisserver.digital.mass.gov/arcgisserver/rest/services/AGOL/MassachusettsPropertyTaxParcels/FeatureServer/4/query?where=UPPER(OWNER1)+LIKE+UPPER('%25SMITH%25')&outFields=OWNER1,SITE_ADDR,CITY,ZIP,TOTAL_VAL,MA_PROP_ID,TOWN_ID&returnGeometry=false&f=json&resultRecordCount=10",
2908
+ license: "public",
2909
+ licenseUrl: "https://www.mass.gov/info-details/massgis-data-property-tax-parcels",
2910
+ status: "live",
2911
+ lastVerified: "2026-05-15",
2912
+ verifiedBy: "manual"
2913
+ }
2914
+ ],
2915
+ contact: {
2916
+ department: "MassGIS (Bureau of Geographic Information), Executive Office of Technology Services and Security",
2917
+ url: "https://www.mass.gov/info-details/massgis-data-property-tax-parcels",
2918
+ email: null
2919
+ },
2920
+ 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."
2921
+ }
2922
+ ]
2923
+ };
2924
+
2925
+ // data/michigan.json
2926
+ var michigan_default = {
2927
+ stateSlug: "michigan",
2928
+ stateName: "Michigan",
2929
+ stateAbbrev: "MI",
2930
+ lastUpdated: "2026-05-15",
2931
+ counties: [
2932
+ {
2933
+ id: "mi-kent",
2934
+ state: "MI",
2935
+ stateName: "Michigan",
2936
+ stateSlug: "michigan",
2937
+ county: "Kent",
2938
+ countySlug: "kent-county",
2939
+ countyFips: "26081",
2940
+ hasPublicRest: true,
2941
+ endpoints: [
2942
+ {
2943
+ url: "https://gis.kentcountymi.gov/agisprod/rest/services/ParcelsWithCondos/MapServer/0",
2944
+ serviceType: "MapServer",
2945
+ layerIndex: 0,
2946
+ layerName: "Parcels With Condos",
2947
+ supportsQuery: true,
2948
+ corsEnabled: null,
2949
+ searchFields: [
2950
+ { name: "PPN", label: "Parcel Permanent Number", searchable: true },
2951
+ { name: "OWNERNAME1", label: "Owner Name (Primary)", searchable: true },
2952
+ { name: "OWNERNAME2", label: "Owner Name 2", searchable: true },
2953
+ { name: "OWNERADDRESS", label: "Owner Address", searchable: true },
2954
+ { name: "OWNERCITY", label: "Owner City", searchable: true },
2955
+ { name: "PROPERTYADDRESS", label: "Property Address", searchable: true },
2956
+ { name: "PROPADDRESSCITY", label: "Property Address City", searchable: true },
2957
+ { name: "PROPERTYCLASS", label: "Property Class", searchable: false }
2958
+ ],
2959
+ 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",
2960
+ license: "public",
2961
+ licenseUrl: "https://www.kentcountymi-accesskent.opendata.arcgis.com/",
2962
+ status: "live",
2963
+ lastVerified: "2026-05-15",
2964
+ verifiedBy: "automated"
2965
+ }
2966
+ ],
2967
+ contact: {
2968
+ department: "Kent County GIS",
2969
+ url: "https://www.kentcountymi.gov/246/Geographic-Information-System-GIS",
2970
+ email: null
2971
+ },
2972
+ 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."
2973
+ },
2974
+ {
2975
+ id: "mi-oakland",
2976
+ state: "MI",
2977
+ stateName: "Michigan",
2978
+ stateSlug: "michigan",
2979
+ county: "Oakland",
2211
2980
  countySlug: "oakland-county",
2212
2981
  countyFips: "26125",
2213
2982
  hasPublicRest: true,
@@ -2343,66 +3112,168 @@ var minnesota_default = {
2343
3112
  ]
2344
3113
  };
2345
3114
 
2346
- // data/missouri.json
2347
- var missouri_default = {
2348
- stateSlug: "missouri",
2349
- stateName: "Missouri",
2350
- stateAbbrev: "MO",
3115
+ // data/mississippi.json
3116
+ var mississippi_default = {
3117
+ stateSlug: "mississippi",
3118
+ stateName: "Mississippi",
3119
+ stateAbbrev: "MS",
2351
3120
  lastUpdated: "2026-05-15",
2352
3121
  counties: [
2353
3122
  {
2354
- id: "mo-st-louis",
2355
- state: "MO",
2356
- stateName: "Missouri",
2357
- stateSlug: "missouri",
2358
- county: "St. Louis",
2359
- countySlug: "st-louis-county",
2360
- countyFips: "29189",
3123
+ id: "ms-hinds",
3124
+ state: "MS",
3125
+ stateName: "Mississippi",
3126
+ stateSlug: "mississippi",
3127
+ county: "Hinds",
3128
+ countySlug: "hinds-county",
3129
+ countyFips: "28049",
2361
3130
  hasPublicRest: true,
2362
3131
  endpoints: [
2363
3132
  {
2364
- url: "https://maps.stlouisco.com/hosting/rest/services/Maps/AGS_Parcels/MapServer/0",
3133
+ url: "https://opcgis.deq.state.ms.us/opcgis/rest/services/Government/HINDS_PARCELS/MapServer/0",
2365
3134
  serviceType: "MapServer",
2366
3135
  layerIndex: 0,
2367
- layerName: "Parcels",
3136
+ layerName: "HINDS_PARCELS",
2368
3137
  supportsQuery: true,
2369
3138
  corsEnabled: null,
2370
3139
  searchFields: [
2371
- { name: "LOCATOR", label: "Parcel Locator Number", searchable: true },
2372
- { name: "PARENT_LOC", label: "Parent Locator", searchable: true },
2373
- { name: "OWNER_NAME", label: "Owner Name", searchable: true },
2374
- { name: "OWN_ADD", label: "Owner Address", searchable: true },
2375
- { name: "OWN_CITY", label: "Owner City", searchable: true },
2376
- { name: "OWN_STATE", label: "Owner State", searchable: true },
2377
- { name: "OWN_ZIP", label: "Owner ZIP", searchable: true },
2378
- { name: "PROP_ADD", label: "Property Address", searchable: true },
2379
- { name: "PROP_ZIP", label: "Property ZIP", searchable: true },
2380
- { name: "PROPCLASS", label: "Property Class", searchable: false }
3140
+ { name: "PARNO", label: "Parcel Number", searchable: true },
3141
+ { name: "ALTPARNO", label: "Alternate Parcel Number", searchable: true },
3142
+ { name: "PPIN", label: "PPIN", searchable: true },
3143
+ { name: "OWNNAME", label: "Owner Name", searchable: true },
3144
+ { name: "MAILADD1", label: "Mailing Address 1", searchable: false },
3145
+ { name: "MCITY1", label: "Mailing City 1", searchable: false },
3146
+ { name: "MSTATE1", label: "Mailing State 1", searchable: false },
3147
+ { name: "MZIP1", label: "Mailing ZIP 1", searchable: false },
3148
+ { name: "SITEADD", label: "Site Address", searchable: true },
3149
+ { name: "SCITY", label: "Site City", searchable: false },
3150
+ { name: "SSTATE", label: "Site State", searchable: false },
3151
+ { name: "SZIP", label: "Site ZIP", searchable: false },
3152
+ { name: "SUBNAME", label: "Subdivision Name", searchable: false }
2381
3153
  ],
2382
- sampleQuery: "https://maps.stlouisco.com/hosting/rest/services/Maps/AGS_Parcels/MapServer/0/query?where=UPPER(OWNER_NAME)%20LIKE%20UPPER('%25SMITH%25')&outFields=LOCATOR,OWNER_NAME,PROP_ADD&returnGeometry=false&f=json&resultRecordCount=10",
3154
+ sampleQuery: "https://opcgis.deq.state.ms.us/opcgis/rest/services/Government/HINDS_PARCELS/MapServer/0/query?where=UPPER(OWNNAME)+LIKE+UPPER('%25SMITH%25')&outFields=PARNO,OWNNAME,MAILADD1,SITEADD,SCITY&returnGeometry=false&f=json&resultRecordCount=10",
2383
3155
  license: "public",
2384
- licenseUrl: "https://data-stlcogis.opendata.arcgis.com/",
3156
+ licenseUrl: "https://www.gis.ms.gov/",
2385
3157
  status: "live",
2386
3158
  lastVerified: "2026-05-15",
2387
- verifiedBy: "automated"
3159
+ verifiedBy: "manual"
2388
3160
  }
2389
3161
  ],
2390
3162
  contact: {
2391
- department: "St. Louis County Geospatial Data Center",
2392
- url: "https://gis.stlouiscountymo.gov/",
3163
+ department: "Mississippi Department of Environmental Quality (MDEQ) OPCGIS \u2014 hosts county parcel layers",
3164
+ url: "https://www.gis.ms.gov/",
2393
3165
  email: null
2394
3166
  },
2395
- 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."
2396
- }
2397
- ]
2398
- };
2399
-
2400
- // data/nebraska.json
2401
- var nebraska_default = {
2402
- stateSlug: "nebraska",
2403
- stateName: "Nebraska",
2404
- stateAbbrev: "NE",
2405
- lastUpdated: "2026-05-15",
3167
+ notes: "Hinds County (Jackson, pop. 231,000; state capital) parcel layer hosted on MDEQ OPCGIS server. Mississippi DEQ hosts parcel layers for many MS counties under the 'Government' folder on opcgis.deq.state.ms.us. 20 fields confirmed: OBJECTID, CAMA, PARNO, ALTPARNO, PPIN, OWNNAME, MAILADD1/2, MCITY1/2, MSTATE1/2, MZIP1/2, SITEADD, SCITY, SSTATE, SZIP, SUBNAME. OWNNAME field returns owner name in mixed format. Verified 2026-05-15: SMITH returns Jackson MS addresses. The same server also has DeSoto County parcels and other MS county datasets."
3168
+ },
3169
+ {
3170
+ id: "ms-desoto",
3171
+ state: "MS",
3172
+ stateName: "Mississippi",
3173
+ stateSlug: "mississippi",
3174
+ county: "DeSoto",
3175
+ countySlug: "desoto-county",
3176
+ countyFips: "28033",
3177
+ hasPublicRest: true,
3178
+ endpoints: [
3179
+ {
3180
+ url: "https://maps.desotocountyms.gov/arcgis/rest/services/Layers/MapServer/28",
3181
+ serviceType: "MapServer",
3182
+ layerIndex: 28,
3183
+ layerName: "Tax Parcels",
3184
+ supportsQuery: true,
3185
+ corsEnabled: null,
3186
+ searchFields: [
3187
+ { name: "PIN", label: "Parcel Identification Number", searchable: true },
3188
+ { name: "OWNER_NAME", label: "Owner Name", searchable: true },
3189
+ { name: "SECOND_OWNER", label: "Second Owner", searchable: false },
3190
+ { name: "OWNER_ADDRESS", label: "Owner Address", searchable: false },
3191
+ { name: "CITY", label: "City", searchable: false },
3192
+ { name: "STATE", label: "State", searchable: false },
3193
+ { name: "ZIP_CODE", label: "ZIP Code", searchable: false },
3194
+ { name: "FULL_ADDR", label: "Full Site Address", searchable: true },
3195
+ { name: "ACREAGE", label: "Acreage", searchable: false },
3196
+ { name: "DEED_BOOK1", label: "Deed Book", searchable: false },
3197
+ { name: "DEED_PAGE1", label: "Deed Page", searchable: false }
3198
+ ],
3199
+ 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",
3200
+ license: "public",
3201
+ licenseUrl: "https://www.desotocountyms.gov/205/GIS-Maps-Data",
3202
+ status: "live",
3203
+ lastVerified: "2026-05-15",
3204
+ verifiedBy: "manual"
3205
+ }
3206
+ ],
3207
+ contact: {
3208
+ department: "DeSoto County GIS Department",
3209
+ url: "https://desotocounty-dcms-gis.hub.arcgis.com/",
3210
+ email: null
3211
+ },
3212
+ 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."
3213
+ }
3214
+ ]
3215
+ };
3216
+
3217
+ // data/missouri.json
3218
+ var missouri_default = {
3219
+ stateSlug: "missouri",
3220
+ stateName: "Missouri",
3221
+ stateAbbrev: "MO",
3222
+ lastUpdated: "2026-05-15",
3223
+ counties: [
3224
+ {
3225
+ id: "mo-st-louis",
3226
+ state: "MO",
3227
+ stateName: "Missouri",
3228
+ stateSlug: "missouri",
3229
+ county: "St. Louis",
3230
+ countySlug: "st-louis-county",
3231
+ countyFips: "29189",
3232
+ hasPublicRest: true,
3233
+ endpoints: [
3234
+ {
3235
+ url: "https://maps.stlouisco.com/hosting/rest/services/Maps/AGS_Parcels/MapServer/0",
3236
+ serviceType: "MapServer",
3237
+ layerIndex: 0,
3238
+ layerName: "Parcels",
3239
+ supportsQuery: true,
3240
+ corsEnabled: null,
3241
+ searchFields: [
3242
+ { name: "LOCATOR", label: "Parcel Locator Number", searchable: true },
3243
+ { name: "PARENT_LOC", label: "Parent Locator", searchable: true },
3244
+ { name: "OWNER_NAME", label: "Owner Name", searchable: true },
3245
+ { name: "OWN_ADD", label: "Owner Address", searchable: true },
3246
+ { name: "OWN_CITY", label: "Owner City", searchable: true },
3247
+ { name: "OWN_STATE", label: "Owner State", searchable: true },
3248
+ { name: "OWN_ZIP", label: "Owner ZIP", searchable: true },
3249
+ { name: "PROP_ADD", label: "Property Address", searchable: true },
3250
+ { name: "PROP_ZIP", label: "Property ZIP", searchable: true },
3251
+ { name: "PROPCLASS", label: "Property Class", searchable: false }
3252
+ ],
3253
+ sampleQuery: "https://maps.stlouisco.com/hosting/rest/services/Maps/AGS_Parcels/MapServer/0/query?where=UPPER(OWNER_NAME)%20LIKE%20UPPER('%25SMITH%25')&outFields=LOCATOR,OWNER_NAME,PROP_ADD&returnGeometry=false&f=json&resultRecordCount=10",
3254
+ license: "public",
3255
+ licenseUrl: "https://data-stlcogis.opendata.arcgis.com/",
3256
+ status: "live",
3257
+ lastVerified: "2026-05-15",
3258
+ verifiedBy: "automated"
3259
+ }
3260
+ ],
3261
+ contact: {
3262
+ department: "St. Louis County Geospatial Data Center",
3263
+ url: "https://gis.stlouiscountymo.gov/",
3264
+ email: null
3265
+ },
3266
+ 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."
3267
+ }
3268
+ ]
3269
+ };
3270
+
3271
+ // data/nebraska.json
3272
+ var nebraska_default = {
3273
+ stateSlug: "nebraska",
3274
+ stateName: "Nebraska",
3275
+ stateAbbrev: "NE",
3276
+ lastUpdated: "2026-05-15",
2406
3277
  counties: [
2407
3278
  {
2408
3279
  id: "ne-douglas",
@@ -2580,7 +3451,7 @@ var nevada_default = {
2580
3451
  url: "https://www.clarkcountynv.gov/government/departments/geographic_info_systems/",
2581
3452
  email: null
2582
3453
  },
2583
- notes: "947,045 polygon parcels covering Las Vegas, Henderson, North Las Vegas, Boulder City, and unincorporated Clark County. Verified 2026-05-11: APN LIKE '138%' wildcard query returns parcels. APN is an 11-digit Assessor Parcel Number with no internal punctuation in this layer. No owner-name on this AssessorMapv2/MapServer/1 layer; owner data lives on separate Clark County Assessor systems (paid bulk data subscription). For boundary geometry + APN-based queries, this layer is fully open."
3454
+ notes: "Clark County, Nevada (Las Vegas metro, pop. 2.3M, county seat Las Vegas) contains roughly 73% of Nevada's total population. The AssessorMapv2/MapServer is the public parcel geometry layer published by the Clark County Geographic Information Systems Management Office (GISMO). 947,045 polygon parcels covering Las Vegas, Henderson, North Las Vegas, Boulder City, Mesquite, and unincorporated Clark County. Verified 2026-05-11: APN LIKE '138%' wildcard query returns parcels. APN is an 11-digit Assessor Parcel Number with no internal punctuation in this layer (no dashes or spaces). Layer 1 of AssessorMapv2 is the parcel polygon layer; layer 0 is a label annotation layer. Owner name is NOT on this public REST layer. For owner-name lookups, use the Clark County Assessor's web portal at maps.clarkcountynv.gov/assessor/AssessorParcelDetail/ownr.aspx (search by owner name) or the Real Property Records Search at clarkcountynv.gov/government/assessor/property_search/real-property-records; both are free browser tools. Bulk ownership data from the Assessor requires a paid subscription. GISMO open-data hub: clarkcountygis-ccgismo.hub.arcgis.com."
2584
3455
  },
2585
3456
  {
2586
3457
  id: "nv-washoe",
@@ -2627,11 +3498,550 @@ var nevada_default = {
2627
3498
  }
2628
3499
  ],
2629
3500
  contact: {
2630
- department: "Washoe County GIS / Assessor's Office",
2631
- url: "https://explore-washoe.opendata.arcgis.com/",
3501
+ department: "Washoe County GIS / Assessor's Office",
3502
+ url: "https://explore-washoe.opendata.arcgis.com/",
3503
+ email: null
3504
+ },
3505
+ 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."
3506
+ }
3507
+ ]
3508
+ };
3509
+
3510
+ // data/new-hampshire.json
3511
+ var new_hampshire_default = {
3512
+ stateSlug: "new-hampshire",
3513
+ stateName: "New Hampshire",
3514
+ stateAbbrev: "NH",
3515
+ lastUpdated: "2026-05-15",
3516
+ counties: [
3517
+ {
3518
+ id: "nh-hillsborough",
3519
+ state: "NH",
3520
+ stateName: "New Hampshire",
3521
+ stateSlug: "new-hampshire",
3522
+ county: "Hillsborough",
3523
+ countySlug: "hillsborough-county",
3524
+ countyFips: "33011",
3525
+ hasPublicRest: false,
3526
+ endpoints: [],
3527
+ contact: {
3528
+ department: "NH GRANIT (Geographically Referenced Analysis and Information Transfer System), UNH",
3529
+ url: "https://granit.unh.edu/",
3530
+ email: null
3531
+ },
3532
+ notes: "No token-free public REST endpoint found for Hillsborough County. NH GRANIT maintains a statewide NH Parcel Mosaic at nhgeodata.unh.edu/nhgeodata/rest/services/CAD/ParcelMosiac/MapServer but it requires an authentication token (HTTP 499 returned). The NH Geodata Portal (new-hampshire-geodata-portal-1-nhgranit.hub.arcgis.com) hosts the dataset as ArcGIS Hub but downloads/queries require GRANIT account. Individual Hillsborough County municipalities (Manchester, Nashua, etc.) maintain their own parcel viewers via AxisGIS and Vision Government Solutions but these are non-REST property search UIs, not queryable endpoints. Fallback: Regrid covers NH; NHGRANIT account (granit.unh.edu) required for REST access to the parcel mosaic."
3533
+ },
3534
+ {
3535
+ id: "nh-rockingham",
3536
+ state: "NH",
3537
+ stateName: "New Hampshire",
3538
+ stateSlug: "new-hampshire",
3539
+ county: "Rockingham",
3540
+ countySlug: "rockingham-county",
3541
+ countyFips: "33015",
3542
+ hasPublicRest: false,
3543
+ endpoints: [],
3544
+ contact: {
3545
+ department: "NH GRANIT (Geographically Referenced Analysis and Information Transfer System), UNH",
3546
+ url: "https://granit.unh.edu/",
3547
+ email: null
3548
+ },
3549
+ notes: "No token-free public REST endpoint exists for Rockingham County parcel data. The same authentication barrier that blocks Hillsborough County applies here: NH GRANIT's statewide NH Parcel Mosaic (nhgeodata.unh.edu/nhgeodata/rest/services/CAD/ParcelMosiac/MapServer) returns HTTP 499 without a valid GRANIT token. Rockingham is New Hampshire's most populous county (pop. 330,000), covering Portsmouth, Salem, Derry, Londonderry, and the southern tier of Manchester suburbs. Individual municipalities use fragmented vendor solutions -- Vision Government Solutions hosts assessor data for Salem, Derry, and several others; AxisGIS serves Rye, Deerfield, and others -- but none expose a standard queryable ArcGIS FeatureServer. For programmatic owner-level access, a GRANIT account (granit.unh.edu) is required. Regrid covers NH at commercial tier. The Rockingham County Registry of Deeds (ecourt.rockinghamregistry.com) is publicly searchable for recorded instruments but does not expose a REST parcel layer."
3550
+ }
3551
+ ]
3552
+ };
3553
+
3554
+ // data/new-jersey.json
3555
+ var new_jersey_default = {
3556
+ stateSlug: "new-jersey",
3557
+ stateName: "New Jersey",
3558
+ stateAbbrev: "NJ",
3559
+ lastUpdated: "2026-05-15",
3560
+ counties: [
3561
+ {
3562
+ id: "nj-bergen",
3563
+ state: "NJ",
3564
+ stateName: "New Jersey",
3565
+ stateSlug: "new-jersey",
3566
+ county: "Bergen",
3567
+ countySlug: "bergen-county",
3568
+ countyFips: "34003",
3569
+ hasPublicRest: true,
3570
+ endpoints: [
3571
+ {
3572
+ url: "https://services2.arcgis.com/XVOqAjTOJ5P6ngMu/arcgis/rest/services/Parcels_Composite_NJ_WM/FeatureServer/0",
3573
+ serviceType: "FeatureServer",
3574
+ layerIndex: 0,
3575
+ layerName: "Cad_parcel_mod4",
3576
+ supportsQuery: true,
3577
+ corsEnabled: null,
3578
+ searchFields: [
3579
+ {
3580
+ name: "PAMS_PIN",
3581
+ label: "PAMS Parcel Identifier (MUN_BLOCK_LOT)",
3582
+ searchable: true
3583
+ },
3584
+ {
3585
+ name: "COUNTY",
3586
+ label: "County Name (uppercase, e.g. BERGEN)",
3587
+ searchable: true
3588
+ },
3589
+ {
3590
+ name: "MUN_NAME",
3591
+ label: "Municipality Name",
3592
+ searchable: true
3593
+ },
3594
+ {
3595
+ name: "PROP_LOC",
3596
+ label: "Property Location / Address",
3597
+ searchable: true
3598
+ },
3599
+ {
3600
+ name: "OWNER_NAME",
3601
+ label: "Owner Name (blank per NJ bulk-data policy)",
3602
+ searchable: false
3603
+ },
3604
+ {
3605
+ name: "PROP_CLASS",
3606
+ label: "Property Class Code",
3607
+ searchable: false
3608
+ },
3609
+ {
3610
+ name: "LAND_VAL",
3611
+ label: "Land Value",
3612
+ searchable: false
3613
+ },
3614
+ {
3615
+ name: "IMPRVT_VAL",
3616
+ label: "Improvement Value",
3617
+ searchable: false
3618
+ },
3619
+ {
3620
+ name: "NET_VALUE",
3621
+ label: "Net Assessed Value",
3622
+ searchable: false
3623
+ },
3624
+ {
3625
+ name: "SALE_PRICE",
3626
+ label: "Sale Price",
3627
+ searchable: false
3628
+ },
3629
+ {
3630
+ name: "YR_CONSTR",
3631
+ label: "Year of Construction",
3632
+ searchable: false
3633
+ },
3634
+ {
3635
+ name: "BLDG_DESC",
3636
+ label: "Building Description",
3637
+ searchable: false
3638
+ }
3639
+ ],
3640
+ sampleQuery: "https://services2.arcgis.com/XVOqAjTOJ5P6ngMu/arcgis/rest/services/Parcels_Composite_NJ_WM/FeatureServer/0/query?where=COUNTY%3D'BERGEN'+AND+MUN_NAME+LIKE+'%25HACKENSACK%25'&outFields=PAMS_PIN,COUNTY,MUN_NAME,PROP_LOC,LAND_VAL,NET_VALUE&returnGeometry=false&f=json&resultRecordCount=10",
3641
+ license: "public",
3642
+ licenseUrl: "https://www.njogis.com/",
3643
+ status: "live",
3644
+ lastVerified: "2026-05-15",
3645
+ verifiedBy: "manual"
3646
+ }
3647
+ ],
3648
+ contact: {
3649
+ department: "NJ Office of GIS (NJOGIS) \u2014 Statewide MOD-IV Composite",
3650
+ url: "https://www.njogis.com/",
3651
+ email: null
3652
+ },
3653
+ 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."
3654
+ },
3655
+ {
3656
+ id: "nj-monmouth",
3657
+ state: "NJ",
3658
+ stateName: "New Jersey",
3659
+ stateSlug: "new-jersey",
3660
+ county: "Monmouth",
3661
+ countySlug: "monmouth-county",
3662
+ countyFips: "34025",
3663
+ hasPublicRest: true,
3664
+ endpoints: [
3665
+ {
3666
+ url: "https://services9.arcgis.com/GCI7uwdn5grdMNX1/arcgis/rest/services/GEO_MC_Parcels/FeatureServer/9",
3667
+ serviceType: "FeatureServer",
3668
+ layerIndex: 9,
3669
+ layerName: "GEO.MC.Parcels",
3670
+ supportsQuery: true,
3671
+ corsEnabled: null,
3672
+ searchFields: [
3673
+ {
3674
+ name: "PAMS_PIN",
3675
+ label: "Property Account Management System PIN",
3676
+ searchable: true
3677
+ },
3678
+ {
3679
+ name: "OwnersName",
3680
+ label: "Owner Name",
3681
+ searchable: true
3682
+ },
3683
+ {
3684
+ name: "PropertyLocation",
3685
+ label: "Property Location / Address",
3686
+ searchable: true
3687
+ },
3688
+ {
3689
+ name: "MUN_NAME",
3690
+ label: "Municipality Name",
3691
+ searchable: true
3692
+ },
3693
+ {
3694
+ name: "MUN",
3695
+ label: "Municipality Code",
3696
+ searchable: true
3697
+ },
3698
+ {
3699
+ name: "BLOCK",
3700
+ label: "Tax Block",
3701
+ searchable: true
3702
+ },
3703
+ {
3704
+ name: "LOT",
3705
+ label: "Tax Lot",
3706
+ searchable: true
3707
+ },
3708
+ {
3709
+ name: "QCODE",
3710
+ label: "Qualifier Code",
3711
+ searchable: true
3712
+ },
3713
+ {
3714
+ name: "PropertyClass",
3715
+ label: "Property Class Code",
3716
+ searchable: false
3717
+ },
3718
+ {
3719
+ name: "Acreage",
3720
+ label: "Acreage",
3721
+ searchable: false
3722
+ },
3723
+ {
3724
+ name: "TotalAssmnt",
3725
+ label: "Total Assessment",
3726
+ searchable: false
3727
+ },
3728
+ {
3729
+ name: "LandAssmnt",
3730
+ label: "Land Assessment",
3731
+ searchable: false
3732
+ },
3733
+ {
3734
+ name: "BuildingAssmnt",
3735
+ label: "Building Assessment",
3736
+ searchable: false
3737
+ },
3738
+ {
3739
+ name: "SaleDate",
3740
+ label: "Last Sale Date",
3741
+ searchable: false
3742
+ },
3743
+ {
3744
+ name: "SalePrice",
3745
+ label: "Last Sale Price",
3746
+ searchable: false
3747
+ },
3748
+ {
3749
+ name: "YrBuilt",
3750
+ label: "Year Built",
3751
+ searchable: false
3752
+ },
3753
+ {
3754
+ name: "Zone_",
3755
+ label: "Zoning Code",
3756
+ searchable: false
3757
+ },
3758
+ {
3759
+ name: "CityStateZip",
3760
+ label: "Owner Mailing City/State/ZIP",
3761
+ searchable: false
3762
+ }
3763
+ ],
3764
+ sampleQuery: "https://services9.arcgis.com/GCI7uwdn5grdMNX1/arcgis/rest/services/GEO_MC_Parcels/FeatureServer/9/query?where=UPPER(OwnersName)+LIKE+UPPER('%25SMITH%25')&outFields=PAMS_PIN,OwnersName,PropertyLocation,MUN_NAME,TotalAssmnt,SalePrice&returnGeometry=false&f=json&resultRecordCount=10",
3765
+ license: "public",
3766
+ licenseUrl: "https://gis-monmouthnj.opendata.arcgis.com/",
3767
+ status: "live",
3768
+ lastVerified: "2026-05-15",
3769
+ verifiedBy: "manual"
3770
+ }
3771
+ ],
3772
+ contact: {
3773
+ department: "Monmouth County GIS Office",
3774
+ url: "https://gis-monmouthnj.opendata.arcgis.com/",
3775
+ email: null
3776
+ },
3777
+ notes: "Monmouth County (pop. 643,000; Jersey Shore and inland suburbs) uses a county-direct FeatureServer separate from the NJOGIS statewide layer. The service at services9.arcgis.com (GEO_MC_Parcels, layer 9) reflects Monmouth County GIS's own MOD-IV data pull. PAMS_PIN is the statewide identifier, structured as county code + municipality code + block + lot + qualifier code (QCODE). OwnersName is public and queryable. Assessment fields include TotalAssmnt, LandAssmnt, BuildingAssmnt, SaleDate, SalePrice, and YrBuilt. CityStateZip is a single concatenated field for owner mailing address. The MUN and MUN_NAME fields identify the 53-municipality breakdown within the county (e.g., Freehold Borough, Long Branch, Red Bank, Asbury Park). Note: NJ Daniel's Law (P.L. 2021, c.371) allows protected individuals -- judges, law enforcement, domestic-violence victims -- to suppress their address from public records; the county layer may return null or redacted values for mailing addresses on affected parcels. For unredacted deed and transfer records, the Monmouth County Clerk's office portal at mcgifts.co.monmouth.nj.us is the authoritative source."
3778
+ },
3779
+ {
3780
+ id: "nj-ocean",
3781
+ state: "NJ",
3782
+ stateName: "New Jersey",
3783
+ stateSlug: "new-jersey",
3784
+ county: "Ocean",
3785
+ countySlug: "ocean-county",
3786
+ countyFips: "34029",
3787
+ hasPublicRest: true,
3788
+ endpoints: [
3789
+ {
3790
+ url: "https://maps.nj.gov/arcgis/rest/services/Framework/Cadastral/MapServer/0",
3791
+ serviceType: "MapServer",
3792
+ layerIndex: 0,
3793
+ layerName: "Parcels (NJ Statewide Cadastral)",
3794
+ supportsQuery: true,
3795
+ corsEnabled: null,
3796
+ searchFields: [
3797
+ {
3798
+ name: "COUNTY",
3799
+ label: "County Name (use 'OCEAN')",
3800
+ searchable: true
3801
+ },
3802
+ {
3803
+ name: "MUN_NAME",
3804
+ label: "Municipality Name",
3805
+ searchable: true
3806
+ },
3807
+ {
3808
+ name: "PAMS_PIN",
3809
+ label: "PAMS Property Identification Number",
3810
+ searchable: true
3811
+ },
3812
+ {
3813
+ name: "PROP_LOC",
3814
+ label: "Property Location / Address",
3815
+ searchable: true
3816
+ },
3817
+ {
3818
+ name: "OWNER_NAME",
3819
+ label: "Owner Name",
3820
+ searchable: true
3821
+ },
3822
+ {
3823
+ name: "PROP_CLASS",
3824
+ label: "Property Class Code",
3825
+ searchable: false
3826
+ },
3827
+ {
3828
+ name: "LAND_VAL",
3829
+ label: "Land Value",
3830
+ searchable: false
3831
+ },
3832
+ {
3833
+ name: "IMPRVT_VAL",
3834
+ label: "Improvement Value",
3835
+ searchable: false
3836
+ },
3837
+ {
3838
+ name: "NET_VALUE",
3839
+ label: "Net Assessed Value",
3840
+ searchable: false
3841
+ },
3842
+ {
3843
+ name: "CALC_ACRE",
3844
+ label: "Calculated Acreage",
3845
+ searchable: false
3846
+ },
3847
+ {
3848
+ name: "YR_CONSTR",
3849
+ label: "Year Constructed",
3850
+ searchable: false
3851
+ },
3852
+ {
3853
+ name: "SALE_PRICE",
3854
+ label: "Last Sale Price",
3855
+ searchable: false
3856
+ },
3857
+ {
3858
+ name: "DEED_DATE",
3859
+ label: "Deed Date",
3860
+ searchable: false
3861
+ }
3862
+ ],
3863
+ sampleQuery: "https://maps.nj.gov/arcgis/rest/services/Framework/Cadastral/MapServer/0/query?where=COUNTY%3D'OCEAN'+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",
3864
+ license: "public",
3865
+ licenseUrl: "https://www.nj.gov/njgin/",
3866
+ status: "live",
3867
+ lastVerified: "2026-05-15",
3868
+ verifiedBy: "manual"
3869
+ }
3870
+ ],
3871
+ contact: {
3872
+ department: "NJ Office of Information Technology, Office of GIS (NJOGIS)",
3873
+ url: "https://www.nj.gov/njgin/",
3874
+ email: null
3875
+ },
3876
+ notes: "Ocean County (pop. 637,000; Pine Barrens and Jersey Shore barrier islands) has no county-direct REST parcel layer. Parcel and owner data route through the NJOGIS statewide cadastral MapServer at maps.nj.gov (Framework/Cadastral/MapServer/0). Filter with COUNTY='OCEAN'. Key fields: OWNER_NAME (public, queryable), PAMS_PIN (county-municipality-block-lot-qualifier format), PROP_LOC (property street address), MUN_NAME (municipality), PROP_CLASS, LAND_VAL, IMPRVT_VAL, NET_VALUE, SALE_PRICE, YR_CONSTR, and DEED_DATE. NJ Daniel's Law (P.L. 2021, c.371) applies: certain registrants -- judges, law enforcement, domestic-violence victims -- can suppress address information; expect null or generic mailing-address entries for affected parcels. Ocean County's 33 municipalities range from Toms River to barrier-island towns like Long Beach Township and Seaside Heights. The NJOGIS layer is updated quarterly from county submissions to the MOD-IV tax-assessment system. For recorded deeds and chain-of-title, the Ocean County Clerk's document search at oceanrecorder.com is publicly accessible."
3877
+ },
3878
+ {
3879
+ id: "nj-camden",
3880
+ state: "NJ",
3881
+ stateName: "New Jersey",
3882
+ stateSlug: "new-jersey",
3883
+ county: "Camden",
3884
+ countySlug: "camden-county",
3885
+ countyFips: "34007",
3886
+ hasPublicRest: true,
3887
+ endpoints: [
3888
+ {
3889
+ url: "https://maps.nj.gov/arcgis/rest/services/Framework/Cadastral/MapServer/0",
3890
+ serviceType: "MapServer",
3891
+ layerIndex: 0,
3892
+ layerName: "Parcels (NJ Statewide Cadastral)",
3893
+ supportsQuery: true,
3894
+ corsEnabled: null,
3895
+ searchFields: [
3896
+ {
3897
+ name: "COUNTY",
3898
+ label: "County Name (use 'CAMDEN')",
3899
+ searchable: true
3900
+ },
3901
+ {
3902
+ name: "MUN_NAME",
3903
+ label: "Municipality Name",
3904
+ searchable: true
3905
+ },
3906
+ {
3907
+ name: "PAMS_PIN",
3908
+ label: "PAMS Property Identification Number",
3909
+ searchable: true
3910
+ },
3911
+ {
3912
+ name: "PROP_LOC",
3913
+ label: "Property Location / Address",
3914
+ searchable: true
3915
+ },
3916
+ {
3917
+ name: "OWNER_NAME",
3918
+ label: "Owner Name",
3919
+ searchable: true
3920
+ },
3921
+ {
3922
+ name: "LAND_VAL",
3923
+ label: "Land Value",
3924
+ searchable: false
3925
+ },
3926
+ {
3927
+ name: "IMPRVT_VAL",
3928
+ label: "Improvement Value",
3929
+ searchable: false
3930
+ },
3931
+ {
3932
+ name: "NET_VALUE",
3933
+ label: "Net Assessed Value",
3934
+ searchable: false
3935
+ },
3936
+ {
3937
+ name: "CALC_ACRE",
3938
+ label: "Calculated Acreage",
3939
+ searchable: false
3940
+ },
3941
+ {
3942
+ name: "SALE_PRICE",
3943
+ label: "Last Sale Price",
3944
+ searchable: false
3945
+ }
3946
+ ],
3947
+ sampleQuery: "https://maps.nj.gov/arcgis/rest/services/Framework/Cadastral/MapServer/0/query?where=COUNTY%3D'CAMDEN'+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",
3948
+ license: "public",
3949
+ licenseUrl: "https://www.nj.gov/njgin/",
3950
+ status: "live",
3951
+ lastVerified: "2026-05-15",
3952
+ verifiedBy: "manual"
3953
+ }
3954
+ ],
3955
+ contact: {
3956
+ department: "NJ Office of Information Technology, Office of GIS (NJOGIS)",
3957
+ url: "https://www.nj.gov/njgin/",
3958
+ email: null
3959
+ },
3960
+ notes: "Camden County (pop. 521,000; Philadelphia metro east bank) has no county-direct REST parcel layer. Data routes through the NJOGIS statewide cadastral MapServer at maps.nj.gov (Framework/Cadastral/MapServer/0). Filter with COUNTY='CAMDEN'. Fields include OWNER_NAME, PAMS_PIN (block-lot-qualifier MOD-IV identifier), PROP_LOC, MUN_NAME, PROP_CLASS, LAND_VAL, IMPRVT_VAL, NET_VALUE, SALE_PRICE, and CALC_ACRE. The county spans 37 municipalities from the dense urban core of Camden City through inner suburbs (Cherry Hill, Gloucester Township) to smaller boroughs like Haddonfield and Barrington. Camden City often has high parcel-change velocity; the NJOGIS layer captures these at the quarterly MOD-IV update cycle. NJ Daniel's Law address-redaction rules apply countywide. For deed-level detail, the Camden County Clerk's office maintains online document search. The county also participates in NJ Treasury's Property Tax Administration system, which cross-references the same PAMS_PIN identifiers used in this REST layer."
3961
+ },
3962
+ {
3963
+ id: "nj-morris",
3964
+ state: "NJ",
3965
+ stateName: "New Jersey",
3966
+ stateSlug: "new-jersey",
3967
+ county: "Morris",
3968
+ countySlug: "morris-county",
3969
+ countyFips: "34027",
3970
+ hasPublicRest: true,
3971
+ endpoints: [
3972
+ {
3973
+ url: "https://maps.nj.gov/arcgis/rest/services/Framework/Cadastral/MapServer/0",
3974
+ serviceType: "MapServer",
3975
+ layerIndex: 0,
3976
+ layerName: "Parcels (NJ Statewide Cadastral)",
3977
+ supportsQuery: true,
3978
+ corsEnabled: null,
3979
+ searchFields: [
3980
+ {
3981
+ name: "COUNTY",
3982
+ label: "County Name (use 'MORRIS')",
3983
+ searchable: true
3984
+ },
3985
+ {
3986
+ name: "MUN_NAME",
3987
+ label: "Municipality Name",
3988
+ searchable: true
3989
+ },
3990
+ {
3991
+ name: "PAMS_PIN",
3992
+ label: "PAMS Property Identification Number",
3993
+ searchable: true
3994
+ },
3995
+ {
3996
+ name: "PROP_LOC",
3997
+ label: "Property Location / Address",
3998
+ searchable: true
3999
+ },
4000
+ {
4001
+ name: "OWNER_NAME",
4002
+ label: "Owner Name",
4003
+ searchable: true
4004
+ },
4005
+ {
4006
+ name: "LAND_VAL",
4007
+ label: "Land Value",
4008
+ searchable: false
4009
+ },
4010
+ {
4011
+ name: "IMPRVT_VAL",
4012
+ label: "Improvement Value",
4013
+ searchable: false
4014
+ },
4015
+ {
4016
+ name: "NET_VALUE",
4017
+ label: "Net Assessed Value",
4018
+ searchable: false
4019
+ },
4020
+ {
4021
+ name: "CALC_ACRE",
4022
+ label: "Calculated Acreage",
4023
+ searchable: false
4024
+ },
4025
+ {
4026
+ name: "SALE_PRICE",
4027
+ label: "Last Sale Price",
4028
+ searchable: false
4029
+ }
4030
+ ],
4031
+ 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",
4032
+ license: "public",
4033
+ licenseUrl: "https://www.nj.gov/njgin/",
4034
+ status: "live",
4035
+ lastVerified: "2026-05-15",
4036
+ verifiedBy: "manual"
4037
+ }
4038
+ ],
4039
+ contact: {
4040
+ department: "NJ Office of Information Technology, Office of GIS (NJOGIS)",
4041
+ url: "https://www.nj.gov/njgin/",
2632
4042
  email: null
2633
4043
  },
2634
- 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."
4044
+ 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."
2635
4045
  }
2636
4046
  ]
2637
4047
  };
@@ -2809,7 +4219,7 @@ var new_york_default = {
2809
4219
  url: "https://www.monroecounty.gov/planning-gis",
2810
4220
  email: null
2811
4221
  },
2812
- notes: "67 fields confirmed. Includes COUNTYSBL (full county SBL identifier), PRINTKEY, SWIS, OWNERNAME1, OWNERNAME2, mailing address (OWNERSTREETADDRESS, OWNERPOBOX, OWNERCITYSTATEZIPCODE), property address (PARCELADDRESS, PARCELADDRESSCITY, PARCELADDRESSZIPCODE), PROPERTYCLASS/PROPERTYCLASSDESCRIPTION, assessed values (TOTALASSESSEDVALUE, LANDASSESSEDVALUE), building details (YEARBUILT, BUILDINGSTYLE, EXTERIORWALLMATERIAL, NUMBEROFSTORIES, SQUAREFEETLIVINGAREA, NUMBEROFBEDROOMS, NUMBEROFFULLBATHROOMS, NUMBEROFHALFBATHROOMS, NUMBEROFKITCHENS, NUMBEROFFIREPLACES, BASEMENTTYPE, CENTRALAIR, HEATTYPE), utilities (SEWERTYPE, WATERSUPPLY), school district, neighborhood code, grid coordinates. Owner query confirmed returning real residential parcels. Monroe County, NY is the Rochester metropolitan area (FIPS 36055)."
4222
+ notes: "Monroe County is the Rochester metropolitan area (FIPS 36055, pop. 745,000 county-wide). The county-direct FeatureServer at services1.arcgis.com returns 67 confirmed fields on the BASE_MC_Parcels layer, maintained by the Monroe County Planning Department. Key identifiers: COUNTYSBL (full county SBL string, e.g. '141.03-2-47'), PRINTKEY (the formatted print key used on tax maps), and SWIS (the 6-digit State-Wide Information System code that identifies the assessing municipality within Monroe). Owner fields OWNERNAME1/OWNERNAME2 are public. Mailing address is in OWNERSTREETADDRESS, OWNERPOBOX, and OWNERCITYSTATEZIPCODE as a single concatenated field. Building detail fields include BUILDINGSTYLE, EXTERIORWALLMATERIAL, NUMBEROFSTORIES, SQUAREFEETLIVINGAREA, NUMBEROFBEDROOMS, BASEMENTTYPE, CENTRALAIR, and HEATTYPE -- unusually granular for a county REST layer. SEWERTYPE and WATERSUPPLY distinguish municipal vs. private systems. Owner-name queries confirmed live. For current deed and sale records, Monroe County's property lookup is at monroecounty.gov/gis."
2813
4223
  },
2814
4224
  {
2815
4225
  id: "ny-onondaga",
@@ -3004,7 +4414,7 @@ var north_carolina_default = {
3004
4414
  url: "https://maps.wake.gov/",
3005
4415
  email: null
3006
4416
  },
3007
- notes: "435,382 polygon parcels covering Raleigh, Cary, Apex, Wake Forest, and the rest of Wake County. Verified 2026-05-11: UPPER(OWNER) LIKE '%SMITH%' returns real owners with full Raleigh-area site addresses (e.g., '600 HILLFARM DR'). Wake uses a 10-digit PIN_NUM keyed to the State Plane grid and a separate REID for Real Estate ID lookups against the assessor system. The MapServer endpoint also exposes a non-spatial OLD_PARCEL_NUMBER for legacy reconciliation."
4417
+ notes: "Wake County (Raleigh metro, pop. 1.17 million) hosts 435,382 parcel polygons in its county-direct ArcGIS FeatureServer. Owner-name queries use UPPER(OWNER) LIKE '%SMITH%' and return real site addresses (verified 2026-05-11). Two identifiers matter: PIN_NUM is a 10-digit code derived from State Plane grid coordinates and uniquely locates the parcel geographically; REID (Real Estate ID) is the assessor's account key, used by the Wake County Register of Deeds and the iMAPS application for cross-reference. The layer also carries OLD_PARCEL_NUMBER for reconciling legacy records that predate current PIN_NUM assignment. Wake County GIS and Raleigh GIS jointly maintain iMAPS (maps.raleighnc.gov/iMAPS) as a parallel lookup tool supporting owner, address, PIN, and REID searches. NC OneMap aggregates Wake data quarterly as well; the county's own FeatureServer is more current for recent splits and consolidations."
3008
4418
  },
3009
4419
  {
3010
4420
  id: "nc-mecklenburg",
@@ -3088,7 +4498,7 @@ var north_carolina_default = {
3088
4498
  url: "https://www.nconemap.gov/pages/parcels",
3089
4499
  email: null
3090
4500
  },
3091
- notes: "Forsyth County (Winston-Salem, pop. 385,000) served via NC1Map statewide parcel layer. Filter by cntyfips='067' (3-digit string). 60+ fields: parno, ownname/ownname2, siteadd/scity/szip, mailadd/mcity/mstate/mzip, parval, landval, improvval, gisacres, parusecode/parusedesc, saledate, legdecfull, subdivisio, owntype, cntyfips, cntyname. This is the NC Geographic Information Coordinating Council's statewide parcel aggregation, updated quarterly from county submissions. Verified 2026-05-15: cntyfips='067' returns Winston-Salem area addresses."
4501
+ notes: "Forsyth County (Winston-Salem, pop. 385,000) is served via the NC Geographic Information Coordinating Council's NC1Map statewide parcel aggregation (services.gis.nc.gov). Filter by cntyfips='067' (3-digit string). Key fields: parno (parcel number), ownname/ownname2 (owner names), siteadd/scity/szip (site address), mailadd/mcity/mstate/mzip (mailing address), parval (total parcel value), landval, improvval, gisacres, parusecode/parusedesc (land use), saledate, legdecfull (legal description), subdivisio, owntype, and cntyname. The NC1Map layer is updated quarterly from county submissions to the GICC. Forsyth County also maintains MapForsyth (mapforsyth.org), a county-direct open data portal with weekly-updated parcel and address layers -- for the most current data, MapForsyth is the better path. The county Tax Assessor's Geo-Data Explorer (forsyth.cc/tax/geodata.aspx) provides parcel search by address, owner, and parcel ID."
3092
4502
  },
3093
4503
  {
3094
4504
  id: "nc-guilford",
@@ -3128,7 +4538,7 @@ var north_carolina_default = {
3128
4538
  url: "https://www.nconemap.gov/pages/parcels",
3129
4539
  email: null
3130
4540
  },
3131
- notes: "Guilford County (Greensboro, pop. 540,000) served via NC1Map statewide parcel layer. Filter by cntyfips='081'. Verified 2026-05-15: returns Greensboro addresses. Same endpoint as other NC1Map counties (Forsyth, Durham, Cumberland, Buncombe); filter by cntyfips differentiates. Guilford County GIS Hub at gcgis.guilfordcountync.gov exposes only boundary/road layers; for parcel + owner, NC1Map is the only public REST path."
4541
+ notes: "Guilford County (Greensboro and High Point metro, pop. 540,000) is served via the NC1Map statewide parcel aggregation (services.gis.nc.gov). Filter by cntyfips='081'. The same field schema applies as other NC1Map counties: ownname/ownname2, siteadd/scity/szip, mailadd/mcity, parval, landval, improvval, parusecode/parusedesc, saledate, and legdecfull. Guilford covers two large municipalities -- Greensboro and High Point -- whose parcel data are both captured in this single county layer; the scity field distinguishes them. Guilford County GIS Hub (gcgis.guilfordcountync.gov) exposes boundary and road layers but not the full parcel-plus-owner REST path; NC1Map remains the only public REST route for owner-level queries. Verified 2026-05-15: cntyfips='081' returns Greensboro and High Point addresses. Quarterly update cycle from county to GICC may lag recent deed recordings by up to 3 months."
3132
4542
  },
3133
4543
  {
3134
4544
  id: "nc-durham",
@@ -3172,7 +4582,7 @@ var north_carolina_default = {
3172
4582
  url: "https://live-durhamnc.opendata.arcgis.com/",
3173
4583
  email: null
3174
4584
  },
3175
- notes: "Durham County (Durham, pop. 330,000) parcel layer from City/County joint GIS. 75+ fields confirmed including PIN, REID, PROPERTY_OWNER, LOCATION_ADDR, PHYADDR_CITY/STATE/ZIP, OWNER_MAIL_1/2/3/CITY/STATE/ZIP/PLUS_4, TOTAL_LAND_VALUE_ASSESSED, TOTAL_BLDG_VALUE_ASSESSED, TOTAL_PROP_VALUE, DEED_DATE, DEED_BOOK, DEED_PAGE, ACREAGE, ZONING, LAND_CLASS, TOWNSHIP, PKG_SALE_DATE, PKG_SALE_PRICE. PROPERTY_OWNER field uses semicolon-delimited co-owner format (e.g., 'SMITH, CAROLYN D;SMITH, FRANK Q'). Verified 2026-05-15: returns Durham addresses."
4585
+ notes: "Durham County (Research Triangle, pop. 330,000) provides its parcel layer via a City/County joint GIS operation separate from NC1Map. The layer exposes 75+ confirmed fields. Key identifiers: PIN (parcel identification number) and REID (real estate ID, the assessor account key). PROPERTY_OWNER uses a semicolon-delimited format for co-owners (e.g., 'SMITH, CAROLYN D;SMITH, FRANK Q'). Address fields include LOCATION_ADDR and PHYADDR_CITY/STATE/ZIP for the site, plus OWNER_MAIL_1/2/3/CITY/STATE/ZIP/PLUS_4 for the mailing address. Valuation fields include TOTAL_LAND_VALUE_ASSESSED, TOTAL_BLDG_VALUE_ASSESSED, and TOTAL_PROP_VALUE. Deed fields DEED_DATE, DEED_BOOK, and DEED_PAGE point directly to recorded instruments. ZONING, LAND_CLASS, and TOWNSHIP provide planning context. Verified 2026-05-15: PROPERTY_OWNER queries return Durham addresses. For fuller record detail, the Durham County Tax Administration property search at dconc.gov is the authoritative portal."
3176
4586
  },
3177
4587
  {
3178
4588
  id: "nc-cumberland",
@@ -3212,7 +4622,7 @@ var north_carolina_default = {
3212
4622
  url: "https://www.nconemap.gov/pages/parcels",
3213
4623
  email: null
3214
4624
  },
3215
- notes: "Cumberland County (Fayetteville, pop. 335,000; includes Fort Liberty/Fort Bragg military installation) served via NC1Map statewide parcel layer. Filter by cntyfips='051'. Verified 2026-05-15: returns Cumberland County addresses."
4625
+ notes: "Cumberland County (Fayetteville, pop. 335,000; includes Fort Liberty, formerly Fort Bragg) is served via the NC1Map statewide parcel aggregation (services.gis.nc.gov). Filter by cntyfips='051'. The NC1Map field schema applies: ownname/ownname2, siteadd/scity/szip, mailadd/mcity/mstate/mzip, parval, landval, improvval, parusecode/parusedesc, saledate, and legdecfull. Cumberland's parcel inventory includes the substantial federal footprint of Fort Liberty; military installation parcels typically appear with US Government as owner and may carry limited attribute data. The county seat Fayetteville and surrounding municipalities like Spring Lake and Hope Mills are fully covered. Quarterly update cycle from county to GICC applies. For current ownership, the Cumberland County Tax Administration portal at co.cumberland.nc.us handles property search by owner, address, and parcel ID. Cumberland County also maintains an open data portal at opendata.co.cumberland.nc.us with downloadable parcel layers."
3216
4626
  },
3217
4627
  {
3218
4628
  id: "nc-buncombe",
@@ -3255,7 +4665,7 @@ var north_carolina_default = {
3255
4665
  url: "https://www.buncombecounty.org/governing/depts/gis/",
3256
4666
  email: null
3257
4667
  },
3258
- notes: "Buncombe County (Asheville, pop. 275,000 county-wide) property layer. Fields include pinnum (15-digit parcel identifier), owner (owner name), HouseNumber, NumberSuffix, TaxYear, DeedBook, DeedPage, PlatBook, PlatPage, SubName, SubLot, SubBlock, SubSect, CondoUnit, CondoBuilding. Service is property_bc_dis (dis = district), layer 1 of 3 (layer 0 = County Boundary, layer 2 = Street Centerline). Verified 2026-05-15: SMITH returns Asheville-area addresses."
4668
+ notes: "Buncombe County (Asheville, pop. 275,000) hosts its parcel layer on a county-direct ArcGIS service. The service name is property_bc_dis (dis = district); layer 1 of 3 is the parcel polygon layer (layer 0 is County Boundary, layer 2 is Street Centerline). The primary parcel identifier is pinnum, a 15-digit number. The owner field is named owner (lowercase). Building fields include HouseNumber, NumberSuffix, TaxYear, DeedBook, DeedPage, PlatBook, PlatPage, SubName, SubLot, SubBlock, SubSect, CondoUnit, and CondoBuilding. Data is refreshed daily at 6 a.m. on weekdays from CAMA sources. Verified 2026-05-15: SMITH returns Asheville-area addresses. Buncombe County's GIS portal (gis.buncombenc.gov/buncomap) is the primary web interface. For assessment detail, the SpatialEst Property Record Search at prc-buncombe.spatialest.com is the county-linked assessor lookup. Hurricane Helene (September 2024) caused significant disruptions in Asheville; some parcels in flood-affected areas may carry amended ownership or assessment data."
3259
4669
  }
3260
4670
  ]
3261
4671
  };
@@ -3392,7 +4802,7 @@ var ohio_default = {
3392
4802
  url: "https://data-franklincova.opendata.arcgis.com/",
3393
4803
  email: null
3394
4804
  },
3395
- notes: "115+ fields confirmed. Includes OWNERNME1/2/3, SITEADDRESS, PSTLADDRES, PSTLCITYSTZIP, CLASSCD/CLASSDSCRP, NBHDCD, CVTTXCD (tax code), 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 results. Parcel ID format: 'XXX-XXXXXX'. Service uses Local Government Information Model (LGIM) schema."
4805
+ 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."
3396
4806
  },
3397
4807
  {
3398
4808
  id: "oh-cuyahoga",
@@ -3484,6 +4894,84 @@ var ohio_default = {
3484
4894
  email: null
3485
4895
  },
3486
4896
  notes: "99 fields confirmed. This is the CAGIS (Cincinnati Area Geographic Information System) cadastral parcel polygon layer. Key fields include: PARCELID (12-digit parcel ID), AUDPCLID (auditor parcel ID), OWNNM1/OWNNM2 (owner names), OWNAD1/OWNAD1A/OWNAD2 (owner address), LGLDS1/LGLDS2/LGLDS3 (legal description), PREVOWN1/PREVOWN2 (previous owners), BOOK/PAGE (deed reference), TAXDST (tax district), MLTOWN (municipality), GRPPCLID (group parcel ID), PNTPCLID (point parcel ID), PROPTYID (property ID). Condo layers are separate (layers 5 and 6). Layer 2 (Hamilton County Parcel Attributes) joins assessment data. Layer 0 is the polygon geometry with ownership. Owner query confirmed: UPPER(OWNNM1) LIKE '%SMITH%' returns real parcels. Hamilton County, OH is the Cincinnati metropolitan area (FIPS 39061)."
4897
+ },
4898
+ {
4899
+ id: "oh-summit",
4900
+ state: "OH",
4901
+ stateName: "Ohio",
4902
+ stateSlug: "ohio",
4903
+ county: "Summit",
4904
+ countySlug: "summit-county",
4905
+ countyFips: "39153",
4906
+ hasPublicRest: true,
4907
+ endpoints: [
4908
+ {
4909
+ url: "https://maps.summitcounty.org/arcgis/rest/services/Maps/ParcelQuery/MapServer/0",
4910
+ serviceType: "MapServer",
4911
+ layerIndex: 0,
4912
+ layerName: "ParcelQuery",
4913
+ supportsQuery: true,
4914
+ corsEnabled: null,
4915
+ searchFields: [
4916
+ { name: "TXTACCOUNT", label: "Account Number", searchable: true },
4917
+ { name: "OwnershipTable_OWNER", label: "Owner Name", searchable: true },
4918
+ { name: "OwnershipTable_SITUS", label: "Situs Address", searchable: true },
4919
+ { name: "OwnershipTable_ADDRESS1", label: "Owner Mailing Address", searchable: false },
4920
+ { name: "OwnershipTable_CITY", label: "Owner City", searchable: false }
4921
+ ],
4922
+ sampleQuery: "https://maps.summitcounty.org/arcgis/rest/services/Maps/ParcelQuery/MapServer/0/query?where=UPPER(OwnershipTable_OWNER)%20LIKE%20UPPER('%25SMITH%25')&outFields=TXTACCOUNT,OwnershipTable_OWNER,OwnershipTable_SITUS&returnGeometry=false&f=json&resultRecordCount=10",
4923
+ license: "public",
4924
+ licenseUrl: "https://data-summitgis.opendata.arcgis.com/",
4925
+ status: "live",
4926
+ lastVerified: "2026-05-30",
4927
+ verifiedBy: "manual"
4928
+ }
4929
+ ],
4930
+ contact: {
4931
+ department: "Summit County Fiscal Office / GIS",
4932
+ url: "https://data-summitgis.opendata.arcgis.com/",
4933
+ email: null
4934
+ },
4935
+ notes: "Summit County, Ohio (Akron metro, county seat Akron, pop. ~540K) serves parcels via a ParcelQuery MapServer joining the county's OwnershipTable. In Ohio the county Fiscal Officer / Auditor is the statutory parcel-data custodian. Owner name is OwnershipTable_OWNER; owner mailing is OwnershipTable_ADDRESS1/ADDRESS2/CITY/STATE/ZIP; the site address is OwnershipTable_SITUS (with INCAREOF); identifiers are TXTACCOUNT, OwnershipTable_ACCOUNT, OwnershipTable_SERIAL and the integer Parcels_GISID. Field names carry the OwnershipTable_ join prefix; use them as-is in WHERE clauses. Owner search uses UPPER(OwnershipTable_OWNER) LIKE. Verified live 2026-05-30 (OwnershipTable_OWNER = STOUT PAUL DOUGLAS)."
4936
+ },
4937
+ {
4938
+ id: "oh-lucas",
4939
+ state: "OH",
4940
+ stateName: "Ohio",
4941
+ stateSlug: "ohio",
4942
+ county: "Lucas",
4943
+ countySlug: "lucas-county",
4944
+ countyFips: "39095",
4945
+ hasPublicRest: true,
4946
+ endpoints: [
4947
+ {
4948
+ url: "https://lcaudgis.co.lucas.oh.us/gisaudserver/rest/services/Hosted/OSE_ParcelsAddresses_AREIS/FeatureServer/0",
4949
+ serviceType: "FeatureServer",
4950
+ layerIndex: 0,
4951
+ layerName: "Parcels Addresses (AREIS)",
4952
+ supportsQuery: true,
4953
+ corsEnabled: null,
4954
+ searchFields: [
4955
+ { name: "assessor_num", label: "Assessor Number (8-digit)", searchable: true },
4956
+ { name: "parid", label: "Parcel ID (7-digit)", searchable: true },
4957
+ { name: "owner", label: "Owner Name", searchable: true },
4958
+ { name: "property_address", label: "Property Address", searchable: true },
4959
+ { name: "mailing_address", label: "Mailing Address", searchable: false }
4960
+ ],
4961
+ sampleQuery: "https://lcaudgis.co.lucas.oh.us/gisaudserver/rest/services/Hosted/OSE_ParcelsAddresses_AREIS/FeatureServer/0/query?where=UPPER(owner)%20LIKE%20UPPER('%25SMITH%25')&outFields=assessor_num,owner,property_address&returnGeometry=false&f=json&resultRecordCount=10",
4962
+ license: "public",
4963
+ licenseUrl: "https://auditor-lucascountyohio.hub.arcgis.com/",
4964
+ status: "live",
4965
+ lastVerified: "2026-05-30",
4966
+ verifiedBy: "manual"
4967
+ }
4968
+ ],
4969
+ contact: {
4970
+ department: "Lucas County Auditor (AREIS) GIS",
4971
+ url: "https://auditor-lucascountyohio.hub.arcgis.com/",
4972
+ email: null
4973
+ },
4974
+ notes: "Lucas County, Ohio (Toledo metro, county seat Toledo, pop. ~430K) serves parcels from the Lucas County Auditor's AREIS (Assessment Real Estate Information System) via a hosted FeatureServer. Owner name is owner; the site address is property_address (full street/city/state/zip in one field); mailing is mailing_address; identifiers are assessor_num (8-digit) and parid (7-digit). The county's canonical Cadastre_Dataset FeatureServer (layer 8) carries only lot/block geometry with no owner field -- use OSE_ParcelsAddresses_AREIS for owner-name queries. Owner search uses UPPER(owner) LIKE. Verified live 2026-05-30 (owner = MARTRE TAMERA L & BILL)."
3487
4975
  }
3488
4976
  ]
3489
4977
  };
@@ -3728,6 +5216,137 @@ var pennsylvania_default = {
3728
5216
  ]
3729
5217
  };
3730
5218
 
5219
+ // data/rhode-island.json
5220
+ var rhode_island_default = {
5221
+ stateSlug: "rhode-island",
5222
+ stateName: "Rhode Island",
5223
+ stateAbbrev: "RI",
5224
+ lastUpdated: "2026-05-15",
5225
+ counties: [
5226
+ {
5227
+ id: "ri-providence",
5228
+ state: "RI",
5229
+ stateName: "Rhode Island",
5230
+ stateSlug: "rhode-island",
5231
+ county: "Providence",
5232
+ countySlug: "providence-county",
5233
+ countyFips: "44007",
5234
+ hasPublicRest: false,
5235
+ endpoints: [],
5236
+ contact: {
5237
+ department: "RIGIS (Rhode Island Geographic Information System) / RI Division of Statewide Planning",
5238
+ url: "https://www.rigis.org/",
5239
+ email: null
5240
+ },
5241
+ 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."
5242
+ }
5243
+ ]
5244
+ };
5245
+
5246
+ // data/south-carolina.json
5247
+ var south_carolina_default = {
5248
+ stateSlug: "south-carolina",
5249
+ stateName: "South Carolina",
5250
+ stateAbbrev: "SC",
5251
+ lastUpdated: "2026-05-15",
5252
+ counties: [
5253
+ {
5254
+ id: "sc-greenville",
5255
+ state: "SC",
5256
+ stateName: "South Carolina",
5257
+ stateSlug: "south-carolina",
5258
+ county: "Greenville",
5259
+ countySlug: "greenville-county",
5260
+ countyFips: "45045",
5261
+ hasPublicRest: true,
5262
+ endpoints: [
5263
+ {
5264
+ url: "https://www.gcgis.org/arcgis/rest/services/GreenvilleJS/Map_Layers_JS/MapServer/52",
5265
+ serviceType: "MapServer",
5266
+ layerIndex: 52,
5267
+ layerName: "Tax Parcel",
5268
+ supportsQuery: true,
5269
+ corsEnabled: null,
5270
+ searchFields: [
5271
+ { name: "PIN", label: "Parcel Identification Number", searchable: true },
5272
+ { name: "OWNAM1", label: "Owner Name 1", searchable: true },
5273
+ { name: "OWNAM2", label: "Owner Name 2", searchable: false },
5274
+ { name: "STREET", label: "Street Address", searchable: true },
5275
+ { name: "CITY", label: "City", searchable: false },
5276
+ { name: "STATE", label: "State", searchable: false },
5277
+ { name: "ZIP5", label: "ZIP Code", searchable: false },
5278
+ { name: "NAMECO", label: "County Name", searchable: false },
5279
+ { name: "POWNNM", label: "Previous Owner Name", searchable: false },
5280
+ { name: "DEEDDATE", label: "Deed Date", searchable: false },
5281
+ { name: "DIST", label: "Tax District", searchable: false },
5282
+ { name: "LANDUSE", label: "Land Use Code", searchable: false },
5283
+ { name: "DESCR", label: "Description", searchable: false },
5284
+ { name: "SUBDIV", label: "Subdivision", searchable: false }
5285
+ ],
5286
+ sampleQuery: "https://www.gcgis.org/arcgis/rest/services/GreenvilleJS/Map_Layers_JS/MapServer/52/query?where=UPPER(OWNAM1)+LIKE+UPPER('%25SMITH%25')&outFields=PIN,OWNAM1,STREET,CITY,STATE,ZIP5&returnGeometry=false&f=json&resultRecordCount=10",
5287
+ license: "public",
5288
+ licenseUrl: "https://www.gcgis.org/",
5289
+ status: "live",
5290
+ lastVerified: "2026-05-15",
5291
+ verifiedBy: "manual"
5292
+ }
5293
+ ],
5294
+ contact: {
5295
+ department: "Greenville County GIS Division",
5296
+ url: "https://www.gcgis.org/",
5297
+ email: "gis@greenvillecounty.org"
5298
+ },
5299
+ 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."
5300
+ },
5301
+ {
5302
+ id: "sc-charleston",
5303
+ state: "SC",
5304
+ stateName: "South Carolina",
5305
+ stateSlug: "south-carolina",
5306
+ county: "Charleston",
5307
+ countySlug: "charleston-county",
5308
+ countyFips: "45019",
5309
+ hasPublicRest: true,
5310
+ endpoints: [
5311
+ {
5312
+ url: "https://gisccapps.charlestoncounty.org/arcgis/rest/services/GIS_VIEWER/Parcel_Search/MapServer/4",
5313
+ serviceType: "MapServer",
5314
+ layerIndex: 4,
5315
+ layerName: "Parcels",
5316
+ supportsQuery: true,
5317
+ corsEnabled: null,
5318
+ searchFields: [
5319
+ { name: "PID", label: "Parcel ID (FEATURES.SDE.P_POLY_PARCEL.PID)", searchable: true },
5320
+ { name: "GPIN", label: "GIS Parcel ID (FEATURES.SDE.P_POLY_PARCEL.GPIN)", searchable: true },
5321
+ { name: "OWNER1", label: "Owner Name 1 (FEATURES.SDE.CAMA.OWNER1)", searchable: true },
5322
+ { name: "OWNER2", label: "Owner Name 2 (FEATURES.SDE.CAMA.OWNER2)", searchable: false },
5323
+ { name: "MAIL_ST_NAME", label: "Mailing Street Name (FEATURES.SDE.CAMA.MAIL_ST_NAME)", searchable: false },
5324
+ { name: "MAIL_ST_NO", label: "Mailing Street Number (FEATURES.SDE.CAMA.MAIL_ST_NO)", searchable: false },
5325
+ { name: "MAIL_CITY", label: "Mailing City (FEATURES.SDE.CAMA.MAIL_CITY)", searchable: false },
5326
+ { name: "MAIL_STATE", label: "Mailing State (FEATURES.SDE.CAMA.MAIL_STATE)", searchable: false },
5327
+ { name: "MAIL_ZIP", label: "Mailing ZIP (FEATURES.SDE.CAMA.MAIL_ZIP)", searchable: false },
5328
+ { name: "TAX_DISTRICT", label: "Tax District (FEATURES.SDE.CAMA.TAX_DISTRICT)", searchable: false },
5329
+ { name: "LEGAL_DESCR", label: "Legal Description (FEATURES.SDE.CAMA.LEGAL_DESCR)", searchable: false },
5330
+ { name: "SUBDIVISION", label: "Subdivision (FEATURES.SDE.CAMA.SUBDIVISION)", searchable: false }
5331
+ ],
5332
+ 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",
5333
+ license: "public",
5334
+ licenseUrl: "https://charleston-county-gis-chascogis.hub.arcgis.com/",
5335
+ status: "live",
5336
+ lastVerified: "2026-05-15",
5337
+ verifiedBy: "manual"
5338
+ }
5339
+ ],
5340
+ contact: {
5341
+ department: "Charleston County GIS (BCS / Charleston County GIS)",
5342
+ url: "https://charleston-county-gis-chascogis.hub.arcgis.com/",
5343
+ email: null
5344
+ },
5345
+ 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.'
5346
+ }
5347
+ ]
5348
+ };
5349
+
3731
5350
  // data/tennessee.json
3732
5351
  var tennessee_default = {
3733
5352
  stateSlug: "tennessee",
@@ -3835,7 +5454,7 @@ var tennessee_default = {
3835
5454
  url: "https://www.shelbycountytn.gov/467/REGIS-Regional-GIS",
3836
5455
  email: null
3837
5456
  },
3838
- notes: "Shelby County (Memphis, pop. 934,000 county) ReGIS CurrentParcels layer. 47 fields confirmed including PARCELID, PARID, MAP, OWNER, OWNER_EXT, OWN_ADRNO/ADRPREDIR/ADRSTR/ADRSUF/ADRPOSTDIR, OWN_CITY/STATE/UNITDESC/UNITNO, OWN_ADDR1/2/3, OWN_ZIP/ZIP4, OWN_NOTE1/2, PAR_ADRNO/ADRSTR/ADRSUF, PAR_ADDR1, PAR_ZIP, NBHD, CLASS, LUC, LIVUNIT, ZONING, SUBDIV, SUBLOT, TPARCEL, PAID, LANDUSE, MUNI. Verified 2026-05-15: SMITH returns results from Germantown, Arlington, Unincorporated areas (MUNI field). ReGIS serves Memphis metro including Bartlett, Collierville, Germantown, Lakeland, Millington."
5457
+ 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."
3839
5458
  },
3840
5459
  {
3841
5460
  id: "tn-hamilton",
@@ -3931,7 +5550,7 @@ var texas_default = {
3931
5550
  url: "https://geo-harriscounty.opendata.arcgis.com/",
3932
5551
  email: null
3933
5552
  },
3934
- notes: "62 fields confirmed via live endpoint. Owner name search returns real results via UPPER() LIKE on owner_name_1. Up to 3 owner slots (owner_name_1/2/3) with corresponding ownership percentages. Also exposes land_value, bld_value, total_appraised_val, land_use, new_owner_date. Max record count = 1000 per query. The HCAD GIS server also hosts HCAD_MUD (Municipal Utility Districts) in a sibling service."
5553
+ 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."
3935
5554
  },
3936
5555
  {
3937
5556
  id: "tx-travis",
@@ -3972,7 +5591,7 @@ var texas_default = {
3972
5591
  url: "https://tnr-traviscountytx.opendata.arcgis.com/",
3973
5592
  email: null
3974
5593
  },
3975
- notes: "20 fields confirmed. This layer is geometry + parcel ID + address only \u2014 owner name is NOT in the public TCAD_public REST layer. Parcel data comes from Travis Central Appraisal District (TCAD). Owner name search requires the TCAD property search portal at tcad.org, not this REST endpoint. A second endpoint at taxmaps.traviscountytx.gov/arcgis/rest/services/Parcels/MapServer also exists but did not respond in testing."
5594
+ 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."
3976
5595
  },
3977
5596
  {
3978
5597
  id: "tx-tarrant",
@@ -4013,7 +5632,7 @@ var texas_default = {
4013
5632
  url: "https://gis-tad.opendata.arcgis.com/",
4014
5633
  email: null
4015
5634
  },
4016
- notes: "56 fields confirmed including OWNER_NAME, SITUS_ADDR, OWNER_ADDR, DEED_DATE, DEED_BOOK, DEED_PAGE, YEAR_BUILT, LIVING_ARE, BEDROOMS, BATHROOMS, SW_POOL, LAND_ACRES, APPRAISEDV, LAND_VALUE, IMPR_VALUE, TOTAL_VALU. Owner query returns real results. Some records may not appear in UPPER() LIKE queries due to the SB247 privacy flag on certain Texas property owners \u2014 drop UPPER() for broader results when needed. A sibling TADParcelsApp/MapServer/0 exists but only has TAXPIN (geometry-only layer for the appraisal district viewer)."
5635
+ 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."
4017
5636
  },
4018
5637
  {
4019
5638
  id: "tx-dallas",
@@ -4061,7 +5680,7 @@ var texas_default = {
4061
5680
  url: "https://www.dallascad.org/",
4062
5681
  email: null
4063
5682
  },
4064
- 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. The Texas SB247 privacy flag may suppress some owner names in a future data refresh; query TAXPANAME2 as fallback. maxRecordCount=1000."
5683
+ 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."
4065
5684
  },
4066
5685
  {
4067
5686
  id: "tx-bexar",
@@ -4110,7 +5729,199 @@ var texas_default = {
4110
5729
  url: "https://www.bexar.org/2720/GIS-Data",
4111
5730
  email: null
4112
5731
  },
4113
- 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 SB247 privacy exemption may suppress certain owner names."
5732
+ 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."
5733
+ },
5734
+ {
5735
+ id: "tx-collin",
5736
+ state: "TX",
5737
+ stateName: "Texas",
5738
+ stateSlug: "texas",
5739
+ county: "Collin",
5740
+ countySlug: "collin-county",
5741
+ countyFips: "48085",
5742
+ hasPublicRest: true,
5743
+ endpoints: [
5744
+ {
5745
+ url: "https://gismaps.cityofallen.org/arcgis/rest/services/ReferenceData/Collin_County_Appraisal_District_Parcels/MapServer/1",
5746
+ serviceType: "MapServer",
5747
+ layerIndex: 1,
5748
+ layerName: "Collin County Appraisal District Parcels",
5749
+ supportsQuery: true,
5750
+ corsEnabled: null,
5751
+ searchFields: [
5752
+ { name: "GIS_DBO_AD_Entity_file_as_name", label: "Owner Name", searchable: true },
5753
+ { name: "GIS_DBO_AD_Entity_situs_display", label: "Situs Address", searchable: true },
5754
+ { name: "GIS_DBO_Parcel_PROP_ID", label: "Property ID (key)", searchable: true },
5755
+ { name: "GIS_DBO_Parcel_GEO_ID", label: "Geographic ID", searchable: true }
5756
+ ],
5757
+ sampleQuery: "https://gismaps.cityofallen.org/arcgis/rest/services/ReferenceData/Collin_County_Appraisal_District_Parcels/MapServer/1/query?where=UPPER(GIS_DBO_AD_Entity_file_as_name)%20LIKE%20UPPER('%25SMITH%25')&outFields=GIS_DBO_Parcel_PROP_ID,GIS_DBO_AD_Entity_file_as_name,GIS_DBO_AD_Entity_situs_display&returnGeometry=false&f=json&resultRecordCount=10",
5758
+ license: "public",
5759
+ licenseUrl: "https://www.collincad.org/",
5760
+ status: "live",
5761
+ lastVerified: "2026-05-30",
5762
+ verifiedBy: "manual"
5763
+ }
5764
+ ],
5765
+ contact: {
5766
+ department: "Collin Central Appraisal District (CCAD), hosted via City of Allen GIS",
5767
+ url: "https://www.collincad.org/",
5768
+ email: null
5769
+ },
5770
+ 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."
5771
+ },
5772
+ {
5773
+ id: "tx-denton",
5774
+ state: "TX",
5775
+ stateName: "Texas",
5776
+ stateSlug: "texas",
5777
+ county: "Denton",
5778
+ countySlug: "denton-county",
5779
+ countyFips: "48121",
5780
+ hasPublicRest: true,
5781
+ endpoints: [
5782
+ {
5783
+ url: "https://gis.dentoncounty.gov/arcgis/rest/services/Parcels/MapServer/0",
5784
+ serviceType: "MapServer",
5785
+ layerIndex: 0,
5786
+ layerName: "Parcels",
5787
+ supportsQuery: true,
5788
+ corsEnabled: null,
5789
+ searchFields: [
5790
+ { name: "OWNER_NAME", label: "Owner Name", searchable: true },
5791
+ { name: "SITUS", label: "Situs Address", searchable: true },
5792
+ { name: "CITY", label: "City", searchable: true },
5793
+ { name: "prop_id", label: "Property ID (DCAD)", searchable: true }
5794
+ ],
5795
+ sampleQuery: "https://gis.dentoncounty.gov/arcgis/rest/services/Parcels/MapServer/0/query?where=UPPER(OWNER_NAME)%20LIKE%20UPPER('%25SMITH%25')&outFields=OWNER_NAME,SITUS,CITY&returnGeometry=false&f=json&resultRecordCount=10",
5796
+ license: "public",
5797
+ licenseUrl: "https://gis.dentoncounty.gov/",
5798
+ status: "live",
5799
+ lastVerified: "2026-05-30",
5800
+ verifiedBy: "manual"
5801
+ }
5802
+ ],
5803
+ contact: {
5804
+ department: "Denton County GIS / Denton Central Appraisal District (DCAD)",
5805
+ url: "https://gis.dentoncounty.gov/",
5806
+ email: null
5807
+ },
5808
+ 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."
5809
+ },
5810
+ {
5811
+ id: "tx-el-paso",
5812
+ state: "TX",
5813
+ stateName: "Texas",
5814
+ stateSlug: "texas",
5815
+ county: "El Paso",
5816
+ countySlug: "el-paso-county",
5817
+ countyFips: "48141",
5818
+ hasPublicRest: true,
5819
+ endpoints: [
5820
+ {
5821
+ url: "https://gis.elpasotexas.gov/arcgis/rest/services/EPParcels/FeatureServer/0",
5822
+ serviceType: "FeatureServer",
5823
+ layerIndex: 0,
5824
+ layerName: "EP Parcels",
5825
+ supportsQuery: true,
5826
+ corsEnabled: null,
5827
+ searchFields: [
5828
+ { name: "NAMEREAL", label: "Owner Name", searchable: true },
5829
+ { name: "LOCADDRESS", label: "Location Address", searchable: true },
5830
+ { name: "PIDN", label: "Parcel ID Number", searchable: true }
5831
+ ],
5832
+ sampleQuery: "https://gis.elpasotexas.gov/arcgis/rest/services/EPParcels/FeatureServer/0/query?where=UPPER(NAMEREAL)%20LIKE%20UPPER('%25SMITH%25')&outFields=PIDN,NAMEREAL,LOCADDRESS&returnGeometry=false&f=json&resultRecordCount=10",
5833
+ license: "public",
5834
+ licenseUrl: "https://gis.elpasotexas.gov/",
5835
+ status: "live",
5836
+ lastVerified: "2026-05-30",
5837
+ verifiedBy: "manual"
5838
+ }
5839
+ ],
5840
+ contact: {
5841
+ department: "City of El Paso GIS / El Paso Central Appraisal District (EPCAD)",
5842
+ url: "https://gis.elpasotexas.gov/",
5843
+ email: null
5844
+ },
5845
+ notes: "El Paso County, Texas (county seat El Paso, US\u2013Mexico border metro, pop. ~870K) serves parcels via a City of El Paso ArcGIS FeatureServer covering the county. Owner name is NAMEREAL; the combined location address is LOCADDRESS; the parcel identifier is PIDN (a 20-character EPCAD ID). Coordinates are Texas State Plane (WKID 2277). Owner LIKE query confirmed live 2026-05-30. Texas Tax Code \xA725.025 confidentiality provisions apply."
5846
+ },
5847
+ {
5848
+ id: "tx-fort-bend",
5849
+ state: "TX",
5850
+ stateName: "Texas",
5851
+ stateSlug: "texas",
5852
+ county: "Fort Bend",
5853
+ countySlug: "fort-bend-county",
5854
+ countyFips: "48157",
5855
+ hasPublicRest: true,
5856
+ endpoints: [
5857
+ {
5858
+ url: "https://gisweb.fortbendcountytx.gov/arcgis/rest/services/General/Parcels/MapServer/0",
5859
+ serviceType: "MapServer",
5860
+ layerIndex: 0,
5861
+ layerName: "Parcels",
5862
+ supportsQuery: true,
5863
+ corsEnabled: null,
5864
+ searchFields: [
5865
+ { name: "CAD_Reference_Number", label: "CAD Reference Number (R-number)", searchable: true },
5866
+ { name: "PropertyNumber", label: "Property Number", searchable: true },
5867
+ { name: "OwnerName", label: "Owner Name", searchable: true },
5868
+ { name: "Situs", label: "Situs Address", searchable: true },
5869
+ { name: "OwnerAddress1", label: "Owner Mailing Address", searchable: false },
5870
+ { name: "OwnerCity", label: "Owner City", searchable: false }
5871
+ ],
5872
+ 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",
5873
+ license: "public",
5874
+ licenseUrl: "https://fbcad-open-data-hub-fortbend.hub.arcgis.com/",
5875
+ status: "live",
5876
+ lastVerified: "2026-05-30",
5877
+ verifiedBy: "manual"
5878
+ }
5879
+ ],
5880
+ contact: {
5881
+ department: "Fort Bend County GIS / Fort Bend Central Appraisal District (FBCAD)",
5882
+ url: "https://www.fbcad.org/",
5883
+ email: null
5884
+ },
5885
+ 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."
5886
+ },
5887
+ {
5888
+ id: "tx-williamson",
5889
+ state: "TX",
5890
+ stateName: "Texas",
5891
+ stateSlug: "texas",
5892
+ county: "Williamson",
5893
+ countySlug: "williamson-county",
5894
+ countyFips: "48491",
5895
+ hasPublicRest: true,
5896
+ endpoints: [
5897
+ {
5898
+ url: "https://gis.wilco.org/arcgis/rest/services/public/county_wcad_parcels/MapServer/0",
5899
+ serviceType: "MapServer",
5900
+ layerIndex: 0,
5901
+ layerName: "WCAD Parcels",
5902
+ supportsQuery: true,
5903
+ corsEnabled: null,
5904
+ searchFields: [
5905
+ { name: "PropertyNumber", label: "Property Number (R-number)", searchable: true },
5906
+ { name: "PARCELID", label: "Parcel ID", searchable: true },
5907
+ { name: "FullName", label: "Owner Name (formatted)", searchable: true },
5908
+ { name: "PrimaryOwner", label: "Primary Owner", searchable: true },
5909
+ { name: "MailingAddress", label: "Mailing Address", searchable: false }
5910
+ ],
5911
+ sampleQuery: "https://gis.wilco.org/arcgis/rest/services/public/county_wcad_parcels/MapServer/0/query?where=UPPER(FullName)%20LIKE%20UPPER('%25SMITH%25')&outFields=PropertyNumber,FullName,MailingAddress&returnGeometry=false&f=json&resultRecordCount=10",
5912
+ license: "public",
5913
+ licenseUrl: "https://www.wcad.org/",
5914
+ status: "live",
5915
+ lastVerified: "2026-05-30",
5916
+ verifiedBy: "manual"
5917
+ }
5918
+ ],
5919
+ contact: {
5920
+ department: "Williamson County GIS / Williamson Central Appraisal District (WCAD)",
5921
+ url: "https://www.wcad.org/",
5922
+ email: null
5923
+ },
5924
+ notes: "Williamson County, Texas (Round Rock / Georgetown / Cedar Park, north Austin metro, pop. ~750K) serves a parcel layer updated daily from Williamson Central Appraisal District (WCAD) via Williamson County GIS (gis.wilco.org). Owner name is available as FullName (formatted) and PrimaryOwner, with NameFirst/NameMiddle/NameLast and CNVYNAME (conveyance name) components; mailing is MailingAddress; identifiers are PropertyNumber (R-number, e.g. R-01-1100-0012-0009) and PARCELID. Owner search uses UPPER(FullName) LIKE. Verified live 2026-05-30 (FullName = GOVELLAN, JUAN). Texas Tax Code \xA725.025 confidentiality provisions apply to protected persons."
4114
5925
  }
4115
5926
  ]
4116
5927
  };
@@ -4212,7 +6023,7 @@ var utah_default = {
4212
6023
  url: "https://gis.utah.gov/data/cadastre/parcels/",
4213
6024
  email: null
4214
6025
  },
4215
- notes: "29 fields confirmed (UGRC LIR schema): COUNTY_NAME, COUNTY_ID, ASSESSOR_SRC, BOUNDARY_SRC, DISCLAIMER, CURRENT_ASOF, PARCEL_ID, 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. NOTE: Owner name is NOT on this public LIR layer. Covers Bountiful, Kaysville, Layton, and all of Davis County. Endpoint verified live 2026-05-15. Capabilities: Query, Extract. maxRecordCount=2000."
6026
+ 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."
4216
6027
  },
4217
6028
  {
4218
6029
  id: "ut-utah",
@@ -4258,7 +6069,7 @@ var utah_default = {
4258
6069
  url: "https://gis.utah.gov/data/cadastre/parcels/",
4259
6070
  email: null
4260
6071
  },
4261
- notes: "29 fields confirmed (UGRC LIR schema): same structure as Salt Lake and Davis LIR layers. NOTE: Owner name is NOT on this public LIR layer. Covers Provo, Orem, American Fork, Springville, and all of Utah County (2nd most populous in UT). Capabilities: Query, Extract. maxRecordCount=2000."
6072
+ 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."
4262
6073
  },
4263
6074
  {
4264
6075
  id: "ut-weber",
@@ -4304,7 +6115,68 @@ var utah_default = {
4304
6115
  url: "https://gis.utah.gov/data/cadastre/parcels/",
4305
6116
  email: null
4306
6117
  },
4307
- notes: "29 fields confirmed (UGRC LIR schema): same structure as other UT county LIR layers. NOTE: Owner name is NOT on this public LIR layer. Covers Ogden and all of Weber County. Capabilities: Query, Extract. maxRecordCount=2000."
6118
+ 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."
6119
+ }
6120
+ ]
6121
+ };
6122
+
6123
+ // data/vermont.json
6124
+ var vermont_default = {
6125
+ stateSlug: "vermont",
6126
+ stateName: "Vermont",
6127
+ stateAbbrev: "VT",
6128
+ lastUpdated: "2026-05-15",
6129
+ counties: [
6130
+ {
6131
+ id: "vt-chittenden",
6132
+ state: "VT",
6133
+ stateName: "Vermont",
6134
+ stateSlug: "vermont",
6135
+ county: "Chittenden",
6136
+ countySlug: "chittenden-county",
6137
+ countyFips: "50007",
6138
+ hasPublicRest: true,
6139
+ endpoints: [
6140
+ {
6141
+ url: "https://services1.arcgis.com/BkFxaEFNwHqX3tAw/arcgis/rest/services/FS_VCGI_VTPARCELS_WM_NOCACHE_v2/FeatureServer/1",
6142
+ serviceType: "FeatureServer",
6143
+ layerIndex: 1,
6144
+ layerName: "Cadastral_VTPARCELS_poly (active parcels)",
6145
+ supportsQuery: true,
6146
+ corsEnabled: null,
6147
+ searchFields: [
6148
+ { name: "SPAN", label: "School Property Account Number (SPAN) \u2014 VT parcel key", searchable: true },
6149
+ { name: "TOWN", label: "Town Numeric ID", searchable: true },
6150
+ { name: "TNAME", label: "Town Name", searchable: true },
6151
+ { name: "OWNER1", label: "Owner Name (line 1)", searchable: true },
6152
+ { name: "OWNER2", label: "Owner Name (line 2)", searchable: true },
6153
+ { name: "E911ADDR", label: "E-911 Site Address", searchable: true },
6154
+ { name: "PROPTYPE", label: "Property Type Code", searchable: false },
6155
+ { name: "DESCPROP", label: "Property Description", searchable: false },
6156
+ { name: "LOCAPROP", label: "Location of Property", searchable: false },
6157
+ { name: "REAL_FLV", label: "Real Property Fair Listed Value", searchable: false },
6158
+ { name: "LAND_LV", label: "Land Listed Value", searchable: false },
6159
+ { name: "IMPRV_LV", label: "Improvement Listed Value", searchable: false },
6160
+ { name: "ACRESGL", label: "Acreage (Grand List)", searchable: false },
6161
+ { name: "YEAR", label: "Grand List Year", searchable: false },
6162
+ { name: "ADDRGL1", label: "Mailing Address Line 1", searchable: false },
6163
+ { name: "CITYGL", label: "Mailing City", searchable: false },
6164
+ { name: "ZIPGL", label: "Mailing ZIP", searchable: false }
6165
+ ],
6166
+ sampleQuery: "https://services1.arcgis.com/BkFxaEFNwHqX3tAw/arcgis/rest/services/FS_VCGI_VTPARCELS_WM_NOCACHE_v2/FeatureServer/1/query?where=TNAME%3D'BURLINGTON'+AND+UPPER(OWNER1)+LIKE+UPPER('%25SMITH%25')&outFields=SPAN,OWNER1,E911ADDR,TNAME,REAL_FLV,ACRESGL&returnGeometry=false&f=json&resultRecordCount=10",
6167
+ license: "public",
6168
+ licenseUrl: "https://vcgi.vermont.gov/data-and-programs/parcel-program",
6169
+ status: "live",
6170
+ lastVerified: "2026-05-15",
6171
+ verifiedBy: "manual"
6172
+ }
6173
+ ],
6174
+ contact: {
6175
+ department: "Vermont Center for Geographic Information (VCGI)",
6176
+ url: "https://vcgi.vermont.gov/data-and-programs/parcel-program",
6177
+ email: null
6178
+ },
6179
+ 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."
4308
6180
  }
4309
6181
  ]
4310
6182
  };
@@ -4352,7 +6224,7 @@ var virginia_default = {
4352
6224
  url: "https://www.fairfaxcounty.gov/maps/",
4353
6225
  email: null
4354
6226
  },
4355
- notes: "369,267 polygon parcels covering the entire county. Verified 2026-05-11: PIN LIKE wildcard queries return ordinary parcels (e.g., '0304 39 0029'). PIN format is space-padded ID with section/block/lot grouping. No owner-name field on this layer \u2014 Fairfax keeps ownership data in a separate non-spatial table (per layer description). For owner-name search, see Fairfax County Real Estate Assessment Database (separate web portal, not REST). PARCEL_TYPE distinguishes ORDINARY from CONDO."
6227
+ 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."
4356
6228
  }
4357
6229
  ]
4358
6230
  };
@@ -4399,7 +6271,7 @@ var washington_default = {
4399
6271
  url: "https://kingcounty.gov/services/gis.aspx",
4400
6272
  email: null
4401
6273
  },
4402
- notes: "King County publishes parcel polygons under PIN/MAJOR/MINOR identifiers \u2014 no owner or address fields on this layer. For owner-name search in King County, use the Assessor's separate property database."
6274
+ 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."
4403
6275
  },
4404
6276
  {
4405
6277
  id: "wa-spokane",
@@ -4921,28 +6793,42 @@ var wisconsin_default = {
4921
6793
  // src/data.ts
4922
6794
  var atlasIndex = data_default;
4923
6795
  var POPULATED_STATES = {
6796
+ alabama: alabama_default,
6797
+ alaska: alaska_default,
4924
6798
  arizona: arizona_default,
4925
6799
  california: california_default,
4926
6800
  colorado: colorado_default,
6801
+ connecticut: connecticut_default,
4927
6802
  florida: florida_default,
4928
6803
  georgia: georgia_default,
6804
+ idaho: idaho_default,
4929
6805
  illinois: illinois_default,
4930
6806
  indiana: indiana_default,
4931
6807
  iowa: iowa_default,
4932
6808
  kansas: kansas_default,
6809
+ kentucky: kentucky_default,
6810
+ louisiana: louisiana_default,
6811
+ maine: maine_default,
6812
+ massachusetts: massachusetts_default,
4933
6813
  michigan: michigan_default,
4934
6814
  minnesota: minnesota_default,
6815
+ mississippi: mississippi_default,
4935
6816
  missouri: missouri_default,
4936
6817
  nebraska: nebraska_default,
4937
6818
  nevada: nevada_default,
6819
+ "new-hampshire": new_hampshire_default,
6820
+ "new-jersey": new_jersey_default,
4938
6821
  "new-york": new_york_default,
4939
6822
  "north-carolina": north_carolina_default,
4940
6823
  ohio: ohio_default,
4941
6824
  oregon: oregon_default,
4942
6825
  pennsylvania: pennsylvania_default,
6826
+ "rhode-island": rhode_island_default,
6827
+ "south-carolina": south_carolina_default,
4943
6828
  tennessee: tennessee_default,
4944
6829
  texas: texas_default,
4945
6830
  utah: utah_default,
6831
+ vermont: vermont_default,
4946
6832
  virginia: virginia_default,
4947
6833
  washington: washington_default,
4948
6834
  wisconsin: wisconsin_default
@@ -4962,6 +6848,16 @@ function findCounty(stateSlug, countySlug) {
4962
6848
  return state.counties.find((c) => c.countySlug === countySlug);
4963
6849
  }
4964
6850
 
6851
+ // src/findCountyByFips.ts
6852
+ function findCountyByFips(fips) {
6853
+ if (typeof fips !== "string" || !/^\d{5}$/.test(fips)) return void 0;
6854
+ for (const state of atlas.byStateSlug.values()) {
6855
+ const match = state.counties.find((c) => c.countyFips === fips);
6856
+ if (match) return match;
6857
+ }
6858
+ return void 0;
6859
+ }
6860
+
4965
6861
  // src/findState.ts
4966
6862
  function findState(stateSlug) {
4967
6863
  return atlas.byStateSlug.get(stateSlug);
@@ -5004,4 +6900,4 @@ function countyPath(stateSlug, countySlug) {
5004
6900
  return `/parcel-atlas/${stateSlug}/${countySlug}`;
5005
6901
  }
5006
6902
 
5007
- export { atlas, atlasIndex, buildParcelLookupDeepLink, countyPath, countySlugFromName, findCounty, findState, listCountiesByState, listStates, slugify, statePath };
6903
+ export { atlas, atlasIndex, buildParcelLookupDeepLink, countyPath, countySlugFromName, findCounty, findCountyByFips, findState, listCountiesByState, listStates, slugify, statePath };