How to Query County Parcel Data by Owner Name via ArcGIS REST API
Every county in the U.S. maintains a parcel database that maps properties to their owners. A large share of those databases sit behind ArcGIS REST endpoints: public URLs that accept structured queries and return JSON. The catch: ArcGIS REST is a capable API with almost no official tutorial aimed at the person who just wants to type a name and get back a list of parcels. The Esri documentation covers every parameter, but it assumes you already know your endpoint, your field names, and SQL-style WHERE clause syntax. Most people searching for Kane County Illinois GIS REST API owner name do not have all three yet.
This guide walks through each step: finding the endpoint, reading its field descriptor, building the WHERE clause, and handling the failure modes that make owner-name searches fail silently.
What ArcGIS FeatureServer and MapServer Are
ArcGIS Server publishes geographic data through REST endpoints structured as …/arcgis/rest/services/[ServiceName]/[ServerType]/[LayerIndex]. The two server types you'll encounter for parcel data are FeatureServer and MapServer.
Both accept the same /query endpoint and return JSON. FeatureServer natively supports GeoJSON output and is the more modern of the two; MapServer is more common because it predates FeatureServer by years and many counties have never migrated. For a straight owner-name query, either works. For a deeper comparison, see How to Find Any County's ArcGIS Parcel Layer URL.
Step 1: Find Your County's Parcel REST Endpoint
The Parcel REST Atlas catalogs verified endpoints for counties across Illinois, Washington, California, and other states. If your county is listed there, copy the layer URL directly. If it isn't, the fastest discovery path is a targeted search:
[County Name] [State] arcgis rest services parcel FeatureServer
The result you want is a URL containing /arcgis/rest/services/ followed by a folder or service name and ending in /MapServer/0 or /FeatureServer/0. Paste that URL into a browser tab. You should see a plain-HTML page titled with the layer name and listing geometry type, capabilities, and fields.
If the county doesn't appear in the Atlas or in search results, the full discovery walkthrough is in the layer URL guide. Once you have a URL, come back here.
Step 2: Read the Layer's Field Descriptor
Before writing a single query, you need the exact field name the layer uses for owner names. County GIS departments do not agree on field names: one county calls it OWNER_NAME, another OWNER1, another TAXPAYER_NAME, another GRANTOR. Guessing wastes time.
Append ?f=json to your layer URL and open it in a browser:
https://gis.co.kane.il.us/server/rest/services/Parcels/FeatureServer/0?f=json
The response is a JSON object. Scroll to the "fields" array. Each entry looks like this:
{
"name": "OWNER_NAME",
"type": "esriFieldTypeString",
"alias": "Owner Name",
"length": 100,
"editable": false,
"nullable": true
}
Scan the name and alias values for anything containing OWNER, OWN, GRANTOR, or TAXPAYER. That's your target field. Write it down exactly. The query parameter is case-sensitive on many servers.
?f=json to the layer URL and read the fields array. The highlighted OWNER_NAME entry is the one to use in your WHERE clause.Step 3: Construct the Owner-Name WHERE Clause
ArcGIS REST query parameters map to SQL WHERE clauses with one constraint: the syntax is ANSI SQL, not a full database dialect. The essential pattern for owner-name search is:
UPPER(OWNER_NAME) LIKE UPPER('%SMITH%')
Breaking it down:
UPPER(): wraps both sides so the match is case-insensitive. Parcel records stored asSMITH JOHN Amatch a query forsmith.LIKE: pattern-matching operator. Accepts%(any sequence of characters) and_(any single character).- Leading and trailing
%: means "contains." Remove the leading%to match names that start with the pattern; remove the trailing%to match names that end with it.
Common patterns and when to use them:
| Goal | WHERE clause |
|---|---|
| Contains "JOHNSON" anywhere | UPPER(OWNER_NAME) LIKE UPPER('%JOHNSON%') |
| Starts with "SMITH" | UPPER(OWNER_NAME) LIKE UPPER('SMITH%') |
| Exact match | UPPER(OWNER_NAME) = UPPER('SMITH JOHN A') |
| Contains "TRUST" (LLC / trust searches) | UPPER(OWNER_NAME) LIKE UPPER('%TRUST%') |
| Owner AND address | UPPER(OWNER_NAME) LIKE UPPER('%SMITH%') AND UPPER(SITE_ADDRESS) LIKE UPPER('%ELM%') |
The full query URL structure:
https://[layer-url]/query
?where=UPPER(OWNER_NAME)%20LIKE%20UPPER('%25SMITH%25')
&outFields=PIN,OWNER_NAME,SITE_ADDRESS
&returnGeometry=false
&f=json
Note the URL encoding: spaces become %20, percent signs become %25. Most modern browsers handle encoding automatically when you paste into the address bar. Scripts and fetch calls require explicit encoding.
returnGeometry=false when you only need a name-and-address list. Geometry adds kilobytes per feature. Once you have the parcels you want, run a second query with returnGeometry=true for just those APNs.
Worked Examples: Three Counties, Three Outcomes
These examples use endpoints from the Parcel REST Atlas. Each illustrates a different scenario you'll encounter across U.S. counties.
Kane County, Illinois: Full Owner Search
Kane County's FeatureServer exposes OWNER_NAME, PIN, and SITE_ADDRESS on the public layer. This is the ideal case: owner-name search works directly via the REST API.
Layer URL:
https://gis.co.kane.il.us/server/rest/services/Parcels/FeatureServer/0
Owner-name search query:
https://gis.co.kane.il.us/server/rest/services/Parcels/FeatureServer/0/query
?where=UPPER(OWNER_NAME)%20LIKE%20UPPER('%25SMITH%25')
&outFields=PIN,OWNER_NAME,SITE_ADDRESS
&returnGeometry=false
&f=json
Response shape:
{
"fields": [
{ "name": "PIN", "alias": "Parcel Identification Number" },
{ "name": "OWNER_NAME", "alias": "Owner Name" },
{ "name": "SITE_ADDRESS", "alias": "Site Address" }
],
"features": [
{
"attributes": {
"PIN": "15-01-100-017",
"OWNER_NAME": "SMITH KAREN L",
"SITE_ADDRESS": "412 OAK ST BATAVIA IL 60510"
}
},
...
]
}
Iterate the features array to get your list. Kane County's PIN format is XX-XX-XXX-XXX. For background on Illinois PIN formats, see What is an APN?
Visit the Kane County atlas page for field documentation and the full sample query URL.
King County, Washington: PIN-Only Layer, No Owner Field
King County's public parcel MapServer is a polygon-and-PIN layer. It does not expose owner names or mailing addresses on the public REST service.
Layer URL:
https://gismaps.kingcounty.gov/arcgis/rest/services/Property/KingCo_Parcels/MapServer/0
Fields available: PIN, MAJOR, MINOR, and geometry. That's it. A WHERE clause targeting any owner field returns an error or empty results because the field doesn't exist on this layer.
This pattern is common across Washington counties and some Midwest jurisdictions. The GIS layer handles spatial queries; ownership data lives in a separate Assessor system. For King County, owner-name lookup routes through the King County Assessor's eRealProperty portal, which has a full-text name search and returns parcel details including mailing address.
See the King County atlas page for notes on this split architecture.
Sonoma County, California: APN and Address, No Owner Field
Sonoma County's public FeatureServer exposes APN and SitusAddress. Owner name is not on this layer.
Layer URL:
https://socogis.sonomacounty.ca.gov/map/rest/services/OWTSPublic/Cities_GIS_Parcel_Base/FeatureServer/0
Address search query (what this layer supports):
https://socogis.sonomacounty.ca.gov/map/rest/services/OWTSPublic/Cities_GIS_Parcel_Base/FeatureServer/0/query
?where=UPPER(SitusAddress)%20LIKE%20UPPER('%25MAIN%20ST%25')
&outFields=APN,SitusAddress
&returnGeometry=false
&f=json
For owner-name searches in Sonoma County, use the Sonoma County GIS Hub or the Assessor's property search. Many California counties make the same separation: the REST parcel layer is public and geometry-focused; owner and tax data is behind the Assessor portal.
Full field documentation is on the Sonoma County atlas page.
/0?f=json. If it isn't in the fields array, the data isn't on this layer. Many public REST endpoints are parcel geometry layers. The ownership data lives behind a separate Assessor portal that requires a different API or a web search.
Common Gotchas
Field name variation
The table below covers names seen in the wild. Always confirm against ?f=json for the specific layer you're querying:
| Field Name | Where It Appears |
|---|---|
OWNER_NAME |
Kane County IL, many Midwest counties |
OWNER1 |
Colorado, Arizona counties |
OWN_NAME |
Some Pacific Northwest counties |
OWNERNAME |
GIS Online-hosted layers (no underscore) |
TAXPAYER_NAME |
Some assessor-integrated layers |
GRANTOR |
Deed-indexed layers; rare on parcel layers |
Cook County's separate-portal pattern
Cook County, Illinois is worth calling out specifically because it appears in so many Illinois GIS searches. The public Cook County FeatureServer at gis12.cookcountyil.gov exposes PIN14 and PROPERTY_ADDRESS. There is no owner field. Owner-name lookup for Cook County parcels goes through the Cook County Assessor's portal, not the GIS REST API. The same is true for DeKalb County, IL, which does not yet have a catalogued public REST endpoint in the Atlas.
CORS blocks browser requests
A direct browser fetch (from a web app's JavaScript) to a county ArcGIS server often fails with a CORS error even though the URL works fine in a browser tab. The county's server does not send Access-Control-Allow-Origin headers that permit cross-origin requests. The fix: proxy the query through your own server, or use the Parcel Lookup Tool, which handles the proxy automatically.
Pagination cuts off results
ArcGIS layers have a maxRecordCount cap (commonly 1,000 or 2,000). If your owner-name search matches more records than the cap, the response silently returns only the first page. Check the layer's maxRecordCount in the ?f=json response, then page through results using resultOffset:
…/query?where=UPPER(OWNER_NAME)%20LIKE%20UPPER('%25TRUST%25')
&outFields=PIN,OWNER_NAME
&resultRecordCount=1000
&resultOffset=0
&f=json
Increment resultOffset by resultRecordCount until a response returns fewer features than the page size.
Geometry inflates response size
A parcel polygon can add 5–50 KB per feature depending on detail level. For a name lookup returning 200 records, geometry can push the response from ~40 KB to several megabytes. Set returnGeometry=false for the initial search, then request geometry only for the specific parcels you need with a second query filtered to their APNs.
Easier Path: The Parcel Lookup Tool
If you want to query owner names without hand-crafting URLs, the Parcel Lookup Tool handles the mechanics. Paste any county's ArcGIS REST URL, and the tool reads the layer's field descriptor automatically, presents the available search fields, constructs the WHERE clause, and pages through results. It also handles the CORS proxy, so browser-blocked endpoints work without a server-side workaround.
For generating a mailing list from a radius search around a property, the Radius Notice Mailing List Generator combines spatial filtering with owner and address field detection into a single workflow.
Owner-Name Query FAQ
What is the correct WHERE clause to search for a parcel owner name in ArcGIS REST?
Use UPPER(field_name) LIKE UPPER('%partial_name%') to match any string containing the name, case-insensitively. Example: UPPER(OWNER_NAME) LIKE UPPER('%JOHNSON%'). Percent signs are wildcards. URL-encode the query before sending it as a parameter (%20 for spaces, %25 for literal percent signs).
How do I find the owner name field in a county ArcGIS parcel layer?
Append ?f=json to the layer URL and read the fields array. Look for a field whose name or alias contains OWNER, OWN, GRANTOR, or TAXPAYER. Common names: OWNER_NAME, OWNER1, OWN_NAME, OWNERNAME, TAXPAYER_NAME. Some counties expose no owner field on the public layer. In those cases the owner data lives in a separate Assessor portal. The Understanding Parcel Data Fields article has a full field glossary.
Why does my ArcGIS owner-name query return zero results even though I can see owner data in the map?
Three common causes: the field name you used doesn't match (check ?f=json); the data is in all caps and your pattern doesn't account for case (wrap both sides in UPPER()); or the layer's maxRecordCount was hit on a different filter and the empty page is a pagination artifact rather than a true zero-match. Test with WHERE=1=1&resultRecordCount=1 first to confirm the layer is queryable at all.
Can I search parcels by owner name in Kane County Illinois using the ArcGIS REST API?
Yes. Kane County's FeatureServer exposes OWNER_NAME. Query: UPPER(OWNER_NAME) LIKE UPPER('%SMITH%')&outFields=PIN,OWNER_NAME,SITE_ADDRESS&f=json. See the full worked example above.
Does King County Washington expose owner names on its public parcel REST endpoint?
No. The public King County parcel MapServer exposes only PIN, MAJOR, and MINOR. For owner-name lookups, use the King County Assessor's eRealProperty portal.
What does a CORS error mean when querying a county ArcGIS layer from a browser?
The county's server does not include the Access-Control-Allow-Origin header, so the browser blocks the request. The layer works fine in a browser tab or from a server-side script. Fix it by proxying through your own server, or use the Parcel Lookup Tool, which proxies automatically.
How do I handle pagination when an owner-name query returns more than 1,000 records?
Use resultOffset and resultRecordCount parameters. Start at resultOffset=0, then increment by resultRecordCount each request until the returned feature count is less than your page size. The layer's maxRecordCount field in ?f=json tells you the server-side cap.
Skip the URL construction. Paste your county's ArcGIS endpoint and search by owner name directly.
Related Resources
- How to Find Any County's ArcGIS Parcel Layer URL: locating FeatureServer and MapServer endpoints from scratch
- What is an APN (Assessor's Parcel Number)?: APN formats by state, common gotchas, and how to handle leading zeros
- Understanding Parcel Data Fields: Owner, Situs, APN & More: glossary of field names and what they hold
- Parcel REST Atlas: catalogued endpoints for counties across the U.S.
- Radius Notice Mailing List Generator: spatial + owner-field queries for public notice mailings