@urbankitstudio/atlas
v0.5.0
Published
JS SDK for the UrbanKit County Parcel REST API Atlas — public ArcGIS REST endpoints for US county parcel data, with searchable field metadata, sample queries, and license info.
Maintainers
Readme
@urbankitstudio/atlas
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.
Use it to:
- Look up the parcel REST endpoint for a given US county (e.g. Kane County, IL).
- Discover which fields are searchable on each endpoint (PIN, owner name, address).
- Build deep-links into the UrbanKit parcel lookup tool.
The data is the same set powering urbankitstudio.com/parcel-atlas, bundled offline so your code does not need to make a runtime network request.
Install
npm i @urbankitstudio/atlasWorks 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.
Quick start
1. List populated states
import { listStates } from "@urbankitstudio/atlas";
const populated = listStates().filter((s) => s.populated);
// [{ slug: "arizona", name: "Arizona", abbrev: "AZ", countyCount: 1, ... }, ...]2. Look up a county by slug
import { findCounty } from "@urbankitstudio/atlas";
const kane = findCounty("illinois", "kane-county");
if (kane) {
console.log(kane.endpoints[0].url);
// → https://gis.kanecountyil.gov/...
const pin = kane.endpoints[0].searchFields.find((f) => f.name === "PIN");
console.log(pin?.label);
// → "Parcel Identification Number (PIN)"
}3. Look up a county by FIPS code
import { findCountyByFips } from "@urbankitstudio/atlas";
const kane = findCountyByFips("17089"); // 5-digit county FIPS (state + county)
if (kane) {
console.log(kane.county, kane.stateSlug);
// → Kane illinois
}
// Unknown, malformed, or non-5-digit input returns undefined (never throws).4. Build a parcel-lookup deep-link
import { findCounty, buildParcelLookupDeepLink } from "@urbankitstudio/atlas";
const kane = findCounty("illinois", "kane-county")!;
const link = buildParcelLookupDeepLink(kane.endpoints[0]);
// → https://urbankitstudio.com/tools/parcel-lookup?endpoint=https%3A%2F%2F...&fieldHint=TaxNameAPI
| Function | Returns |
|---|---|
| listStates() | StateIndexEntry[] — all 50 states + populated flag |
| findState(stateSlug) | StateFile \| undefined |
| findCounty(stateSlug, countySlug) | CountyRecord \| undefined |
| findCountyByFips(fips) | CountyRecord \| undefined — match by 5-digit county FIPS |
| listCountiesByState(stateSlug) | CountyRecord[] |
| buildParcelLookupDeepLink(endpoint) | URL string into the UrbanKit lookup tool |
| slugify(s), countySlugFromName(s) | string helpers matching the atlas slug convention |
| statePath(slug), countyPath(state, county) | URL paths under /parcel-atlas |
The full typed root is also exported as atlas:
import { atlas } from "@urbankitstudio/atlas";
atlas.version; // string
atlas.lastUpdated; // ISO date
atlas.totals; // { states, counties, endpoints }
atlas.byStateSlug; // Map<stateSlug, StateFile>Coverage today
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.
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.
The live, browseable atlas lives at urbankitstudio.com/parcel-atlas.
License
MIT — see LICENSE. © 2026 Leo Yong.
This package's atlas dataset (the open discovery layer — county → REST endpoint mappings and field metadata) is provided under MIT. Live, always-fresh and enriched data — geocoding, address→parcel resolution, bulk enrichment, and the data-availability SLA — are the paid UrbanKit Studio API.
