# Parcel lines

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](https://pinsharing.com/pricing).

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

```bash
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

```bash
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

```bash
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

| Parameter | Meaning |
| --- | --- |
| `lat`, `lon` | A point inside the parcel (WGS84). Geocode an address first if you only have the address. |
| `bbox` | `min_lon,min_lat,max_lon,max_lat`, up to 1 km² |
| `geometry` | `full` (default), `simplified` (about 1 m, much smaller) or `none` |
| `limit` | bbox 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](https://pinsharing.com/docs/mcp). 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.

| Source | Licence | Attribution to show |
| --- | --- | --- |
| North Carolina statewide parcels (NC OneMap) | [NC OneMap free and unrestricted use policy](https://www.nconemap.gov/pages/terms) | Parcels: 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)](https://datacatalog.cookcountyil.gov/Boundaries-Districts/ccgisdata-Parcel-2020/2yvh-uwrw) | Parcels: Cook County, Illinois (2020 tax parcels, public domain) |
| Kendall County, IL parcels (Kendall County GIS) | [CC0 (Kendall County Open GeoData)](https://geodata.kendallcountyil.gov/catalog/vector/parcels.html) | 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](https://pinsharing.com/terms#parcels).

---
Source: https://pinsharing.com/docs/parcels · Map data © OpenStreetMap contributors · Index: https://pinsharing.com/llms.txt
