Search
1 token per requestSearch for states, Census places, counties, PLSS townships, PLSS sections, addresses, and parcels across the United States. Supports no-types search, fuzzy matching, address geocoding, parcel ID lookups, and zoom-to-result metadata.
Try search
Live search demo against the production API. Example buttons fill the query and may set a types or region filter — when they do, the filter shows up as a chip below the form and is included in the next search. Clear chips to run unfiltered. The exact request URL is previewed so you can see what the API receives. Parcel IDs require a region — pass region (state code), bbox, or lat/lng.
GET https://api.landmapmagic.com/v1/data/search?key=YOUR_API_KEY&q=&limit=8
GET
https://api.landmapmagic.com/v1/data/searchParameters
Parameters
| Name | Type | Description |
|---|---|---|
| key* | string | Your API key for authentication. |
| q* | string | Search query string. Minimum 2 characters. Supports state, city/place, county, PLSS, address, parcel ID, and fuzzy matching queries. |
| limit | number | Maximum number of results to return. Range: 1-50. Default: 10. |
| types | string | Comma-separated list of result types to filter by. Valid values: state, place, county, plss_township, plss_section, address, parcel. Omit to search all types. |
| region | string | State or region code (e.g. "IA", "Iowa") to narrow search scope. Required for parcel ID searches unless lat/lng, bbox, or center_lat/center_lng is provided. |
| lat | number | Latitude for geographic biasing. Used to boost results near this location and as fallback region context for parcel ID searches. |
| lng | number | Longitude for geographic biasing. Must be provided together with lat. |
| bbox | string | Bounding box to constrain results. Format: min_lon,min_lat,max_lon,max_lat. Can span up to 5 states for multi-state searches. |
| center_lat | number | Fallback center latitude for region inference when lat/lng and bbox are not provided. Used primarily for parcel ID lookups. |
| center_lng | number | Fallback center longitude for region inference. Must be provided together with center_lat. |
Notes
Omit
types for blended search. The unfiltered path searches states, places, counties, PLSS, parcels, and addresses together. Set types only to force a narrower mode.Parcel ID search needs a region. You must pass one of:
region (state code), bbox, or lat + lng. Without it the parcel branch returns nothing.bbox parcel search is capped at 5 states. A
bbox that intersects more than 5 states will be rejected — narrow the box or pass region explicitly.Response Fields
Top-Level Fields
| Attribute | Type | Description |
|---|---|---|
| query | string | The original search query string. |
| results | array | Array of matching result objects. |
| total_results | number | Number of results returned after limit and ranking are applied. |
| query_interpretation | object | Debug-friendly interpretation of the query, including normalized text, inferred types, and parsed PLSS data when applicable. |
| debug_timing | object | Optional timing breakdown returned when debug_timing=1 or x-debug-timing=1 is provided. |
Result Object Fields
| Attribute | Type | Description |
|---|---|---|
| id | string | Unique identifier for the result (e.g. FIPS code, PLSS ID, parcel ID). |
| type | string | Entity type: state, place, county, plss_township, plss_section, address, or parcel. |
| name | string | Display name of the result (e.g. "Story County, Iowa"). |
| simple_name | string | Simplified short name without state qualifier (e.g. "Story County"). |
| display_name | string | Convenience label for the primary result text. Backed by structured fields so clients can render their own labels. |
| context_text | string | Convenience secondary label, such as county/state context. |
| formatted_label | string | Convenience combined label for simple clients. |
| context | object | Structured ancestor context for custom labels: state, county, township, and PLSS data where applicable. This replaces older flat fields like state, countyName, townshipLabel, and top-level plss. |
| centroid | [number, number] | Geographic center of the result as [longitude, latitude]. |
| bbox | [number, number, number, number] | Bounding box as [min_lon, min_lat, max_lon, max_lat]. |
| suggested_zoom | number | Recommended map zoom level for viewing this result. |
| score | number | Relevance score from 0 to 1, where 1 is an exact match. |
| parcel | object | Parcel details (only for type=parcel). Contains parcel_id, owner, acreage, market_value, and land_use_class. |
| region | string | Region or state context used for the search. |
Context Object
| Attribute | Type | Description |
|---|---|---|
| state | object | State context with abbr, name, and two-digit FIPS code. |
| county | object | County context with five-digit FIPS, display name, and simple_name without the County suffix when available. |
| township | object | PLSS township context with id, name, and display label when applicable. |
| plss | object | PLSS components with state_fips, meridian, town_num, town_dir, range_num, range_dir, and section. |
Context PLSS Object
| Attribute | Type | Description |
|---|---|---|
| state_fips | string | Two-digit state FIPS code associated with the PLSS result. |
| meridian | string | PLSS meridian identifier when available. |
| town_num | number | Township number. |
| town_dir | string | Township direction, usually N or S. |
| range_num | number | Range number. |
| range_dir | string | Range direction, usually E or W. |
| section | number | Section number for plss_section results, or 0 when not applicable. |
Parcel Object
| Attribute | Type | Description |
|---|---|---|
| parcel_id | string | The parcel identification number. |
| owner | string | Recorded owner name. |
| acreage | number | Total parcel acreage. |
| market_value | number | Assessed market value in USD. |
| land_use_class | string | Land use classification (e.g. "Agricultural", "Residential"). |
Code Examples
Basic Search
cURL
curl "https://api.landmapmagic.com/v1/data/search?key=YOUR_API_KEY&q=iowa&limit=5"JavaScript
const response = await fetch(
"https://api.landmapmagic.com/v1/data/search?" +
new URLSearchParams({
key: "YOUR_API_KEY",
q: "iowa",
limit: "5",
})
);
const data = await response.json();
console.log(data.results);Python
import requests
response = requests.get(
"https://api.landmapmagic.com/v1/data/search",
params={
"key": "YOUR_API_KEY",
"q": "iowa",
"limit": 5,
},
)
data = response.json()
print(data["results"])No-Types Place Search
cURL
curl "https://api.landmapmagic.com/v1/data/search?key=YOUR_API_KEY&q=Ames+Iowa&limit=5"JavaScript
const response = await fetch(
"https://api.landmapmagic.com/v1/data/search?" +
new URLSearchParams({
key: "YOUR_API_KEY",
q: "Ames Iowa",
limit: "5",
})
);
const data = await response.json();
const result = data.results[0];
console.log(result.display_name);
console.log(result.context.state.abbr, result.context.county.name);
console.log(result.centroid, result.suggested_zoom);Python
import requests
response = requests.get(
"https://api.landmapmagic.com/v1/data/search",
params={
"key": "YOUR_API_KEY",
"q": "Ames Iowa",
"limit": 5,
},
)
data = response.json()
result = data["results"][0]
print(result["display_name"])
print(result["context"]["state"]["abbr"], result["context"]["county"]["name"])PLSS Search
cURL
curl "https://api.landmapmagic.com/v1/data/search?key=YOUR_API_KEY&q=24-100N-40W&limit=5"JavaScript
const response = await fetch(
"https://api.landmapmagic.com/v1/data/search?" +
new URLSearchParams({
key: "YOUR_API_KEY",
q: "24-100N-40W",
limit: "5",
})
);
const data = await response.json();
const result = data.results[0];
const { township, plss, county, state } = result.context;
console.log(township.label, plss.section);
console.log(county.name, state.name);Python
import requests
response = requests.get(
"https://api.landmapmagic.com/v1/data/search",
params={
"key": "YOUR_API_KEY",
"q": "24-100N-40W",
"limit": 5,
},
)
data = response.json()
context = data["results"][0]["context"]
print(context["township"]["label"], context["plss"]["section"])
print(context["county"]["name"], context["state"]["name"])Address Search
cURL
curl "https://api.landmapmagic.com/v1/data/search?key=YOUR_API_KEY&q=1600+Pennsylvania+Ave+Washington+DC&types=address&limit=1"JavaScript
const response = await fetch(
"https://api.landmapmagic.com/v1/data/search?" +
new URLSearchParams({
key: "YOUR_API_KEY",
q: "1600 Pennsylvania Ave Washington DC",
types: "address",
limit: "1",
})
);
const data = await response.json();
const { centroid, suggested_zoom } = data.results[0];
console.log("Center:", centroid, "Zoom:", suggested_zoom);Python
import requests
response = requests.get(
"https://api.landmapmagic.com/v1/data/search",
params={
"key": "YOUR_API_KEY",
"q": "1600 Pennsylvania Ave Washington DC",
"types": "address",
"limit": 1,
},
)
data = response.json()
result = data["results"][0]
print(f"Center: {result['centroid']}, Zoom: {result['suggested_zoom']}")Parcel Search with Region
cURL
curl "https://api.landmapmagic.com/v1/data/search?key=YOUR_API_KEY&q=12-34-567-890&types=parcel®ion=IA"JavaScript
const response = await fetch(
"https://api.landmapmagic.com/v1/data/search?" +
new URLSearchParams({
key: "YOUR_API_KEY",
q: "12-34-567-890",
types: "parcel",
region: "IA",
})
);
const data = await response.json();
const parcel = data.results[0]?.parcel;
console.log("Owner:", parcel?.owner, "Acres:", parcel?.acreage);Python
import requests
response = requests.get(
"https://api.landmapmagic.com/v1/data/search",
params={
"key": "YOUR_API_KEY",
"q": "12-34-567-890",
"types": "parcel",
"region": "IA",
},
)
data = response.json()
parcel = data["results"][0].get("parcel", {})
print(f"Owner: {parcel.get('owner')}, Acres: {parcel.get('acreage')}")Parcel Search with Lat/Lng
cURL
curl "https://api.landmapmagic.com/v1/data/search?key=YOUR_API_KEY&q=12-34-567-890&types=parcel&lat=42.0308&lng=-93.4816"JavaScript
const response = await fetch(
"https://api.landmapmagic.com/v1/data/search?" +
new URLSearchParams({
key: "YOUR_API_KEY",
q: "12-34-567-890",
types: "parcel",
lat: "42.0308",
lng: "-93.4816",
})
);
const data = await response.json();
console.log(data.results);Python
import requests
response = requests.get(
"https://api.landmapmagic.com/v1/data/search",
params={
"key": "YOUR_API_KEY",
"q": "12-34-567-890",
"types": "parcel",
"lat": 42.0308,
"lng": -93.4816,
},
)
data = response.json()
print(data["results"])Response Examples
No-Types Place Search — "Ames Iowa"
{
"query": "Ames Iowa",
"total_results": 1,
"query_interpretation": {
"normalized": "ames iowa",
"parsed_plss": null,
"inferred_types": []
},
"results": [
{
"id": "place:19:02850",
"type": "place",
"name": "Ames",
"simple_name": "Ames",
"display_name": "Ames",
"context_text": "Story County, Iowa",
"formatted_label": "Ames Story County, Iowa",
"context": {
"state": { "abbr": "IA", "name": "Iowa", "fips": "19" },
"county": { "fips": "19169", "name": "Story County", "simple_name": "Story" },
"township": { "id": "", "name": "", "label": "" },
"plss": { "state_fips": "19", "meridian": "", "town_num": 0, "town_dir": "", "range_num": 0, "range_dir": "", "section": 0 }
},
"centroid": [-93.6199, 42.0308],
"bbox": [-93.68, 42.00, -93.56, 42.06],
"suggested_zoom": 12,
"score": 1.2,
"match": { "source": "postgres", "alias": "ames iowa", "kind": "exact" }
}
]
}PLSS Section Search — "24-100N-40W"
{
"query": "24-100N-40W",
"total_results": 1,
"query_interpretation": {
"normalized": "24 100n 40w",
"parsed_plss": {
"kind": "section",
"section": 24,
"town_num": 100,
"town_dir": "N",
"range_num": 40,
"range_dir": "W"
},
"inferred_types": ["plss_section"]
},
"results": [
{
"id": "plss_section:...",
"type": "plss_section",
"name": "24-100N-40W",
"simple_name": "24-100N-40W",
"display_name": "Section 24, T100N R40W",
"context_text": "Osceola County, Iowa",
"formatted_label": "Section 24, T100N R40W Osceola County, Iowa",
"context": {
"state": { "abbr": "IA", "name": "Iowa", "fips": "19" },
"county": { "fips": "19143", "name": "Osceola County", "simple_name": "Osceola" },
"township": { "id": "plss_township:...", "name": "100N-40W", "label": "100N-40W" },
"plss": { "state_fips": "19", "meridian": "5th Principal", "town_num": 100, "town_dir": "N", "range_num": 40, "range_dir": "W", "section": 24 }
},
"centroid": [-95.8, 43.4],
"bbox": [-95.82, 43.39, -95.79, 43.41],
"suggested_zoom": 14,
"score": 1.45,
"match": { "source": "postgres", "alias": "", "kind": "plss_numeric" }
}
]
}Parcel ID Search
{
"query": "12-34-567-890",
"total_results": 1,
"results": [
{
"id": "parcel-19169-1234567890",
"type": "parcel",
"name": "Parcel 12-34-567-890, Story County, Iowa",
"simple_name": "12-34-567-890",
"context": {
"state": { "abbr": "IA", "name": "Iowa", "fips": "19" },
"county": { "fips": "19169", "name": "Story County", "simple_name": "Story" },
"township": { "id": "", "name": "", "label": "" },
"plss": { "state_fips": "19", "meridian": "", "town_num": 0, "town_dir": "", "range_num": 0, "range_dir": "", "section": 0 }
},
"centroid": [-93.4621, 42.0142],
"bbox": [-93.4688, 42.0098, -93.4554, 42.0186],
"suggested_zoom": 16,
"score": 0.98,
"match": { "source": "reportall", "alias": "12-34-567-890", "kind": "parcel" },
"parcel": {
"parcel_id": "12-34-567-890",
"owner": "SMITH JOHN A",
"acreage": 152.4,
"market_value": 1280000,
"land_use_class": "Agricultural"
},
"region": "IA"
}
]
}