How to Get ArcGIS REST Parcel Data into Excel or CSV (Not Just GeoJSON)
You ran a query against a county's ArcGIS REST parcel layer, by owner name, by APN, by address, and now you have a screen full of JSON. What you need is a spreadsheet: one row per parcel, owner and mailing address in their own columns, ready to open in Excel or feed to a mail-merge. Converting the response to GeoJSON, the usual first instinct, doesn't solve this. GeoJSON is still nested JSON, attributes live under a properties object per feature, plus a geometry block Excel has no use for. This is the step past GeoJSON: getting a flat CSV out of a REST query, three ways, from a one-line command to a free browser tool.
Why Neither Esri JSON Nor GeoJSON Opens Cleanly in Excel
A raw ArcGIS REST response (f=json) wraps each record's fields under an attributes object and its shape under a separate geometry object, both nested inside a features array. Converting that to GeoJSON, covered in How to Convert ArcGIS REST JSON to GeoJSON, renames attributes to properties and restructures the geometry to RFC 7946 coordinates. That fixes compatibility with mapping libraries. It does not fix Excel: properties is still a nested object per feature, and Excel's native JSON import (Power Query) either flattens it into one giant unreadable column or requires a manual "expand" step per field, per file, every time you pull new data.
What you want instead is a response where the field names are already spreadsheet columns and each parcel is already one row, geometry dropped entirely unless you specifically need it. That's a CSV, and it takes one more conversion step past GeoJSON, not the same step.
Method 1: ogr2ogr, One Command, No Script
ogr2ogr, part of the GDAL toolkit, reads Esri JSON natively via its ESRIJSON driver and writes CSV directly. Install GDAL from gdal.org (the OSGeo4W installer on Windows, brew install gdal on macOS, apt-get install gdal-bin on Debian/Ubuntu), then save a query response to a file and convert it:
curl "https://gistech.countyofkane.org/arcgis/rest/services/KanePINList/MapServer/0/query?where=UPPER(TaxName)%20LIKE%20UPPER('%25SMITH%25')&outFields=PIN,TaxName,SiteAddress,SiteCity&returnGeometry=false&f=json" \
-o kane_smith.json
ogr2ogr -f CSV kane_smith.csv kane_smith.json
The output is a plain CSV with PIN, TaxName, SiteAddress, and SiteCity as columns, one row per matched parcel, ready to open in Excel or Google Sheets with no import wizard. GDAL's CSV driver discards geometry by default, which is what you want for a spreadsheet. If you queried with returnGeometry=true and need coordinates as columns instead of a map shape, add a layer creation option: ogr2ogr -f CSV -lco GEOMETRY=AS_XY output.csv input.json writes an X and Y column ahead of the attribute columns.
This is the fastest path when you're comfortable with a terminal and already have GDAL installed for other GIS work. It scales to tens of thousands of parcels without a browser tab choking, and it's fully scriptable for a repeatable pull.
Method 2: A Short Script, No GDAL Required
If installing GDAL is more setup than the task warrants, a script that fetches the query and flattens attributes into rows does the same job in a few lines. Python, using only the standard library:
import json
import csv
import urllib.request
url = ("https://gistech.countyofkane.org/arcgis/rest/services/KanePINList/MapServer/0/query"
"?where=UPPER(TaxName)%20LIKE%20UPPER('%25SMITH%25')"
"&outFields=PIN,TaxName,SiteAddress,SiteCity"
"&returnGeometry=false&f=json")
with urllib.request.urlopen(url) as resp:
data = json.load(resp)
rows = [f["attributes"] for f in data["features"]]
fieldnames = [f["name"] for f in data["fields"]]
with open("kane_smith.csv", "w", newline="", encoding="utf-8") as out:
writer = csv.DictWriter(out, fieldnames=fieldnames)
writer.writeheader()
writer.writerows(rows)
The fields array in the response, the same field descriptor used to find the right owner or APN field in the owner-name and APN guides, doubles as your CSV header order here, so the column order in the output matches the field order you requested. Swap urllib.request for fetch() and this same shape works as a Node script if you're already in a JavaScript codebase; the loop over features and reindex from attributes is identical.
Method 3: A Free Browser Tool, No Script or Install
If you queried a layer with geometry included (returnGeometry=true) and want to skip the command line entirely, the Radius Notice Mailing List Generator has a free CSV export path built for exactly this: upload a parcel GeoJSON file, map the owner and mailing-address columns, and export a deduplicated CSV. It requires geometry (Polygon or MultiPolygon per parcel) because the tool's selection step buffers a radius around an address and keeps only the parcels that intersect it, so this path fits best when your query already targeted a specific area rather than a scattered owner-name result set.
- Query your county's ArcGIS layer with
returnGeometry=trueandf=geojson(see the GeoJSON conversion guide if the layer doesn't supportf=geojsondirectly), and save the response as a.geojsonfile. - On the Radius Notice tool, switch to the Upload GeoJSON tab (this path is free, no auto-query subscription needed) and upload the file.
- Enter an address near your parcels and a buffer radius wide enough to cover them, then click Geocode + Select.
- Under Field mapping, choose which of your GeoJSON's properties holds the owner name and which holds the mailing address; the dropdowns list every field the tool found in the file.
- Click Export CSV. The download is a three-column CSV,
Line1(owner),Line2andLine3(mailing address), deduplicated by name and address.
Exports on this tool prompt once for an email address the first time you use it in a browser, standard for the free tools on this site, not a subscription. If you just need to read a handful of individual field values rather than a bulk export, the Parcel Lookup Tool displays results field by field with a one-click copy button per value and a print view, useful for a small number of records even though it doesn't produce a CSV file directly.
Choosing a Method
| Method | Best for | Requires |
|---|---|---|
| ogr2ogr | Large pulls, repeatable/scripted exports, existing GIS toolchains | GDAL install (~100 MB) |
| Short script | One-off pulls when GDAL isn't already installed; full control over column order and filtering | Python or Node, no extra install with Python's standard library |
| Radius Notice (browser) | Area-bound parcel sets (a project site, a notice radius) where you already have or can generate geometry | Nothing installed; free, geocodes and buffers for you |
Get ArcGIS REST Data into Excel FAQ
Can I open GeoJSON directly in Excel?
Not cleanly. Excel's Power Query JSON import either collapses the nested properties object per feature into an unreadable single cell, or forces a manual expand step for every field, every file. A true flat CSV, produced by ogr2ogr, a script, or an export tool, opens with no import step at all.
Does ogr2ogr keep the parcel geometry when converting to CSV?
No, not unless you tell it to. GDAL's CSV driver discards geometry by default, writing attribute columns only. To keep coordinates as columns, add -lco GEOMETRY=AS_XY (or AS_WKT for a full well-known-text geometry column) to the ogr2ogr command.
What's the fastest way to get a REST query into a spreadsheet with no coding?
If your query already returned geometry, upload the GeoJSON to the free Upload GeoJSON tab on the Radius Notice tool, map the owner and mailing-address fields, and export CSV. No account required beyond a one-time email prompt.
Does the Parcel Lookup Tool export a CSV file?
Not currently. The Parcel Lookup Tool displays each result's fields with a per-value copy button, a print view, and a PDF download; for a bulk CSV export of a REST query, use ogr2ogr, the short script above, or the Radius Notice tool's CSV export.
How do I handle a query that returns more than one page of results?
Page through with resultOffset and resultRecordCount before converting, the same pagination pattern covered in the owner-name query guide. With ogr2ogr, fetch each page to its own JSON file and append with ogr2ogr -f CSV -update -append.
Why do leading zeros in my APN or PIN column disappear after I open the CSV in Excel?
Excel auto-detects numeric-looking text and strips leading zeros on open. Format the column as Text before opening the CSV (or import via Excel's Text Import Wizard rather than double-clicking the file) to preserve the original string. What is an APN? covers this in more detail.
Have geometry already and just want the mailing list? Upload your parcel GeoJSON and export a deduplicated CSV, free.
Related Resources
- How to Convert ArcGIS REST JSON to GeoJSON (3 Methods): the step before this one, for when you need GeoJSON itself rather than a flat CSV
- How to Query County Parcel Data by Owner Name via ArcGIS REST API: constructing the query that produces the data this guide converts
- How to Query County Parcel Data by APN via ArcGIS REST API: the APN-specific version of the same query mechanics
- How to Print Avery 5160 Labels from Excel: the next step once your parcel data is a spreadsheet
- Understanding Parcel Data Fields: Owner, Situs, APN & More
- Parcel Lookup Tool: query parcel data by owner name, APN, or address against live county endpoints
- CSV to Avery 5160 Labels: turn any address CSV into print-ready mailing labels