@urbankitstudio/atlas 0.5.1 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +110 -110
  3. package/data/alabama.json +103 -103
  4. package/data/alaska.json +51 -51
  5. package/data/arizona.json +149 -148
  6. package/data/arkansas.json +143 -143
  7. package/data/california.json +435 -435
  8. package/data/colorado.json +150 -150
  9. package/data/connecticut.json +164 -164
  10. package/data/delaware.json +46 -46
  11. package/data/florida.json +455 -455
  12. package/data/georgia.json +176 -175
  13. package/data/hawaii.json +82 -82
  14. package/data/idaho.json +54 -54
  15. package/data/illinois.json +337 -337
  16. package/data/index.json +411 -411
  17. package/data/indiana.json +132 -132
  18. package/data/iowa.json +51 -51
  19. package/data/kansas.json +49 -49
  20. package/data/kentucky.json +52 -52
  21. package/data/louisiana.json +102 -102
  22. package/data/maine.json +138 -138
  23. package/data/maryland.json +94 -94
  24. package/data/massachusetts.json +78 -78
  25. package/data/michigan.json +92 -92
  26. package/data/minnesota.json +94 -94
  27. package/data/mississippi.json +98 -98
  28. package/data/missouri.json +99 -99
  29. package/data/montana.json +196 -196
  30. package/data/nebraska.json +137 -137
  31. package/data/nevada.json +98 -98
  32. package/data/new-hampshire.json +42 -42
  33. package/data/new-jersey.json +493 -493
  34. package/data/new-mexico.json +49 -49
  35. package/data/new-york.json +318 -318
  36. package/data/north-carolina.json +303 -303
  37. package/data/north-dakota.json +57 -57
  38. package/data/ohio.json +304 -304
  39. package/data/oklahoma.json +49 -49
  40. package/data/oregon.json +144 -144
  41. package/data/pennsylvania.json +86 -86
  42. package/data/rhode-island.json +25 -25
  43. package/data/south-carolina.json +101 -101
  44. package/data/south-dakota.json +58 -58
  45. package/data/tennessee.json +154 -154
  46. package/data/texas.json +430 -430
  47. package/data/utah.json +193 -193
  48. package/data/vermont.json +59 -59
  49. package/data/virginia.json +88 -88
  50. package/data/washington.json +183 -183
  51. package/data/west-virginia.json +172 -176
  52. package/data/wisconsin.json +374 -374
  53. package/data/wyoming.json +58 -58
  54. package/dist/index.cjs +40 -42
  55. package/dist/index.js +40 -42
  56. package/package.json +68 -68
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Leo Yong
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Leo Yong
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,110 +1,110 @@
1
- # @urbankitstudio/atlas
2
-
3
- JS SDK for the **UrbanKit County Parcel REST API Atlas** — a curated index of public ArcGIS REST endpoints for US county parcel data, with searchable field metadata, sample queries, and license info.
4
-
5
- Use it to:
6
-
7
- - Look up the parcel REST endpoint for a given US county (e.g. Kane County, IL).
8
- - Discover which fields are searchable on each endpoint (PIN, owner name, address).
9
- - Build deep-links into the UrbanKit parcel lookup tool.
10
-
11
- The data is the same set powering [urbankitstudio.com/parcel-atlas](https://urbankitstudio.com/parcel-atlas), bundled offline so your code does not need to make a runtime network request.
12
-
13
- ## Install
14
-
15
- ```bash
16
- npm i @urbankitstudio/atlas
17
- ```
18
-
19
- Works in Node.js (>=18) and modern bundlers (Vite, webpack, esbuild, Rollup, Next.js, Remix). Ships ESM + CJS with full TypeScript types. No runtime dependencies. `sideEffects: false`.
20
-
21
- ## Quick start
22
-
23
- ### 1. List populated states
24
-
25
- ```ts
26
- import { listStates } from "@urbankitstudio/atlas";
27
-
28
- const populated = listStates().filter((s) => s.populated);
29
- // [{ slug: "arizona", name: "Arizona", abbrev: "AZ", countyCount: 1, ... }, ...]
30
- ```
31
-
32
- ### 2. Look up a county by slug
33
-
34
- ```ts
35
- import { findCounty } from "@urbankitstudio/atlas";
36
-
37
- const kane = findCounty("illinois", "kane-county");
38
- if (kane) {
39
- console.log(kane.endpoints[0].url);
40
- // → https://gis.kanecountyil.gov/...
41
-
42
- const pin = kane.endpoints[0].searchFields.find((f) => f.name === "PIN");
43
- console.log(pin?.label);
44
- // → "Parcel Identification Number (PIN)"
45
- }
46
- ```
47
-
48
- ### 3. Look up a county by FIPS code
49
-
50
- ```ts
51
- import { findCountyByFips } from "@urbankitstudio/atlas";
52
-
53
- const kane = findCountyByFips("17089"); // 5-digit county FIPS (state + county)
54
- if (kane) {
55
- console.log(kane.county, kane.stateSlug);
56
- // → Kane illinois
57
- }
58
- // Unknown, malformed, or non-5-digit input returns undefined (never throws).
59
- ```
60
-
61
- ### 4. Build a parcel-lookup deep-link
62
-
63
- ```ts
64
- import { findCounty, buildParcelLookupDeepLink } from "@urbankitstudio/atlas";
65
-
66
- const kane = findCounty("illinois", "kane-county")!;
67
- const link = buildParcelLookupDeepLink(kane.endpoints[0]);
68
- // → https://urbankitstudio.com/tools/parcel-lookup?endpoint=https%3A%2F%2F...&fieldHint=TaxName
69
- ```
70
-
71
- ## API
72
-
73
- | Function | Returns |
74
- |---|---|
75
- | `listStates()` | `StateIndexEntry[]` — all 50 states + `populated` flag |
76
- | `findState(stateSlug)` | `StateFile \| undefined` |
77
- | `findCounty(stateSlug, countySlug)` | `CountyRecord \| undefined` |
78
- | `findCountyByFips(fips)` | `CountyRecord \| undefined` — match by 5-digit county FIPS |
79
- | `listCountiesByState(stateSlug)` | `CountyRecord[]` |
80
- | `buildParcelLookupDeepLink(endpoint)` | URL string into the UrbanKit lookup tool |
81
- | `slugify(s)`, `countySlugFromName(s)` | string helpers matching the atlas slug convention |
82
- | `statePath(slug)`, `countyPath(state, county)` | URL paths under `/parcel-atlas` |
83
-
84
- The full typed root is also exported as `atlas`:
85
-
86
- ```ts
87
- import { atlas } from "@urbankitstudio/atlas";
88
-
89
- atlas.version; // string
90
- atlas.lastUpdated; // ISO date
91
- atlas.totals; // { states, counties, endpoints }
92
- atlas.byStateSlug; // Map<stateSlug, StateFile>
93
- ```
94
-
95
- ## Coverage today
96
-
97
- The atlas currently bundles **155 counties across all 50 US states**, covering the largest counties in each. Call `listStates()` to enumerate the full set; every state is now populated with at least one verified county endpoint.
98
-
99
- Counties are added as their public REST endpoints are verified. Package versions bump when data refreshes — pin to a minor range (`^0.x`) to receive new counties without breaking changes.
100
-
101
- The live, browseable atlas lives at [urbankitstudio.com/parcel-atlas](https://urbankitstudio.com/parcel-atlas).
102
-
103
- ## License
104
-
105
- MIT — see [LICENSE](./LICENSE). © 2026 Leo Yong.
106
-
107
- This package's atlas dataset (the open **discovery layer** — county → REST endpoint
108
- mappings and field metadata) is provided under MIT. Live, always-fresh and enriched
109
- data — geocoding, address→parcel resolution, bulk enrichment, and the data-availability
110
- SLA — are the paid [UrbanKit Studio API](https://urbankitstudio.com/pricing).
1
+ # @urbankitstudio/atlas
2
+
3
+ JS SDK for the **UrbanKit County Parcel REST API Atlas** — a curated index of public ArcGIS REST endpoints for US county parcel data, with searchable field metadata, sample queries, and license info.
4
+
5
+ Use it to:
6
+
7
+ - Look up the parcel REST endpoint for a given US county (e.g. Kane County, IL).
8
+ - Discover which fields are searchable on each endpoint (PIN, owner name, address).
9
+ - Build deep-links into the UrbanKit parcel lookup tool.
10
+
11
+ The data is the same set powering [urbankitstudio.com/parcel-atlas](https://urbankitstudio.com/parcel-atlas), bundled offline so your code does not need to make a runtime network request.
12
+
13
+ ## Install
14
+
15
+ ```bash
16
+ npm i @urbankitstudio/atlas
17
+ ```
18
+
19
+ Works in Node.js (>=18) and modern bundlers (Vite, webpack, esbuild, Rollup, Next.js, Remix). Ships ESM + CJS with full TypeScript types. No runtime dependencies. `sideEffects: false`.
20
+
21
+ ## Quick start
22
+
23
+ ### 1. List populated states
24
+
25
+ ```ts
26
+ import { listStates } from "@urbankitstudio/atlas";
27
+
28
+ const populated = listStates().filter((s) => s.populated);
29
+ // [{ slug: "arizona", name: "Arizona", abbrev: "AZ", countyCount: 1, ... }, ...]
30
+ ```
31
+
32
+ ### 2. Look up a county by slug
33
+
34
+ ```ts
35
+ import { findCounty } from "@urbankitstudio/atlas";
36
+
37
+ const kane = findCounty("illinois", "kane-county");
38
+ if (kane) {
39
+ console.log(kane.endpoints[0].url);
40
+ // → https://gis.kanecountyil.gov/...
41
+
42
+ const pin = kane.endpoints[0].searchFields.find((f) => f.name === "PIN");
43
+ console.log(pin?.label);
44
+ // → "Parcel Identification Number (PIN)"
45
+ }
46
+ ```
47
+
48
+ ### 3. Look up a county by FIPS code
49
+
50
+ ```ts
51
+ import { findCountyByFips } from "@urbankitstudio/atlas";
52
+
53
+ const kane = findCountyByFips("17089"); // 5-digit county FIPS (state + county)
54
+ if (kane) {
55
+ console.log(kane.county, kane.stateSlug);
56
+ // → Kane illinois
57
+ }
58
+ // Unknown, malformed, or non-5-digit input returns undefined (never throws).
59
+ ```
60
+
61
+ ### 4. Build a parcel-lookup deep-link
62
+
63
+ ```ts
64
+ import { findCounty, buildParcelLookupDeepLink } from "@urbankitstudio/atlas";
65
+
66
+ const kane = findCounty("illinois", "kane-county")!;
67
+ const link = buildParcelLookupDeepLink(kane.endpoints[0]);
68
+ // → https://urbankitstudio.com/tools/parcel-lookup?endpoint=https%3A%2F%2F...&fieldHint=TaxName
69
+ ```
70
+
71
+ ## API
72
+
73
+ | Function | Returns |
74
+ |---|---|
75
+ | `listStates()` | `StateIndexEntry[]` — all 50 states + `populated` flag |
76
+ | `findState(stateSlug)` | `StateFile \| undefined` |
77
+ | `findCounty(stateSlug, countySlug)` | `CountyRecord \| undefined` |
78
+ | `findCountyByFips(fips)` | `CountyRecord \| undefined` — match by 5-digit county FIPS |
79
+ | `listCountiesByState(stateSlug)` | `CountyRecord[]` |
80
+ | `buildParcelLookupDeepLink(endpoint)` | URL string into the UrbanKit lookup tool |
81
+ | `slugify(s)`, `countySlugFromName(s)` | string helpers matching the atlas slug convention |
82
+ | `statePath(slug)`, `countyPath(state, county)` | URL paths under `/parcel-atlas` |
83
+
84
+ The full typed root is also exported as `atlas`:
85
+
86
+ ```ts
87
+ import { atlas } from "@urbankitstudio/atlas";
88
+
89
+ atlas.version; // string
90
+ atlas.lastUpdated; // ISO date
91
+ atlas.totals; // { states, counties, endpoints }
92
+ atlas.byStateSlug; // Map<stateSlug, StateFile>
93
+ ```
94
+
95
+ ## Coverage today
96
+
97
+ The atlas currently bundles **155 counties across all 50 US states**, covering the largest counties in each. Call `listStates()` to enumerate the full set; every state is now populated with at least one verified county endpoint.
98
+
99
+ Counties are added as their public REST endpoints are verified. Package versions bump when data refreshes — pin to a minor range (`^0.x`) to receive new counties without breaking changes.
100
+
101
+ The live, browseable atlas lives at [urbankitstudio.com/parcel-atlas](https://urbankitstudio.com/parcel-atlas).
102
+
103
+ ## License
104
+
105
+ MIT — see [LICENSE](./LICENSE). © 2026 Leo Yong.
106
+
107
+ This package's atlas dataset (the open **discovery layer** — county → REST endpoint
108
+ mappings and field metadata) is provided under MIT. Live, always-fresh and enriched
109
+ data — geocoding, address→parcel resolution, bulk enrichment, and the data-availability
110
+ SLA — are the paid [UrbanKit Studio API](https://urbankitstudio.com/pricing).
package/data/alabama.json CHANGED
@@ -1,103 +1,103 @@
1
- {
2
- "stateSlug": "alabama",
3
- "stateName": "Alabama",
4
- "stateAbbrev": "AL",
5
- "lastUpdated": "2026-06-20",
6
- "counties": [
7
- {
8
- "id": "al-shelby",
9
- "state": "AL",
10
- "stateName": "Alabama",
11
- "stateSlug": "alabama",
12
- "county": "Shelby",
13
- "countySlug": "shelby-county",
14
- "countyFips": "01117",
15
- "hasPublicRest": true,
16
- "endpoints": [
17
- {
18
- "url": "https://maps.shelbyal.com/gisserver/rest/services/LegacyServices/Cadastral_2022/MapServer/91",
19
- "serviceType": "MapServer",
20
- "layerIndex": 91,
21
- "layerName": "Parcels",
22
- "supportsQuery": true,
23
- "corsEnabled": null,
24
- "searchFields": [
25
- { "name": "Parcel_Num", "label": "Parcel Number", "searchable": true },
26
- { "name": "NAM1", "label": "Owner Name 1", "searchable": true },
27
- { "name": "NAM2", "label": "Owner Name 2", "searchable": false },
28
- { "name": "ADR1", "label": "Owner Address Line 1", "searchable": false },
29
- { "name": "ADR2", "label": "Owner Address Line 2", "searchable": false },
30
- { "name": "CITY", "label": "Owner City", "searchable": false },
31
- { "name": "STATE", "label": "Owner State", "searchable": false },
32
- { "name": "ZIP", "label": "Owner ZIP", "searchable": false },
33
- { "name": "PROP_ADR", "label": "Property Address", "searchable": true },
34
- { "name": "Subd_Name", "label": "Subdivision Name", "searchable": false },
35
- { "name": "Zoning", "label": "Zoning", "searchable": false },
36
- { "name": "ACRES", "label": "Acres", "searchable": false },
37
- { "name": "PROP_CLASS", "label": "Property Class", "searchable": false }
38
- ],
39
- "sampleQuery": "https://maps.shelbyal.com/gisserver/rest/services/LegacyServices/Cadastral_2022/MapServer/91/query?where=UPPER(NAM1)+LIKE+UPPER('%25SMITH%25')&outFields=Parcel_Num,NAM1,NAM2,ADR1,CITY,PROP_ADR,Subd_Name&returnGeometry=false&f=json&resultRecordCount=10",
40
- "license": "public",
41
- "licenseUrl": "https://maps.shelbyal.com/",
42
- "status": "live",
43
- "lastVerified": "2026-06-20",
44
- "verifiedBy": "automated"
45
- }
46
- ],
47
- "contact": {
48
- "department": "Shelby County GIS / Shelby County Commission",
49
- "url": "https://maps.shelbyal.com/",
50
- "email": null
51
- },
52
- "notes": "Shelby County AL (Birmingham south suburbs, Hoover, Alabaster, Helena, Pelham, Calera; county seat Columbiana; FIPS 01117; fastest-growing county in AL) uses MapServer layer 91 (layerIndex=91) in the Cadastral_2022 service at maps.shelbyal.com. The layer has 160+ fields including Parcel_Num, NAM1, NAM2 (owner names), ADR1/ADR2, CITY, STATE, ZIP, ZIP4 (owner mailing address), PROP_ADR (property address), Subd_Name, Zoning, ACRES, SQUARE_FEET, PROP_CLASS, DIST, SCH_DIST, LN_VL1/LN_VL2, CUR_USE_VL, various CIMP/IMP improvement codes and values, tax sale fields, and audit timestamps. Owner search via UPPER(NAM1) LIKE on NAM1 works. Verified 2026-06-20: SMITH returns Shelby County addresses (e.g., 'SMITH GLENDA & ADAMS MIRIAM ROLLS & MIKE'). Note: layerIndex 91 is non-standard. Must specify /91 in the URL. Do not confuse with Shelby County TN (Memphis, FIPS 47157) already in the atlas."
53
- },
54
- {
55
- "id": "al-jefferson",
56
- "state": "AL",
57
- "stateName": "Alabama",
58
- "stateSlug": "alabama",
59
- "county": "Jefferson",
60
- "countySlug": "jefferson-county",
61
- "countyFips": "01073",
62
- "hasPublicRest": true,
63
- "endpoints": [
64
- {
65
- "url": "https://jccgis.jccal.org/server/rest/services/Basemap/Parcels/MapServer/0",
66
- "serviceType": "MapServer",
67
- "layerIndex": 0,
68
- "layerName": "Parcels",
69
- "supportsQuery": true,
70
- "corsEnabled": null,
71
- "searchFields": [
72
- { "name": "PARCELID", "label": "Parcel ID", "searchable": true },
73
- { "name": "OWNERNAME", "label": "Owner Name", "searchable": true },
74
- { "name": "PROP_MAIL", "label": "Property Mailing Address", "searchable": false },
75
- { "name": "Street_Name", "label": "Street Name", "searchable": true },
76
- { "name": "Bldg_Number", "label": "Building Number", "searchable": false },
77
- { "name": "ADDR_PSPR", "label": "Address (Street Number+Prefix)", "searchable": false },
78
- { "name": "APARTMENT", "label": "Apartment", "searchable": false },
79
- { "name": "CITYMAIL", "label": "Mailing City", "searchable": false },
80
- { "name": "ZIP_MAIL", "label": "Mailing ZIP", "searchable": false },
81
- { "name": "STATE_Mail", "label": "Mailing State", "searchable": false },
82
- { "name": "Legal_Desc", "label": "Legal Description", "searchable": false },
83
- { "name": "Property_City", "label": "Property City", "searchable": false },
84
- { "name": "ACRES_APR", "label": "Appraised Acres", "searchable": false },
85
- { "name": "AssdValue", "label": "Assessed Value", "searchable": false }
86
- ],
87
- "sampleQuery": "https://jccgis.jccal.org/server/rest/services/Basemap/Parcels/MapServer/0/query?where=UPPER(OWNERNAME)+LIKE+UPPER('%25SMITH%25')&outFields=PARCELID,OWNERNAME,PROP_MAIL,Street_Name,Property_City&returnGeometry=false&f=json&resultRecordCount=10",
88
- "license": "public",
89
- "licenseUrl": "https://www.jccal.org/Default.asp?ID=1220&pg=Enterprise+GIS",
90
- "status": "live",
91
- "lastVerified": "2026-06-27",
92
- "verifiedBy": "automated"
93
- }
94
- ],
95
- "contact": {
96
- "department": "Jefferson County Commission GIS / Information Technology Services, EGIS",
97
- "url": "https://data-jeffco-al.opendata.arcgis.com/",
98
- "email": null
99
- },
100
- "notes": "Jefferson County AL (Birmingham, pop. 670,000; FIPS 01073) Basemap/Parcels layer. Data maintained by Jefferson County Tax Assessor Office and updated nightly. 76 fields in live schema as of 2026-06-27: OBJECTID, Unique_ID, PID, TAX_TOWNSH, ISP_SECTION, SEC, QSECTION, BLOCK, PARCEL, PARCELID, APP_PID, DISTRICT, ESN_NUM, ADDR_PSPR, Bldg_Number, Street_Name, Street_Type, Street_Dir, APARTMENT, ADDRAPT_PS, OWNERNAME, PROP_MAIL, CITYMAIL, ZIP_MAIL, STATE_Mail, Legal_Desc, Property_City, Property_State, NEIGHBOR_N, SUBDIV_NAME, ADDR_APR, ZIP, TotalMHValue, PrevParcelLand/Imp/Total, Water, Sewer, Gas, ACRES_APR, GIS_ACRES, Remarks, Name2, Plat_Book/Page (×2), NbhdCd, Ownership, Topography, RoadAcc, MaintDate, CITY, NbhName, PriMunCode, SecMunCode, PriAcreage, SecAcreage, LegalRemarks, ParcelNo, Division, RecordYear, SchDist, MapNumber, Sqft, FIREDEPTNAME, Cls, BLDG_IND, TAX_CODE, OBY_IND, AssdValue, Territory, FireFee_District. NOTE 2026-06-27: ZONING_BOE is no longer in the live schema (schema drift), removed from searchFields. OWNERNAME field returns padded fixed-width strings (trim on use). Note: distinct from Jefferson County CO (FIPS 08059) and Jefferson County KY (Louisville; FIPS 21111) already in atlas. Verified 2026-06-27: metadata 200, query 200, 410K+ parcels."
101
- }
102
- ]
103
- }
1
+ {
2
+ "stateSlug": "alabama",
3
+ "stateName": "Alabama",
4
+ "stateAbbrev": "AL",
5
+ "lastUpdated": "2026-06-20",
6
+ "counties": [
7
+ {
8
+ "id": "al-shelby",
9
+ "state": "AL",
10
+ "stateName": "Alabama",
11
+ "stateSlug": "alabama",
12
+ "county": "Shelby",
13
+ "countySlug": "shelby-county",
14
+ "countyFips": "01117",
15
+ "hasPublicRest": true,
16
+ "endpoints": [
17
+ {
18
+ "url": "https://maps.shelbyal.com/gisserver/rest/services/LegacyServices/Cadastral_2022/MapServer/91",
19
+ "serviceType": "MapServer",
20
+ "layerIndex": 91,
21
+ "layerName": "Parcels",
22
+ "supportsQuery": true,
23
+ "corsEnabled": null,
24
+ "searchFields": [
25
+ { "name": "Parcel_Num", "label": "Parcel Number", "searchable": true },
26
+ { "name": "NAM1", "label": "Owner Name 1", "searchable": true },
27
+ { "name": "NAM2", "label": "Owner Name 2", "searchable": false },
28
+ { "name": "ADR1", "label": "Owner Address Line 1", "searchable": false },
29
+ { "name": "ADR2", "label": "Owner Address Line 2", "searchable": false },
30
+ { "name": "CITY", "label": "Owner City", "searchable": false },
31
+ { "name": "STATE", "label": "Owner State", "searchable": false },
32
+ { "name": "ZIP", "label": "Owner ZIP", "searchable": false },
33
+ { "name": "PROP_ADR", "label": "Property Address", "searchable": true },
34
+ { "name": "Subd_Name", "label": "Subdivision Name", "searchable": false },
35
+ { "name": "Zoning", "label": "Zoning", "searchable": false },
36
+ { "name": "ACRES", "label": "Acres", "searchable": false },
37
+ { "name": "PROP_CLASS", "label": "Property Class", "searchable": false }
38
+ ],
39
+ "sampleQuery": "https://maps.shelbyal.com/gisserver/rest/services/LegacyServices/Cadastral_2022/MapServer/91/query?where=UPPER(NAM1)+LIKE+UPPER('%25SMITH%25')&outFields=Parcel_Num,NAM1,NAM2,ADR1,CITY,PROP_ADR,Subd_Name&returnGeometry=false&f=json&resultRecordCount=10",
40
+ "license": "public",
41
+ "licenseUrl": "https://maps.shelbyal.com/",
42
+ "status": "live",
43
+ "lastVerified": "2026-06-20",
44
+ "verifiedBy": "automated"
45
+ }
46
+ ],
47
+ "contact": {
48
+ "department": "Shelby County GIS / Shelby County Commission",
49
+ "url": "https://maps.shelbyal.com/",
50
+ "email": null
51
+ },
52
+ "notes": "Shelby County AL (Birmingham south suburbs, Hoover, Alabaster, Helena, Pelham, Calera; county seat Columbiana; FIPS 01117; fastest-growing county in AL) uses MapServer layer 91 (layerIndex=91) in the Cadastral_2022 service at maps.shelbyal.com. The layer has 160+ fields including Parcel_Num, NAM1, NAM2 (owner names), ADR1/ADR2, CITY, STATE, ZIP, ZIP4 (owner mailing address), PROP_ADR (property address), Subd_Name, Zoning, ACRES, SQUARE_FEET, PROP_CLASS, DIST, SCH_DIST, LN_VL1/LN_VL2, CUR_USE_VL, various CIMP/IMP improvement codes and values, tax sale fields, and audit timestamps. Owner search via UPPER(NAM1) LIKE on NAM1 works. Verified 2026-06-20: SMITH returns Shelby County addresses (e.g., 'SMITH GLENDA & ADAMS MIRIAM ROLLS & MIKE'). Note: layerIndex 91 is non-standard. Must specify /91 in the URL. Do not confuse with Shelby County TN (Memphis, FIPS 47157) already in the atlas."
53
+ },
54
+ {
55
+ "id": "al-jefferson",
56
+ "state": "AL",
57
+ "stateName": "Alabama",
58
+ "stateSlug": "alabama",
59
+ "county": "Jefferson",
60
+ "countySlug": "jefferson-county",
61
+ "countyFips": "01073",
62
+ "hasPublicRest": true,
63
+ "endpoints": [
64
+ {
65
+ "url": "https://jccgis.jccal.org/server/rest/services/Basemap/Parcels/MapServer/0",
66
+ "serviceType": "MapServer",
67
+ "layerIndex": 0,
68
+ "layerName": "Parcels",
69
+ "supportsQuery": true,
70
+ "corsEnabled": null,
71
+ "searchFields": [
72
+ { "name": "PARCELID", "label": "Parcel ID", "searchable": true },
73
+ { "name": "OWNERNAME", "label": "Owner Name", "searchable": true },
74
+ { "name": "PROP_MAIL", "label": "Property Mailing Address", "searchable": false },
75
+ { "name": "Street_Name", "label": "Street Name", "searchable": true },
76
+ { "name": "Bldg_Number", "label": "Building Number", "searchable": false },
77
+ { "name": "ADDR_PSPR", "label": "Address (Street Number+Prefix)", "searchable": false },
78
+ { "name": "APARTMENT", "label": "Apartment", "searchable": false },
79
+ { "name": "CITYMAIL", "label": "Mailing City", "searchable": false },
80
+ { "name": "ZIP_MAIL", "label": "Mailing ZIP", "searchable": false },
81
+ { "name": "STATE_Mail", "label": "Mailing State", "searchable": false },
82
+ { "name": "Legal_Desc", "label": "Legal Description", "searchable": false },
83
+ { "name": "Property_City", "label": "Property City", "searchable": false },
84
+ { "name": "ACRES_APR", "label": "Appraised Acres", "searchable": false },
85
+ { "name": "AssdValue", "label": "Assessed Value", "searchable": false }
86
+ ],
87
+ "sampleQuery": "https://jccgis.jccal.org/server/rest/services/Basemap/Parcels/MapServer/0/query?where=UPPER(OWNERNAME)+LIKE+UPPER('%25SMITH%25')&outFields=PARCELID,OWNERNAME,PROP_MAIL,Street_Name,Property_City&returnGeometry=false&f=json&resultRecordCount=10",
88
+ "license": "public",
89
+ "licenseUrl": "https://www.jccal.org/Default.asp?ID=1220&pg=Enterprise+GIS",
90
+ "status": "live",
91
+ "lastVerified": "2026-06-27",
92
+ "verifiedBy": "automated"
93
+ }
94
+ ],
95
+ "contact": {
96
+ "department": "Jefferson County Commission GIS / Information Technology Services, EGIS",
97
+ "url": "https://data-jeffco-al.opendata.arcgis.com/",
98
+ "email": null
99
+ },
100
+ "notes": "Jefferson County AL (Birmingham, pop. 670,000; FIPS 01073) Basemap/Parcels layer. Data maintained by Jefferson County Tax Assessor Office and updated nightly. 76 fields in live schema as of 2026-06-27: OBJECTID, Unique_ID, PID, TAX_TOWNSH, ISP_SECTION, SEC, QSECTION, BLOCK, PARCEL, PARCELID, APP_PID, DISTRICT, ESN_NUM, ADDR_PSPR, Bldg_Number, Street_Name, Street_Type, Street_Dir, APARTMENT, ADDRAPT_PS, OWNERNAME, PROP_MAIL, CITYMAIL, ZIP_MAIL, STATE_Mail, Legal_Desc, Property_City, Property_State, NEIGHBOR_N, SUBDIV_NAME, ADDR_APR, ZIP, TotalMHValue, PrevParcelLand/Imp/Total, Water, Sewer, Gas, ACRES_APR, GIS_ACRES, Remarks, Name2, Plat_Book/Page (×2), NbhdCd, Ownership, Topography, RoadAcc, MaintDate, CITY, NbhName, PriMunCode, SecMunCode, PriAcreage, SecAcreage, LegalRemarks, ParcelNo, Division, RecordYear, SchDist, MapNumber, Sqft, FIREDEPTNAME, Cls, BLDG_IND, TAX_CODE, OBY_IND, AssdValue, Territory, FireFee_District. NOTE 2026-06-27: ZONING_BOE is no longer in the live schema (schema drift), removed from searchFields. OWNERNAME field returns padded fixed-width strings (trim on use). Note: distinct from Jefferson County CO (FIPS 08059) and Jefferson County KY (Louisville; FIPS 21111) already in atlas. Verified 2026-06-27: metadata 200, query 200, 410K+ parcels."
101
+ }
102
+ ]
103
+ }
package/data/alaska.json CHANGED
@@ -1,51 +1,51 @@
1
- {
2
- "stateSlug": "alaska",
3
- "stateName": "Alaska",
4
- "stateAbbrev": "AK",
5
- "lastUpdated": "2026-05-15",
6
- "counties": [
7
- {
8
- "id": "ak-anchorage",
9
- "state": "AK",
10
- "stateName": "Alaska",
11
- "stateSlug": "alaska",
12
- "county": "Anchorage",
13
- "countySlug": "anchorage-municipality",
14
- "countyFips": "02020",
15
- "hasPublicRest": true,
16
- "endpoints": [
17
- {
18
- "url": "https://services1.arcgis.com/7HDiw78fcUiM2BWn/arcgis/rest/services/AK_Parcels/FeatureServer/0",
19
- "serviceType": "FeatureServer",
20
- "layerIndex": 0,
21
- "layerName": "AK_Parcels",
22
- "supportsQuery": true,
23
- "corsEnabled": null,
24
- "searchFields": [
25
- { "name": "parcel_id", "label": "Parcel ID", "searchable": true },
26
- { "name": "owner", "label": "Owner Name", "searchable": true },
27
- { "name": "alt_owner", "label": "Alternate Owner Name", "searchable": true },
28
- { "name": "property_type", "label": "Property Type (Residential/Commercial/etc.)", "searchable": false },
29
- { "name": "property_use", "label": "Property Use Description", "searchable": false },
30
- { "name": "land_value", "label": "Land Value", "searchable": false },
31
- { "name": "building_value", "label": "Building Value", "searchable": false },
32
- { "name": "total_value", "label": "Total Assessed Value", "searchable": false },
33
- { "name": "local_gov", "label": "Local Government (filter: Anchorage Municipality)", "searchable": true }
34
- ],
35
- "sampleQuery": "https://services1.arcgis.com/7HDiw78fcUiM2BWn/arcgis/rest/services/AK_Parcels/FeatureServer/0/query?where=UPPER(local_gov)+LIKE+'%25ANCHORAGE%25'+AND+UPPER(owner)+LIKE+UPPER('%25SMITH%25')&outFields=parcel_id,owner,alt_owner,property_type,land_value,total_value,local_gov&returnGeometry=false&f=json&resultRecordCount=10",
36
- "license": "public",
37
- "licenseUrl": "https://services1.arcgis.com/7HDiw78fcUiM2BWn/arcgis/rest/services/AK_Parcels/FeatureServer",
38
- "status": "live",
39
- "lastVerified": "2026-05-15",
40
- "verifiedBy": "manual"
41
- }
42
- ],
43
- "contact": {
44
- "department": "Alaska Statewide Parcel Layer (combined from local government sources)",
45
- "url": "https://services1.arcgis.com/7HDiw78fcUiM2BWn/arcgis/rest/services/AK_Parcels/FeatureServer",
46
- "email": null
47
- },
48
- "notes": "15 fields confirmed: OBJECTID, parcel_id, owner, alt_owner, property_type, property_use, land_value, building_value, total_value, local_gov, datetime_processed, feature_id, Shape__Area, Shape__Length, GlobalID. This is the Alaska Statewide Parcel FeatureServer, combining parcel data from various local government bodies in Alaska. Filter by local_gov field, use UPPER(local_gov) LIKE '%ANCHORAGE%' for Anchorage Municipality parcels (confirmed returning real parcels including United Airlines, residential, etc.). Owner query confirmed working. NOTE: Alaska does not have counties. It has boroughs and a small number of unified municipalities. Anchorage is officially the Municipality of Anchorage (FIPS 02020). This statewide service also covers Fairbanks North Star Borough, Matanuska-Susitna Borough, and other AK jurisdictions via the local_gov field. Coverage and completeness vary by participating jurisdiction."
49
- }
50
- ]
51
- }
1
+ {
2
+ "stateSlug": "alaska",
3
+ "stateName": "Alaska",
4
+ "stateAbbrev": "AK",
5
+ "lastUpdated": "2026-05-15",
6
+ "counties": [
7
+ {
8
+ "id": "ak-anchorage",
9
+ "state": "AK",
10
+ "stateName": "Alaska",
11
+ "stateSlug": "alaska",
12
+ "county": "Anchorage",
13
+ "countySlug": "anchorage-municipality",
14
+ "countyFips": "02020",
15
+ "hasPublicRest": true,
16
+ "endpoints": [
17
+ {
18
+ "url": "https://services1.arcgis.com/7HDiw78fcUiM2BWn/arcgis/rest/services/AK_Parcels/FeatureServer/0",
19
+ "serviceType": "FeatureServer",
20
+ "layerIndex": 0,
21
+ "layerName": "AK_Parcels",
22
+ "supportsQuery": true,
23
+ "corsEnabled": null,
24
+ "searchFields": [
25
+ { "name": "parcel_id", "label": "Parcel ID", "searchable": true },
26
+ { "name": "owner", "label": "Owner Name", "searchable": true },
27
+ { "name": "alt_owner", "label": "Alternate Owner Name", "searchable": true },
28
+ { "name": "property_type", "label": "Property Type (Residential/Commercial/etc.)", "searchable": false },
29
+ { "name": "property_use", "label": "Property Use Description", "searchable": false },
30
+ { "name": "land_value", "label": "Land Value", "searchable": false },
31
+ { "name": "building_value", "label": "Building Value", "searchable": false },
32
+ { "name": "total_value", "label": "Total Assessed Value", "searchable": false },
33
+ { "name": "local_gov", "label": "Local Government (filter: Anchorage Municipality)", "searchable": true }
34
+ ],
35
+ "sampleQuery": "https://services1.arcgis.com/7HDiw78fcUiM2BWn/arcgis/rest/services/AK_Parcels/FeatureServer/0/query?where=UPPER(local_gov)+LIKE+'%25ANCHORAGE%25'+AND+UPPER(owner)+LIKE+UPPER('%25SMITH%25')&outFields=parcel_id,owner,alt_owner,property_type,land_value,total_value,local_gov&returnGeometry=false&f=json&resultRecordCount=10",
36
+ "license": "public",
37
+ "licenseUrl": "https://services1.arcgis.com/7HDiw78fcUiM2BWn/arcgis/rest/services/AK_Parcels/FeatureServer",
38
+ "status": "live",
39
+ "lastVerified": "2026-05-15",
40
+ "verifiedBy": "manual"
41
+ }
42
+ ],
43
+ "contact": {
44
+ "department": "Alaska Statewide Parcel Layer (combined from local government sources)",
45
+ "url": "https://services1.arcgis.com/7HDiw78fcUiM2BWn/arcgis/rest/services/AK_Parcels/FeatureServer",
46
+ "email": null
47
+ },
48
+ "notes": "15 fields confirmed: OBJECTID, parcel_id, owner, alt_owner, property_type, property_use, land_value, building_value, total_value, local_gov, datetime_processed, feature_id, Shape__Area, Shape__Length, GlobalID. This is the Alaska Statewide Parcel FeatureServer, combining parcel data from various local government bodies in Alaska. Filter by local_gov field, use UPPER(local_gov) LIKE '%ANCHORAGE%' for Anchorage Municipality parcels (confirmed returning real parcels including United Airlines, residential, etc.). Owner query confirmed working. NOTE: Alaska does not have counties. It has boroughs and a small number of unified municipalities. Anchorage is officially the Municipality of Anchorage (FIPS 02020). This statewide service also covers Fairbanks North Star Borough, Matanuska-Susitna Borough, and other AK jurisdictions via the local_gov field. Coverage and completeness vary by participating jurisdiction."
49
+ }
50
+ ]
51
+ }