@urbankitstudio/atlas 0.6.10 → 0.6.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -37,6 +37,54 @@ interface EndpointRecord {
37
37
  supportsQuery: boolean;
38
38
  corsEnabled: boolean | null;
39
39
  searchFields: SearchField[];
40
+ /** ANDed into every ATTRIBUTE search against this endpoint. Only needed when
41
+ * one endpoint serves several counties - NYC's MAPPLUTO layer carries all
42
+ * five boroughs, so without this a Brooklyn owner search returns Queens
43
+ * parcels. Spatial lookups do not need it: the buffer already sits on the
44
+ * address, which is why the paid enrichment path is unaffected. */
45
+ scopeWhere?: string;
46
+ /**
47
+ * Declares that this layer CANNOT serve an ATTRIBUTE search - a `where`-clause
48
+ * query on a column, which is what "search by owner name / APN / address text"
49
+ * means everywhere on the site. Absent (the default, and true of every
50
+ * registration except the 67 Florida counties on the shared FDOR layer, one
51
+ * layer and one live case, see below) means an attribute search IS offered.
52
+ *
53
+ * THIS IS THE ONE FLAG. Do not add a second field, and do not express this
54
+ * with `searchable: false` on every column: `searchable` is a FIELD-level
55
+ * record of whether a `where` clause may name that column (the generator sets
56
+ * it from the column's type), it is set inconsistently by hand, and six
57
+ * different owner-capability rules already read it. This says something
58
+ * different and says it once, at the level where it is true - the endpoint.
59
+ *
60
+ * Honoured by `offersAttributeSearch` / `countyOffersAttributeSearch` in
61
+ * capability-core.ts, which every surface that DESCRIBES a search must go
62
+ * through. Field-availability functions deliberately do NOT read it: a layer
63
+ * flagged here still answers owner and address fields SPATIALLY, which is
64
+ * what the billed lookup, bulk enrichment and radius paths use, so flipping
65
+ * owner_name to not_published would be a false claim about data we do serve
66
+ * and do bill for. Search and availability are different questions.
67
+ *
68
+ * THE ONE LIVE CASE, and what would retire it. Florida's FDOR statewide
69
+ * cadastral layer carries all 67 counties and 10.8M parcels, and CO_NO - the
70
+ * county code, the only column identifying a county, and therefore every
71
+ * Florida registration's scopeWhere - is NOT INDEXED. Its declared indexes
72
+ * are OBJECTID, Shape, Shape__Area, Shape__Length and PARCEL_ID. A
73
+ * county-scoped attribute search therefore scans the roll from the top:
74
+ * measured across all 67 counties on 2026-09-20, only 4 answered inside 12s
75
+ * and the rest hit the service's ~55s ceiling. The conjunct poisons an
76
+ * indexed predicate too - PARCEL_ID LIKE '00%' alone answers in 0.9s, and
77
+ * `CO_NO=77 AND PARCEL_ID LIKE '00%'` times out - so there is no cheaper
78
+ * column to scope on. Dropping the scope is not an option either: an unscoped
79
+ * attribute search on a shared layer answers with every other county's
80
+ * parcels, which is exactly what shared-endpoint-scope.test.ts forbids.
81
+ * Scoped is unaffordable and unscoped is wrong, so attribute search is not
82
+ * offered at all.
83
+ *
84
+ * IF FDOR EVER INDEXES CO_NO, delete the flag from those 67 endpoint records
85
+ * and every surface re-offers the search on its own. Nothing else changes.
86
+ */
87
+ attributeSearch?: "unsupported";
40
88
  sampleQuery: string | null;
41
89
  license: LicenseType;
42
90
  licenseUrl: string | null;
package/dist/index.js CHANGED
@@ -16,9 +16,9 @@ var data_default = {
16
16
  lastUpdated: "2026-10-03",
17
17
  totals: {
18
18
  states: 51,
19
- counties: 239,
20
- endpoints: 251,
21
- countiesWithEndpoint: 233,
19
+ counties: 241,
20
+ endpoints: 253,
21
+ countiesWithEndpoint: 235,
22
22
  countiesUnprobeable: 1
23
23
  },
24
24
  states: [
@@ -210,8 +210,8 @@ var data_default = {
210
210
  slug: "minnesota",
211
211
  name: "Minnesota",
212
212
  abbrev: "MN",
213
- countyCount: 2,
214
- endpointCount: 2,
213
+ countyCount: 3,
214
+ endpointCount: 3,
215
215
  populated: true
216
216
  },
217
217
  {
@@ -226,8 +226,8 @@ var data_default = {
226
226
  slug: "missouri",
227
227
  name: "Missouri",
228
228
  abbrev: "MO",
229
- countyCount: 2,
230
- endpointCount: 2,
229
+ countyCount: 3,
230
+ endpointCount: 3,
231
231
  populated: true
232
232
  },
233
233
  {
@@ -752,24 +752,29 @@ var arizona_default = {
752
752
  supportsQuery: true,
753
753
  corsEnabled: null,
754
754
  searchFields: [
755
- { name: "PARCELID", label: "Parcel ID (APN)", searchable: true },
756
- { name: "LOWPARCELID", label: "Lower Parcel ID", searchable: true },
757
- { name: "OWNERNME1", label: "Owner Name (Primary)", searchable: true },
758
- { name: "OWNERNME2", label: "Owner Name (Secondary)", searchable: true },
759
- { name: "SITEADDRESS", label: "Site Address", searchable: true },
760
- { name: "CVTTXCD", label: "Converted Tax Code", searchable: false },
761
- { name: "CVTTXDSCRP", label: "Tax Code Description", searchable: false },
762
- { name: "USECD", label: "Use Code", searchable: false },
763
- { name: "USEDSCRP", label: "Use Description", searchable: false },
764
- { name: "CLASSCD", label: "Class Code", searchable: false },
765
- { name: "CLASSDSCRP", label: "Class Description", searchable: false },
766
- { name: "PRPRTYDSCRP", label: "Property Description", searchable: false }
755
+ { name: "Parcel_Identification_Number", label: "Parcel ID (APN)", searchable: true },
756
+ { name: "Lowest_Parcel_Identification_Number", label: "Lower Parcel ID", searchable: true },
757
+ { name: "First_Owner_Name", label: "Owner Name (Primary)", searchable: true },
758
+ { name: "Second_Owner_Name", label: "Owner Name (Secondary)", searchable: true },
759
+ { name: "Site_Address", label: "Site Address", searchable: true },
760
+ { name: "Postal_Address", label: "Owner Mailing Address", searchable: true },
761
+ { name: "Postal_City", label: "Owner Mailing City", searchable: true },
762
+ { name: "Postal_State", label: "Owner Mailing State", searchable: false },
763
+ { name: "Postal_Zip_Code_5", label: "Owner Mailing ZIP", searchable: false },
764
+ { name: "Postal_Zip_Code_4", label: "Owner Mailing ZIP+4", searchable: false },
765
+ { name: "Tax_District_Code", label: "Converted Tax Code", searchable: false },
766
+ { name: "Tax_District_Description", label: "Tax Code Description", searchable: false },
767
+ { name: "Assessing_Use_Code", label: "Use Code", searchable: false },
768
+ { name: "Assessing_Use_Description", label: "Use Description", searchable: false },
769
+ { name: "Property_Class_Code", label: "Class Code", searchable: false },
770
+ { name: "Property_Class", label: "Class Description", searchable: false },
771
+ { name: "Property_Description", label: "Property Description", searchable: false }
767
772
  ],
768
- sampleQuery: "https://rogue.casagrandeaz.gov/arcgis/rest/services/Pinal_County/Pinal_County_Parcels/MapServer/0/query?where=PARCELID+LIKE+'%25302%25'&outFields=PARCELID,SITEADDRESS,OWNERNME1,CLASSCD,CLASSDSCRP&returnGeometry=false&f=json&resultRecordCount=10",
773
+ sampleQuery: "https://rogue.casagrandeaz.gov/arcgis/rest/services/Pinal_County/Pinal_County_Parcels/MapServer/0/query?where=Parcel_Identification_Number+LIKE+'%25302%25'&outFields=Parcel_Identification_Number,Site_Address,First_Owner_Name,Property_Class_Code,Property_Class&returnGeometry=false&f=json&resultRecordCount=10",
769
774
  license: "public",
770
775
  licenseUrl: "https://www.pinal.gov/630/GIS",
771
776
  status: "live",
772
- lastVerified: "2026-05-15",
777
+ lastVerified: "2026-10-03",
773
778
  verifiedBy: "manual"
774
779
  }
775
780
  ],
@@ -778,7 +783,7 @@ var arizona_default = {
778
783
  url: "https://www.pinal.gov/630/GIS",
779
784
  email: null
780
785
  },
781
- notes: "74 fields confirmed including OBJECTID, LOWPARCELID, PARCELID, BUILDING, UNIT, LGLSTARTDT, CVTTXCD, CVTTXDSCRP, SCHLTXCD, SCHLDSCRP, USECD, USEDSCRP, NGHBRHDCD, CLASSCD, CLASSDSCRP, SITEADDRESS, PRPRTYDSCRP, CNVYNAME, OWNERNME1, OWNERNME2. Owner name confirmed live: PARCELID LIKE '%302%' returns OWNERNME1='FELDMEIER BRIAN' in Arizona City AZ 85123. PARCELID format is typically 9-digit numeric string. Hosted on the City of Casa Grande ArcGIS server (rogue.casagrandeaz.gov) which serves Pinal County parcel data for the Phoenix metro south area (Chandler/Gilbert/Queen Creek/Maricopa City/Casa Grande). Capabilities: Query, Map, Data. maxRecordCount=1000. Note: the gismaps.pinalcountyaz.gov server is currently not externally accessible (HTTP 000); the Casa Grande mirror is the reliable public endpoint."
786
+ notes: "74 fields confirmed including OBJECTID, Lowest_Parcel_Identification_Number, Parcel_Identification_Number, Building_Number, Unit_Number, Legal_Start_Date, Tax_District_Code, Tax_District_Description, School_District_Code, School_District_Description, Assessing_Use_Code, Assessing_Use_Description, Assessing_Neighborhood_Code, Property_Class_Code, Property_Class, Site_Address, Property_Description, Sub_or_Condo_Name, First_Owner_Name, Second_Owner_Name, Postal_Address, Postal_City, Postal_State, Postal_Zip_Code_5, Postal_Zip_Code_4. In September 2026 the county renamed every field to these long-form names (field count, ids and values unchanged; e.g. PARCELID became Parcel_Identification_Number, OWNERNME1 became First_Owner_Name, SITEADDRESS became Site_Address, CLASSCD became Property_Class_Code), which broke every declared field and the old sampleQuery; the record was re-mapped on 2026-10-03. The rename also exposed owner mailing address for the first time (Postal_Address, Postal_City, Postal_State, Postal_Zip_Code_5, Postal_Zip_Code_4). Site_Address now carries city, state and ZIP in one string (e.g. 9865 W BATTAGLIA DR ARIZONA CITY, AZ 85123). Owner name confirmed live: Parcel_Identification_Number LIKE '%302%' returns First_Owner_Name='FELDMEIER BRIAN' in Arizona City AZ 85123. Parcel_Identification_Number is typically a 9-digit numeric string; a where=1=1 probe returns a placeholder row with Parcel_Identification_Number 'NAP', which is still a valid features array. Named outFields work on this server. Hosted on the City of Casa Grande ArcGIS server (rogue.casagrandeaz.gov) which serves Pinal County parcel data for the Phoenix metro south area (Chandler/Gilbert/Queen Creek/Maricopa City/Casa Grande). Capabilities: Query, Map, Data. maxRecordCount=2000 (was 1000 before the September 2026 republish). Note: the gismaps.pinalcountyaz.gov server is currently not externally accessible (HTTP 000; last checked before 2026-10-03, not re-tested then); the Casa Grande mirror is the reliable public endpoint."
782
787
  }
783
788
  ]
784
789
  };
@@ -845,7 +850,7 @@ var arkansas_default = {
845
850
  },
846
851
  {
847
852
  name: "countyfips",
848
- label: "County FIPS (05119 = Pulaski)",
853
+ label: "County FIPS (119 = Pulaski)",
849
854
  searchable: false
850
855
  },
851
856
  {
@@ -864,13 +869,13 @@ var arkansas_default = {
864
869
  searchable: false
865
870
  }
866
871
  ],
867
- sampleQuery: "https://gis.arkansas.gov/arcgis/rest/services/FEATURESERVICES/Planning_Cadastre/FeatureServer/6/query?where=countyfips%3D'05119'+AND+UPPER(ownername)+LIKE+UPPER('%25SMITH%25')&outFields=parcelid,ownername,adrlabel,countyfips&returnGeometry=false&f=json&resultRecordCount=10",
872
+ sampleQuery: "https://gis.arkansas.gov/arcgis/rest/services/FEATURESERVICES/Planning_Cadastre/FeatureServer/6/query?where=countyfips%3D'119'+AND+UPPER(ownername)+LIKE+UPPER('%25SMITH%25')&outFields=parcelid,ownername,adrlabel,countyfips&returnGeometry=false&f=json&resultRecordCount=10",
868
873
  license: "public",
869
874
  licenseUrl: "https://gis.arkansas.gov/",
870
875
  status: "live",
871
- lastVerified: "2026-06-20",
872
- verifiedBy: "automated",
873
- scopeWhere: "countyfips = '05119'"
876
+ lastVerified: "2026-10-03",
877
+ verifiedBy: "manual",
878
+ scopeWhere: "countyfips = '119'"
874
879
  }
875
880
  ],
876
881
  contact: {
@@ -878,7 +883,7 @@ var arkansas_default = {
878
883
  url: "https://gis.arkansas.gov/",
879
884
  email: null
880
885
  },
881
- notes: "Pulaski County AR (Little Rock, pop. 400,000; state capital; county seat Little Rock; FIPS 05119) is served by the Arkansas statewide parcel layer hosted by the Arkansas GIS Office (AGISO). The Planning_Cadastre/FeatureServer/6 layer aggregates parcels from all 75 AR counties, filter by countyfips='05119' to query Pulaski County specifically. Key fields: parcelid (parcel identifier), ownername (owner name), adrnum+pstrnam+adrcity+adrzip5 (address components), adrlabel (full address string), countyfips (5-digit FIPS, '05119' for Pulaski), countyid, county (county name text), parceltype, assessvalue, impvalue, landvalue, totalvalue, subdivision, section/township/range, camakey, dataprov, pubdate. Owner-name search via UPPER(ownername) LIKE works across all AR counties. Verified 2026-06-20: countyfips='05119' AND SMITH returns Little Rock addresses. The statewide layer is compiled from county assessor data and may lag 6\u201312 months from deed recording."
886
+ notes: "Pulaski County AR (Little Rock, pop. 400,000; state capital; county seat Little Rock; FIPS 05119) is served by the Arkansas statewide parcel layer hosted by the Arkansas GIS Office (AGISO). The Planning_Cadastre/FeatureServer/6 layer aggregates parcels from all 75 AR counties, filter by countyfips='119' to query Pulaski County specifically. Key fields: parcelid (parcel identifier), ownername (owner name), adrnum+pstrnam+adrcity+adrzip5 (address components), adrlabel (full address string), countyfips (3-digit county code, '119' for Pulaski), countyid, county (county name text), parceltype, assessvalue, impvalue, landvalue, totalvalue, subdivision, section/township/range, camakey, dataprov, pubdate. Owner-name search via UPPER(ownername) LIKE works across all AR counties. Verified 2026-06-20: countyfips='05119' AND SMITH returns Little Rock addresses. 2026-10-03: the state changed countyfips from the 5-digit state+county FIPS to the 3-digit county code, so the old scope countyfips='05119' matched 0 rows and every attribute search here returned nothing without an error; countyfips='119' counts 180,229 rows, and the scope and sampleQuery now use it (SMITH returns SMITH HALLIE M, 4 OAKRIDGE DR). The statewide layer is compiled from county assessor data and may lag 6\u201312 months from deed recording."
882
887
  },
883
888
  {
884
889
  id: "ar-benton",
@@ -935,7 +940,7 @@ var arkansas_default = {
935
940
  },
936
941
  {
937
942
  name: "countyfips",
938
- label: "County FIPS (05007 = Benton)",
943
+ label: "County FIPS (007 = Benton)",
939
944
  searchable: false
940
945
  },
941
946
  {
@@ -954,13 +959,13 @@ var arkansas_default = {
954
959
  searchable: false
955
960
  }
956
961
  ],
957
- sampleQuery: "https://gis.arkansas.gov/arcgis/rest/services/FEATURESERVICES/Planning_Cadastre/FeatureServer/6/query?where=countyfips%3D'05007'+AND+UPPER(ownername)+LIKE+UPPER('%25SMITH%25')&outFields=parcelid,ownername,adrlabel,countyfips&returnGeometry=false&f=json&resultRecordCount=10",
962
+ sampleQuery: "https://gis.arkansas.gov/arcgis/rest/services/FEATURESERVICES/Planning_Cadastre/FeatureServer/6/query?where=countyfips%3D'007'+AND+UPPER(ownername)+LIKE+UPPER('%25SMITH%25')&outFields=parcelid,ownername,adrlabel,countyfips&returnGeometry=false&f=json&resultRecordCount=10",
958
963
  license: "public",
959
964
  licenseUrl: "https://gis.arkansas.gov/",
960
965
  status: "live",
961
- lastVerified: "2026-06-20",
962
- verifiedBy: "automated",
963
- scopeWhere: "countyfips = '05007'"
966
+ lastVerified: "2026-10-03",
967
+ verifiedBy: "manual",
968
+ scopeWhere: "countyfips = '007'"
964
969
  }
965
970
  ],
966
971
  contact: {
@@ -968,7 +973,7 @@ var arkansas_default = {
968
973
  url: "https://gis.arkansas.gov/",
969
974
  email: null
970
975
  },
971
- notes: "Benton County AR (Bentonville/Rogers/Fayetteville metro north; county seat Bentonville; FIPS 05007; home to Walmart HQ) is served by the Arkansas statewide parcel layer. Filter countyfips='05007' to scope to Benton County. Same schema and endpoint as Pulaski County (AR statewide FeatureServer/6). Benton County is the fastest-growing county in Arkansas. Verified 2026-06-20: SMITH query returns Bentonville-area addresses."
976
+ notes: "Benton County AR (Bentonville/Rogers/Fayetteville metro north; county seat Bentonville; FIPS 05007; home to Walmart HQ) is served by the Arkansas statewide parcel layer. Filter countyfips='007' to scope to Benton County. Same schema and endpoint as Pulaski County (AR statewide FeatureServer/6). Benton County is the fastest-growing county in Arkansas. Verified 2026-06-20: SMITH query returns Bentonville-area addresses. 2026-10-03: the state changed countyfips from the 5-digit state+county FIPS to the 3-digit county code, so the old scope countyfips='05007' matched 0 rows and every attribute search here returned nothing without an error; countyfips='007' counts 175,795 rows, and the scope and sampleQuery now use it (SMITH returns SMITH REVOCABLE TRUST, CRAIG MARTIN)."
972
977
  },
973
978
  {
974
979
  id: "ar-washington",
@@ -1025,7 +1030,7 @@ var arkansas_default = {
1025
1030
  },
1026
1031
  {
1027
1032
  name: "countyfips",
1028
- label: "County FIPS (05143 = Washington)",
1033
+ label: "County FIPS (143 = Washington)",
1029
1034
  searchable: false
1030
1035
  },
1031
1036
  {
@@ -1044,13 +1049,13 @@ var arkansas_default = {
1044
1049
  searchable: false
1045
1050
  }
1046
1051
  ],
1047
- sampleQuery: "https://gis.arkansas.gov/arcgis/rest/services/FEATURESERVICES/Planning_Cadastre/FeatureServer/6/query?where=countyfips%3D'05143'+AND+UPPER(ownername)+LIKE+UPPER('%25SMITH%25')&outFields=parcelid,ownername,adrlabel,countyfips&returnGeometry=false&f=json&resultRecordCount=10",
1052
+ sampleQuery: "https://gis.arkansas.gov/arcgis/rest/services/FEATURESERVICES/Planning_Cadastre/FeatureServer/6/query?where=countyfips%3D'143'+AND+UPPER(ownername)+LIKE+UPPER('%25SMITH%25')&outFields=parcelid,ownername,adrlabel,countyfips&returnGeometry=false&f=json&resultRecordCount=10",
1048
1053
  license: "public",
1049
1054
  licenseUrl: "https://gis.arkansas.gov/",
1050
1055
  status: "live",
1051
- lastVerified: "2026-06-20",
1052
- verifiedBy: "automated",
1053
- scopeWhere: "countyfips = '05143'"
1056
+ lastVerified: "2026-10-03",
1057
+ verifiedBy: "manual",
1058
+ scopeWhere: "countyfips = '143'"
1054
1059
  }
1055
1060
  ],
1056
1061
  contact: {
@@ -1058,7 +1063,7 @@ var arkansas_default = {
1058
1063
  url: "https://gis.arkansas.gov/",
1059
1064
  email: null
1060
1065
  },
1061
- notes: "Washington County AR (Fayetteville metro; county seat Fayetteville; FIPS 05143; home to University of Arkansas) is served by the Arkansas statewide parcel layer. Filter countyfips='05143' to scope to Washington County. Same schema and endpoint as Pulaski and Benton counties (AR statewide FeatureServer/6). Washington County AR must not be confused with Washington County in other states. Verified 2026-06-20: SMITH query returns Fayetteville-area addresses."
1066
+ notes: "Washington County AR (Fayetteville metro; county seat Fayetteville; FIPS 05143; home to University of Arkansas) is served by the Arkansas statewide parcel layer. Filter countyfips='143' to scope to Washington County. Same schema and endpoint as Pulaski and Benton counties (AR statewide FeatureServer/6). Washington County AR must not be confused with Washington County in other states. Verified 2026-06-20: SMITH query returns Fayetteville-area addresses. 2026-10-03: the state changed countyfips from the 5-digit state+county FIPS to the 3-digit county code, so the old scope countyfips='05143' matched 0 rows and every attribute search here returned nothing without an error; countyfips='143' counts 114,791 rows, and the scope and sampleQuery now use it (SMITH returns SMITH, ANNE B, 601 N HIGHLAND AVE)."
1062
1067
  }
1063
1068
  ]
1064
1069
  };
@@ -14680,12 +14685,12 @@ var maryland_default = {
14680
14685
  hasPublicRest: true,
14681
14686
  endpoints: [
14682
14687
  {
14683
- url: "https://gis.princegeorgescountymd.gov/arcgis/rest/services/Property/Property_Flattened/MapServer/0",
14684
- serviceType: "MapServer",
14688
+ url: "https://services1.arcgis.com/qS7AYixGtf3sv8B6/arcgis/rest/services/Property_Flattened_Py/FeatureServer/0",
14689
+ serviceType: "FeatureServer",
14685
14690
  layerIndex: 0,
14686
- layerName: "Property Flattened",
14691
+ layerName: "Property_Flattened_Py",
14687
14692
  supportsQuery: true,
14688
- corsEnabled: null,
14693
+ corsEnabled: true,
14689
14694
  searchFields: [
14690
14695
  {
14691
14696
  name: "ACCOUNT",
@@ -14748,12 +14753,12 @@ var maryland_default = {
14748
14753
  searchable: false
14749
14754
  }
14750
14755
  ],
14751
- sampleQuery: "https://gis.princegeorgescountymd.gov/arcgis/rest/services/Property/Property_Flattened/MapServer/0/query?where=UPPER(OWNER_NAME)+LIKE+UPPER('%25SMITH%25')&outFields=ACCOUNT,PROPERTY_ID,OWNER_NAME,HOUSE_NUMBER,STREET_NAME,STREET_TYPE,MAIL_STREET,MAIL_CITY,MAIL_ZIP5&returnGeometry=false&f=json&resultRecordCount=10",
14756
+ sampleQuery: "https://services1.arcgis.com/qS7AYixGtf3sv8B6/arcgis/rest/services/Property_Flattened_Py/FeatureServer/0/query?where=UPPER(OWNER_NAME)+LIKE+UPPER('%25SMITH%25')&outFields=ACCOUNT,PROPERTY_ID,OWNER_NAME,HOUSE_NUMBER,STREET_NAME,STREET_TYPE,MAIL_STREET,MAIL_CITY,MAIL_ZIP5&returnGeometry=false&f=json&resultRecordCount=10",
14752
14757
  license: "public",
14753
14758
  licenseUrl: "https://www.princegeorgescountymd.gov/665/Geographic-Information-Systems-GIS",
14754
14759
  status: "live",
14755
- lastVerified: "2026-06-05",
14756
- verifiedBy: "automated"
14760
+ lastVerified: "2026-10-03",
14761
+ verifiedBy: "manual"
14757
14762
  }
14758
14763
  ],
14759
14764
  contact: {
@@ -14761,7 +14766,7 @@ var maryland_default = {
14761
14766
  url: "https://www.princegeorgescountymd.gov/665/Geographic-Information-Systems-GIS",
14762
14767
  email: null
14763
14768
  },
14764
- notes: "Prince George's County is Maryland's second-most populous county (pop. 910,000; county seat Upper Marlboro). The Property_Flattened MapServer on gis.princegeorgescountymd.gov (ArcGIS Server 11.5) is the county's canonical public property layer with 112 fields and 352,791 parcels. Live query confirmed OWNER_NAME exposure. Key fields: ACCOUNT (county account number, 7 digits), PROPERTY_ID (prefixed as '12' + ACCOUNT for the full 9-digit SDAT account number), OWNER_NAME, ICO_NAME (in-care-of), HOUSE_NUMBER (zero-padded 6-digit, e.g. '002909'), STREET_NAME, STREET_TYPE, STREET_DIRECTION, MAIL_STREET/CITY/STATE/ZIP5 (owner mailing address), ASSESS_DIST (assessment district), LAND_AREA_ACRE, LAND_AREA_SQFT, LIBER, FOLIO, SUB_NAME, CONDO_UNIT_NUMBER, TAXMAPGRID. The situs address is split across HOUSE_NUMBER + STREET_NAME + STREET_TYPE. There is no single combined site address field on this layer. The county belongs to the M-NCPPC (Maryland-National Capital Park and Planning Commission) planning region and uses Maryland SDAT for the authoritative ownership record. Prince George's County borders DC and contains the University of Maryland (College Park) and Joint Base Andrews."
14769
+ notes: "Prince George's County is Maryland's second-most populous county (pop. 910,000; county seat Upper Marlboro). The Property_Flattened MapServer on gis.princegeorgescountymd.gov (ArcGIS Server 11.5) is the county's canonical public property layer with 112 fields and 352,791 parcels. Live query confirmed OWNER_NAME exposure. Key fields: ACCOUNT (county account number, 7 digits), PROPERTY_ID (prefixed as '12' + ACCOUNT for the full 9-digit SDAT account number), OWNER_NAME, ICO_NAME (in-care-of), HOUSE_NUMBER (zero-padded 6-digit, e.g. '002909'), STREET_NAME, STREET_TYPE, STREET_DIRECTION, MAIL_STREET/CITY/STATE/ZIP5 (owner mailing address), ASSESS_DIST (assessment district), LAND_AREA_ACRE, LAND_AREA_SQFT, LIBER, FOLIO, SUB_NAME, CONDO_UNIT_NUMBER, TAXMAPGRID. The situs address is split across HOUSE_NUMBER + STREET_NAME + STREET_TYPE. There is no single combined site address field on this layer. The county belongs to the M-NCPPC (Maryland-National Capital Park and Planning Commission) planning region and uses Maryland SDAT for the authoritative ownership record. Prince George's County borders DC and contains the University of Maryland (College Park) and Joint Base Andrews. 2026-10-03: the registered endpoint moved from the county MapServer to the Planning Department's hosted ArcGIS Online copy of the same layer (Property_Flattened_Py FeatureServer on services1.arcgis.com, owner Planning_PGCO_MD, CORS open, maxRecordCount 2000, 353,381 parcels). The reason is a county-side defect, not a schema change: gis.princegeorgescountymd.gov is load-balanced and one backend node lacks the layers, so about every second request to any service on the host (Property_Flattened, Property_Centroids, Property, AddressPoints) answers HTTP 200 with a Layer not found error body, metadata and queries alike, whatever the where clause. The liveness cron does not retry an HTTP 200 error body, so the county flapped between live and degraded. The hosted copy has the same field names (every declared searchField present, plus MAIL_STATE) and returned the same first row as the county host on its good turns, with 18 of 18 probes answering. The old host is deliberately not kept as a second endpoint, because the cron grades a county by its worst endpoint. Caveat: the hosted copy is a periodic refresh by the Planning Department (stamped Updated 20260923), so its freshness is days, not minutes; switch back once the county host answers consistently."
14765
14770
  },
14766
14771
  {
14767
14772
  id: "md-baltimore",
@@ -15442,7 +15447,7 @@ var minnesota_default = {
15442
15447
  stateSlug: "minnesota",
15443
15448
  stateName: "Minnesota",
15444
15449
  stateAbbrev: "MN",
15445
- lastUpdated: "2026-06-06",
15450
+ lastUpdated: "2026-10-03",
15446
15451
  counties: [
15447
15452
  {
15448
15453
  id: "mn-ramsey",
@@ -15606,6 +15611,50 @@ var minnesota_default = {
15606
15611
  email: null
15607
15612
  },
15608
15613
  notes: "448,036 polygon parcels covering Minneapolis and the rest of Hennepin County. Verified 2026-05-11: UPPER(OWNER_NM) LIKE '%SMITH%' returns real owners (e.g., 'ALEX D SMITH', 'PAUL LOUIS SMITH'). Owner names are space-padded fixed-width, wrap searches in UPPER() and trim whitespace client-side. Full residential address columns present (HOUSE_NO, FRAC_HOUSE_NO, STREET_NM, MAILING_MUNIC_NM, ZIP_CD). PID is 13-digit composite (parcel-fragment-municipality-section). TORRENS_TYP flag distinguishes Torrens vs. Abstract land per Minnesota's dual-title system. OUTAGE RESOLVED 2026-06-06: the 2026-05 county-side outage cleared -- service re-verified live (448,083 parcels; OWNER_NM queries return real owners)."
15614
+ },
15615
+ {
15616
+ id: "mn-mille-lacs",
15617
+ state: "MN",
15618
+ stateName: "Minnesota",
15619
+ stateSlug: "minnesota",
15620
+ county: "Mille Lacs",
15621
+ countySlug: "mille-lacs-county",
15622
+ countyFips: "27095",
15623
+ hasPublicRest: true,
15624
+ endpoints: [
15625
+ {
15626
+ url: "https://gis.co.mille-lacs.mn.us/arcgis/rest/services/MilleLacs_Public_101/MapServer/35",
15627
+ serviceType: "MapServer",
15628
+ layerIndex: 35,
15629
+ layerName: "Parcels",
15630
+ supportsQuery: true,
15631
+ corsEnabled: true,
15632
+ searchFields: [
15633
+ { name: "TAXPAYER_NAME", label: "Taxpayer Name", searchable: true },
15634
+ { name: "PARCELID", label: "Parcel Number", searchable: true },
15635
+ { name: "PROPERTY_ADDRESS", label: "Property Address", searchable: true },
15636
+ { name: "PROPERTY_ZIP", label: "Property ZIP", searchable: false },
15637
+ { name: "CITY_TWP_NAME", label: "City/Township Name", searchable: true },
15638
+ { name: "TAXPAYER_ADDRESS_1", label: "Taxpayer Mailing Address 1", searchable: true },
15639
+ { name: "TAXPAYER_ADDRESS_2", label: "Taxpayer Mailing Address 2", searchable: false },
15640
+ { name: "TAXPAYER_ADDRESS_3", label: "Taxpayer Mailing Address 3", searchable: false },
15641
+ { name: "TAXPAYER_ADDRESS_4", label: "Taxpayer Mailing Address 4", searchable: false },
15642
+ { name: "DEEDED_ACRES", label: "Deeded Acres", searchable: false }
15643
+ ],
15644
+ sampleQuery: "https://gis.co.mille-lacs.mn.us/arcgis/rest/services/MilleLacs_Public_101/MapServer/35/query?where=UPPER(TAXPAYER_NAME)%20LIKE%20%27%25SMITH%25%27&outFields=PARCELID,TAXPAYER_NAME,PROPERTY_ADDRESS,TAXPAYER_ADDRESS_1,CITY_TWP_NAME&returnGeometry=false&resultRecordCount=10&f=json",
15645
+ license: "unknown",
15646
+ licenseUrl: "https://www.millelacs.mn.gov/",
15647
+ status: "live",
15648
+ lastVerified: "2026-10-03",
15649
+ verifiedBy: "manual"
15650
+ }
15651
+ ],
15652
+ contact: {
15653
+ department: "Mille Lacs County GIS / Assessor's Office",
15654
+ url: "https://www.millelacs.mn.gov/1185/Assessors-Office",
15655
+ email: null
15656
+ },
15657
+ notes: "Mille Lacs County, Minnesota (county seat Milaca) publishes its parcels on its own ArcGIS Server 11.3 as MilleLacs_Public_101/MapServer layer 35 (Parcels), 20,083 rows with a taxpayer name on 2026-10-03. THE OWNER IS IN TAXPAYER_NAME, stored LAST/FIRST with a slash (SMITH/BRIAN & ASHLEY). A column called OWNER_NAME exists but is an empty string on about 97 percent of rows (544 of 20,083 populated on 2026-10-03; not NULL, so IS NOT NULL passes while the value is blank), and where it is populated it names a different party from TAXPAYER_NAME (a contract-for-deed holder or an LLC, for example), so the taxpayer is not always the owner of record. UPPER(OWNER_NAME) LIKE 'SMITH%' returns 0 features. OWNER_NAME is deliberately NOT listed as a search field here: the enrichment classifier takes the first owner-looking field, so listing it would route owner lookups to a mostly blank column. The mailing address is TAXPAYER_ADDRESS_1 to _4 (use _1 for the street); the matching OWNER_ADDRESS_1 to _4 columns were not checked. The site address is PROPERTY_ADDRESS with PROPERTY_ZIP and CITY_TWP_NAME. Search with UPPER(TAXPAYER_NAME) LIKE '%SMITH%'. maxRecordCount is 2000. CORS reflects the request Origin (Access-Control-Allow-Origin echoed back, credentials true), and named outFields work. No license text was found. Do not use the statewide Minnesota parcel layers for owner search: the DNR plan_parcels_minnesota layer has owner_name but no county, parcel id or address field, so a query bleeds into neighbouring counties, and the MnGeo plan_parcels_open layer filters by co_code 27095 (20,928 rows) but its owner_name is blank for all but 550 rows (control: Itasca 27061, 0 populated). The same county server also lists Assessors/TaxParcels/MapServer/0, which has only a parcel name and geometry. Verified live 2026-10-03: taxpayer SMITH returned rows (first SMITH/BRIAN & ASHLEY, parcel 11-010-0100, 17903 130TH AVE, Milaca Township)."
15609
15658
  }
15610
15659
  ]
15611
15660
  };
@@ -15711,7 +15760,7 @@ var missouri_default = {
15711
15760
  stateSlug: "missouri",
15712
15761
  stateName: "Missouri",
15713
15762
  stateAbbrev: "MO",
15714
- lastUpdated: "2026-06-20",
15763
+ lastUpdated: "2026-10-03",
15715
15764
  counties: [
15716
15765
  {
15717
15766
  id: "mo-jackson",
@@ -15803,6 +15852,49 @@ var missouri_default = {
15803
15852
  email: null
15804
15853
  },
15805
15854
  notes: "St. Louis County MO (St. Louis metro west/south, county seat Clayton, NOT the independent City of St. Louis) provides AGS_Parcels/MapServer/0 with 30+ fields: LOCATOR (parcel ID), PARENT_LOC, TAXYR, OWNER_NAME, PROP_ADRNUM, PROP_ADD, PROP_ZIP, OWN_ADD, OWN_CITY, OWN_STATE, OWN_ZIP, SCHSUB (school subdivision), MUNYCODE (municipality code), TAXCODE, ASSTIMPVAL, TOTASSMT, APPLANDVAL, APPIMPVAL, TOTAPVAL, PROPCLASS, LUC, LANDUSE2, LUCODE, TENURE, BLDGNAME, TWPNAME. Query confirmed live: UPPER(OWNER_NAME) LIKE '%SMITH%' returns real results (e.g., 'SMITH KIMBERLY & ANTHONY T/E' at '11041 LILAC AVE'). St. Louis County MO (FIPS 29189) is a separate entity from the City of St. Louis (FIPS 29510, an independent city not part of any county). The GeoData portal at data-stlcogis.opendata.arcgis.com provides open data downloads and GeoServices API links. The maps.stlouisco.com server is the live REST host."
15855
+ },
15856
+ {
15857
+ id: "mo-st-louis-city",
15858
+ state: "MO",
15859
+ stateName: "Missouri",
15860
+ stateSlug: "missouri",
15861
+ county: "St. Louis city",
15862
+ countySlug: "st-louis-city",
15863
+ countyFips: "29510",
15864
+ hasPublicRest: true,
15865
+ endpoints: [
15866
+ {
15867
+ url: "https://maps8.stlouis-mo.gov/arcgis/rest/services/ASSESSOR/Assessor_Public_Parcels/MapServer/11",
15868
+ serviceType: "MapServer",
15869
+ layerIndex: 11,
15870
+ layerName: "Parcels",
15871
+ supportsQuery: true,
15872
+ corsEnabled: false,
15873
+ searchFields: [
15874
+ { name: "OwnerName", label: "Owner Name", searchable: true },
15875
+ { name: "OwnerName2", label: "Owner Name 2", searchable: false },
15876
+ { name: "ParcelId", label: "Parcel ID", searchable: true },
15877
+ { name: "SITEADDR", label: "Site Address", searchable: true },
15878
+ { name: "OwnerAddr", label: "Owner Mailing Address", searchable: true },
15879
+ { name: "OwnerCity", label: "Owner Mailing City", searchable: false },
15880
+ { name: "OwnerState", label: "Owner Mailing State", searchable: false },
15881
+ { name: "OwnerZIP", label: "Owner Mailing ZIP", searchable: false },
15882
+ { name: "ZIP", label: "Site ZIP", searchable: false }
15883
+ ],
15884
+ sampleQuery: "https://maps8.stlouis-mo.gov/arcgis/rest/services/ASSESSOR/Assessor_Public_Parcels/MapServer/11/query?where=UPPER(OwnerName)%20LIKE%20%27SMITH%25%27&outFields=ParcelId,OwnerName,OwnerAddr,OwnerCity,SITEADDR&returnGeometry=false&resultRecordCount=10&f=json",
15885
+ license: "unknown",
15886
+ licenseUrl: "https://www.stlouis-mo.gov/data/parcels.cfm",
15887
+ status: "live",
15888
+ lastVerified: "2026-10-03",
15889
+ verifiedBy: "manual"
15890
+ }
15891
+ ],
15892
+ contact: {
15893
+ department: "City of St. Louis Assessor's Office",
15894
+ url: "https://www.stlouis-mo.gov/data/parcels.cfm",
15895
+ email: null
15896
+ },
15897
+ notes: "City of St. Louis, Missouri (FIPS 29510) is an independent city that belongs to no county, and it is NOT St. Louis County (29189, a separate record in this file on a different server). The Assessor's public parcels layer is ASSESSOR/Assessor_Public_Parcels/MapServer layer 11 (Parcels) on ArcGIS Server 11.2, listed on the city's data page. SERVER-SIDE ONLY: the server sends Access-Control-Allow-Origin only to its own origin (www.stlouis-mo.gov); for any other Origin a GET and its preflight return only Vary: Origin and Access-Control-Allow-Private-Network: true, so a browser on another site cannot read it and corsEnabled is false. Query it from a server, the metered API or the MCP, not from page script. The owner is OwnerName (max 40 characters, so long names are truncated at the source) with OwnerName2; the mailing address is OwnerAddr plus OwnerCity (max 13 characters, can read ST LOUIS MO) with OwnerState, OwnerZIP and OwnerCountry; the parcel id is ParcelId (11 digits, LowerParcelId also exists). SITEADDR carries runs of internal spaces (2233 PARK AV) and trailing padding, so a LIKE on a full street string misses; search on the house number plus a street word, or collapse whitespace on the client. Search with UPPER(OwnerName) LIKE 'SMITH%'; broad searches return exceededTransferLimit true at the 2000-row page. The layer has 194 fields and this record lists a subset. Layer 11 includes condominium master parcels, and the sub-accounts are layer 10 (not examined). No license or terms text is published on the data page. Verified live 2026-10-03: owner SMITH returned rows (first SMITH, DAVID E & SANDRA L TRS, parcel 22669130000, 2233 PARK AVE)."
15806
15898
  }
15807
15899
  ]
15808
15900
  };
@@ -16421,8 +16513,8 @@ var nevada_default = {
16421
16513
  corsEnabled: null,
16422
16514
  searchFields: [
16423
16515
  { name: "APN", label: "Assessor Parcel Number", searchable: true },
16424
- { name: "FIRSTNAME", label: "Owner First Name", searchable: true },
16425
16516
  { name: "LASTNAME", label: "Owner Last Name", searchable: true },
16517
+ { name: "FIRSTNAME", label: "Owner First Name", searchable: true },
16426
16518
  { name: "STREET", label: "Situs Street Name", searchable: true },
16427
16519
  { name: "STREETNUM", label: "Situs Street Number", searchable: false },
16428
16520
  { name: "CITY", label: "Situs City", searchable: true },
@@ -16451,7 +16543,7 @@ var nevada_default = {
16451
16543
  url: "https://explore-washoe.opendata.arcgis.com/",
16452
16544
  email: null
16453
16545
  },
16454
- notes: "71 fields confirmed including OBJECTID, APN, REGION, PIN, RECMAP, BOOK, PAGE, BLOCK, PARCEL, SUBNAME, TOWNSHIP, RANGE, SECTION_, FLOOR, MAPLINK, FLR, Shape, Shape.STArea(), STREETNUM, STREETDIR, STREET, CITY, SITUSZIP, FIRSTNAME, LASTNAME, MAILING1, MAILING2, MAILCITY, MAILSTATE, MAILZIP, LAND_USE, Zoning, WATER, SEWER, ACREAGE, TAXDIST, BEDROOMS, BATHS, YEARBLT, LANDASS, BUILDASS, TOTALASS, LANDAPR, BUILDAPR, TOTALAPR, DEPRECIATION, SALEDATE, SALEPRICE, OCCUPANCY, PROPCODE, TAXYEAR, STORIES, TOWNHOUSE, SQFEET, UNITS, AVCONSYEAR, BUILDINGTYPE, NBHD, SPECPROPCODE, QC, LAND_BASE, NBC, Fireplaces, HeatType, SecHeatType, Agency, AG_ABBR, FullAddress, ZoningWithDetail, Zoning_GIS, STRAP. Owner name available as FIRSTNAME + LASTNAME (split fields). Live query confirmed: APN 134087 returns 'MIEKO E SPAHR' in RENO 89503. maxRecordCount=1000. Covers Reno, Sparks, and unincorporated Washoe County (pop. 480,000). Note: owner name is public per Nevada law (unlike Clark County which also has a public layer but no owner). Current version 11.4."
16546
+ 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). 2026-10-03: LASTNAME is now declared before FIRSTNAME, because the site's owner-field classifier and the stdio MCP server both search the FIRST owner-matching field, so a surname search was running against first names (FIRSTNAME holds values like EDWARD M III; LASTNAME holds SMITH). The sampleQuery already searched LASTNAME and still returns rows. 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."
16455
16547
  }
16456
16548
  ]
16457
16549
  };
@@ -16641,25 +16733,25 @@ var new_jersey_default = {
16641
16733
  hasPublicRest: true,
16642
16734
  endpoints: [
16643
16735
  {
16644
- url: "https://services9.arcgis.com/GCI7uwdn5grdMNX1/arcgis/rest/services/GEO_MC_Parcels/FeatureServer/9",
16736
+ url: "https://services1.arcgis.com/PsDtSYIjNsyfjwcX/arcgis/rest/services/Monmouth_County_Parcels/FeatureServer/0",
16645
16737
  serviceType: "FeatureServer",
16646
- layerIndex: 9,
16647
- layerName: "GEO.MC.Parcels",
16738
+ layerIndex: 0,
16739
+ layerName: "Parcels",
16648
16740
  supportsQuery: true,
16649
- corsEnabled: null,
16741
+ corsEnabled: true,
16650
16742
  searchFields: [
16651
16743
  {
16652
- name: "PAMS_PIN",
16744
+ name: "PAMSPIN",
16653
16745
  label: "Property Account Management System PIN",
16654
16746
  searchable: true
16655
16747
  },
16656
16748
  {
16657
- name: "OwnersName",
16749
+ name: "Owner_Name",
16658
16750
  label: "Owner Name",
16659
16751
  searchable: true
16660
16752
  },
16661
16753
  {
16662
- name: "PropertyLocation",
16754
+ name: "Location",
16663
16755
  label: "Property Location / Address",
16664
16756
  searchable: true
16665
16757
  },
@@ -16689,61 +16781,61 @@ var new_jersey_default = {
16689
16781
  searchable: true
16690
16782
  },
16691
16783
  {
16692
- name: "PropertyClass",
16784
+ name: "Class",
16693
16785
  label: "Property Class Code",
16694
16786
  searchable: false
16695
16787
  },
16696
16788
  {
16697
- name: "Acreage",
16698
- label: "Acreage",
16789
+ name: "Net_Value",
16790
+ label: "Net Taxable Value",
16699
16791
  searchable: false
16700
16792
  },
16701
16793
  {
16702
- name: "TotalAssmnt",
16703
- label: "Total Assessment",
16704
- searchable: false
16705
- },
16706
- {
16707
- name: "LandAssmnt",
16794
+ name: "Land_Value",
16708
16795
  label: "Land Assessment",
16709
16796
  searchable: false
16710
16797
  },
16711
16798
  {
16712
- name: "BuildingAssmnt",
16713
- label: "Building Assessment",
16799
+ name: "Impr_Value",
16800
+ label: "Improvement Assessment",
16714
16801
  searchable: false
16715
16802
  },
16716
16803
  {
16717
- name: "SaleDate",
16804
+ name: "Sale_Date",
16718
16805
  label: "Last Sale Date",
16719
16806
  searchable: false
16720
16807
  },
16721
16808
  {
16722
- name: "SalePrice",
16809
+ name: "Sale_Price",
16723
16810
  label: "Last Sale Price",
16724
16811
  searchable: false
16725
16812
  },
16726
16813
  {
16727
- name: "YrBuilt",
16814
+ name: "Year_Built",
16728
16815
  label: "Year Built",
16729
16816
  searchable: false
16730
16817
  },
16731
16818
  {
16732
- name: "Zone_",
16819
+ name: "Zone",
16733
16820
  label: "Zoning Code",
16734
16821
  searchable: false
16735
16822
  },
16736
16823
  {
16737
- name: "CityStateZip",
16824
+ name: "Owner_Street",
16825
+ label: "Owner Mailing Street",
16826
+ searchable: true
16827
+ },
16828
+ {
16829
+ name: "Owner_Csz",
16738
16830
  label: "Owner Mailing City/State/ZIP",
16739
16831
  searchable: false
16740
16832
  }
16741
16833
  ],
16742
- 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",
16834
+ sampleQuery: "https://services1.arcgis.com/PsDtSYIjNsyfjwcX/arcgis/rest/services/Monmouth_County_Parcels/FeatureServer/0/query?where=UPPER(Owner_Name)+LIKE+UPPER('%25SMITH%25')&outFields=PAMSPIN,Owner_Name,Location,MUN_NAME,Net_Value,Sale_Price&returnGeometry=false&f=json&resultRecordCount=10",
16743
16835
  license: "public",
16744
16836
  licenseUrl: "https://gis-monmouthnj.opendata.arcgis.com/",
16745
16837
  status: "live",
16746
- lastVerified: "2026-05-15",
16838
+ lastVerified: "2026-10-03",
16747
16839
  verifiedBy: "manual"
16748
16840
  }
16749
16841
  ],
@@ -16752,7 +16844,7 @@ var new_jersey_default = {
16752
16844
  url: "https://gis-monmouthnj.opendata.arcgis.com/",
16753
16845
  email: null
16754
16846
  },
16755
- 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."
16847
+ notes: "Monmouth County (pop. 643,000; Jersey Shore and inland suburbs) uses a county-direct FeatureServer separate from the NJOGIS statewide layer, whose OWNER_NAME is blank for every Monmouth row. As of 2026-10-03 the county publishes from a new ArcGIS Online org (MonmouthNJGIS): Monmouth_County_Parcels, layer 0 (Parcels) at services1.arcgis.com, item modified 2026-09-25, CORS open, about 265,000 rows. The older services9.arcgis.com GEO_MC_Parcels service now answers Invalid URL and is gone from that org's service list, and the services6.arcgis.com monmouth_county_nj_parcels copy the item search still lists is unshared (Token Required); neither should be re-registered. The layer is Monmouth County GIS's own MOD-IV data pull. PAMSPIN is the statewide identifier, structured as county code + municipality code + block + lot + qualifier code (QCODE). Owner_Name is public and queryable. Assessment fields include Net_Value, Land_Value, Impr_Value, Sale_Date, Sale_Price, and Year_Built; every one of them is a STRING on this layer (Sale_Date reads like 12/09/99), so numeric compares and sorts will not behave. Owner mailing address is split into Owner_Street and Owner_Csz, a single padded city/state/ZIP string; the separate City/State/Zip columns appear to hold a situs postal city and are not declared as mailing fields. The old Acreage field has no reliable twin (Lot_Size read 0.0000 on a sampled row) and was dropped. The layer carries Duplicate and Error flag columns and has more rows than the state composite (265,259 vs 249,796), so duplicate parcels exist and pickers should expect tied rows. 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."
16756
16848
  },
16757
16849
  {
16758
16850
  id: "nj-ocean",
@@ -20097,7 +20189,7 @@ var south_carolina_default = {
20097
20189
  url: "https://www.gcgis.org/",
20098
20190
  email: "gis@greenvillecounty.org"
20099
20191
  },
20100
- notes: `MARKED UNREACHABLE 2026-08-29 after 25 days down (297 consecutive liveness failures since 2026-08-04). The registered service answers verbatim "Service GreenvilleJS/Map_Layers_JS/MapServer not started"; the county's own iMAP service (imap/iMAP/MapServer) is also not started; the GreenvilleJS and imap folders list no services; the one visible service (GCGIA/Greenville_Base, 61 layers) has no parcel layer; ArcGIS Hub lists no county-owned parcel feature service. The county has taken its map services down and nothing replaces them yet. Liveness keeps probing; flip back to live when it recovers. Owner search remains available at the county's non-GIS Real Property Search. Prior notes: Greenville County (pop. 530,000; seat: Greenville) Tax Parcel layer is within the Map_Layers_JS composite MapServer at layer index 52. 20 fields confirmed: PIN, OWNAM1/2, STREET, CITY, STATE, ZIP5, NAMECO, POWNNM, DEEDDATE, CUBOOK, CUPAGE, PLTBK1, PPAGE1, DIST, MKTAREA, JURIS, LANDUSE, DESCR, SUBDIV. Verified 2026-05-15: SMITH returns Greenville SC addresses (e.g., '124 MCDANIEL GREENE', '218 BUTLER AVE'). The same MapServer contains 95+ other layers (zoning, census, drainage, etc.). Layer 52 is specifically Tax Parcel. The GCGIS GreenvilleJS MapServer is the public-facing viewer service.`
20192
+ notes: `RECHECKED 2026-10-03, STILL UNREACHABLE, now for a structural reason. The GreenvilleJS folder has been deleted, not just stopped: the registered layer now answers Service GreenvilleJS/Map_Layers_JS/MapServer not found (it said not started on 08-29) and the folder itself returns Folder not found. The services root (www.gcgis.org/arcgis/rest/services) lists only a GVL_COMPOSITE_LOC geocoder and a Utilities folder of geoprocessing, geometry and print tools; GCGIA/Greenville_Base is gone too. The county rebuilt its viewer (www.gcgis.org/apps/greenvillenj/) on a private, undocumented ASP.NET web API (apps/GreenvilleNJ_webapi/asp/webAPI) that accepts POST only and is not an ArcGIS REST service the atlas can register. Candidates checked and rejected: the Greenville-Pickens transportation study's TaxParcel02172021_gdb FeatureServer (countywide with the county schema and owner search, but a February 2021 snapshot, too stale for mailed notices); the GreenvilleCountyBaseData FeatureServer by mwassonfigis (current schema but only about 33,000 of about 228,000 parcels, a partial extract); the City of Greenville Parcels with Ownership layer on citygis.greenvillesc.gov (city jurisdiction only); and a utility.arcgis.com proxy of the county's GCGIA feature service (Item does not exist or is inaccessible). No South Carolina statewide owner-bearing parcel layer was found. Status stays unreachable; recheck the services root periodically for a new parcel service and re-register from it. Earlier history: MARKED UNREACHABLE 2026-08-29 after 25 days down (297 consecutive liveness failures since 2026-08-04). The registered service answers verbatim "Service GreenvilleJS/Map_Layers_JS/MapServer not started"; the county's own iMAP service (imap/iMAP/MapServer) is also not started; the GreenvilleJS and imap folders list no services; the one visible service (GCGIA/Greenville_Base, 61 layers) has no parcel layer; ArcGIS Hub lists no county-owned parcel feature service. The county has taken its map services down and nothing replaces them yet. Liveness keeps probing; flip back to live when it recovers. Owner search remains available at the county's non-GIS Real Property Search. Prior notes: Greenville County (pop. 530,000; seat: Greenville) Tax Parcel layer is within the Map_Layers_JS composite MapServer at layer index 52. 20 fields confirmed: PIN, OWNAM1/2, STREET, CITY, STATE, ZIP5, NAMECO, POWNNM, DEEDDATE, CUBOOK, CUPAGE, PLTBK1, PPAGE1, DIST, MKTAREA, JURIS, LANDUSE, DESCR, SUBDIV. Verified 2026-05-15: SMITH returns Greenville SC addresses (e.g., '124 MCDANIEL GREENE', '218 BUTLER AVE'). The same MapServer contains 95+ other layers (zoning, census, drainage, etc.). Layer 52 is specifically Tax Parcel. The GCGIS GreenvilleJS MapServer is the public-facing viewer service.`
20101
20193
  },
20102
20194
  {
20103
20195
  id: "sc-charleston",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@urbankitstudio/atlas",
3
- "version": "0.6.10",
4
- "description": "JS SDK for the UrbanKit County Parcel REST API Atlas: 239 counties across all 50 US states and DC, 251 verified public ArcGIS REST endpoints for county parcel data, with searchable field metadata, sample queries and license info.",
3
+ "version": "0.6.12",
4
+ "description": "JS SDK for the UrbanKit County Parcel REST API Atlas: 241 counties across all 50 US states and DC, 253 verified public ArcGIS REST endpoints for county parcel data, with searchable field metadata, sample queries and license info.",
5
5
  "keywords": [
6
6
  "parcel",
7
7
  "arcgis",