St. Louis County, MO parcel and infrastructure data API

Korzy has about 400,000 parcel records for St. Louis County, Missouri, with source updates through November 2026. Nearly every record carries owner names, values, land use, year built and building size. In and around the county the API also maps 2 data-center projects (1 operating); 6 ports with reported cargo; and about 210 miles of active rail. Look up any parcel by address or coordinates, then check water, sewer and infrastructure context at the same point.

Parcel coverage in St. Louis County

About 400,000 parcel records with boundaries, situs addresses and parcel numbers, with the latest source update from November 2026. Each record has a stable korzy_id you can store and look up again with /api/parcel-record. Share of records with each field:

FieldCoverageShare
Situs addressNearly all · 100%
Owner nameNearly all · 95%
Assessed or market valueNearly all · 97%
Year builtNearly all · 97%
Building sizeNearly all · 95%
Last saleNot published
Land useNearly all · 97%
ZoningNot published

Owner name and mailing address are returned with include_owner=true, which doubles a request's cost: a parcel record costs 2 credits instead of 1. 95% of St. Louis County records carry an owner name.

Infrastructure in and around St. Louis County

Substations and transmission

About 75 in-service substations, 2 rated 230 kV or higher.

About 340 miles of transmission lines: about 290 mi at 100–161 kV; about 45 mi at 345 kV.

Water and sewer service

Service areas of about 20 community water systems cover about 75% of the county.

Sewer service areas of about 15 systems cover about 87%.

At a point: /api/utilities/context

Data-center projects

2 tracked projects: 1 operating, 1 proposed. Reported planned capacity: about 300 MW.

Within 10 km of a point: /api/datacenters/context

Flood zones and wetlands

Special flood hazard areas cover about 16% of the county on the current federal flood maps, published October 2026.

Rail, ports and freight

  • About 210 miles of active rail, about 130 of it main line
  • About 110 miles of national freight network highway
  • 6 port areas with reported cargo tonnage

Within 25 km of a point: /api/logistics/context

Example requests for St. Louis County

Real responses from the production API, trimmed to the main fields. Every request needs an API key with api:read; see authentication and credits and limits.

1. Find a parcel by address

/api/search matches 1264 ARCH TER, ARCH TERRACE, MO and returns the parcel's korzy_id, coordinates and record. 1 credit.

curl --fail-with-body -sS --get \
  -H "Authorization: Bearer $KORZY_API_KEY" \
  --data-urlencode 'q=1264 ARCH TER, ARCH TERRACE, MO' \
  https://api.korzy.co/api/search
Python
import os
import requests

response = requests.get(
    "https://api.korzy.co/api/search",
    params={"q": "1264 ARCH TER, ARCH TERRACE, MO"},
    headers={"Authorization": f"Bearer {os.environ['KORZY_API_KEY']}"},
    timeout=30,
)
response.raise_for_status()
parcel = response.json()["results"][0]
print(parcel["korzy_id"], parcel["longitude"], parcel["latitude"])
Response (trimmed)
{
  "results": [
    {
      "korzy_id": "29189-25e23c77bebf38912ce3",
      "address": "1264 ARCH TER",
      "city": "ARCH TERRACE",
      "postcode": "63117",
      "county": "St. Louis",
      "statefp": "29",
      "longitude": -90.3278469735438,
      "latitude": 38.63086405022659,
      "match_type": "exact",
      "parcelid": "20J421431",
      "parceladdr": "1264 ARCH TER",
      "parcelcity": "ARCH TERRACE",
      "situs_zip": "63117",
      "usedesc": "Institution",
      "yearbuilt": 1928,
      "bldgsqft": 6430,
      "taxacres": 2.07,
      "totalvalue": 1647490,
      "land_value_usd": 1803400,
      "improvement_value_usd": 4505100,
      "assessed_value_usd": 1946100,
      "market_value_usd": 6308500,
      "updated": "2026-01-01",
      "geoid": "29189"
    }
  ],
  "truncated": false
}

With include_owner=true (2 credits) the record adds owner fields, shown here as placeholders:

{
  "owner_name": "EXAMPLE HOLDINGS LLC",
  "owner_mailing_address": "100 EXAMPLE ST, SAMPLE CITY, ST 00000"
}

2. Look up the parcel at a point

/api/query/point returns every parcel whose boundary covers the coordinates; here it returns the same record, 29189-25e23c77bebf38912ce3, in records. 1 credit per 10 records requested.

curl --fail-with-body -sS --get \
  -H "Authorization: Bearer $KORZY_API_KEY" \
  --data-urlencode 'longitude=-90.327847' \
  --data-urlencode 'latitude=38.630864' \
  --data-urlencode 'limit=5' \
  https://api.korzy.co/api/query/point
JavaScript
const params = new URLSearchParams({"longitude": "-90.327847", "latitude": "38.630864", "limit": "5"});
const response = await fetch(`https://api.korzy.co/api/query/point?${params}`, {
  headers: { Authorization: `Bearer ${process.env.KORZY_API_KEY}` },
});
if (!response.ok) throw new Error(`Korzy API ${response.status}`);
const { records } = await response.json();
console.log(records.map((record) => record.korzy_id));

3. Check water and sewer service

/api/utilities/context returns the water and sewer service areas at the point and the nearest treatment plants. 1 credit.

curl --fail-with-body -sS --get \
  -H "Authorization: Bearer $KORZY_API_KEY" \
  --data-urlencode 'longitude=-90.327847' \
  --data-urlencode 'latitude=38.630864' \
  https://api.korzy.co/api/utilities/context
Python
import os
import requests

response = requests.get(
    "https://api.korzy.co/api/utilities/context",
    params={"longitude": "-90.327847", "latitude": "38.630864"},
    headers={"Authorization": f"Bearer {os.environ['KORZY_API_KEY']}"},
    timeout=30,
)
response.raise_for_status()
matches = response.json()["matches"]
print([area["name"] for area in matches["water"]])
Response (trimmed)
{
  "longitude": -90.327847,
  "latitude": 38.630864,
  "matches": {
    "water": [
      {
        "feature_id": "water:41084",
        "name": "MO AMERICAN ST LOUIS ST CHARLES COUNTIES",
        "boundary_basis": "System Sourced"
      }
    ],
    "sewer": [
      {
        "feature_id": "sewer:1035",
        "name": "Lemay WWTP",
        "boundary_basis": "Sourced"
      }
    ]
  },
  "nearby_treatment": [
    {
      "feature_id": "treatment:5761",
      "name": "Lemay WWTP",
      "distance_km": 11.984348600861415
    },
    {
      "feature_id": "treatment:15247",
      "name": "MDC Powder Valley Nature Center WWTP",
      "distance_km": 12.050752447444532
    }
  ]
}

St. Louis County data questions

How many parcels in St. Louis County include year built?
About 390,000 of about 400,000 parcel records (97%) include year built.
Does the Korzy API return owner names for St. Louis County parcels?
Yes. 95% of St. Louis County parcel records carry an owner name. Add include_owner=true to a point, search or parcel-record request; it doubles the request's cost, so a single parcel record costs 2 credits.
How many data-center projects are in St. Louis County?
Korzy tracks 2 data-center projects in St. Louis County: 1 operating and 1 proposed. /api/datacenters/context lists projects within 10 km of any point.
Which water systems serve St. Louis County?
Service areas of about 20 community water systems cover about 75% of St. Louis County, and sewer service areas cover about 87%. /api/utilities/context returns the water and sewer matches at a point.
How much of St. Louis County is in a mapped flood zone?
About 16% of St. Louis County's area falls within special flood hazard areas on the current federal flood maps.

More featured counties

All featured Missouri counties

Build on St. Louis County parcel data

Search, point and record lookups work the same in every county Korzy covers. Credits are shared across parcels, utilities, environment, logistics and data-center routes.