@urbankitstudio/atlas 0.1.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 ADDED
@@ -0,0 +1,1552 @@
1
+ // data/index.json
2
+ var data_default = {
3
+ version: "0.1.0",
4
+ lastUpdated: "2026-05-15",
5
+ totals: {
6
+ states: 50,
7
+ counties: 31,
8
+ endpoints: 31
9
+ },
10
+ states: [
11
+ { slug: "alabama", name: "Alabama", abbrev: "AL", countyCount: 0, endpointCount: 0, populated: false },
12
+ { slug: "alaska", name: "Alaska", abbrev: "AK", countyCount: 0, endpointCount: 0, populated: false },
13
+ { slug: "arizona", name: "Arizona", abbrev: "AZ", countyCount: 1, endpointCount: 1, populated: true },
14
+ { slug: "arkansas", name: "Arkansas", abbrev: "AR", countyCount: 0, endpointCount: 0, populated: false },
15
+ { slug: "california", name: "California", abbrev: "CA", countyCount: 2, endpointCount: 2, populated: true },
16
+ { slug: "colorado", name: "Colorado", abbrev: "CO", countyCount: 1, endpointCount: 1, populated: true },
17
+ { slug: "connecticut", name: "Connecticut", abbrev: "CT", countyCount: 0, endpointCount: 0, populated: false },
18
+ { slug: "delaware", name: "Delaware", abbrev: "DE", countyCount: 0, endpointCount: 0, populated: false },
19
+ { slug: "florida", name: "Florida", abbrev: "FL", countyCount: 4, endpointCount: 4, populated: true },
20
+ { slug: "georgia", name: "Georgia", abbrev: "GA", countyCount: 1, endpointCount: 1, populated: true },
21
+ { slug: "hawaii", name: "Hawaii", abbrev: "HI", countyCount: 0, endpointCount: 0, populated: false },
22
+ { slug: "idaho", name: "Idaho", abbrev: "ID", countyCount: 0, endpointCount: 0, populated: false },
23
+ { slug: "illinois", name: "Illinois", abbrev: "IL", countyCount: 9, endpointCount: 8, populated: true },
24
+ { slug: "indiana", name: "Indiana", abbrev: "IN", countyCount: 0, endpointCount: 0, populated: false },
25
+ { slug: "iowa", name: "Iowa", abbrev: "IA", countyCount: 0, endpointCount: 0, populated: false },
26
+ { slug: "kansas", name: "Kansas", abbrev: "KS", countyCount: 0, endpointCount: 0, populated: false },
27
+ { slug: "kentucky", name: "Kentucky", abbrev: "KY", countyCount: 0, endpointCount: 0, populated: false },
28
+ { slug: "louisiana", name: "Louisiana", abbrev: "LA", countyCount: 0, endpointCount: 0, populated: false },
29
+ { slug: "maine", name: "Maine", abbrev: "ME", countyCount: 0, endpointCount: 0, populated: false },
30
+ { slug: "maryland", name: "Maryland", abbrev: "MD", countyCount: 0, endpointCount: 0, populated: false },
31
+ { slug: "massachusetts", name: "Massachusetts", abbrev: "MA", countyCount: 0, endpointCount: 0, populated: false },
32
+ { slug: "michigan", name: "Michigan", abbrev: "MI", countyCount: 0, endpointCount: 0, populated: false },
33
+ { slug: "minnesota", name: "Minnesota", abbrev: "MN", countyCount: 1, endpointCount: 1, populated: true },
34
+ { slug: "mississippi", name: "Mississippi", abbrev: "MS", countyCount: 0, endpointCount: 0, populated: false },
35
+ { slug: "missouri", name: "Missouri", abbrev: "MO", countyCount: 0, endpointCount: 0, populated: false },
36
+ { slug: "montana", name: "Montana", abbrev: "MT", countyCount: 0, endpointCount: 0, populated: false },
37
+ { slug: "nebraska", name: "Nebraska", abbrev: "NE", countyCount: 0, endpointCount: 0, populated: false },
38
+ { slug: "nevada", name: "Nevada", abbrev: "NV", countyCount: 1, endpointCount: 1, populated: true },
39
+ { slug: "new-hampshire", name: "New Hampshire", abbrev: "NH", countyCount: 0, endpointCount: 0, populated: false },
40
+ { slug: "new-jersey", name: "New Jersey", abbrev: "NJ", countyCount: 0, endpointCount: 0, populated: false },
41
+ { slug: "new-mexico", name: "New Mexico", abbrev: "NM", countyCount: 0, endpointCount: 0, populated: false },
42
+ { slug: "new-york", name: "New York", abbrev: "NY", countyCount: 1, endpointCount: 2, populated: true },
43
+ { slug: "north-carolina", name: "North Carolina", abbrev: "NC", countyCount: 1, endpointCount: 1, populated: true },
44
+ { slug: "north-dakota", name: "North Dakota", abbrev: "ND", countyCount: 0, endpointCount: 0, populated: false },
45
+ { slug: "ohio", name: "Ohio", abbrev: "OH", countyCount: 2, endpointCount: 2, populated: true },
46
+ { slug: "oklahoma", name: "Oklahoma", abbrev: "OK", countyCount: 0, endpointCount: 0, populated: false },
47
+ { slug: "oregon", name: "Oregon", abbrev: "OR", countyCount: 0, endpointCount: 0, populated: false },
48
+ { slug: "pennsylvania", name: "Pennsylvania", abbrev: "PA", countyCount: 2, endpointCount: 2, populated: true },
49
+ { slug: "rhode-island", name: "Rhode Island", abbrev: "RI", countyCount: 0, endpointCount: 0, populated: false },
50
+ { slug: "south-carolina", name: "South Carolina", abbrev: "SC", countyCount: 0, endpointCount: 0, populated: false },
51
+ { slug: "south-dakota", name: "South Dakota", abbrev: "SD", countyCount: 0, endpointCount: 0, populated: false },
52
+ { slug: "tennessee", name: "Tennessee", abbrev: "TN", countyCount: 0, endpointCount: 0, populated: false },
53
+ { slug: "texas", name: "Texas", abbrev: "TX", countyCount: 3, endpointCount: 3, populated: true },
54
+ { slug: "utah", name: "Utah", abbrev: "UT", countyCount: 0, endpointCount: 0, populated: false },
55
+ { slug: "vermont", name: "Vermont", abbrev: "VT", countyCount: 0, endpointCount: 0, populated: false },
56
+ { slug: "virginia", name: "Virginia", abbrev: "VA", countyCount: 1, endpointCount: 1, populated: true },
57
+ { slug: "washington", name: "Washington", abbrev: "WA", countyCount: 1, endpointCount: 1, populated: true },
58
+ { slug: "west-virginia", name: "West Virginia", abbrev: "WV", countyCount: 0, endpointCount: 0, populated: false },
59
+ { slug: "wisconsin", name: "Wisconsin", abbrev: "WI", countyCount: 0, endpointCount: 0, populated: false },
60
+ { slug: "wyoming", name: "Wyoming", abbrev: "WY", countyCount: 0, endpointCount: 0, populated: false }
61
+ ]
62
+ };
63
+
64
+ // data/arizona.json
65
+ var arizona_default = {
66
+ stateSlug: "arizona",
67
+ stateName: "Arizona",
68
+ stateAbbrev: "AZ",
69
+ lastUpdated: "2026-05-11",
70
+ counties: [
71
+ {
72
+ id: "az-maricopa",
73
+ state: "AZ",
74
+ stateName: "Arizona",
75
+ stateSlug: "arizona",
76
+ county: "Maricopa",
77
+ countySlug: "maricopa-county",
78
+ countyFips: "04013",
79
+ hasPublicRest: true,
80
+ endpoints: [
81
+ {
82
+ url: "https://gis.mcassessor.maricopa.gov/arcgis/rest/services/MaricopaDynamicQueryService/MapServer/3",
83
+ serviceType: "MapServer",
84
+ layerIndex: 3,
85
+ layerName: "Parcels",
86
+ supportsQuery: true,
87
+ corsEnabled: null,
88
+ searchFields: [
89
+ { name: "APN", label: "Assessor Parcel Number (APN)", searchable: true },
90
+ { name: "APN_DASH", label: "APN with dashes", searchable: true },
91
+ { name: "OWNER_NAME", label: "Owner Name", searchable: true },
92
+ { name: "MAIL_ADDR1", label: "Mailing Address 1", searchable: true },
93
+ { name: "MAIL_ADDR2", label: "Mailing Address 2", searchable: true },
94
+ { name: "MAIL_CITY", label: "Mailing City", searchable: false },
95
+ { name: "MAIL_STATE", label: "Mailing State", searchable: false },
96
+ { name: "PHYSICAL_ADDRESS", label: "Physical Address (combined)", searchable: true },
97
+ { name: "PHYSICAL_CITY", label: "Physical City", searchable: false },
98
+ { name: "SALE_DATE", label: "Sale Date", searchable: false },
99
+ { name: "SALE_PRICE", label: "Sale Price", searchable: false },
100
+ { name: "FCV_CUR", label: "Full Cash Value (current year)", searchable: false },
101
+ { name: "LPV_CUR", label: "Limited Property Value (current)", searchable: false }
102
+ ],
103
+ sampleQuery: "https://gis.mcassessor.maricopa.gov/arcgis/rest/services/MaricopaDynamicQueryService/MapServer/3/query?where=UPPER(OWNER_NAME)%20LIKE%20UPPER('%25SMITH%25')&outFields=APN,OWNER_NAME,PHYSICAL_ADDRESS,PHYSICAL_CITY&returnGeometry=false&f=json&resultRecordCount=10",
104
+ license: "public",
105
+ licenseUrl: "https://maps.mcassessor.maricopa.gov/",
106
+ status: "live",
107
+ lastVerified: "2026-05-11",
108
+ verifiedBy: "manual"
109
+ }
110
+ ],
111
+ contact: {
112
+ department: "Maricopa County Assessor's Office \u2014 GIS Division",
113
+ url: "https://maps.mcassessor.maricopa.gov/",
114
+ email: null
115
+ },
116
+ notes: "57 fields confirmed including APN, APN_DASH, BOOK, MAP, ITEM, FLOOR, OWNER_NAME, MAIL_ADDR1/2, MAIL_CITY, MAIL_STATE, MAIL_ZIP, MAIL_CNTRY, PHYSICAL_ADDRESS, PHYSICAL_CITY, PHYSICAL_ZIP, PHYSICAL_STREET_NUM/DIR/NAME/TYPE, DEED_NUMBER, DEED_DATE, SALE_DATE, SALE_PRICE, MCRNUM, SUBNAME, LAND_SIZE, LOT_NUM, CONST_YEAR, LIVING_SPACE, INCAREOF, FCV_CUR/PREV, LPV_CUR/PREV, TAX_YR_CUR/PREV, CITY_ZONING, JURISDICTION, BLOCK, TRACT. Owner query tested and confirmed. The MaricopaDynamicQueryService layer 3 (Parcels) is the full-attribute layer backing the Parcel Viewer at maps.mcassessor.maricopa.gov. A separate 'Parcels' MapServer at gis.mcassessor.maricopa.gov/arcgis/rest/services/Parcels/MapServer also exists but has fewer fields. APN format: 8-digit with no dashes (e.g. '10101347'); APN_DASH adds dashes (e.g. '101-01-347')."
117
+ }
118
+ ]
119
+ };
120
+
121
+ // data/california.json
122
+ var california_default = {
123
+ stateSlug: "california",
124
+ stateName: "California",
125
+ stateAbbrev: "CA",
126
+ lastUpdated: "2026-05-15",
127
+ counties: [
128
+ {
129
+ id: "ca-los-angeles",
130
+ state: "CA",
131
+ stateName: "California",
132
+ stateSlug: "california",
133
+ county: "Los Angeles",
134
+ countySlug: "los-angeles-county",
135
+ countyFips: "06037",
136
+ hasPublicRest: true,
137
+ endpoints: [
138
+ {
139
+ url: "https://public.gis.lacounty.gov/public/rest/services/LACounty_Cache/LACounty_Parcel/MapServer/0",
140
+ serviceType: "MapServer",
141
+ layerIndex: 0,
142
+ layerName: "LA County Parcel",
143
+ supportsQuery: true,
144
+ corsEnabled: null,
145
+ searchFields: [
146
+ { name: "AIN", label: "Assessor Identification Number (AIN)", searchable: true },
147
+ { name: "SitusFullAddress", label: "Situs Address", searchable: true }
148
+ ],
149
+ sampleQuery: "https://public.gis.lacounty.gov/public/rest/services/LACounty_Cache/LACounty_Parcel/MapServer/0/query?where=AIN%3D%274321002009%27&outFields=*&f=json",
150
+ license: "public",
151
+ licenseUrl: null,
152
+ status: "unverified",
153
+ lastVerified: "2026-05-07",
154
+ verifiedBy: "manual"
155
+ }
156
+ ],
157
+ contact: {
158
+ department: "Los Angeles County GIS",
159
+ url: "https://egis-lacounty.hub.arcgis.com/",
160
+ email: null
161
+ },
162
+ 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."
163
+ },
164
+ {
165
+ id: "ca-sonoma",
166
+ state: "CA",
167
+ stateName: "California",
168
+ stateSlug: "california",
169
+ county: "Sonoma",
170
+ countySlug: "sonoma-county",
171
+ countyFips: "06097",
172
+ hasPublicRest: true,
173
+ endpoints: [
174
+ {
175
+ url: "https://socogis.sonomacounty.ca.gov/map/rest/services/OWTSPublic/Cities_GIS_Parcel_Base/FeatureServer/0",
176
+ serviceType: "FeatureServer",
177
+ layerIndex: 0,
178
+ layerName: "Cities GIS Parcel Base",
179
+ supportsQuery: true,
180
+ corsEnabled: null,
181
+ searchFields: [
182
+ { name: "APN", label: "Assessor's Parcel Number", searchable: true },
183
+ { name: "SitusFormatted1", label: "Situs Address (line 1)", searchable: true },
184
+ { name: "SitusStreetName", label: "Situs Street Name", searchable: true },
185
+ { name: "SitusCity", label: "Situs City", searchable: true }
186
+ ],
187
+ sampleQuery: "https://socogis.sonomacounty.ca.gov/map/rest/services/OWTSPublic/Cities_GIS_Parcel_Base/FeatureServer/0/query?where=APN%3D%27029-201-001%27&outFields=APN,SitusFormatted1,SitusStreetName,SitusCity&f=json",
188
+ license: "public",
189
+ licenseUrl: null,
190
+ status: "live",
191
+ lastVerified: "2026-05-15",
192
+ verifiedBy: "automated"
193
+ }
194
+ ],
195
+ contact: {
196
+ department: "Sonoma County GIS",
197
+ url: "https://gis-sonomacounty.hub.arcgis.com/",
198
+ email: null
199
+ },
200
+ 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)."
201
+ }
202
+ ]
203
+ };
204
+
205
+ // data/colorado.json
206
+ var colorado_default = {
207
+ stateSlug: "colorado",
208
+ stateName: "Colorado",
209
+ stateAbbrev: "CO",
210
+ lastUpdated: "2026-05-11",
211
+ counties: [
212
+ {
213
+ id: "co-denver",
214
+ state: "CO",
215
+ stateName: "Colorado",
216
+ stateSlug: "colorado",
217
+ county: "Denver",
218
+ countySlug: "denver-county",
219
+ countyFips: "08031",
220
+ hasPublicRest: true,
221
+ endpoints: [
222
+ {
223
+ url: "https://gis.colorado.gov/public/rest/services/Address_and_Parcel/Colorado_Public_Parcels/FeatureServer/0",
224
+ serviceType: "FeatureServer",
225
+ layerIndex: 0,
226
+ layerName: "Colorado_Public_Parcel_Composite",
227
+ supportsQuery: true,
228
+ corsEnabled: null,
229
+ searchFields: [
230
+ { name: "parcel_id", label: "Parcel ID", searchable: true },
231
+ { name: "countyName", label: "County Name (filter: 'Denver')", searchable: true },
232
+ { name: "countyFips", label: "County FIPS Code (filter: '031')", searchable: true },
233
+ { name: "situsAdd", label: "Situs Address", searchable: true },
234
+ { name: "sitAddCty", label: "Situs City", searchable: false },
235
+ { name: "sitAddZip", label: "Situs ZIP", searchable: false },
236
+ { name: "owner", label: "Owner Name", searchable: true },
237
+ { name: "owner2", label: "Owner Name 2", searchable: true },
238
+ { name: "ownerAdd", label: "Owner Address", searchable: false },
239
+ { name: "legalDesc", label: "Legal Description", searchable: false },
240
+ { name: "zoningCode", label: "Zoning Code", searchable: false },
241
+ { name: "saleDate", label: "Sale Date", searchable: false },
242
+ { name: "salePrice", label: "Sale Price", searchable: false },
243
+ { name: "apprValTot", label: "Total Appraised Value", searchable: false }
244
+ ],
245
+ sampleQuery: "https://gis.colorado.gov/public/rest/services/Address_and_Parcel/Colorado_Public_Parcels/FeatureServer/0/query?where=countyName+%3D+'Denver'+AND+UPPER(owner)+LIKE+UPPER('%25SMITH%25')&outFields=parcel_id,owner,situsAdd,sitAddCty,countyFips&returnGeometry=false&f=json&resultRecordCount=10",
246
+ license: "public",
247
+ licenseUrl: "https://gis.colorado.gov/",
248
+ status: "live",
249
+ lastVerified: "2026-05-11",
250
+ verifiedBy: "manual"
251
+ }
252
+ ],
253
+ contact: {
254
+ department: "Colorado Governor's Office of Information Technology (OIT) \u2014 Colorado Geographic Information Systems Program",
255
+ url: "https://gis.colorado.gov/",
256
+ email: null
257
+ },
258
+ notes: "34 fields confirmed including parcel_id, countyName, countyFips, situsAdd, sitAddCty, sitAddZip, owner, owner2, ownerAdd, ownAddCty, ownAddStt, ownAddZip, legalDesc, landSqft, landAcres, block, lot, subCode, subName, zoningCode, zoningDesc, landUseCde, landUseDsc, saleDate, salePrice, apprValTot, asedValTot, URL, dateReceived. This is a statewide composite \u2014 query by countyName='Denver' OR countyFips='031' (note: FIPS here is the 3-digit county portion, not the full 5-digit). Owner query tested and confirmed with real Denver addresses. This same endpoint covers all 64 Colorado counties; filter by countyName or countyFips for any of them. Denver is a consolidated city-county (countyName='Denver' and cityName='Denver' are the same entity)."
259
+ }
260
+ ]
261
+ };
262
+
263
+ // data/florida.json
264
+ var florida_default = {
265
+ stateSlug: "florida",
266
+ stateName: "Florida",
267
+ stateAbbrev: "FL",
268
+ lastUpdated: "2026-05-11",
269
+ counties: [
270
+ {
271
+ id: "fl-miami-dade",
272
+ state: "FL",
273
+ stateName: "Florida",
274
+ stateSlug: "florida",
275
+ county: "Miami-Dade",
276
+ countySlug: "miami-dade-county",
277
+ countyFips: "12086",
278
+ hasPublicRest: true,
279
+ endpoints: [
280
+ {
281
+ url: "https://gisweb.miamidade.gov/arcgis/rest/services/MD_LandInformation/MapServer/26",
282
+ serviceType: "MapServer",
283
+ layerIndex: 26,
284
+ layerName: "Parcels @ PaParcel",
285
+ supportsQuery: true,
286
+ corsEnabled: null,
287
+ searchFields: [
288
+ { name: "FOLIO", label: "Folio Number", searchable: true },
289
+ { name: "TRUE_OWNER1", label: "Owner Name (Primary)", searchable: true },
290
+ { name: "TRUE_OWNER2", label: "Owner Name 2", searchable: true },
291
+ { name: "TRUE_OWNER3", label: "Owner Name 3", searchable: true },
292
+ { name: "TRUE_SITE_ADDR", label: "Site Address", searchable: true },
293
+ { name: "TRUE_SITE_CITY", label: "Site City", searchable: true },
294
+ { name: "TRUE_SITE_ZIP_CODE", label: "Site ZIP", searchable: true },
295
+ { name: "TRUE_MAILING_ADDR1", label: "Mailing Address", searchable: true }
296
+ ],
297
+ sampleQuery: "https://gisweb.miamidade.gov/arcgis/rest/services/MD_LandInformation/MapServer/26/query?where=UPPER(TRUE_OWNER1)%20LIKE%20UPPER('%25SMITH%25')&outFields=FOLIO,TRUE_OWNER1,TRUE_SITE_ADDR,TRUE_SITE_CITY&returnGeometry=false&f=json&resultRecordCount=10",
298
+ license: "public",
299
+ licenseUrl: "https://gis-mdc.opendata.arcgis.com/",
300
+ status: "live",
301
+ lastVerified: "2026-05-11",
302
+ verifiedBy: "manual"
303
+ }
304
+ ],
305
+ contact: {
306
+ department: "Miami-Dade County Information Technology Department GIS",
307
+ url: "https://gis-mdc.opendata.arcgis.com/",
308
+ email: null
309
+ },
310
+ 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."
311
+ },
312
+ {
313
+ id: "fl-orange",
314
+ state: "FL",
315
+ stateName: "Florida",
316
+ stateSlug: "florida",
317
+ county: "Orange",
318
+ countySlug: "orange-county",
319
+ countyFips: "12095",
320
+ hasPublicRest: true,
321
+ endpoints: [
322
+ {
323
+ url: "https://www.ocgis.com/arcpub/rest/services/Map_Layers/Parcels/MapServer/0",
324
+ serviceType: "MapServer",
325
+ layerIndex: 0,
326
+ layerName: "Parcels",
327
+ supportsQuery: true,
328
+ corsEnabled: null,
329
+ searchFields: [
330
+ { name: "ASSESSMENT_NO", label: "Assessment Number (Parcel ID)", searchable: true },
331
+ { name: "SITE_ADDRESS", label: "Site Address", searchable: true },
332
+ { name: "YEAR_BUILT", label: "Year Built", searchable: false },
333
+ { name: "NBR_BEDROOMS", label: "Bedrooms", searchable: false }
334
+ ],
335
+ sampleQuery: "https://www.ocgis.com/arcpub/rest/services/Map_Layers/Parcels/MapServer/0/query?where=ASSESSMENT_NO+LIKE+'%25072-478%25'&outFields=ASSESSMENT_NO,SITE_ADDRESS,YEAR_BUILT&returnGeometry=false&f=json&resultRecordCount=10",
336
+ license: "public",
337
+ licenseUrl: "https://ocgis-datahub-ocfl.hub.arcgis.com/",
338
+ status: "live",
339
+ lastVerified: "2026-05-11",
340
+ verifiedBy: "manual"
341
+ }
342
+ ],
343
+ contact: {
344
+ department: "Orange County, Florida GIS (OCGIS) / OC Survey Geospatial Services",
345
+ url: "https://ocgis-datahub-ocfl.hub.arcgis.com/",
346
+ email: null
347
+ },
348
+ notes: "Only 6 fields on this public REST endpoint: ASSESSMENT_NO, SITE_ADDRESS, YEAR_BUILT, NBR_BEDROOMS, SHAPE, OBJECTID. Owner name is NOT available on this layer \u2014 the public REST endpoint is geometry + parcel ID + limited building characteristics only. Owner data lives in the OCPA (Orange County Property Appraiser) portal at ocpa.com and is not exposed via public REST. A second service at ocgis4.ocfl.net/arcgis/rest/services/Public_Dynamic/MapServer exists for county facilities but not full parcel attributes."
349
+ },
350
+ {
351
+ id: "fl-hillsborough",
352
+ state: "FL",
353
+ stateName: "Florida",
354
+ stateSlug: "florida",
355
+ county: "Hillsborough",
356
+ countySlug: "hillsborough-county",
357
+ countyFips: "12057",
358
+ hasPublicRest: true,
359
+ endpoints: [
360
+ {
361
+ url: "https://www25.swfwmd.state.fl.us/arcgiswmis/rest/services/r27/LocationInfo/MapServer/71",
362
+ serviceType: "MapServer",
363
+ layerIndex: 71,
364
+ layerName: "Hillsborough County Parcels",
365
+ supportsQuery: true,
366
+ corsEnabled: null,
367
+ searchFields: [
368
+ { name: "PARNO", label: "Parcel Number", searchable: true },
369
+ { name: "OWNNAME", label: "Owner Name", searchable: true },
370
+ { name: "MAILADD", label: "Mailing Address", searchable: true },
371
+ { name: "STNAME", label: "State", searchable: false },
372
+ { name: "CNTYFIPS", label: "County FIPS Code", searchable: false },
373
+ { name: "OWNTYPE", label: "Owner Type", searchable: false },
374
+ { name: "PARUSEDESC", label: "Parcel Use Description", searchable: false },
375
+ { name: "PARVAL", label: "Parcel Value", searchable: false }
376
+ ],
377
+ sampleQuery: "https://www25.swfwmd.state.fl.us/arcgiswmis/rest/services/r27/LocationInfo/MapServer/71/query?where=UPPER(OWNNAME)%20LIKE%20UPPER('%25SMITH%25')&outFields=PARNO,OWNNAME,MAILADD,PARUSEDESC&returnGeometry=false&f=json&resultRecordCount=10",
378
+ license: "public",
379
+ licenseUrl: "https://www.swfwmd.state.fl.us/resources/data-maps",
380
+ status: "live",
381
+ lastVerified: "2026-05-11",
382
+ verifiedBy: "manual"
383
+ }
384
+ ],
385
+ contact: {
386
+ department: "Southwest Florida Water Management District (SWFWMD) \u2014 hosts the FL regional parcel layer",
387
+ url: "https://www.swfwmd.state.fl.us/resources/data-maps",
388
+ email: null
389
+ },
390
+ notes: "20 fields confirmed including PARNO, OWNNAME, MAILADD, OWNTYPE, AREATXT, IMPROVVAL, LANDVAL, PARVAL, PARVALTYPE, PARUSECODE, PARUSEDESC. Owner query returns real results with CNTYFIPS=057 confirming Hillsborough data. This endpoint is on the SWFWMD (regional water management district) server, which aggregates parcel data from multiple FL counties in a single LocationInfo MapServer (layer 71 of 80+). The Hillsborough County Property Appraiser's own REST server at gis.hcpafl.org does not expose a queryable public parcel layer \u2014 only their browser-based property search at gis.hcpafl.org/propertysearch/."
391
+ },
392
+ {
393
+ id: "fl-broward",
394
+ state: "FL",
395
+ stateName: "Florida",
396
+ stateSlug: "florida",
397
+ county: "Broward",
398
+ countySlug: "broward-county",
399
+ countyFips: "12011",
400
+ hasPublicRest: true,
401
+ endpoints: [
402
+ {
403
+ url: "https://services9.arcgis.com/Gh9awoU677aKree0/arcgis/rest/services/Florida_Statewide_Cadastral/FeatureServer/0",
404
+ serviceType: "FeatureServer",
405
+ layerIndex: 0,
406
+ layerName: "FDOR Cadastral 2025",
407
+ supportsQuery: true,
408
+ corsEnabled: null,
409
+ searchFields: [
410
+ { name: "PARCEL_ID", label: "Parcel ID", searchable: true },
411
+ { name: "CO_NO", label: "County Number (11 = Broward)", searchable: true },
412
+ { name: "OWN_NAME", label: "Owner Name", searchable: true },
413
+ { name: "OWN_ADDR1", label: "Owner Address 1", searchable: true },
414
+ { name: "PHY_ADDR1", label: "Physical Address", searchable: true },
415
+ { name: "PHY_CITY", label: "Physical City", searchable: true },
416
+ { name: "PHY_ZIPCD", label: "Physical ZIP", searchable: true }
417
+ ],
418
+ sampleQuery: "https://services9.arcgis.com/Gh9awoU677aKree0/arcgis/rest/services/Florida_Statewide_Cadastral/FeatureServer/0/query?where=CO_NO%3D11+AND+UPPER(OWN_NAME)+LIKE+UPPER('%25SMITH%25')&outFields=PARCEL_ID,OWN_NAME,PHY_ADDR1,PHY_CITY&returnGeometry=false&f=json&resultRecordCount=10",
419
+ license: "public",
420
+ licenseUrl: "https://gis.fdot.gov/arcgis/rest/services/Parcels/FeatureServer",
421
+ status: "live",
422
+ lastVerified: "2026-05-11",
423
+ verifiedBy: "manual"
424
+ }
425
+ ],
426
+ contact: {
427
+ department: "Florida Department of Revenue / FDOT \u2014 Florida Statewide Cadastral (all 67 counties)",
428
+ url: "https://www.floridarevenue.com/property/Pages/DataPortal.aspx",
429
+ email: null
430
+ },
431
+ notes: "110+ fields confirmed on Florida Statewide Cadastral layer. Filter by CO_NO=11 for Broward. Fields include OWN_NAME, OWN_ADDR1/2, PHY_ADDR1/2, PHY_CITY, PHY_ZIPCD, JV (just value), LND_VAL, SALE_PRC1, SALE_YR1, ACT_YR_BLT, TOT_LVG_AR, NO_RES_UNT, DOR_UC (DOR use code). Data is annual export from FL DOR; last export August 2025. Broward County Property Appraiser's own server at gisweb-adapters.bcpa.net has the BCPA_EXTERNAL MapServer, but the parcel layer there exposes only FOLIO + geometry (no owner). For Broward parcel data with owner attributes, this state-level cadastral is the only public REST option \u2014 the county's own MapServer exposes FOLIO + geometry only."
432
+ }
433
+ ]
434
+ };
435
+
436
+ // data/georgia.json
437
+ var georgia_default = {
438
+ stateSlug: "georgia",
439
+ stateName: "Georgia",
440
+ stateAbbrev: "GA",
441
+ lastUpdated: "2026-05-11",
442
+ counties: [
443
+ {
444
+ id: "ga-fulton",
445
+ state: "GA",
446
+ stateName: "Georgia",
447
+ stateSlug: "georgia",
448
+ county: "Fulton",
449
+ countySlug: "fulton-county",
450
+ countyFips: "13121",
451
+ hasPublicRest: true,
452
+ endpoints: [
453
+ {
454
+ url: "https://gismaps.fultoncountyga.gov/arcgispub2/rest/services/PropertyMapViewer/PropertyMapViewer/MapServer/11",
455
+ serviceType: "MapServer",
456
+ layerIndex: 11,
457
+ layerName: "Tax Parcel",
458
+ supportsQuery: true,
459
+ corsEnabled: null,
460
+ searchFields: [
461
+ { name: "ParcelID", label: "Parcel ID", searchable: true },
462
+ { name: "Owner", label: "Owner Name", searchable: true },
463
+ { name: "Address", label: "Site Address (full)", searchable: true },
464
+ { name: "AddrNumber", label: "Address Number", searchable: true },
465
+ { name: "AddrStreet", label: "Street Name", searchable: true },
466
+ { name: "OwnerAddr1", label: "Owner Mailing Address 1", searchable: false },
467
+ { name: "OwnerAddr2", label: "Owner Mailing Address 2", searchable: false },
468
+ { name: "TaxYear", label: "Tax Year", searchable: false },
469
+ { name: "TaxDist", label: "Tax District", searchable: false }
470
+ ],
471
+ sampleQuery: "https://gismaps.fultoncountyga.gov/arcgispub2/rest/services/PropertyMapViewer/PropertyMapViewer/MapServer/11/query?where=UPPER(Owner)+LIKE+UPPER(%27%25SMITH%25%27)&outFields=ParcelID,Owner,Address&returnGeometry=false&f=json&resultRecordCount=10",
472
+ license: "public",
473
+ licenseUrl: "https://gisdata.fultoncountyga.gov/",
474
+ status: "live",
475
+ lastVerified: "2026-05-11",
476
+ verifiedBy: "manual"
477
+ }
478
+ ],
479
+ contact: {
480
+ department: "Fulton County GIS (Department of Information Technology)",
481
+ url: "https://fultoncountyga.gov/maps",
482
+ email: null
483
+ },
484
+ notes: "372,900 polygon tax parcels covering Atlanta and the rest of Fulton County. Verified 2026-05-11: UPPER(Owner) LIKE '%SMITH%' returns real owners with full Atlanta-area site addresses (e.g., '6760 JULES TRC', '528 SOUTH MAIN ST'). Owner names use last-name-first concatenated format (e.g., 'SMITH FAITH L SMITH MARIO D' for joint ownership). Both site address AND owner mailing address are exposed. Layer 11 of the PropertyMapViewer composite \u2014 neighbor layers include 'Tax Parcel Address Labels' (id 9) for cartographic use."
485
+ }
486
+ ]
487
+ };
488
+
489
+ // data/illinois.json
490
+ var illinois_default = {
491
+ stateSlug: "illinois",
492
+ stateName: "Illinois",
493
+ stateAbbrev: "IL",
494
+ lastUpdated: "2026-05-15",
495
+ counties: [
496
+ {
497
+ id: "il-kane",
498
+ state: "IL",
499
+ stateName: "Illinois",
500
+ stateSlug: "illinois",
501
+ county: "Kane",
502
+ countySlug: "kane-county",
503
+ countyFips: "17089",
504
+ hasPublicRest: true,
505
+ endpoints: [
506
+ {
507
+ url: "https://gistech.countyofkane.org/arcgis/rest/services/KanePINList/MapServer/0",
508
+ serviceType: "MapServer",
509
+ layerIndex: 0,
510
+ layerName: "Kane.DBO.Parcels_v2025",
511
+ supportsQuery: true,
512
+ corsEnabled: null,
513
+ searchFields: [
514
+ { name: "PIN", label: "Parcel Identification Number (PIN)", searchable: true },
515
+ { name: "TaxName", label: "Taxpayer Name", searchable: true },
516
+ { name: "SiteAddress", label: "Site Address", searchable: true },
517
+ { name: "SiteCity", label: "Site City", searchable: true },
518
+ { name: "MailingAddress", label: "Mailing Address", searchable: true }
519
+ ],
520
+ sampleQuery: "https://gistech.countyofkane.org/arcgis/rest/services/KanePINList/MapServer/0/query?where=UPPER(TaxName)%20LIKE%20UPPER('%25SMITH%25')&outFields=PIN,TaxName,SiteAddress,SiteCity&returnGeometry=false&f=json&resultRecordCount=10",
521
+ license: "public",
522
+ licenseUrl: null,
523
+ status: "live",
524
+ lastVerified: "2026-05-15",
525
+ verifiedBy: "automated"
526
+ }
527
+ ],
528
+ contact: {
529
+ department: "Kane County GIS-Technologies",
530
+ url: "https://www.kanecountyil.gov/pages/gis.aspx",
531
+ email: null
532
+ },
533
+ notes: "Kane County is the highest-impression Illinois county in our GSC data; users search for 'kane county illinois gis rest api mapserver featureserver owner name'. The county migrated their GIS server from gis.co.kane.il.us to gistech.countyofkane.org in 2026 \u2014 the old hostname now NXDOMAINs. The current layer is KanePINList/MapServer/0 (named Kane.DBO.Parcels_v2025), a snapshot of the active parcel polygon layer from the cadastral source. 35+ fields including PIN, TaxName, SiteAddress, MailingAddress, LegalDesc, UseCodeDescription, plus jurisdictional districts (Township, AirportDistrict, AmbulanceDistrict, etc.). Owner-style search uses the TaxName field (legal taxpayer name)."
534
+ },
535
+ {
536
+ id: "il-cook",
537
+ state: "IL",
538
+ stateName: "Illinois",
539
+ stateSlug: "illinois",
540
+ county: "Cook",
541
+ countySlug: "cook-county",
542
+ countyFips: "17031",
543
+ hasPublicRest: true,
544
+ endpoints: [
545
+ {
546
+ url: "https://gis12.cookcountyil.gov/traditional/rest/services/CookViewer3Parcels/MapServer/0",
547
+ serviceType: "MapServer",
548
+ layerIndex: 0,
549
+ layerName: "Parcels",
550
+ supportsQuery: true,
551
+ corsEnabled: null,
552
+ searchFields: [
553
+ { name: "PIN10", label: "10-digit Property Index Number", searchable: true },
554
+ { name: "PIN14_dash", label: "14-digit PIN (XX-XX-XXX-XXX-XXXX)", searchable: true },
555
+ { name: "street_address", label: "Street Address", searchable: true }
556
+ ],
557
+ sampleQuery: "https://gis12.cookcountyil.gov/traditional/rest/services/CookViewer3Parcels/MapServer/0/query?where=PIN14_dash%3D%2717-09-128-001-0000%27&outFields=PIN10,PIN14_dash,street_address&returnGeometry=false&f=json",
558
+ license: "public",
559
+ licenseUrl: "https://datacatalog.cookcountyil.gov/",
560
+ status: "live",
561
+ lastVerified: "2026-05-15",
562
+ verifiedBy: "automated"
563
+ }
564
+ ],
565
+ contact: {
566
+ department: "Cook County GIS Department",
567
+ url: "https://www.cookcountyil.gov/agency/geographic-information-systems-gis",
568
+ email: null
569
+ },
570
+ 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."
571
+ },
572
+ {
573
+ id: "il-dupage",
574
+ state: "IL",
575
+ stateName: "Illinois",
576
+ stateSlug: "illinois",
577
+ county: "DuPage",
578
+ countySlug: "dupage-county",
579
+ countyFips: "17043",
580
+ hasPublicRest: true,
581
+ endpoints: [
582
+ {
583
+ url: "https://gis.dupageco.org/arcgis/rest/services/DuPage_County_IL/ParcelsWithRealEstateCC/MapServer/0",
584
+ serviceType: "MapServer",
585
+ layerIndex: 0,
586
+ layerName: "ParcelsRealEstate",
587
+ supportsQuery: true,
588
+ corsEnabled: null,
589
+ searchFields: [
590
+ { name: "PIN", label: "Property Index Number", searchable: true },
591
+ { name: "BILLNAME", label: "Billing Name (Taxpayer)", searchable: true },
592
+ { name: "PROPSTNAME", label: "Property Street Name", searchable: true },
593
+ { name: "PROPCITY", label: "Property City", searchable: true },
594
+ { name: "MUNICIPALITY", label: "Municipality", searchable: false }
595
+ ],
596
+ sampleQuery: "https://gis.dupageco.org/arcgis/rest/services/DuPage_County_IL/ParcelsWithRealEstateCC/MapServer/0/query?where=PIN%3D%270101101001%27&outFields=PIN,BILLNAME,PROPSTNAME,PROPCITY&returnGeometry=false&f=json",
597
+ license: "public",
598
+ licenseUrl: "https://gisdata-dupage.opendata.arcgis.com/",
599
+ status: "live",
600
+ lastVerified: "2026-05-15",
601
+ verifiedBy: "automated"
602
+ }
603
+ ],
604
+ contact: {
605
+ department: "DuPage County GIS",
606
+ url: "https://www.dupagecounty.gov/government/departments/gis/",
607
+ email: null
608
+ },
609
+ 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."
610
+ },
611
+ {
612
+ id: "il-dekalb",
613
+ state: "IL",
614
+ stateName: "Illinois",
615
+ stateSlug: "illinois",
616
+ county: "DeKalb",
617
+ countySlug: "dekalb-county",
618
+ countyFips: "17037",
619
+ hasPublicRest: true,
620
+ endpoints: [
621
+ {
622
+ url: "https://services7.arcgis.com/hEXJrPwm89CLXBYe/arcgis/rest/services/DeKalbIL_Parcels/FeatureServer/0",
623
+ serviceType: "FeatureServer",
624
+ layerIndex: 0,
625
+ layerName: "Parcels",
626
+ supportsQuery: true,
627
+ corsEnabled: null,
628
+ searchFields: [
629
+ { name: "Parcel_Number", label: "Parcel Number", searchable: true },
630
+ { name: "Owner", label: "Owner Name", searchable: true },
631
+ { name: "SiteAddress", label: "Site Address", searchable: true },
632
+ { name: "TaxBillMailedTo", label: "Tax Bill Mailed To", searchable: true },
633
+ { name: "MailingAddress", label: "Mailing Address", searchable: true }
634
+ ],
635
+ sampleQuery: "https://services7.arcgis.com/hEXJrPwm89CLXBYe/arcgis/rest/services/DeKalbIL_Parcels/FeatureServer/0/query?where=UPPER(Owner)%20LIKE%20UPPER('%25SMITH%25')&outFields=Parcel_Number,Owner,SiteAddress&f=json&resultRecordCount=10",
636
+ license: "public",
637
+ licenseUrl: null,
638
+ status: "live",
639
+ lastVerified: "2026-05-15",
640
+ verifiedBy: "automated"
641
+ }
642
+ ],
643
+ contact: {
644
+ department: "DeKalb County Information Management Office",
645
+ url: "https://dekalbcounty.org/services/property-data-and-maps/",
646
+ email: "gis@dekalbcounty.org"
647
+ },
648
+ 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."
649
+ },
650
+ {
651
+ id: "il-will",
652
+ state: "IL",
653
+ stateName: "Illinois",
654
+ stateSlug: "illinois",
655
+ county: "Will",
656
+ countySlug: "will-county",
657
+ countyFips: "17197",
658
+ hasPublicRest: true,
659
+ endpoints: [
660
+ {
661
+ url: "https://gis.willcountyillinois.com/server/rest/services/Basemap/Parcels_21/MapServer/0",
662
+ serviceType: "MapServer",
663
+ layerIndex: 0,
664
+ layerName: "Parcels_21",
665
+ supportsQuery: true,
666
+ corsEnabled: null,
667
+ searchFields: [
668
+ { name: "PIN", label: "Parcel Identification Number", searchable: true }
669
+ ],
670
+ sampleQuery: "https://gis.willcountyillinois.com/server/rest/services/Basemap/Parcels_21/MapServer/0/query?where=PIN%3D'1909142050020000'&outFields=*&f=json",
671
+ license: "public",
672
+ licenseUrl: null,
673
+ status: "live",
674
+ lastVerified: "2026-05-15",
675
+ verifiedBy: "automated"
676
+ }
677
+ ],
678
+ contact: {
679
+ department: "Will County GIS Division",
680
+ url: "https://willcounty.gov/County-Offices/Administration/GIS-Division",
681
+ email: "gis@willcounty.gov"
682
+ },
683
+ notes: "Parcels_21 is the current parcel geometry layer (Parcels_20 is the prior year, also public). Public access confirmed via allowOthersToQuery:true. Owner-name and address fields are NOT exposed in this public endpoint \u2014 only PIN and subtype metadata (Base Parcel, Condo, Leasehold, Mineral Rights, etc.). Owner/address data exists in the county's Geocortex viewer at gisapp.willcountyillinois.com but is not queryable via REST without a token. The ParcelFabric folder on the same server is token-gated."
684
+ },
685
+ {
686
+ id: "il-mchenry",
687
+ state: "IL",
688
+ stateName: "Illinois",
689
+ stateSlug: "illinois",
690
+ county: "McHenry",
691
+ countySlug: "mchenry-county",
692
+ countyFips: "17111",
693
+ hasPublicRest: true,
694
+ endpoints: [
695
+ {
696
+ url: "https://services1.arcgis.com/6iYC5AXXYapRVNzl/arcgis/rest/services/McHenry_County_TaxParcels/FeatureServer/0",
697
+ serviceType: "FeatureServer",
698
+ layerIndex: 0,
699
+ layerName: "McHenry County TaxParcels",
700
+ supportsQuery: true,
701
+ corsEnabled: null,
702
+ searchFields: [
703
+ { name: "ParcelNumber", label: "Parcel Number", searchable: true },
704
+ { name: "Owner", label: "Owner", searchable: true },
705
+ { name: "SiteAddress", label: "Site Address", searchable: true },
706
+ { name: "SiteAddressCity", label: "Site Address City", searchable: true },
707
+ { name: "MailToAddress1", label: "Mailing Address (line 1)", searchable: true },
708
+ { name: "PropertyClass", label: "Property Class", searchable: false }
709
+ ],
710
+ sampleQuery: "https://services1.arcgis.com/6iYC5AXXYapRVNzl/arcgis/rest/services/McHenry_County_TaxParcels/FeatureServer/0/query?where=UPPER(Owner)%20LIKE%20UPPER('%25SMITH%25')&outFields=ParcelNumber,Owner,SiteAddress,SiteAddressCity&returnGeometry=false&f=json&resultRecordCount=10",
711
+ license: "open-data",
712
+ licenseUrl: "https://data-mchenrycountygis.opendata.arcgis.com/datasets/Mchenrycountygis::mchenry-county-taxparcels",
713
+ status: "live",
714
+ lastVerified: "2026-05-15",
715
+ verifiedBy: "automated"
716
+ }
717
+ ],
718
+ contact: {
719
+ department: "McHenry County GIS",
720
+ url: "https://data-mchenrycountygis.opendata.arcgis.com/",
721
+ email: "gis@mchenrycountyil.gov"
722
+ },
723
+ 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."
724
+ },
725
+ {
726
+ id: "il-lake",
727
+ state: "IL",
728
+ stateName: "Illinois",
729
+ stateSlug: "illinois",
730
+ county: "Lake",
731
+ countySlug: "lake-county",
732
+ countyFips: "17097",
733
+ hasPublicRest: true,
734
+ endpoints: [
735
+ {
736
+ url: "https://maps.lakecountyil.gov/arcgis/rest/services/GISMapping/WABParcels/MapServer/12",
737
+ serviceType: "MapServer",
738
+ layerIndex: 12,
739
+ layerName: "Tax Parcel Information",
740
+ supportsQuery: true,
741
+ corsEnabled: null,
742
+ searchFields: [
743
+ { name: "PIN", label: "Parcel Identification Number", searchable: true },
744
+ { name: "taxpayer_name", label: "Taxpayer Name", searchable: true },
745
+ { name: "situs_addr_line_1", label: "Situs Address", searchable: true },
746
+ { name: "situs_addr_city", label: "Situs City", searchable: true }
747
+ ],
748
+ sampleQuery: "https://maps.lakecountyil.gov/arcgis/rest/services/GISMapping/WABParcels/MapServer/12/query?where=UPPER(taxpayer_name)%20LIKE%20UPPER('%25SMITH%25')&outFields=PIN,taxpayer_name,situs_addr_line_1,situs_addr_city&f=json&resultRecordCount=10",
749
+ license: "public",
750
+ licenseUrl: null,
751
+ status: "live",
752
+ lastVerified: "2026-05-15",
753
+ verifiedBy: "automated"
754
+ }
755
+ ],
756
+ contact: {
757
+ department: "Lake County, Illinois GIS Division",
758
+ url: "https://www.lakecountyil.gov/636/GISMaps",
759
+ email: null
760
+ },
761
+ 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."
762
+ },
763
+ {
764
+ id: "il-winnebago",
765
+ state: "IL",
766
+ stateName: "Illinois",
767
+ stateSlug: "illinois",
768
+ county: "Winnebago",
769
+ countySlug: "winnebago-county",
770
+ countyFips: "17201",
771
+ hasPublicRest: false,
772
+ endpoints: [],
773
+ contact: {
774
+ department: "WinGIS (Winnebago County GIS partner)",
775
+ url: "https://wingis.org/",
776
+ email: null
777
+ },
778
+ notes: "Winnebago County IL GIS is operated by WinGIS (wingis.org), a regional GIS services company on a subscription model. Their ArcGIS REST server at maps.wingis.org/public/rest/services/PropertySearch/MapServer is indexed as containing Parcel & Lot Lines, Parcel Owner, PIN Labels, and Parcel Dimensions layers \u2014 but all REST queries return HTTP 499 (Token Required) as of 2026-05-15. The word 'public' in the URL path is a directory naming convention, not an access grant. The public-facing search at wingis.org/maps/propertysearch is browser-only and not queryable. No alternative county-hosted ArcGIS REST endpoint was found. The Supervisor of Assessments at assessor.wincoil.gov has a property lookup UI but no public REST API."
779
+ },
780
+ {
781
+ id: "il-st-clair",
782
+ state: "IL",
783
+ stateName: "Illinois",
784
+ stateSlug: "illinois",
785
+ county: "St. Clair",
786
+ countySlug: "st-clair-county",
787
+ countyFips: "17163",
788
+ hasPublicRest: true,
789
+ endpoints: [
790
+ {
791
+ url: "https://arcgispublicmap.co.st-clair.il.us/server/rest/services/SCC_parcel_map_data/MapServer/29",
792
+ serviceType: "MapServer",
793
+ layerIndex: 29,
794
+ layerName: "Parcels",
795
+ supportsQuery: true,
796
+ corsEnabled: null,
797
+ searchFields: [
798
+ { name: "parcel_number", label: "Parcel Number", searchable: true },
799
+ { name: "parcelid", label: "Parcel ID", searchable: true },
800
+ { name: "owner", label: "Owner Name", searchable: true },
801
+ { name: "siteadr1", label: "Site Address (line 1)", searchable: true },
802
+ { name: "sitecity", label: "Site City", searchable: true },
803
+ { name: "address", label: "Mailing Address", searchable: true }
804
+ ],
805
+ sampleQuery: "https://arcgispublicmap.co.st-clair.il.us/server/rest/services/SCC_parcel_map_data/MapServer/29/query?where=UPPER(owner)%20LIKE%20UPPER('%25SMITH%25')&outFields=parcel_number,parcelid,owner,siteadr1,sitecity&returnGeometry=false&f=json&resultRecordCount=10",
806
+ license: "public",
807
+ licenseUrl: "https://www.co.st-clair.il.us/departments/gis",
808
+ status: "live",
809
+ lastVerified: "2026-05-15",
810
+ verifiedBy: "automated"
811
+ }
812
+ ],
813
+ contact: {
814
+ department: "St. Clair County GIS Department",
815
+ url: "https://www.co.st-clair.il.us/departments/gis",
816
+ email: null
817
+ },
818
+ notes: "St. Clair County is Illinois's 8th most populous (Metro East / Greater St. Louis area, county seat Belleville). The SCC_parcel_map_data MapServer is a 31-layer cadastral service; layer 29 (Parcels, 147k+ features) is the polygon parcel layer with 50+ fields including parcel_number, parcelid, owner, address, address2, cityst, zipcode, siteadr1, siteadr2, sitenum/sitepref/sitename/sitetype/sitesuff/siteunit, sitecity/sitest/sitezip, legal1-4, subdiv, twp/twpname, tcacode, class, landuse. Owner-name search via UPPER() LIKE on owner works. Other layers in the service are annotation layers (layers 0-28) and Roads (layer 30). The county GIS data pricing page notes bulk shapefile/geodatabase downloads are paid; the live REST query API is free."
819
+ }
820
+ ]
821
+ };
822
+
823
+ // data/minnesota.json
824
+ var minnesota_default = {
825
+ stateSlug: "minnesota",
826
+ stateName: "Minnesota",
827
+ stateAbbrev: "MN",
828
+ lastUpdated: "2026-05-15",
829
+ counties: [
830
+ {
831
+ id: "mn-hennepin",
832
+ state: "MN",
833
+ stateName: "Minnesota",
834
+ stateSlug: "minnesota",
835
+ county: "Hennepin",
836
+ countySlug: "hennepin-county",
837
+ countyFips: "27053",
838
+ hasPublicRest: true,
839
+ endpoints: [
840
+ {
841
+ url: "https://gis.hennepin.us/arcgis/rest/services/HennepinData/LAND_PROPERTY/MapServer/1",
842
+ serviceType: "MapServer",
843
+ layerIndex: 1,
844
+ layerName: "County Parcels",
845
+ supportsQuery: true,
846
+ corsEnabled: null,
847
+ searchFields: [
848
+ { name: "PID", label: "Property ID (13-digit)", searchable: true },
849
+ { name: "PID_TEXT", label: "Property ID Text", searchable: true },
850
+ { name: "OWNER_NM", label: "Owner Name", searchable: true },
851
+ { name: "HOUSE_NO", label: "House Number", searchable: true },
852
+ { name: "STREET_NM", label: "Street Name", searchable: true },
853
+ { name: "MAILING_MUNIC_NM", label: "Mailing Municipality", searchable: true },
854
+ { name: "ZIP_CD", label: "ZIP Code", searchable: true },
855
+ { name: "FEATURECODE", label: "Feature Code", searchable: false }
856
+ ],
857
+ sampleQuery: "https://gis.hennepin.us/arcgis/rest/services/HennepinData/LAND_PROPERTY/MapServer/1/query?where=UPPER(OWNER_NM)+LIKE+UPPER(%27%25SMITH%25%27)&outFields=PID,OWNER_NM,STREET_NM,MAILING_MUNIC_NM&returnGeometry=false&f=json&resultRecordCount=10",
858
+ license: "public",
859
+ licenseUrl: "https://gis-hennepin.hub.arcgis.com/",
860
+ status: "unreachable",
861
+ lastVerified: "2026-05-15",
862
+ verifiedBy: "automated"
863
+ }
864
+ ],
865
+ contact: {
866
+ department: "Hennepin County Geographic Information Systems",
867
+ url: "https://gis-hennepin.hub.arcgis.com/",
868
+ email: null
869
+ },
870
+ notes: "448,036 polygon parcels covering Minneapolis and the rest of Hennepin County. Verified 2026-05-11: UPPER(OWNER_NM) LIKE '%SMITH%' returns real owners (e.g., 'ALEX D SMITH', 'PAUL LOUIS SMITH'). Owner names are space-padded fixed-width \u2014 wrap searches in UPPER() and trim whitespace client-side. Full residential address columns present (HOUSE_NO, FRAC_HOUSE_NO, STREET_NM, MAILING_MUNIC_NM, ZIP_CD). PID is 13-digit composite (parcel-fragment-municipality-section). TORRENS_TYP flag distinguishes Torrens vs. Abstract land per Minnesota's dual-title system. CURRENT OUTAGE (2026-05-15): the HennepinData/LAND_PROPERTY/MapServer service returns HTTP 500 'Service not started' \u2014 county-side outage, not a permanent retirement. The county's open-data hub at gis-hennepin.opendata.arcgis.com is also returning 404 'Domain record not found'. Recheck weekly via the liveness script \u2014 restore status to 'live' once the service returns."
871
+ }
872
+ ]
873
+ };
874
+
875
+ // data/nevada.json
876
+ var nevada_default = {
877
+ stateSlug: "nevada",
878
+ stateName: "Nevada",
879
+ stateAbbrev: "NV",
880
+ lastUpdated: "2026-05-11",
881
+ counties: [
882
+ {
883
+ id: "nv-clark",
884
+ state: "NV",
885
+ stateName: "Nevada",
886
+ stateSlug: "nevada",
887
+ county: "Clark",
888
+ countySlug: "clark-county",
889
+ countyFips: "32003",
890
+ hasPublicRest: true,
891
+ endpoints: [
892
+ {
893
+ url: "https://maps.clarkcountynv.gov/arcgis/rest/services/GISMO/AssessorMapv2/MapServer/1",
894
+ serviceType: "MapServer",
895
+ layerIndex: 1,
896
+ layerName: "Parcels",
897
+ supportsQuery: true,
898
+ corsEnabled: null,
899
+ searchFields: [
900
+ { name: "APN", label: "Assessor Parcel Number", searchable: true },
901
+ { name: "PARCELTYPE", label: "Parcel Type (numeric code)", searchable: false },
902
+ { name: "TAX_DIST", label: "Tax District", searchable: false },
903
+ { name: "CALC_ACRES", label: "Calculated Acres", searchable: false },
904
+ { name: "ASSR_ACRES", label: "Assessor Acres", searchable: false }
905
+ ],
906
+ sampleQuery: "https://maps.clarkcountynv.gov/arcgis/rest/services/GISMO/AssessorMapv2/MapServer/1/query?where=APN+LIKE+%27138%25%27&outFields=APN,PARCELTYPE,ASSR_ACRES&returnGeometry=false&f=json&resultRecordCount=10",
907
+ license: "public",
908
+ licenseUrl: "https://clarkcountygis-ccgismo.hub.arcgis.com/",
909
+ status: "live",
910
+ lastVerified: "2026-05-11",
911
+ verifiedBy: "manual"
912
+ }
913
+ ],
914
+ contact: {
915
+ department: "Clark County Geographic Information Systems Management Office (GISMO)",
916
+ url: "https://www.clarkcountynv.gov/government/departments/geographic_info_systems/",
917
+ email: null
918
+ },
919
+ 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."
920
+ }
921
+ ]
922
+ };
923
+
924
+ // data/new-york.json
925
+ var new_york_default = {
926
+ stateSlug: "new-york",
927
+ stateName: "New York",
928
+ stateAbbrev: "NY",
929
+ lastUpdated: "2026-05-11",
930
+ counties: [
931
+ {
932
+ id: "ny-new-york",
933
+ state: "NY",
934
+ stateName: "New York",
935
+ stateSlug: "new-york",
936
+ county: "New York",
937
+ countySlug: "new-york-county",
938
+ countyFips: "36061",
939
+ hasPublicRest: true,
940
+ endpoints: [
941
+ {
942
+ url: "https://services5.arcgis.com/GfwWNkhOj9bNBqoJ/arcgis/rest/services/MAPPLUTO/FeatureServer/0",
943
+ serviceType: "FeatureServer",
944
+ layerIndex: 0,
945
+ layerName: "MAPPLUTO",
946
+ supportsQuery: true,
947
+ corsEnabled: null,
948
+ searchFields: [
949
+ { name: "BBL", label: "Borough-Block-Lot (BBL) Identifier", searchable: true },
950
+ { name: "OwnerName", label: "Owner Name", searchable: true },
951
+ { name: "Address", label: "Tax Lot Address", searchable: true },
952
+ { name: "Borough", label: "Borough Code (MN/BX/BK/QN/SI)", searchable: true },
953
+ { name: "Block", label: "Block Number", searchable: true },
954
+ { name: "Lot", label: "Lot Number", searchable: true },
955
+ { name: "ZipCode", label: "ZIP Code", searchable: true },
956
+ { name: "ZoneDist1", label: "Zoning District 1", searchable: false },
957
+ { name: "LandUse", label: "Land Use Code", searchable: false },
958
+ { name: "AssessTot", label: "Total Assessment", searchable: false },
959
+ { name: "YearBuilt", label: "Year Built", searchable: false }
960
+ ],
961
+ sampleQuery: "https://services5.arcgis.com/GfwWNkhOj9bNBqoJ/arcgis/rest/services/MAPPLUTO/FeatureServer/0/query?where=UPPER(OwnerName)%20LIKE%20UPPER('%25SMITH%25')&outFields=BBL,OwnerName,Address,Borough,ZipCode&returnGeometry=false&f=json&resultRecordCount=10",
962
+ license: "public",
963
+ licenseUrl: "https://nycplanning.github.io/db-pluto/",
964
+ status: "live",
965
+ lastVerified: "2026-05-11",
966
+ verifiedBy: "manual"
967
+ },
968
+ {
969
+ url: "https://gisservices.its.ny.gov/arcgis/rest/services/NYS_Tax_Parcels_Public/MapServer/1",
970
+ serviceType: "MapServer",
971
+ layerIndex: 1,
972
+ layerName: "NYS_Tax_Parcels_Public",
973
+ supportsQuery: true,
974
+ corsEnabled: null,
975
+ searchFields: [
976
+ { name: "COUNTY_NAME", label: "County Name (Kings/Queens/New York/Bronx/Richmond)", searchable: true },
977
+ { name: "PRIMARY_OWNER", label: "Primary Owner Name", searchable: true },
978
+ { name: "PARCEL_ADDR", label: "Parcel Address", searchable: true },
979
+ { name: "PRINT_KEY", label: "Print Key", searchable: true },
980
+ { name: "SWIS_SBL_ID", label: "SWIS-SBL Parcel Identifier", searchable: true },
981
+ { name: "MAIL_ADDR", label: "Mailing Address", searchable: true },
982
+ { name: "MAIL_CITY", label: "Mailing City", searchable: false },
983
+ { name: "TOTAL_AV", label: "Total Assessed Value", searchable: false },
984
+ { name: "PROP_CLASS", label: "Property Class Code", searchable: false },
985
+ { name: "YR_BLT", label: "Year Built", searchable: false }
986
+ ],
987
+ sampleQuery: "https://gisservices.its.ny.gov/arcgis/rest/services/NYS_Tax_Parcels_Public/MapServer/1/query?where=COUNTY_NAME%3D'Kings'+AND+UPPER(PRIMARY_OWNER)+LIKE+UPPER('%25SMITH%25')&outFields=COUNTY_NAME,PRIMARY_OWNER,PARCEL_ADDR,SWIS_SBL_ID&returnGeometry=false&f=json&resultRecordCount=10",
988
+ license: "public",
989
+ licenseUrl: "https://gisservices.its.ny.gov/arcgis/rest/services/NYS_Tax_Parcels_Public/MapServer",
990
+ status: "live",
991
+ lastVerified: "2026-05-11",
992
+ verifiedBy: "manual"
993
+ }
994
+ ],
995
+ contact: {
996
+ department: "NYC Department of City Planning (MAPPLUTO) / NYS Office of Information Technology Services GIS (statewide)",
997
+ url: "https://nycplanning.github.io/db-pluto/",
998
+ email: null
999
+ },
1000
+ notes: "New York County (FIPS 36061) is the formal name for the borough of Manhattan, but both endpoints below cover ALL FIVE NYC boroughs. Use either to query Brooklyn (Kings, 36047), Queens (36081), Bronx (36005), or Staten Island (Richmond, 36085). MAPPLUTO (96 fields) is the DCP-maintained primary source: BBL as the unique identifier, OwnerName, full zoning (ZoneDist1-4, overlays, FAR), building characteristics, political geography. Filter MAPPLUTO by Borough field with codes MN/BX/BK/QN/SI. The NYS Tax Parcels service (75+ fields) covers all 62 NY counties \u2014 filter by COUNTY_NAME='Kings'/'Queens'/'New York'/'Bronx'/'Richmond' for NYC boroughs, or any upstate county name for statewide reach."
1001
+ }
1002
+ ]
1003
+ };
1004
+
1005
+ // data/north-carolina.json
1006
+ var north_carolina_default = {
1007
+ stateSlug: "north-carolina",
1008
+ stateName: "North Carolina",
1009
+ stateAbbrev: "NC",
1010
+ lastUpdated: "2026-05-11",
1011
+ counties: [
1012
+ {
1013
+ id: "nc-wake",
1014
+ state: "NC",
1015
+ stateName: "North Carolina",
1016
+ stateSlug: "north-carolina",
1017
+ county: "Wake",
1018
+ countySlug: "wake-county",
1019
+ countyFips: "37183",
1020
+ hasPublicRest: true,
1021
+ endpoints: [
1022
+ {
1023
+ url: "https://maps.wake.gov/arcgis/rest/services/Property/Parcels/MapServer/0",
1024
+ serviceType: "MapServer",
1025
+ layerIndex: 0,
1026
+ layerName: "Property",
1027
+ supportsQuery: true,
1028
+ corsEnabled: null,
1029
+ searchFields: [
1030
+ { name: "PIN_NUM", label: "Parcel Identification Number", searchable: true },
1031
+ { name: "REID", label: "Real Estate ID", searchable: true },
1032
+ { name: "OWNER", label: "Owner Name", searchable: true },
1033
+ { name: "SITE_ADDRESS", label: "Site Address", searchable: true },
1034
+ { name: "ADDR1", label: "Owner Mailing Address 1", searchable: false },
1035
+ { name: "ADDR2", label: "Owner Mailing Address 2", searchable: false },
1036
+ { name: "ADDR3", label: "Owner Mailing Address 3", searchable: false },
1037
+ { name: "TOWNSHIP", label: "Township Code", searchable: false },
1038
+ { name: "TOWNSHIP_DECODE", label: "Township Name", searchable: false },
1039
+ { name: "OLD_PARCEL_NUMBER", label: "Legacy Parcel Number", searchable: true }
1040
+ ],
1041
+ sampleQuery: "https://maps.wake.gov/arcgis/rest/services/Property/Parcels/MapServer/0/query?where=UPPER(OWNER)+LIKE+UPPER(%27%25SMITH%25%27)&outFields=PIN_NUM,REID,OWNER,SITE_ADDRESS&returnGeometry=false&f=json&resultRecordCount=10",
1042
+ license: "public",
1043
+ licenseUrl: "https://maps.wake.gov/",
1044
+ status: "live",
1045
+ lastVerified: "2026-05-11",
1046
+ verifiedBy: "manual"
1047
+ }
1048
+ ],
1049
+ contact: {
1050
+ department: "Wake County GIS Services (Department of Information Services)",
1051
+ url: "https://maps.wake.gov/",
1052
+ email: null
1053
+ },
1054
+ 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."
1055
+ }
1056
+ ]
1057
+ };
1058
+
1059
+ // data/ohio.json
1060
+ var ohio_default = {
1061
+ stateSlug: "ohio",
1062
+ stateName: "Ohio",
1063
+ stateAbbrev: "OH",
1064
+ lastUpdated: "2026-05-15",
1065
+ counties: [
1066
+ {
1067
+ id: "oh-franklin",
1068
+ state: "OH",
1069
+ stateName: "Ohio",
1070
+ stateSlug: "ohio",
1071
+ county: "Franklin",
1072
+ countySlug: "franklin-county",
1073
+ countyFips: "39049",
1074
+ hasPublicRest: true,
1075
+ endpoints: [
1076
+ {
1077
+ url: "https://gis.franklincountyohio.gov/hosting/rest/services/ParcelFeatures/Parcel_Features/MapServer/0",
1078
+ serviceType: "MapServer",
1079
+ layerIndex: 0,
1080
+ layerName: "Tax Parcel",
1081
+ supportsQuery: true,
1082
+ corsEnabled: null,
1083
+ searchFields: [
1084
+ { name: "PARCELID", label: "Parcel ID", searchable: true },
1085
+ { name: "LOWPARCELID", label: "Low Parcel ID", searchable: true },
1086
+ { name: "OWNERNME1", label: "Owner Name (Primary)", searchable: true },
1087
+ { name: "OWNERNME2", label: "Owner Name 2", searchable: true },
1088
+ { name: "SITEADDRESS", label: "Site Address", searchable: true },
1089
+ { name: "ZIPCD", label: "ZIP Code", searchable: true },
1090
+ { name: "CLASSCD", label: "Property Class Code", searchable: false },
1091
+ { name: "TOTVALUEBASE", label: "Total Base Value", searchable: false },
1092
+ { name: "SALEDATE", label: "Sale Date", searchable: false },
1093
+ { name: "SALEPRICE", label: "Sale Price", searchable: false }
1094
+ ],
1095
+ sampleQuery: "https://gis.franklincountyohio.gov/hosting/rest/services/ParcelFeatures/Parcel_Features/MapServer/0/query?where=UPPER(OWNERNME1)+LIKE+UPPER('%25SMITH%25')&outFields=PARCELID,OWNERNME1,SITEADDRESS,ZIPCD&returnGeometry=false&f=json&resultRecordCount=10",
1096
+ license: "public",
1097
+ licenseUrl: "https://data-franklincova.opendata.arcgis.com/",
1098
+ status: "live",
1099
+ lastVerified: "2026-05-11",
1100
+ verifiedBy: "manual"
1101
+ }
1102
+ ],
1103
+ contact: {
1104
+ department: "Franklin County Auditor GIS / Franklin County IT",
1105
+ url: "https://data-franklincova.opendata.arcgis.com/",
1106
+ email: null
1107
+ },
1108
+ 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."
1109
+ },
1110
+ {
1111
+ id: "oh-cuyahoga",
1112
+ state: "OH",
1113
+ stateName: "Ohio",
1114
+ stateSlug: "ohio",
1115
+ county: "Cuyahoga",
1116
+ countySlug: "cuyahoga-county",
1117
+ countyFips: "39035",
1118
+ hasPublicRest: true,
1119
+ endpoints: [
1120
+ {
1121
+ url: "https://gis.cuyahogacounty.us/server/rest/services/MyPLACE/Parcels_WMA_GJOIN_WGS84/MapServer/2",
1122
+ serviceType: "MapServer",
1123
+ layerIndex: 2,
1124
+ layerName: "Parcel",
1125
+ supportsQuery: true,
1126
+ corsEnabled: null,
1127
+ searchFields: [
1128
+ { name: "parcelpin", label: "Parcel PIN", searchable: true },
1129
+ { name: "parcel_id", label: "Parcel ID", searchable: true },
1130
+ { name: "parcel_owner", label: "Owner Name", searchable: true },
1131
+ { name: "deeded_owner", label: "Deeded Owner Name", searchable: true },
1132
+ { name: "par_addr_all", label: "Parcel Address (full)", searchable: true },
1133
+ { name: "par_city", label: "City", searchable: false },
1134
+ { name: "par_zip", label: "ZIP Code", searchable: false },
1135
+ { name: "tax_luc", label: "Tax Land Use Code", searchable: false },
1136
+ { name: "certified_tax_total", label: "Certified Tax Total", searchable: false },
1137
+ { name: "transfer_date", label: "Transfer Date", searchable: false },
1138
+ { name: "sales_amount", label: "Sale Amount", searchable: false }
1139
+ ],
1140
+ sampleQuery: "https://gis.cuyahogacounty.us/server/rest/services/MyPLACE/Parcels_WMA_GJOIN_WGS84/MapServer/2/query?where=UPPER(parcel_owner)%20LIKE%20UPPER('%25SMITH%25')&outFields=parcelpin,parcel_owner,par_addr_all,par_city&returnGeometry=false&f=json&resultRecordCount=10",
1141
+ license: "public",
1142
+ licenseUrl: "https://fiscalhub.gis.cuyahogacounty.gov/",
1143
+ status: "live",
1144
+ lastVerified: "2026-05-15",
1145
+ verifiedBy: "automated"
1146
+ }
1147
+ ],
1148
+ contact: {
1149
+ department: "Cuyahoga County Fiscal Office GIS",
1150
+ url: "https://fiscalhub.gis.cuyahogacounty.gov/",
1151
+ email: "gis@cuyahogacounty.us"
1152
+ },
1153
+ notes: "80+ fields confirmed including parcel_owner, deeded_owner, grantor, grantee, transfer_date, sales_amount, par_addr_all, par_city, par_zip, tax_luc, tax_luc_description, zoning_code, zoning_use, property_class, certified_tax_land, certified_tax_building, certified_tax_total, total_acreage, total_square_ft, res_bldg_count, total_res_liv_area. Owner query tested and returning real results (par_addr_all includes city and state in one field). The MyPLACE service (WGS84 projection) is the public-facing layer backing the county's MyPlace property search portal. Layer 0 = Point Parcel, Layer 1 = Air Parcel, Layer 2 = the full polygon parcel layer. The earlier 'saledate' field was renamed 'transfer_date' in 2026 \u2014 joined record retains the same semantics."
1154
+ }
1155
+ ]
1156
+ };
1157
+
1158
+ // data/pennsylvania.json
1159
+ var pennsylvania_default = {
1160
+ stateSlug: "pennsylvania",
1161
+ stateName: "Pennsylvania",
1162
+ stateAbbrev: "PA",
1163
+ lastUpdated: "2026-05-11",
1164
+ counties: [
1165
+ {
1166
+ id: "pa-allegheny",
1167
+ state: "PA",
1168
+ stateName: "Pennsylvania",
1169
+ stateSlug: "pennsylvania",
1170
+ county: "Allegheny",
1171
+ countySlug: "allegheny-county",
1172
+ countyFips: "42003",
1173
+ hasPublicRest: true,
1174
+ endpoints: [
1175
+ {
1176
+ url: "https://gisdata.alleghenycounty.us/arcgis/rest/services/EGIS/Web_Parcels/MapServer/0",
1177
+ serviceType: "MapServer",
1178
+ layerIndex: 0,
1179
+ layerName: "Parcels",
1180
+ supportsQuery: true,
1181
+ corsEnabled: null,
1182
+ searchFields: [
1183
+ { name: "PIN", label: "Parcel Identification Number", searchable: true },
1184
+ { name: "MAPBLOCKLOT", label: "Map-Block-Lot Reference", searchable: true }
1185
+ ],
1186
+ sampleQuery: "https://gisdata.alleghenycounty.us/arcgis/rest/services/EGIS/Web_Parcels/MapServer/0/query?where=PIN+LIKE+'%250364%25'&outFields=PIN,MAPBLOCKLOT&returnGeometry=false&f=json&resultRecordCount=10",
1187
+ license: "public",
1188
+ licenseUrl: "https://openac-alcogis.opendata.arcgis.com/",
1189
+ status: "live",
1190
+ lastVerified: "2026-05-11",
1191
+ verifiedBy: "manual"
1192
+ }
1193
+ ],
1194
+ contact: {
1195
+ department: "Allegheny County Department of Information Technology \u2014 GIS Division",
1196
+ url: "https://openac-alcogis.opendata.arcgis.com/",
1197
+ email: "gis@alleghenycounty.us"
1198
+ },
1199
+ notes: "Only 5 fields on the public Web_Parcels endpoint: OBJECTID, PIN, MAPBLOCKLOT, SHAPE, SHAPE.STArea(), SHAPE.STLength(). This is geometry + parcel ID only \u2014 owner name is NOT exposed on the public REST layer. The EGIS folder on gisdata.alleghenycounty.us contains only 4 services (Web_Parcels, Buildings, Municipalities, AC_AddressPointsWithLabels). Full owner/address data is accessible through the Allegheny County Real Estate portal at alleghenyco.us/property-assessment and the county's block-lot lookup at property.alleghenycounty.us \u2014 these are browser-only, not REST-queryable. The WPRDC open data portal at data.wprdc.org has property assessment data as a CSV/API download."
1200
+ },
1201
+ {
1202
+ id: "pa-philadelphia",
1203
+ state: "PA",
1204
+ stateName: "Pennsylvania",
1205
+ stateSlug: "pennsylvania",
1206
+ county: "Philadelphia",
1207
+ countySlug: "philadelphia-county",
1208
+ countyFips: "42101",
1209
+ hasPublicRest: true,
1210
+ endpoints: [
1211
+ {
1212
+ url: "https://services.arcgis.com/fLeGjb7u4uXqeF9q/arcgis/rest/services/PWD_PARCELS/FeatureServer/0",
1213
+ serviceType: "FeatureServer",
1214
+ layerIndex: 0,
1215
+ layerName: "PWD_PARCELS",
1216
+ supportsQuery: true,
1217
+ corsEnabled: null,
1218
+ searchFields: [
1219
+ { name: "parcelid", label: "Parcel ID", searchable: true },
1220
+ { name: "brt_id", label: "BRT Account Number (OPA identifier)", searchable: true },
1221
+ { name: "owner1", label: "Owner Name (Primary)", searchable: true },
1222
+ { name: "owner2", label: "Owner Name 2", searchable: true },
1223
+ { name: "address", label: "Street Address", searchable: true },
1224
+ { name: "bldg_code", label: "Building Code", searchable: false },
1225
+ { name: "bldg_desc", label: "Building Description", searchable: false },
1226
+ { name: "gross_area", label: "Gross Area (sq ft)", searchable: false }
1227
+ ],
1228
+ sampleQuery: "https://services.arcgis.com/fLeGjb7u4uXqeF9q/arcgis/rest/services/PWD_PARCELS/FeatureServer/0/query?where=UPPER(owner1)%20LIKE%20UPPER('%25SMITH%25')&outFields=parcelid,owner1,address,brt_id&returnGeometry=false&f=json&resultRecordCount=10",
1229
+ license: "public",
1230
+ licenseUrl: "https://data-phl.opendata.arcgis.com/datasets/PWD-Parcels",
1231
+ status: "live",
1232
+ lastVerified: "2026-05-11",
1233
+ verifiedBy: "manual"
1234
+ }
1235
+ ],
1236
+ contact: {
1237
+ department: "City of Philadelphia \u2014 Office of Innovation and Technology (OIT) CityGeo / Philadelphia Water Department",
1238
+ url: "https://data-phl.opendata.arcgis.com/",
1239
+ email: null
1240
+ },
1241
+ notes: "15 fields confirmed including parcelid, owner1, owner2, address, brt_id (BRT = Board of Revision of Taxes, now OPA = Office of Property Assessment), bldg_code, bldg_desc, gross_area, pin, tencode. Owner query tested and confirmed. The parcelid here is an integer OBJECTID; the brt_id (9-digit string, e.g. '171006315') is the stable OPA/BRT account number used in the assessor system. For deeper property assessment data (market value, sale price, exemptions, zoning), the OPA Properties dataset at opendataphilly.org/datasets/opa-properties-public has 78+ fields but is distributed as a CSV/API download rather than a REST FeatureServer with geometry. Philadelphia parcels are city-county unified (Philadelphia City = Philadelphia County)."
1242
+ }
1243
+ ]
1244
+ };
1245
+
1246
+ // data/texas.json
1247
+ var texas_default = {
1248
+ stateSlug: "texas",
1249
+ stateName: "Texas",
1250
+ stateAbbrev: "TX",
1251
+ lastUpdated: "2026-05-11",
1252
+ counties: [
1253
+ {
1254
+ id: "tx-harris",
1255
+ state: "TX",
1256
+ stateName: "Texas",
1257
+ stateSlug: "texas",
1258
+ county: "Harris",
1259
+ countySlug: "harris-county",
1260
+ countyFips: "48201",
1261
+ hasPublicRest: true,
1262
+ endpoints: [
1263
+ {
1264
+ url: "https://www.gis.hctx.net/arcgis/rest/services/HCAD/Parcels/MapServer/0",
1265
+ serviceType: "MapServer",
1266
+ layerIndex: 0,
1267
+ layerName: "HCAD Parcels",
1268
+ supportsQuery: true,
1269
+ corsEnabled: null,
1270
+ searchFields: [
1271
+ { name: "HCAD_NUM", label: "HCAD Parcel Number", searchable: true },
1272
+ { name: "acct_num", label: "Account Number", searchable: true },
1273
+ { name: "owner_name_1", label: "Owner Name (Primary)", searchable: true },
1274
+ { name: "owner_name_2", label: "Owner Name 2", searchable: true },
1275
+ { name: "site_str_num", label: "Site Street Number", searchable: true },
1276
+ { name: "site_str_name", label: "Site Street Name", searchable: true },
1277
+ { name: "site_city", label: "Site City", searchable: true },
1278
+ { name: "site_zip", label: "Site ZIP", searchable: true },
1279
+ { name: "mail_addr_1", label: "Mailing Address", searchable: true }
1280
+ ],
1281
+ sampleQuery: "https://www.gis.hctx.net/arcgis/rest/services/HCAD/Parcels/MapServer/0/query?where=UPPER(owner_name_1)%20LIKE%20UPPER('%25SMITH%25')&outFields=HCAD_NUM,owner_name_1,site_str_num,site_str_name,site_city&returnGeometry=false&f=json&resultRecordCount=10",
1282
+ license: "public",
1283
+ licenseUrl: "https://geo-harriscounty.opendata.arcgis.com/",
1284
+ status: "live",
1285
+ lastVerified: "2026-05-11",
1286
+ verifiedBy: "manual"
1287
+ }
1288
+ ],
1289
+ contact: {
1290
+ department: "Harris County Appraisal District (HCAD) GIS Division",
1291
+ url: "https://geo-harriscounty.opendata.arcgis.com/",
1292
+ email: null
1293
+ },
1294
+ 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."
1295
+ },
1296
+ {
1297
+ id: "tx-travis",
1298
+ state: "TX",
1299
+ stateName: "Texas",
1300
+ stateSlug: "texas",
1301
+ county: "Travis",
1302
+ countySlug: "travis-county",
1303
+ countyFips: "48453",
1304
+ hasPublicRest: true,
1305
+ endpoints: [
1306
+ {
1307
+ url: "https://gis.traviscountytx.gov/server1/rest/services/Boundaries_and_Jurisdictions/TCAD_public/MapServer/0",
1308
+ serviceType: "MapServer",
1309
+ layerIndex: 0,
1310
+ layerName: "TCAD Parcels",
1311
+ supportsQuery: true,
1312
+ corsEnabled: null,
1313
+ searchFields: [
1314
+ { name: "PROP_ID", label: "Property ID", searchable: true },
1315
+ { name: "geo_id", label: "Geo ID", searchable: true },
1316
+ { name: "situs_address", label: "Situs Address (combined)", searchable: true },
1317
+ { name: "situs_num", label: "Situs Street Number", searchable: true },
1318
+ { name: "situs_street", label: "Situs Street Name", searchable: true },
1319
+ { name: "situs_city", label: "Situs City", searchable: true },
1320
+ { name: "situs_zip", label: "Situs ZIP", searchable: true }
1321
+ ],
1322
+ sampleQuery: "https://gis.traviscountytx.gov/server1/rest/services/Boundaries_and_Jurisdictions/TCAD_public/MapServer/0/query?where=situs_address+LIKE+'%25CONGRESS%25'&outFields=PROP_ID,geo_id,situs_address,situs_city&returnGeometry=false&f=json&resultRecordCount=10",
1323
+ license: "public",
1324
+ licenseUrl: "https://tnr-traviscountytx.opendata.arcgis.com/",
1325
+ status: "live",
1326
+ lastVerified: "2026-05-11",
1327
+ verifiedBy: "manual"
1328
+ }
1329
+ ],
1330
+ contact: {
1331
+ department: "Travis County Transportation & Natural Resources (TNR) GIS",
1332
+ url: "https://tnr-traviscountytx.opendata.arcgis.com/",
1333
+ email: null
1334
+ },
1335
+ 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."
1336
+ },
1337
+ {
1338
+ id: "tx-tarrant",
1339
+ state: "TX",
1340
+ stateName: "Texas",
1341
+ stateSlug: "texas",
1342
+ county: "Tarrant",
1343
+ countySlug: "tarrant-county",
1344
+ countyFips: "48439",
1345
+ hasPublicRest: true,
1346
+ endpoints: [
1347
+ {
1348
+ url: "https://mapit.tarrantcounty.com/arcgis/rest/services/Tax/TCProperty/MapServer/0",
1349
+ serviceType: "MapServer",
1350
+ layerIndex: 0,
1351
+ layerName: "Tarrant County Parcel",
1352
+ supportsQuery: true,
1353
+ corsEnabled: null,
1354
+ searchFields: [
1355
+ { name: "TAXPIN", label: "Tax Parcel ID", searchable: true },
1356
+ { name: "ACCOUNT", label: "Appraisal Account Number", searchable: true },
1357
+ { name: "OWNER_NAME", label: "Owner Name", searchable: true },
1358
+ { name: "SITUS_ADDR", label: "Situs Address", searchable: true },
1359
+ { name: "OWNER_ADDR", label: "Owner Mailing Address", searchable: true },
1360
+ { name: "OWNER_CITY", label: "Owner City", searchable: true },
1361
+ { name: "ZIPCODE", label: "Situs ZIP Code", searchable: true }
1362
+ ],
1363
+ sampleQuery: "https://mapit.tarrantcounty.com/arcgis/rest/services/Tax/TCProperty/MapServer/0/query?where=UPPER(OWNER_NAME)%20LIKE%20UPPER('%25SMITH%25')&outFields=TAXPIN,OWNER_NAME,SITUS_ADDR,OWNER_CITY&returnGeometry=false&f=json&resultRecordCount=10",
1364
+ license: "public",
1365
+ licenseUrl: "https://data-tarrantcounty.opendata.arcgis.com/",
1366
+ status: "live",
1367
+ lastVerified: "2026-05-11",
1368
+ verifiedBy: "manual"
1369
+ }
1370
+ ],
1371
+ contact: {
1372
+ department: "Tarrant County GIS / Tarrant Appraisal District",
1373
+ url: "https://gis-tad.opendata.arcgis.com/",
1374
+ email: null
1375
+ },
1376
+ 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)."
1377
+ }
1378
+ ]
1379
+ };
1380
+
1381
+ // data/virginia.json
1382
+ var virginia_default = {
1383
+ stateSlug: "virginia",
1384
+ stateName: "Virginia",
1385
+ stateAbbrev: "VA",
1386
+ lastUpdated: "2026-05-11",
1387
+ counties: [
1388
+ {
1389
+ id: "va-fairfax",
1390
+ state: "VA",
1391
+ stateName: "Virginia",
1392
+ stateSlug: "virginia",
1393
+ county: "Fairfax",
1394
+ countySlug: "fairfax-county",
1395
+ countyFips: "51059",
1396
+ hasPublicRest: true,
1397
+ endpoints: [
1398
+ {
1399
+ url: "https://www.fairfaxcounty.gov/mercator/rest/services/OpenData/OpenData_A9/MapServer/0",
1400
+ serviceType: "MapServer",
1401
+ layerIndex: 0,
1402
+ layerName: "Parcels",
1403
+ supportsQuery: true,
1404
+ corsEnabled: null,
1405
+ searchFields: [
1406
+ { name: "PIN", label: "Parcel Identification Number", searchable: true },
1407
+ { name: "PARCEL_KEY", label: "Parcel Key (numeric)", searchable: true },
1408
+ { name: "PARCEL_TYPE", label: "Parcel Type (ORDINARY / CONDO)", searchable: false },
1409
+ { name: "SRC_CONTROL", label: "Source Control", searchable: false }
1410
+ ],
1411
+ sampleQuery: "https://www.fairfaxcounty.gov/mercator/rest/services/OpenData/OpenData_A9/MapServer/0/query?where=PIN+LIKE+%270304%25%27&outFields=PIN,PARCEL_TYPE&returnGeometry=false&f=json&resultRecordCount=10",
1412
+ license: "public",
1413
+ licenseUrl: "https://www.fairfaxcounty.gov/maps/",
1414
+ status: "live",
1415
+ lastVerified: "2026-05-11",
1416
+ verifiedBy: "manual"
1417
+ }
1418
+ ],
1419
+ contact: {
1420
+ department: "Fairfax County GIS Division (Department of Information Technology)",
1421
+ url: "https://www.fairfaxcounty.gov/maps/",
1422
+ email: null
1423
+ },
1424
+ 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."
1425
+ }
1426
+ ]
1427
+ };
1428
+
1429
+ // data/washington.json
1430
+ var washington_default = {
1431
+ stateSlug: "washington",
1432
+ stateName: "Washington",
1433
+ stateAbbrev: "WA",
1434
+ lastUpdated: "2026-05-07",
1435
+ counties: [
1436
+ {
1437
+ id: "wa-king",
1438
+ state: "WA",
1439
+ stateName: "Washington",
1440
+ stateSlug: "washington",
1441
+ county: "King",
1442
+ countySlug: "king-county",
1443
+ countyFips: "53033",
1444
+ hasPublicRest: true,
1445
+ endpoints: [
1446
+ {
1447
+ url: "https://gismaps.kingcounty.gov/arcgis/rest/services/Property/KingCo_Parcels/MapServer/0",
1448
+ serviceType: "MapServer",
1449
+ layerIndex: 0,
1450
+ layerName: "King County Parcels",
1451
+ supportsQuery: true,
1452
+ corsEnabled: null,
1453
+ searchFields: [
1454
+ { name: "PIN", label: "Parcel Identification Number", searchable: true },
1455
+ { name: "MAJOR", label: "Major (first 6 of PIN)", searchable: true },
1456
+ { name: "MINOR", label: "Minor (last 4 of PIN)", searchable: true }
1457
+ ],
1458
+ sampleQuery: "https://gismaps.kingcounty.gov/arcgis/rest/services/Property/KingCo_Parcels/MapServer/0/query?where=PIN%3D%270000200001%27&outFields=*&f=json",
1459
+ license: "public",
1460
+ licenseUrl: "https://kingcounty.gov/services/gis/GISData.aspx",
1461
+ status: "unverified",
1462
+ lastVerified: "2026-05-07",
1463
+ verifiedBy: "manual"
1464
+ }
1465
+ ],
1466
+ contact: {
1467
+ department: "King County GIS Center",
1468
+ url: "https://kingcounty.gov/services/gis.aspx",
1469
+ email: null
1470
+ },
1471
+ 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."
1472
+ }
1473
+ ]
1474
+ };
1475
+
1476
+ // src/data.ts
1477
+ var atlasIndex = data_default;
1478
+ var POPULATED_STATES = {
1479
+ arizona: arizona_default,
1480
+ california: california_default,
1481
+ colorado: colorado_default,
1482
+ florida: florida_default,
1483
+ georgia: georgia_default,
1484
+ illinois: illinois_default,
1485
+ minnesota: minnesota_default,
1486
+ nevada: nevada_default,
1487
+ "new-york": new_york_default,
1488
+ "north-carolina": north_carolina_default,
1489
+ ohio: ohio_default,
1490
+ pennsylvania: pennsylvania_default,
1491
+ texas: texas_default,
1492
+ virginia: virginia_default,
1493
+ washington: washington_default
1494
+ };
1495
+ var atlas = {
1496
+ version: atlasIndex.version,
1497
+ lastUpdated: atlasIndex.lastUpdated,
1498
+ states: atlasIndex.states,
1499
+ totals: atlasIndex.totals,
1500
+ byStateSlug: new Map(Object.entries(POPULATED_STATES))
1501
+ };
1502
+
1503
+ // src/findCounty.ts
1504
+ function findCounty(stateSlug, countySlug) {
1505
+ const state = atlas.byStateSlug.get(stateSlug);
1506
+ if (!state) return void 0;
1507
+ return state.counties.find((c) => c.countySlug === countySlug);
1508
+ }
1509
+
1510
+ // src/findState.ts
1511
+ function findState(stateSlug) {
1512
+ return atlas.byStateSlug.get(stateSlug);
1513
+ }
1514
+
1515
+ // src/listStates.ts
1516
+ function listStates() {
1517
+ return atlas.states;
1518
+ }
1519
+
1520
+ // src/listCountiesByState.ts
1521
+ function listCountiesByState(stateSlug) {
1522
+ const state = atlas.byStateSlug.get(stateSlug);
1523
+ if (!state) return [];
1524
+ return state.counties;
1525
+ }
1526
+
1527
+ // src/helpers.ts
1528
+ function slugify(s) {
1529
+ return s.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
1530
+ }
1531
+ function countySlugFromName(county) {
1532
+ const lc = county.toLowerCase();
1533
+ const hasSuffix = lc.endsWith(" county") || lc.endsWith(" parish") || lc.endsWith(" borough") || lc.endsWith(" census area");
1534
+ return slugify(hasSuffix ? county : `${county} County`);
1535
+ }
1536
+ function buildParcelLookupDeepLink(endpoint, base = "https://urbankitstudio.com/tools/parcel-lookup") {
1537
+ const params = new URLSearchParams();
1538
+ params.set("endpoint", endpoint.url);
1539
+ const ownerField = endpoint.searchFields.find(
1540
+ (f) => /owner|taxpayer/i.test(f.name)
1541
+ );
1542
+ if (ownerField) params.set("fieldHint", ownerField.name);
1543
+ return `${base}?${params.toString()}`;
1544
+ }
1545
+ function statePath(stateSlug) {
1546
+ return `/parcel-atlas/${stateSlug}`;
1547
+ }
1548
+ function countyPath(stateSlug, countySlug) {
1549
+ return `/parcel-atlas/${stateSlug}/${countySlug}`;
1550
+ }
1551
+
1552
+ export { atlas, atlasIndex, buildParcelLookupDeepLink, countyPath, countySlugFromName, findCounty, findState, listCountiesByState, listStates, slugify, statePath };