Field Guide / How-To

How to Query County Parcel Data by APN via ArcGIS REST API

By · Last updated July 12, 2026 · 10 min read

You have an APN, from a mailer, a title report, a recorded deed, and you need the parcel record behind it: owner, situs address, geometry. The county's ArcGIS REST layer can answer that in one request. The problem is that the APN printed on your document and the APN stored in the GIS layer are frequently not written the same way, and a WHERE clause that doesn't match the stored format returns zero rows with no error to tell you why. This guide covers the exact syntax, using a live San Diego County endpoint, where the majority of APN-specific searches on this site originate, plus a second county where the same field behaves differently.

Already have the endpoint and just need to search it? The Parcel Lookup Tool auto-detects the APN field on any county's ArcGIS layer and normalizes dashes and leading zeros for you. Paste the URL, paste the APN, done.

Endpoint and Field, Two Prerequisites

An APN query needs the same two things as any ArcGIS REST query: the layer's URL, ending in /MapServer/0 or /FeatureServer/0, and the exact field name the county uses for the parcel number. If you don't have the URL yet, How to Find Any County's ArcGIS Parcel Layer URL covers discovery from scratch, and the Parcel REST Atlas has 150+ counties pre-verified. This guide picks up once you have a URL and need the field mechanics specific to parcel numbers, which differ from owner-name search in one important way: the field almost always exists (every parcel has a number; not every county publishes owner names), but its stored format is inconsistent in a way that silently breaks the obvious query.

The Gotcha: Display Format vs. Stored Value

Most counties show the public a formatted APN, dashes separating the map book, page, and parcel segments, sometimes a leading zero on the book number. That formatted string is a display convention. What the GIS layer stores in its APN field is a separate design decision made by whoever built that county's database, and it does not always match the display format.

San Diego County is the clearest live example, and the county behind the largest single cluster of APN-related searches landing on this site. The county's tax bill and its public-facing SanGIS lookup show APNs as 123-456-78-00: map book, page, parcel, sub-parcel. Query the county's ArcGIS layer for that exact string and you get nothing back:

https://webmaps.sandiego.gov/arcgis/rest/services/GeocoderMerged/MapServer/1/query
  ?where=APN='498-260-39-00'
  &outFields=APN,OWN_NAME1
  &f=json

# Response: {"features": []}

Append ?f=json to the layer URL and read the field descriptor, and the reason is right there. APN is an esriFieldTypeString, length 10, no dashes stored:

{
  "name": "APN",
  "type": "esriFieldTypeString",
  "alias": "APN",
  "length": 10
}

Query the same parcel with the dashes stripped and the flat 10-digit string this field holds:

https://webmaps.sandiego.gov/arcgis/rest/services/GeocoderMerged/MapServer/1/query
  ?where=APN='4982603900'
  &outFields=APN,OWN_NAME1,SITUS_ADDRESS,SITUS_STREET
  &f=json

That returns one feature: APN 4982603900, owner SCHAFFROTH EDWARD&GALE FAMILY TRUST, situs 1640 CHASE. Same parcel, same county, two representations of the number, only one of which the field will match.

This is almost certainly why San Diego APN searches reformulate so many ways. GSC query data for this site shows the same San Diego parcel searched as 535-210-12, 5352101200, and 53344305 in the same session pattern, dashes on, dashes off, digit counts varying. That's a searcher hitting the exact failure mode above and retyping the number every way they can think of, not a data problem. The fix is always the same: read the field descriptor, match its stored format exactly.

Constructing the WHERE Clause

Once you know the field name and its stored format, the clause itself is simple SQL, the same syntax used across every ArcGIS REST query regardless of field:

Goal WHERE clause
Exact match, string field APN='4982603900'
Exact match, integer field APN=4982603900 (no quotes)
Starts with (find all sub-parcels) APN LIKE '498260%'
Multiple APNs in one request APN IN ('4982603900','4982604500')

The quotes matter and depend on the field's declared type, string or numeric, which is exactly what the ?f=json field descriptor tells you before you guess. Quoting a numeric field, or leaving quotes off a string field, produces an ArcGIS error rather than an empty result, which at least tells you something is wrong, unlike the dashed-format mismatch above, which fails silently.

The LIKE prefix pattern is worth calling out on its own. Truncating an APN to its map-book-and-page prefix and matching with a trailing % returns every parcel on that page, which in a book-page system means geographic neighbors. Querying APN LIKE '498260%' against the San Diego layer matches 38 parcels sharing that book and page (confirmed with returnCountOnly=true), the first several on Chase Avenue and Fuerte within a block of each other. Useful when you have a partial APN, or when you want the parcels adjacent to a known one for a small radius-style check without a full spatial query.

Worked Examples: Two Counties, Two Storage Conventions

San Diego County, California: dashes stripped

Layer: webmaps.sandiego.gov/arcgis/rest/services/GeocoderMerged/MapServer/1. The county publishes both a full 10-digit APN field and an APN_8 field holding just the first 8 digits (map book, page, and parcel, without the sub-parcel suffix). Both are strings with no separators. A full worked query, exact match:

https://webmaps.sandiego.gov/arcgis/rest/services/GeocoderMerged/MapServer/1/query
  ?where=APN='4982603900'
  &outFields=APN,APN_8,OWN_NAME1,SITUS_ADDRESS,SITUS_STREET,SITUS_COMMUNITY
  &returnGeometry=false
  &f=json

Field documentation and the endpoint's full search-field list are on the San Diego County atlas page. San Diego's layer also exposes OWN_NAME1, so you can combine an APN prefix with an owner-name filter in the same request if you're narrowing a partial match: APN LIKE '498260%' AND UPPER(OWN_NAME1) LIKE UPPER('%TRUST%').

Cook County, Illinois: dashes kept

Cook County runs the opposite convention. Its public layer exposes PIN14_dash, a string field where the 14-digit PIN is stored with its dashes, matching the format printed on tax bills and deeds:

https://gis12.cookcountyil.gov/traditional/rest/services/CookViewer3Parcels/MapServer/0/query
  ?where=PIN14_dash='33-32-301-001-0000'
  &outFields=PIN10,PIN14_dash,street_address
  &returnGeometry=false
  &f=json

That query matches on the first try, dashes and all, because Cook County's database schema kept the display format as the stored format. The same layer also carries a dash-free PIN10 field for the compact 10-digit form. There's no way to know in advance which convention a given county chose; the field descriptor at ?f=json is the only reliable source. Cook County's public layer does not expose an owner-name field; see the owner-name query guide for where Cook County ownership data lives, and how to query a county's Socrata portal for a scriptable path to it.

Common Gotchas

Leading zeros vanish in spreadsheets

If a script or spreadsheet auto-types a numeric-looking APN as a number, leading zeros disappear and the string no longer matches the stored field. Keep APNs as text end to end: format the column as Text in Excel before pasting, or quote the value as a string in code. What is an APN? covers this failure mode in more detail, it also breaks tax-bill lookups, not just REST queries.

Short-form and long-form fields aren't interchangeable

San Diego's APN_8 and full APN are both valid, but they answer different questions. APN_8 matches at the parcel level and can return more than one row when sub-parcels exist (condos, split lots). If you need exactly one record, query the full field. If you're not sure a sub-parcel suffix exists for a given property, query the 8-digit prefix with LIKE and inspect what comes back.

Integer-typed APN fields truncate on paste

Some counties, unlike San Diego and Cook, type their parcel-number field as esriFieldTypeInteger rather than string. On those layers, a leading zero in the source APN was already dropped when the county built the layer, and no client-side fix restores it. Check the field's type in ?f=json; if it's an integer type, query without quotes and without a leading zero.

maxRecordCount caps a broad LIKE search

A very short LIKE prefix, two or three digits, can match more parcels than the layer's maxRecordCount (commonly 1,000 or 2,000) allows in one response. If your prefix search looks truncated, narrow the prefix or add resultOffset pagination, covered in the owner-name guide's pagination section.

Easier Path: The Parcel Lookup Tool

The Parcel Lookup Tool reads a county's field descriptor for you, detects which field is the APN, and normalizes dashes and leading zeros before sending the request, so the display-versus-stored mismatch above never surfaces as a dead end. Paste any county's ArcGIS REST URL and the APN as printed on your document; the tool handles the reformatting.

For a mailing list built from a set of APNs rather than a single lookup, the Radius Notice Mailing List Generator combines a spatial buffer with owner and mailing-address field detection in one pass.

APN Query FAQ

What is the correct WHERE clause to search a county ArcGIS layer by APN?

Match the field's stored format exactly: APN='4982603900' for a string field storing digits only, or APN=4982603900 without quotes for an integer field. Confirm both the field name and its type by appending ?f=json to the layer URL and reading the fields array before writing the query.

Why does my APN query return zero results even though the parcel exists?

The most common cause is a format mismatch between the APN as printed on a tax bill or deed (often dashed, e.g. 498-260-39-00) and the flat string the GIS layer stores (e.g. 4982603900). Strip separators and leading formatting to match the field's real stored value, confirmed by reading a live record via ?f=json or a WHERE 1=1 test query.

Does the APN field store dashes?

It depends on the county; there's no universal rule. San Diego County's APN field stores a flat 10-digit string with no separators. Cook County's PIN14_dash field stores the 14-digit PIN with dashes included, matching its tax-bill format. Always verify against the specific layer rather than assuming either convention.

Can I search by a partial APN?

Yes, with a LIKE wildcard: APN LIKE '498260%' matches every parcel whose APN starts with that prefix. In book-page-based systems like San Diego's, a shared prefix usually means the parcels are geographic neighbors on the same map page.

Is APN the same field as PIN?

They're the same concept under different regional names. States that use "PIN" (Parcel Identification Number), notably Illinois and parts of the Midwest, do so instead of "APN," not in addition to it. The What is an APN? article covers naming and format differences by state.

How do I query multiple APNs in a single request?

Use IN: APN IN ('4982603900','4982604500','4982602500'). This returns all matching parcels in one round trip rather than one request per APN, useful when you're resolving a batch from a spreadsheet.

Skip the field-type guessing. Paste your county's ArcGIS endpoint and search by APN directly.

Open the Parcel Lookup Tool →

Covered counties

Each atlas page documents the exact parcel-number field name and whether it stores separators, plus a working sample query you can copy and adapt.

Related Resources