Get a free key

Parcel lines

On this page
The examples use YOUR_KEY. Get a free key to run them; it takes about a minute and needs no card.Get a free key

Parcel lines are the property boundaries counties draw for tax maps. PinSharing returns the parcel at a point or by its id, with its boundary, the county parcel number (APN) and its area, and draws parcel lines on maps. They are included with the Growth plan and up.

Open records only, and yours to keep. We build parcel data only from county and state publishers whose terms allow redistribution, and we keep a licence record for every source. Results from those sources may be stored indefinitely on paid plans. Owner names, mailing addresses, sale prices and assessed values are never included.

Parcel at a point

curl "https://api.pinsharing.com/v1/parcels?lat=35.78035&lon=-78.63915&key=YOUR_KEY"
{
  "parcel": {
    "type": "Feature",
    "id": "us-37183-1703790137",
    "bbox": [-78.640007, 35.779656, -78.638176, 35.781147],
    "geometry": { "type": "Polygon", "coordinates": [[[-78.6399, 35.7797], …]] },
    "properties": {
      "parcel_id": "us-37183-1703790137", "apn": "1703790137", "county_fips": "37183", "state": "NC",
      "area_m2": 25107.9, "area_acres": 6.204, "source": "nc-onemap", "as_of": "2026-11-06", "keep_forever": true
    }
  },
  "attribution": ["Parcels: NC OneMap (NC Center for Geographic Information and Analysis), from North Carolina county data"],
  "license": "You may store these results indefinitely; the source is open-licensed.",
  "notice": "Parcel lines come from county and state public records. They are approximate and are not a survey or a legal boundary."
}

parcel is null when no parcel covers the point (a street, water, or an area we don't cover yet). Each call counts 1 address lookup.

Parcel by id

curl "https://api.pinsharing.com/v1/parcels/us-37183-1703790137?geometry=simplified&key=YOUR_KEY"

A parcel_id is us-, the 5-digit county FIPS code and the county's parcel number with punctuation removed. It stays the same across data refreshes unless the county renumbers the parcel. 1 address lookup; 404 if there is no such parcel.

Parcels in an area

curl "https://api.pinsharing.com/v1/parcels?bbox=-78.642,35.778,-78.636,35.782&geometry=none&key=YOUR_KEY"

Returns a GeoJSON FeatureCollection of up to 200 parcels (limit lowers it) in a box of at most 1 km². truncated: true means there were more. Counts 1 address lookup per 10 parcels returned (at least 1). For whole counties or states, ask sales@pinsharing.com about bulk data.

Parameters

ParameterMeaning
lat, lonA point inside the parcel (WGS84). Geocode an address first if you only have the address.
bboxmin_lon,min_lat,max_lon,max_lat, up to 1 km²
geometryfull (default), simplified (about 1 m, much smaller) or none
limitbbox only: 1 to 200

On maps

  • Static images: parcels=1 draws parcel lines under the labels (visible from zoom 13); parcel=<parcel_id> fills one parcel, and fits the view to it if you give no center. Both count as 1 static image.
  • Not with privacy areas: a request with area= and parcels gets 409 privacy_mode_active, because a parcel would reveal the exact property the area hides.
  • Vector overlay (MapLibre): TileJSON at /v1/tiles/parcels.json, layer parcels with id and apn, zoom 13 to 16 (overzoom beyond).
  • Raster overlay: transparent PNG tiles at /v1/tiles/parcels/{z}/{x}/{y}.png (add @2x for sharp screens), zoom 13 to 20, over any basemap.
https://api.pinsharing.com/v1/static?parcel=us-37183-1703790137&size=600x400&key=YOUR_KEY
https://api.pinsharing.com/v1/static?center=35.78035,-78.63915&zoom=17&parcels=1&key=YOUR_KEY
map.on("load", () => {
  map.addSource("parcels", { type: "vector", url: "https://api.pinsharing.com/v1/tiles/parcels.json?key=YOUR_KEY" });
  map.addLayer({ id: "parcels", type: "line", source: "parcels", "source-layer": "parcels",
                 paint: { "line-color": "#9a6b3c", "line-width": ["interpolate", ["linear"], ["zoom"], 13, 0.3, 18, 1.5] } });
});
L.tileLayer("https://api.pinsharing.com/v1/tiles/parcels/{z}/{x}/{y}@2x.png?key=YOUR_KEY", {
  minZoom: 13, maxZoom: 20, attribution: "Parcels: public records"
}).addTo(map);

Overlay tiles count as map tiles. AI assistants can use the parcel_lookup tool and the parcels and parcel_id options of static_map on the MCP server. Reverse lookups accept include=parcel to add the parcel to the answer (1 more address lookup).

Coverage (November 2026)

About 7.3 million parcels from these sources; GET /v1/parcels/coverage (no key) lists what is live now. We add counties and states as their publishers' terms allow.

SourceLicenceAttribution to show
North Carolina statewide parcels (NC OneMap)NC OneMap free and unrestricted use policyParcels: NC OneMap (NC Center for Geographic Information and Analysis), from North Carolina county data
Cook County, IL tax parcels, tax year 2020 (Cook County GIS)Public Domain (Cook County Open Data catalog licence field)Parcels: Cook County, Illinois (2020 tax parcels, public domain)
Kendall County, IL parcels (Kendall County GIS)CC0 (Kendall County Open GeoData)Parcels: Kendall County, Illinois GIS (CC0)

Attribution and limits

  • Show the attribution text from the response (or the coverage list) near parcel data, together with the OpenStreetMap attribution for the map.
  • Parcel lines are approximate. They come from tax maps, are not a survey and must not be used to locate legal property lines.
  • Don't use parcel data to identify, contact or harass property owners. See Terms, section 4.
↑ Contents