Field Guide / How-To

How to Query County Parcel Data by Owner Name via ArcGIS REST API

By · Last updated May 11, 2026 · 11 min read

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.

ArcGIS layer field descriptor structure Diagram showing the path from a layer URL through ?f=json to the fields array, highlighting the name and alias properties that identify the owner field. /FeatureServer/0?f=json { "fields": [ { "name": "PIN", "alias": "Parcel ID" }, { "name": "OWNER_NAME", "alias": "Owner Name" }, { "name": "SITE_ADDRESS", "alias": "Site Address" } ]} ← target this field name exactly
Append ?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 as SMITH JOHN A match a query for smith.
  • 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.

Strip geometry for speed. Set 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.

The owner field may not exist at all. Before assuming a query is broken, verify that the field name appears in /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.

Open the Parcel Lookup Tool →

Related Resources