@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/LICENSE +21 -0
- package/README.md +91 -0
- package/data/arizona.json +55 -0
- package/data/california.json +82 -0
- package/data/colorado.json +56 -0
- package/data/florida.json +171 -0
- package/data/georgia.json +51 -0
- package/data/illinois.json +332 -0
- package/data/index.json +61 -0
- package/data/minnesota.json +50 -0
- package/data/nevada.json +47 -0
- package/data/new-york.json +79 -0
- package/data/north-carolina.json +52 -0
- package/data/ohio.json +97 -0
- package/data/pennsylvania.json +86 -0
- package/data/texas.json +133 -0
- package/data/virginia.json +46 -0
- package/data/washington.json +45 -0
- package/dist/index.cjs +1564 -0
- package/dist/index.d.cts +113 -0
- package/dist/index.d.ts +113 -0
- package/dist/index.js +1552 -0
- package/package.json +68 -0
package/LICENSE
ADDED
|
@@ -0,0 +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.
|
package/README.md
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
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. Build a parcel-lookup deep-link
|
|
49
|
+
|
|
50
|
+
```ts
|
|
51
|
+
import { findCounty, buildParcelLookupDeepLink } from "@urbankitstudio/atlas";
|
|
52
|
+
|
|
53
|
+
const kane = findCounty("illinois", "kane-county")!;
|
|
54
|
+
const link = buildParcelLookupDeepLink(kane.endpoints[0]);
|
|
55
|
+
// → https://urbankitstudio.com/tools/parcel-lookup?endpoint=https%3A%2F%2F...&fieldHint=TaxName
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## API
|
|
59
|
+
|
|
60
|
+
| Function | Returns |
|
|
61
|
+
|---|---|
|
|
62
|
+
| `listStates()` | `StateIndexEntry[]` — all 50 states + `populated` flag |
|
|
63
|
+
| `findState(stateSlug)` | `StateFile \| undefined` |
|
|
64
|
+
| `findCounty(stateSlug, countySlug)` | `CountyRecord \| undefined` |
|
|
65
|
+
| `listCountiesByState(stateSlug)` | `CountyRecord[]` |
|
|
66
|
+
| `buildParcelLookupDeepLink(endpoint)` | URL string into the UrbanKit lookup tool |
|
|
67
|
+
| `slugify(s)`, `countySlugFromName(s)` | string helpers matching the atlas slug convention |
|
|
68
|
+
| `statePath(slug)`, `countyPath(state, county)` | URL paths under `/parcel-atlas` |
|
|
69
|
+
|
|
70
|
+
The full typed root is also exported as `atlas`:
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
import { atlas } from "@urbankitstudio/atlas";
|
|
74
|
+
|
|
75
|
+
atlas.version; // string
|
|
76
|
+
atlas.lastUpdated; // ISO date
|
|
77
|
+
atlas.totals; // { states, counties, endpoints }
|
|
78
|
+
atlas.byStateSlug; // Map<stateSlug, StateFile>
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Coverage today
|
|
82
|
+
|
|
83
|
+
The atlas currently bundles 15 populated states (Arizona, California, Colorado, Florida, Georgia, Illinois, Minnesota, Nevada, New York, North Carolina, Ohio, Pennsylvania, Texas, Virginia, Washington) covering the largest counties in each. The remaining states are listed in the index with `populated: false`.
|
|
84
|
+
|
|
85
|
+
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.
|
|
86
|
+
|
|
87
|
+
The live, browseable atlas lives at [urbankitstudio.com/parcel-atlas](https://urbankitstudio.com/parcel-atlas).
|
|
88
|
+
|
|
89
|
+
## License
|
|
90
|
+
|
|
91
|
+
MIT — see [LICENSE](./LICENSE).
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
{
|
|
2
|
+
"stateSlug": "arizona",
|
|
3
|
+
"stateName": "Arizona",
|
|
4
|
+
"stateAbbrev": "AZ",
|
|
5
|
+
"lastUpdated": "2026-05-11",
|
|
6
|
+
"counties": [
|
|
7
|
+
{
|
|
8
|
+
"id": "az-maricopa",
|
|
9
|
+
"state": "AZ",
|
|
10
|
+
"stateName": "Arizona",
|
|
11
|
+
"stateSlug": "arizona",
|
|
12
|
+
"county": "Maricopa",
|
|
13
|
+
"countySlug": "maricopa-county",
|
|
14
|
+
"countyFips": "04013",
|
|
15
|
+
"hasPublicRest": true,
|
|
16
|
+
"endpoints": [
|
|
17
|
+
{
|
|
18
|
+
"url": "https://gis.mcassessor.maricopa.gov/arcgis/rest/services/MaricopaDynamicQueryService/MapServer/3",
|
|
19
|
+
"serviceType": "MapServer",
|
|
20
|
+
"layerIndex": 3,
|
|
21
|
+
"layerName": "Parcels",
|
|
22
|
+
"supportsQuery": true,
|
|
23
|
+
"corsEnabled": null,
|
|
24
|
+
"searchFields": [
|
|
25
|
+
{ "name": "APN", "label": "Assessor Parcel Number (APN)", "searchable": true },
|
|
26
|
+
{ "name": "APN_DASH", "label": "APN with dashes", "searchable": true },
|
|
27
|
+
{ "name": "OWNER_NAME", "label": "Owner Name", "searchable": true },
|
|
28
|
+
{ "name": "MAIL_ADDR1", "label": "Mailing Address 1", "searchable": true },
|
|
29
|
+
{ "name": "MAIL_ADDR2", "label": "Mailing Address 2", "searchable": true },
|
|
30
|
+
{ "name": "MAIL_CITY", "label": "Mailing City", "searchable": false },
|
|
31
|
+
{ "name": "MAIL_STATE", "label": "Mailing State", "searchable": false },
|
|
32
|
+
{ "name": "PHYSICAL_ADDRESS", "label": "Physical Address (combined)", "searchable": true },
|
|
33
|
+
{ "name": "PHYSICAL_CITY", "label": "Physical City", "searchable": false },
|
|
34
|
+
{ "name": "SALE_DATE", "label": "Sale Date", "searchable": false },
|
|
35
|
+
{ "name": "SALE_PRICE", "label": "Sale Price", "searchable": false },
|
|
36
|
+
{ "name": "FCV_CUR", "label": "Full Cash Value (current year)", "searchable": false },
|
|
37
|
+
{ "name": "LPV_CUR", "label": "Limited Property Value (current)", "searchable": false }
|
|
38
|
+
],
|
|
39
|
+
"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",
|
|
40
|
+
"license": "public",
|
|
41
|
+
"licenseUrl": "https://maps.mcassessor.maricopa.gov/",
|
|
42
|
+
"status": "live",
|
|
43
|
+
"lastVerified": "2026-05-11",
|
|
44
|
+
"verifiedBy": "manual"
|
|
45
|
+
}
|
|
46
|
+
],
|
|
47
|
+
"contact": {
|
|
48
|
+
"department": "Maricopa County Assessor's Office — GIS Division",
|
|
49
|
+
"url": "https://maps.mcassessor.maricopa.gov/",
|
|
50
|
+
"email": null
|
|
51
|
+
},
|
|
52
|
+
"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')."
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
{
|
|
2
|
+
"stateSlug": "california",
|
|
3
|
+
"stateName": "California",
|
|
4
|
+
"stateAbbrev": "CA",
|
|
5
|
+
"lastUpdated": "2026-05-15",
|
|
6
|
+
"counties": [
|
|
7
|
+
{
|
|
8
|
+
"id": "ca-los-angeles",
|
|
9
|
+
"state": "CA",
|
|
10
|
+
"stateName": "California",
|
|
11
|
+
"stateSlug": "california",
|
|
12
|
+
"county": "Los Angeles",
|
|
13
|
+
"countySlug": "los-angeles-county",
|
|
14
|
+
"countyFips": "06037",
|
|
15
|
+
"hasPublicRest": true,
|
|
16
|
+
"endpoints": [
|
|
17
|
+
{
|
|
18
|
+
"url": "https://public.gis.lacounty.gov/public/rest/services/LACounty_Cache/LACounty_Parcel/MapServer/0",
|
|
19
|
+
"serviceType": "MapServer",
|
|
20
|
+
"layerIndex": 0,
|
|
21
|
+
"layerName": "LA County Parcel",
|
|
22
|
+
"supportsQuery": true,
|
|
23
|
+
"corsEnabled": null,
|
|
24
|
+
"searchFields": [
|
|
25
|
+
{ "name": "AIN", "label": "Assessor Identification Number (AIN)", "searchable": true },
|
|
26
|
+
{ "name": "SitusFullAddress", "label": "Situs Address", "searchable": true }
|
|
27
|
+
],
|
|
28
|
+
"sampleQuery": "https://public.gis.lacounty.gov/public/rest/services/LACounty_Cache/LACounty_Parcel/MapServer/0/query?where=AIN%3D%274321002009%27&outFields=*&f=json",
|
|
29
|
+
"license": "public",
|
|
30
|
+
"licenseUrl": null,
|
|
31
|
+
"status": "unverified",
|
|
32
|
+
"lastVerified": "2026-05-07",
|
|
33
|
+
"verifiedBy": "manual"
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"contact": {
|
|
37
|
+
"department": "Los Angeles County GIS",
|
|
38
|
+
"url": "https://egis-lacounty.hub.arcgis.com/",
|
|
39
|
+
"email": null
|
|
40
|
+
},
|
|
41
|
+
"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 — for owner search, use the Assessor's portal."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"id": "ca-sonoma",
|
|
45
|
+
"state": "CA",
|
|
46
|
+
"stateName": "California",
|
|
47
|
+
"stateSlug": "california",
|
|
48
|
+
"county": "Sonoma",
|
|
49
|
+
"countySlug": "sonoma-county",
|
|
50
|
+
"countyFips": "06097",
|
|
51
|
+
"hasPublicRest": true,
|
|
52
|
+
"endpoints": [
|
|
53
|
+
{
|
|
54
|
+
"url": "https://socogis.sonomacounty.ca.gov/map/rest/services/OWTSPublic/Cities_GIS_Parcel_Base/FeatureServer/0",
|
|
55
|
+
"serviceType": "FeatureServer",
|
|
56
|
+
"layerIndex": 0,
|
|
57
|
+
"layerName": "Cities GIS Parcel Base",
|
|
58
|
+
"supportsQuery": true,
|
|
59
|
+
"corsEnabled": null,
|
|
60
|
+
"searchFields": [
|
|
61
|
+
{ "name": "APN", "label": "Assessor's Parcel Number", "searchable": true },
|
|
62
|
+
{ "name": "SitusFormatted1", "label": "Situs Address (line 1)", "searchable": true },
|
|
63
|
+
{ "name": "SitusStreetName", "label": "Situs Street Name", "searchable": true },
|
|
64
|
+
{ "name": "SitusCity", "label": "Situs City", "searchable": true }
|
|
65
|
+
],
|
|
66
|
+
"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",
|
|
67
|
+
"license": "public",
|
|
68
|
+
"licenseUrl": null,
|
|
69
|
+
"status": "live",
|
|
70
|
+
"lastVerified": "2026-05-15",
|
|
71
|
+
"verifiedBy": "automated"
|
|
72
|
+
}
|
|
73
|
+
],
|
|
74
|
+
"contact": {
|
|
75
|
+
"department": "Sonoma County GIS",
|
|
76
|
+
"url": "https://gis-sonomacounty.hub.arcgis.com/",
|
|
77
|
+
"email": null
|
|
78
|
+
},
|
|
79
|
+
"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 — the old single SitusAddress field was replaced by SitusFormatted1/SitusFormatted2 plus structured parts (SitusStreetNo, SitusDirection, SitusStreetName, SitusStreetType, SitusUnitNumber, SitusCity)."
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"stateSlug": "colorado",
|
|
3
|
+
"stateName": "Colorado",
|
|
4
|
+
"stateAbbrev": "CO",
|
|
5
|
+
"lastUpdated": "2026-05-11",
|
|
6
|
+
"counties": [
|
|
7
|
+
{
|
|
8
|
+
"id": "co-denver",
|
|
9
|
+
"state": "CO",
|
|
10
|
+
"stateName": "Colorado",
|
|
11
|
+
"stateSlug": "colorado",
|
|
12
|
+
"county": "Denver",
|
|
13
|
+
"countySlug": "denver-county",
|
|
14
|
+
"countyFips": "08031",
|
|
15
|
+
"hasPublicRest": true,
|
|
16
|
+
"endpoints": [
|
|
17
|
+
{
|
|
18
|
+
"url": "https://gis.colorado.gov/public/rest/services/Address_and_Parcel/Colorado_Public_Parcels/FeatureServer/0",
|
|
19
|
+
"serviceType": "FeatureServer",
|
|
20
|
+
"layerIndex": 0,
|
|
21
|
+
"layerName": "Colorado_Public_Parcel_Composite",
|
|
22
|
+
"supportsQuery": true,
|
|
23
|
+
"corsEnabled": null,
|
|
24
|
+
"searchFields": [
|
|
25
|
+
{ "name": "parcel_id", "label": "Parcel ID", "searchable": true },
|
|
26
|
+
{ "name": "countyName", "label": "County Name (filter: 'Denver')", "searchable": true },
|
|
27
|
+
{ "name": "countyFips", "label": "County FIPS Code (filter: '031')", "searchable": true },
|
|
28
|
+
{ "name": "situsAdd", "label": "Situs Address", "searchable": true },
|
|
29
|
+
{ "name": "sitAddCty", "label": "Situs City", "searchable": false },
|
|
30
|
+
{ "name": "sitAddZip", "label": "Situs ZIP", "searchable": false },
|
|
31
|
+
{ "name": "owner", "label": "Owner Name", "searchable": true },
|
|
32
|
+
{ "name": "owner2", "label": "Owner Name 2", "searchable": true },
|
|
33
|
+
{ "name": "ownerAdd", "label": "Owner Address", "searchable": false },
|
|
34
|
+
{ "name": "legalDesc", "label": "Legal Description", "searchable": false },
|
|
35
|
+
{ "name": "zoningCode", "label": "Zoning Code", "searchable": false },
|
|
36
|
+
{ "name": "saleDate", "label": "Sale Date", "searchable": false },
|
|
37
|
+
{ "name": "salePrice", "label": "Sale Price", "searchable": false },
|
|
38
|
+
{ "name": "apprValTot", "label": "Total Appraised Value", "searchable": false }
|
|
39
|
+
],
|
|
40
|
+
"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",
|
|
41
|
+
"license": "public",
|
|
42
|
+
"licenseUrl": "https://gis.colorado.gov/",
|
|
43
|
+
"status": "live",
|
|
44
|
+
"lastVerified": "2026-05-11",
|
|
45
|
+
"verifiedBy": "manual"
|
|
46
|
+
}
|
|
47
|
+
],
|
|
48
|
+
"contact": {
|
|
49
|
+
"department": "Colorado Governor's Office of Information Technology (OIT) — Colorado Geographic Information Systems Program",
|
|
50
|
+
"url": "https://gis.colorado.gov/",
|
|
51
|
+
"email": null
|
|
52
|
+
},
|
|
53
|
+
"notes": "34 fields confirmed including parcel_id, countyName, countyFips, situsAdd, sitAddCty, sitAddZip, owner, owner2, ownerAdd, ownAddCty, ownAddStt, ownAddZip, legalDesc, landSqft, landAcres, block, lot, subCode, subName, zoningCode, zoningDesc, landUseCde, landUseDsc, saleDate, salePrice, apprValTot, asedValTot, URL, dateReceived. This is a statewide composite — query by countyName='Denver' OR countyFips='031' (note: FIPS here is the 3-digit county portion, not the full 5-digit). Owner query tested and confirmed with real Denver addresses. This same endpoint covers all 64 Colorado counties; filter by countyName or countyFips for any of them. Denver is a consolidated city-county (countyName='Denver' and cityName='Denver' are the same entity)."
|
|
54
|
+
}
|
|
55
|
+
]
|
|
56
|
+
}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
{
|
|
2
|
+
"stateSlug": "florida",
|
|
3
|
+
"stateName": "Florida",
|
|
4
|
+
"stateAbbrev": "FL",
|
|
5
|
+
"lastUpdated": "2026-05-11",
|
|
6
|
+
"counties": [
|
|
7
|
+
{
|
|
8
|
+
"id": "fl-miami-dade",
|
|
9
|
+
"state": "FL",
|
|
10
|
+
"stateName": "Florida",
|
|
11
|
+
"stateSlug": "florida",
|
|
12
|
+
"county": "Miami-Dade",
|
|
13
|
+
"countySlug": "miami-dade-county",
|
|
14
|
+
"countyFips": "12086",
|
|
15
|
+
"hasPublicRest": true,
|
|
16
|
+
"endpoints": [
|
|
17
|
+
{
|
|
18
|
+
"url": "https://gisweb.miamidade.gov/arcgis/rest/services/MD_LandInformation/MapServer/26",
|
|
19
|
+
"serviceType": "MapServer",
|
|
20
|
+
"layerIndex": 26,
|
|
21
|
+
"layerName": "Parcels @ PaParcel",
|
|
22
|
+
"supportsQuery": true,
|
|
23
|
+
"corsEnabled": null,
|
|
24
|
+
"searchFields": [
|
|
25
|
+
{ "name": "FOLIO", "label": "Folio Number", "searchable": true },
|
|
26
|
+
{ "name": "TRUE_OWNER1", "label": "Owner Name (Primary)", "searchable": true },
|
|
27
|
+
{ "name": "TRUE_OWNER2", "label": "Owner Name 2", "searchable": true },
|
|
28
|
+
{ "name": "TRUE_OWNER3", "label": "Owner Name 3", "searchable": true },
|
|
29
|
+
{ "name": "TRUE_SITE_ADDR", "label": "Site Address", "searchable": true },
|
|
30
|
+
{ "name": "TRUE_SITE_CITY", "label": "Site City", "searchable": true },
|
|
31
|
+
{ "name": "TRUE_SITE_ZIP_CODE", "label": "Site ZIP", "searchable": true },
|
|
32
|
+
{ "name": "TRUE_MAILING_ADDR1", "label": "Mailing Address", "searchable": true }
|
|
33
|
+
],
|
|
34
|
+
"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",
|
|
35
|
+
"license": "public",
|
|
36
|
+
"licenseUrl": "https://gis-mdc.opendata.arcgis.com/",
|
|
37
|
+
"status": "live",
|
|
38
|
+
"lastVerified": "2026-05-11",
|
|
39
|
+
"verifiedBy": "manual"
|
|
40
|
+
}
|
|
41
|
+
],
|
|
42
|
+
"contact": {
|
|
43
|
+
"department": "Miami-Dade County Information Technology Department GIS",
|
|
44
|
+
"url": "https://gis-mdc.opendata.arcgis.com/",
|
|
45
|
+
"email": null
|
|
46
|
+
},
|
|
47
|
+
"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) — point layer, fewer fields."
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
"id": "fl-orange",
|
|
51
|
+
"state": "FL",
|
|
52
|
+
"stateName": "Florida",
|
|
53
|
+
"stateSlug": "florida",
|
|
54
|
+
"county": "Orange",
|
|
55
|
+
"countySlug": "orange-county",
|
|
56
|
+
"countyFips": "12095",
|
|
57
|
+
"hasPublicRest": true,
|
|
58
|
+
"endpoints": [
|
|
59
|
+
{
|
|
60
|
+
"url": "https://www.ocgis.com/arcpub/rest/services/Map_Layers/Parcels/MapServer/0",
|
|
61
|
+
"serviceType": "MapServer",
|
|
62
|
+
"layerIndex": 0,
|
|
63
|
+
"layerName": "Parcels",
|
|
64
|
+
"supportsQuery": true,
|
|
65
|
+
"corsEnabled": null,
|
|
66
|
+
"searchFields": [
|
|
67
|
+
{ "name": "ASSESSMENT_NO", "label": "Assessment Number (Parcel ID)", "searchable": true },
|
|
68
|
+
{ "name": "SITE_ADDRESS", "label": "Site Address", "searchable": true },
|
|
69
|
+
{ "name": "YEAR_BUILT", "label": "Year Built", "searchable": false },
|
|
70
|
+
{ "name": "NBR_BEDROOMS", "label": "Bedrooms", "searchable": false }
|
|
71
|
+
],
|
|
72
|
+
"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",
|
|
73
|
+
"license": "public",
|
|
74
|
+
"licenseUrl": "https://ocgis-datahub-ocfl.hub.arcgis.com/",
|
|
75
|
+
"status": "live",
|
|
76
|
+
"lastVerified": "2026-05-11",
|
|
77
|
+
"verifiedBy": "manual"
|
|
78
|
+
}
|
|
79
|
+
],
|
|
80
|
+
"contact": {
|
|
81
|
+
"department": "Orange County, Florida GIS (OCGIS) / OC Survey Geospatial Services",
|
|
82
|
+
"url": "https://ocgis-datahub-ocfl.hub.arcgis.com/",
|
|
83
|
+
"email": null
|
|
84
|
+
},
|
|
85
|
+
"notes": "Only 6 fields on this public REST endpoint: ASSESSMENT_NO, SITE_ADDRESS, YEAR_BUILT, NBR_BEDROOMS, SHAPE, OBJECTID. Owner name is NOT available on this layer — the public REST endpoint is geometry + parcel ID + limited building characteristics only. Owner data lives in the OCPA (Orange County Property Appraiser) portal at ocpa.com and is not exposed via public REST. A second service at ocgis4.ocfl.net/arcgis/rest/services/Public_Dynamic/MapServer exists for county facilities but not full parcel attributes."
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
"id": "fl-hillsborough",
|
|
89
|
+
"state": "FL",
|
|
90
|
+
"stateName": "Florida",
|
|
91
|
+
"stateSlug": "florida",
|
|
92
|
+
"county": "Hillsborough",
|
|
93
|
+
"countySlug": "hillsborough-county",
|
|
94
|
+
"countyFips": "12057",
|
|
95
|
+
"hasPublicRest": true,
|
|
96
|
+
"endpoints": [
|
|
97
|
+
{
|
|
98
|
+
"url": "https://www25.swfwmd.state.fl.us/arcgiswmis/rest/services/r27/LocationInfo/MapServer/71",
|
|
99
|
+
"serviceType": "MapServer",
|
|
100
|
+
"layerIndex": 71,
|
|
101
|
+
"layerName": "Hillsborough County Parcels",
|
|
102
|
+
"supportsQuery": true,
|
|
103
|
+
"corsEnabled": null,
|
|
104
|
+
"searchFields": [
|
|
105
|
+
{ "name": "PARNO", "label": "Parcel Number", "searchable": true },
|
|
106
|
+
{ "name": "OWNNAME", "label": "Owner Name", "searchable": true },
|
|
107
|
+
{ "name": "MAILADD", "label": "Mailing Address", "searchable": true },
|
|
108
|
+
{ "name": "STNAME", "label": "State", "searchable": false },
|
|
109
|
+
{ "name": "CNTYFIPS", "label": "County FIPS Code", "searchable": false },
|
|
110
|
+
{ "name": "OWNTYPE", "label": "Owner Type", "searchable": false },
|
|
111
|
+
{ "name": "PARUSEDESC", "label": "Parcel Use Description", "searchable": false },
|
|
112
|
+
{ "name": "PARVAL", "label": "Parcel Value", "searchable": false }
|
|
113
|
+
],
|
|
114
|
+
"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",
|
|
115
|
+
"license": "public",
|
|
116
|
+
"licenseUrl": "https://www.swfwmd.state.fl.us/resources/data-maps",
|
|
117
|
+
"status": "live",
|
|
118
|
+
"lastVerified": "2026-05-11",
|
|
119
|
+
"verifiedBy": "manual"
|
|
120
|
+
}
|
|
121
|
+
],
|
|
122
|
+
"contact": {
|
|
123
|
+
"department": "Southwest Florida Water Management District (SWFWMD) — hosts the FL regional parcel layer",
|
|
124
|
+
"url": "https://www.swfwmd.state.fl.us/resources/data-maps",
|
|
125
|
+
"email": null
|
|
126
|
+
},
|
|
127
|
+
"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 — only their browser-based property search at gis.hcpafl.org/propertysearch/."
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
"id": "fl-broward",
|
|
131
|
+
"state": "FL",
|
|
132
|
+
"stateName": "Florida",
|
|
133
|
+
"stateSlug": "florida",
|
|
134
|
+
"county": "Broward",
|
|
135
|
+
"countySlug": "broward-county",
|
|
136
|
+
"countyFips": "12011",
|
|
137
|
+
"hasPublicRest": true,
|
|
138
|
+
"endpoints": [
|
|
139
|
+
{
|
|
140
|
+
"url": "https://services9.arcgis.com/Gh9awoU677aKree0/arcgis/rest/services/Florida_Statewide_Cadastral/FeatureServer/0",
|
|
141
|
+
"serviceType": "FeatureServer",
|
|
142
|
+
"layerIndex": 0,
|
|
143
|
+
"layerName": "FDOR Cadastral 2025",
|
|
144
|
+
"supportsQuery": true,
|
|
145
|
+
"corsEnabled": null,
|
|
146
|
+
"searchFields": [
|
|
147
|
+
{ "name": "PARCEL_ID", "label": "Parcel ID", "searchable": true },
|
|
148
|
+
{ "name": "CO_NO", "label": "County Number (11 = Broward)", "searchable": true },
|
|
149
|
+
{ "name": "OWN_NAME", "label": "Owner Name", "searchable": true },
|
|
150
|
+
{ "name": "OWN_ADDR1", "label": "Owner Address 1", "searchable": true },
|
|
151
|
+
{ "name": "PHY_ADDR1", "label": "Physical Address", "searchable": true },
|
|
152
|
+
{ "name": "PHY_CITY", "label": "Physical City", "searchable": true },
|
|
153
|
+
{ "name": "PHY_ZIPCD", "label": "Physical ZIP", "searchable": true }
|
|
154
|
+
],
|
|
155
|
+
"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",
|
|
156
|
+
"license": "public",
|
|
157
|
+
"licenseUrl": "https://gis.fdot.gov/arcgis/rest/services/Parcels/FeatureServer",
|
|
158
|
+
"status": "live",
|
|
159
|
+
"lastVerified": "2026-05-11",
|
|
160
|
+
"verifiedBy": "manual"
|
|
161
|
+
}
|
|
162
|
+
],
|
|
163
|
+
"contact": {
|
|
164
|
+
"department": "Florida Department of Revenue / FDOT — Florida Statewide Cadastral (all 67 counties)",
|
|
165
|
+
"url": "https://www.floridarevenue.com/property/Pages/DataPortal.aspx",
|
|
166
|
+
"email": null
|
|
167
|
+
},
|
|
168
|
+
"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 — the county's own MapServer exposes FOLIO + geometry only."
|
|
169
|
+
}
|
|
170
|
+
]
|
|
171
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
{
|
|
2
|
+
"stateSlug": "georgia",
|
|
3
|
+
"stateName": "Georgia",
|
|
4
|
+
"stateAbbrev": "GA",
|
|
5
|
+
"lastUpdated": "2026-05-11",
|
|
6
|
+
"counties": [
|
|
7
|
+
{
|
|
8
|
+
"id": "ga-fulton",
|
|
9
|
+
"state": "GA",
|
|
10
|
+
"stateName": "Georgia",
|
|
11
|
+
"stateSlug": "georgia",
|
|
12
|
+
"county": "Fulton",
|
|
13
|
+
"countySlug": "fulton-county",
|
|
14
|
+
"countyFips": "13121",
|
|
15
|
+
"hasPublicRest": true,
|
|
16
|
+
"endpoints": [
|
|
17
|
+
{
|
|
18
|
+
"url": "https://gismaps.fultoncountyga.gov/arcgispub2/rest/services/PropertyMapViewer/PropertyMapViewer/MapServer/11",
|
|
19
|
+
"serviceType": "MapServer",
|
|
20
|
+
"layerIndex": 11,
|
|
21
|
+
"layerName": "Tax Parcel",
|
|
22
|
+
"supportsQuery": true,
|
|
23
|
+
"corsEnabled": null,
|
|
24
|
+
"searchFields": [
|
|
25
|
+
{ "name": "ParcelID", "label": "Parcel ID", "searchable": true },
|
|
26
|
+
{ "name": "Owner", "label": "Owner Name", "searchable": true },
|
|
27
|
+
{ "name": "Address", "label": "Site Address (full)", "searchable": true },
|
|
28
|
+
{ "name": "AddrNumber", "label": "Address Number", "searchable": true },
|
|
29
|
+
{ "name": "AddrStreet", "label": "Street Name", "searchable": true },
|
|
30
|
+
{ "name": "OwnerAddr1", "label": "Owner Mailing Address 1", "searchable": false },
|
|
31
|
+
{ "name": "OwnerAddr2", "label": "Owner Mailing Address 2", "searchable": false },
|
|
32
|
+
{ "name": "TaxYear", "label": "Tax Year", "searchable": false },
|
|
33
|
+
{ "name": "TaxDist", "label": "Tax District", "searchable": false }
|
|
34
|
+
],
|
|
35
|
+
"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",
|
|
36
|
+
"license": "public",
|
|
37
|
+
"licenseUrl": "https://gisdata.fultoncountyga.gov/",
|
|
38
|
+
"status": "live",
|
|
39
|
+
"lastVerified": "2026-05-11",
|
|
40
|
+
"verifiedBy": "manual"
|
|
41
|
+
}
|
|
42
|
+
],
|
|
43
|
+
"contact": {
|
|
44
|
+
"department": "Fulton County GIS (Department of Information Technology)",
|
|
45
|
+
"url": "https://fultoncountyga.gov/maps",
|
|
46
|
+
"email": null
|
|
47
|
+
},
|
|
48
|
+
"notes": "372,900 polygon tax parcels covering Atlanta and the rest of Fulton County. Verified 2026-05-11: UPPER(Owner) LIKE '%SMITH%' returns real owners with full Atlanta-area site addresses (e.g., '6760 JULES TRC', '528 SOUTH MAIN ST'). Owner names use last-name-first concatenated format (e.g., 'SMITH FAITH L SMITH MARIO D' for joint ownership). Both site address AND owner mailing address are exposed. Layer 11 of the PropertyMapViewer composite — neighbor layers include 'Tax Parcel Address Labels' (id 9) for cartographic use."
|
|
49
|
+
}
|
|
50
|
+
]
|
|
51
|
+
}
|