Introduction
Welcome to the ReportAll API! We offer parcel-based, tile-based, and ArcGIS style endpoints for use in any application you may have in mind.
Authentication
All of our endpoints require authentication. You can choose to use either the client key we provide to you, or a generated token by using our auth endpoint.
The client key is provided using:
...&client=[client_key]...
To provide a token use:
...&token=[token]...
Token-based Authentication
To retrieve a token, use this code:
curl "https://reportallusa.com/api/auth?client=ffffffffff×tamp=1524751569"
{
"status": "OK",
"token": "xPBn6y9wBBxxcK2527AHY0YJ2c17k8nU5FAsuvW1_9Qv09NZ4b6BaQZ7lNUHZyl1"
}
Make sure to replace
ffffffffff
and1524751569
with your real client key and desired timestamp.
Using our auth endpoint, you can supply your client key and an expiration timestamp and receive an encrypted token for use in all of our endpoints
HTTP Request
GET https://reportallusa.com/api/auth?
Auth parameters
Parameter | Description |
---|---|
client | Your ReportAll client key |
timestamp | A UNIX timestamp of when this token should expire |
Result Fields
Field | Description |
---|---|
status | Status of your request, can be OK , or error |
token | Encrypted token for use in authentication in our API |
Account Information
curl "http://reportallusa.com/api/account?client=[client_key]"
{
"status": "OK",
"client": "[client_key]",
"expires_at": 1525177229,
"quotas": {
"/api/parcels.php" : {
"period": "hour",
"requests": 100,
"usage": 0,
"remaining": 100
},
"/dyn/tile.py": {
"period": "day",
"requests": 10000,
"usage": 0,
"remaining": 10000
}
}
}
If you're designing an application using our API, you may want to have a more automated way to keep on top of your quota usage. Using our accounts endpoint can give you that information.
HTTP Request
GET https://reportallusa.com/api/account?
Query Parameters
Parameter | Description |
---|---|
client | Your ReportAll client key. Note this endpoint does not take a token for security purposes. |
Result Fields
Field | Description |
---|---|
status | Status of the request, can be OK or error |
client | Your client key |
expires_at | When your account expires or renews. |
quotas | An associative array, keyed off of each resource name available to you. Resource IDs can be one of /dyn/tile.py or /api/parcels.php . See below for what each resource contains. |
Resource Fields
Field | Description |
---|---|
period | The renewal period for this resource. Can be one of alltime , month , day , hour . |
requests | The total number of requests you can make in a given period. |
usage | How many requests you have made during this current period. |
remaining | The difference between requests and usage. |
Standard API Parcels Queries
Our Standard API's "parcels" query function allows flexible querying of our national parcel database in several different ways detailed in the subsections below.
Request & Response Structure
All queries to the Standard API's parcels endpoint use the same endpoint, accept certain common parameters, and return a response of the format indicated below.
HTTP Request
Queries to our Standard API can be made by passing query parameters in a GET
request to the below URL:
GET https://reportallusa.com/api/parcels?
Alternatively, if you suspect your query string will be very long, you can instead POST the query parameters as the body of the request to the same URL:
POST https://reportallusa.com/api/parcels
Common Query Parameters
Requests to the Standard API "parcels" endpoint accept the below common parameters. Note that authentication (client
or token
), and version (v
) parameters are required:
Parameter | Default | Required | Description |
---|---|---|---|
client/token | none | true | Your client key or generated token. |
v | none | true | API version. Current version is 9. |
rpp | 10 | false | Requested number of results per page. If you have more results than this parameter, the API will paginate. |
page | 1 | false | Requested result page. Increment (from 1) for obtaining subsequent pages of matching result records when there are more than specified in the rpp parameter. |
Success Response Format
Successful responses from the Standard API "parcels" endpoint have a 200 status code and return a JSON object with the below structure.
Field | Description |
---|---|
status | "OK" . |
count | Number of records returned by your search query. |
page | Page of results requested (1 by default). |
rpp | Number of requested results per page (10 by default). |
results | An array containing up to rpp number of results. |
query | An echo of the query you issued. |
The results
array is a list of parcel record JSON objects.
Each parcel record JSON object contains each available attribute from our Standard API Data Dictionary.
Not all attributes are available in all areas or for all records; attributes with empty (null
) values are omitted from a record's object.
The geometry is present in each parcel record JSON object as special key: "geom_as_wkt": "MULTIPOLYGON(((...)))
where the value is a MultiPolygon representation of the parcel in OGC Well-Known Text (WKT) format.
The spatial reference system ID (SRID / projection) of the geometry coordinates is 4326 (WGS84 lon/lat).
To translate the geometry into a different format or projection you can use a WKT parsing library. For querying options with different output formats, see section ArcGIS Map Service Queries or ArcGIS API Feature Service.
Error Response Format
Error responses return a JSON object with the below structure.
Field | Description |
---|---|
status | "error" . |
message | Error message describing the error. A string. |
The HTTP status code of the response depends on the request version (v
) parameter. When the version is <= 8, the response status code is 200
. When the version is >= 9, the response status code is a 4XX
or 5XX
code corresponding to the error.
For more details about error responses see the Errors section.
Address Queries
To supply the address and region as separate parameters:
curl "https://reportallusa.com/api/parcels?client=[client_key] \
&v=9®ion=Geauga%20County,%20OH&address=100%20Short%20Court"
curl "https://reportallusa.com/api/parcels?client=[client_key] \
&v=9®ion=Parma,%20Ohio&address=4603%20Brookpark%20Rd"
To supply the address region in a single
q
parameter:
curl "https://reportallusa.com/api/parcels?client=[client_key] \
&v=9&q=100%20Short%20Court,%20geauga,%20oh"
curl "https://reportallusa.com/api/parcels?client=[client_key] \
&v=9&q=1950%20Lucy%20Lane,%20Riverside%20County,%20California"
Note:
%20
is the url encoded value for a space character
{
"status": "OK",
"count": 1,
"page": 1,
"rpp": 1,
"results": [
{
"omitted for example"
},
],
"query": "client=[client_key]&v=9®ion=Geauga%20County,%20OH&address=100%20Short%20Court"
}
If you request building footprints, a new entry in results will be available for any records we have data for:
"results": [
{
...
"buildings_poly": [
{ "geom_as_wkt": ... }
]
}
]
There are two ways to perform a Standard API address query. The first is to search with an address
parameter and a textual region parameter like region
or a numeric region parameter like county_id
, or zip_code
. The second is to search with the q
parameter alone.
Searching with address
and region
parameters
If you are able to specify the subject part of an address (e.g. "601 Lakeside Ave.") separately from its region part (e.g. "Cleveland, Ohio 44114", "Cleveland", "Cuyahoga County, OH", "Ohio", "OH", or "44114") then you can perform an address search by specifying address=…
and region=…
arguments in your query.
As an alternative to the region
parameter, you can specify county_id=…
with the county's FIPS55 code, or zip_code=…
with the property's zip code.
For the HTTP request URL and response format, see the Request & Response Structure section above.
Two-Part Address Query Parameters
Parameter | Default | Required | Description |
---|---|---|---|
client/token | none | true | Your client key or generated token. |
v | none | true | API version. Current version is 9. |
region | none | true | Geographic region to search in, can be County, State, or Zip code. |
county_id | none | false | County FIPS55 code, can be used in place of region |
zip_code | none | false | Zip code, can be used in place of region |
address | none | true | Address to search for. |
return_buildings | none | false | Set to true to receive building footprint polygons in your result records. Version 3+ feature only. |
rpp | 10 | false | Results per page. If you have more results than this parameter, the API will paginate. Also see note. |
page | 1 | false | Result page, if there are more results than specified in the rpp parameter. |
Searching with q
parameter
To search for a complete address string (e.g. "601 Lakeside Ave., Cleveland OH 44114") you can perform an address search on it using the q=…
argument in your query.
Complete Address Query Parameters
Parameter | Default | Required | Description |
---|---|---|---|
client/token | none | true | Your client key or generated token. |
v | none | true | API version. Current version is 9. |
q | none | true | Full text address query. |
return_buildings | none | false | Set to true to receive building footprint polygons in your result records. Version 3+ feature only. |
rpp | 10 | false | Results per page. If you have more results than this parameter, the API will paginate. Also see note. |
page | 1 | false | Result page, if there are more results than specified in the rpp parameter. |
Parcel ID Queries
curl "https://reportallusa.com/api/parcels?client=[client_key] \
&v=9®ion=Cuyahoga%20County,%20Ohio&parcel_id=44327012"
Multiple parcels can be specified by separating them with a semicolon:
curl "https://reportallusa.com/api/parcels?client=client_key]&v=9 \
®ion=Cuyahoga%20County,%20Ohio&parcel_id=44327012;44327010;44327013"
{
"status": "OK",
"count": 3,
"page": 1,
"rpp": 10,
"results": [
{
"omitted for example"
},
],
"query": "client=[client_key]&v=9®ion=Cuyahoga%20County,%20Ohio&parcel_id=44327012;44327010;44327013"
}
If you request building footprints, a new entry in results will be available for any records we have data for:
"results": [
{
...
"buildings_poly": [
{ "geom_as_wkt": ... }
]
}
]
Parcel Id queries return the parcel record whose assessor-assigned Parcel Id (also known as Parcel Identification Number (PIN) or Assessor's Parcel Number (APN)) matches a given parameter.
For the HTTP request URL and response format, see the Request & Response Structure section above.
Query Parameters
Parameter | Default | Required | Description |
---|---|---|---|
client/token | none | true | Your client key or generated token. |
v | none | true | API version. Current version is 9. |
region | none | true | Geographic region to search in, can be County, State, or Zip code. |
county_id | none | false | County FIPS55 code, can be used in place of region |
zip_code | none | false | Zip code, can be used in place of region |
parcel_id | none | true | Semi-colon separated list of Parcel IDs |
return_buildings | none | false | Set to true to receive building footprint polygons in your result records. Version 3+ feature only. |
rpp | 10 | false | Results per page. If you have more results than this parameter, the API will paginate. Also see note. |
page | 1 | false | Result page, if there are more results than specified in the rpp parameter. |
Owner Name Queries
curl "https://reportallusa.com/api/parcels?client=[client_key] \
&v=9®ion=Cuyahoga%20County,%20Ohio&owner=Smith"
Multiple owners can be specified by separating them with a semicolon:
curl "https://reportallusa.com/api/parcels?client=[client_key] \
&v=9®ion=Cuyahoga%20County,%20Ohio&owner=Smith;Jones"
{
"status": "OK",
"count": 5194,
"page": 1,
"rpp": 10,
"results": [
{
"omitted for example"
},
],
"query": "client=[client_key]&v=9®ion=Cuyahoga%20County,%20Ohio&owner=Smith;Jones"
}
If you request building footprints, a new entry in results will be available for any records we have data for:
"results": [
{
...
"buildings_poly": [
{ "geom_as_wkt": ... }
]
}
]
Owner Name queries return the parcel record(s) whose owner name matches a given parameter. The owner name format is "Lastname Firstname". If a single word in given (e.g. "Smith"), an exact match search on last name (surname) is performed. If more than one word is given (e.g. "Smith J"), a prefix match is performed. To perform a prefix match on a single word, add a star to the end of the word (e.g. "Smit*").
For the HTTP request URL and response format, see the Request & Response Structure section above.
Query Parameters
Parameter | Default | Required | Description |
---|---|---|---|
client/token | none | true | Your client key or generated token. |
v | none | true | API version. Current version is 9. |
region | none | true | Geographic region to search in, can be County, State, or Zip code. |
county_id | none | false | County FIPS55 code, can be used in place of region |
zip_code | none | false | Zip code, can be used in place of region |
owner | none | true | Owner name in "Lastname Firstname" format (details above). Accepts a semicolon-separated list of multiple. |
return_buildings | none | false | Set to true to receive building footprint polygons in your result records. Version 3+ feature only. |
rpp | 10 | false | Results per page. If you have more results than this parameter, the API will paginate. Also see note. |
page | 1 | false | Result page, if there are more results than specified in the rpp parameter. |
Point Queries
In web mercator coordinates using a
spatial_intersect=POINT(x y)
parameter:
curl "https://reportallusa.com/api/parcels?client=[client_key] \
&v=9&spatial_intersect=POINT(-7804647.3396951%205055285.6724133)"
In WGS84 Lon/Lat coordinates using a
spatial_intersect=POINT(lon lat)&si_srid=4326
parameter:
curl "https://reportallusa.com/api/parcels?client=[client_key] \
&v=9&spatial_intersect=POINT(-70.110502%2041.2905919)&si_srid=4326"
{
"status": "OK",
"count": 1,
"page": 1,
"rpp": 10,
"results": [
{
"omitted for example"
},
],
"query": "client=[client_key]&v=9&spatial_intersect=POINT(-7804647.3396951%205055285.6724133)"
}
If you request building footprints, a new entry in results will be available for any records we have data for:
"results": [
{
...
"buildings_poly": [
{ "geom_as_wkt": ... }
]
}
]
Point queries return the parcel record whose polygon contains the given query point. (In rare cases such as some condominium parcels, more than one record can be returned.) There are two point query formats, depending on whether you wish to supply a point in the web mercator coordinate system or the WGS84 Lon/Lat coordinate system.
For the HTTP request URL and response format, see the Request & Response Structure section above.
Query Parameters
Parameter | Default | Required | Description |
---|---|---|---|
client/token | none | true | Your client key or generated token. |
v | none | true | API version. Current version is 9. |
spatial_intersect | none | true | A spatial intersect Point in either web mercator or WGS84 formats |
return_buildings | none | false | Set to true to receive building footprint polygons in your result records. Version 3+ feature only. |
rpp | 10 | false | Results per page. If you have more results than this parameter, the API will paginate. Also see note. |
page | 1 | false | Result page, if there are more results than specified in the rpp parameter. |
Nearest Parcel Queries
In web mercator coordinates using a
spatial_nearest=POINT(x y)
orspatial_nearest=POLYGON((...))
parameter:
curl "https://reportallusa.com/api/parcels?client=[client_key] \
&v=9&spatial_nearest=POINT(-7804647.3396951%205055285.6724133)"
In WGS84 Lon/Lat coordinates using a
spatial_nearest=POINT(x y)&sn_srid=4326
orspatial_nearest=POLYGON((...))&sn_srid=4326
parameter:
curl "https://reportallusa.com/api/parcels?client=[client_key] \
&v=9&spatial_nearest=POINT(-70.110502%2041.2905919)&sn_srid=4326"
{
"status": "OK",
"count": 10,
"page": 1,
"rpp": 10,
"results": [
{
"omitted for example"
},
],
"query": "client=[client_key]&v=9&spatial_nearest=POINT(-7804647.3396951%205055285.6724133)"
}
If you request building footprints, a new entry in results will be available for any records we have data for:
"results": [
{
...
"buildings_poly": [
{ "geom_as_wkt": ... }
]
}
]
Near parcel queries return the parcel records closest to the given query point, in increasing order of distance. There are two nearest parcel query formats, depending on whether you wish to supply a geometry in the web mercator coordinate system or the WGS84 Lon/Lat coordinate system.
For the HTTP request URL and response format, see the Request & Response Structure section above.
Query Parameters
Parameter | Default | Required | Description |
---|---|---|---|
client/token | none | true | Your client key or generated token. |
v | none | true | API version. Current version is 9. |
spatial_nearest | none | true | A spatial intersect Point or Polygon in either web mercator or WGS84 formats for which to find nearest parcels |
return_buildings | none | false | Set to true to receive building footprint polygons in your result records. Version 3+ feature only. |
rpp | 10 | false | Results per page. If you have more results than this parameter, the API will paginate. Also see note. |
page | 1 | false | Result page, if there are more results than specified in the rpp parameter. |
Polygon Queries
In web mercator coordinates using a
spatial_intersect=POLYGON((...))
parameter:
curl "https://reportallusa.com/api/parcels?client=[client_key] \
&v=9&spatial_intersect=POLYGON((-9663128.4741915%203962254.4093738,-9663128.4741915%203962386.9798447,-9663033.5250705%203962386.9798447,-9663033.5250705%203962254.4093738,-9663128.4741915%203962254.4093738))"
In WGS84 Lon/Lat coordinates using a
spatial_intersect=POLYGON((...))&si_srid=4326
parameter:
curl "https://reportallusa.com/api/parcels?client=[client_key] \
&v=9&spatial_intersect=POLYGON((-86.8053600077677%2033.5029528113281,-86.8053600077677%2033.5039458470498,-86.8045070653017%2033.5039458470498,-86.8045070653017%2033.5029528113281,-86.8053600077677%2033.5029528113281))&si_srid=4326"
{
"status": "OK",
"count": 8,
"page": 1,
"rpp": 10,
"results": [
{
"omitted for example"
},
],
"query": "client=[client_key]&v=9&spatial_intersect=POLYGON((-9663128.4741915%203962254.4093738,-9663128.4741915%203962386.9798447,-9663033.5250705%203962386.9798447,-9663033.5250705%203962254.4093738,-9663128.4741915%203962254.4093738))"
}
If you request building footprints, a new entry in results will be available for any records we have data for:
"results": [
{
...
"buildings_poly": [
{ "geom_as_wkt": ... }
]
}
]
There are two polygon query formats, depending on whether you wish to supply a polygon in the web mercator coordinate system or the WGS84 Lon/Lat coordinate system.
For the HTTP request URL and response format, see the Request & Response Structure section above.
Query Parameters
Parameter | Default | Required | Description |
---|---|---|---|
client/token | none | true | Your client key or generated token. |
v | none | true | API version. Current version is 9. |
spatial_intersect | none | true | A spatial intersect Polygon in either web mercator or WGS84 formats. |
return_buildings | none | false | Set to true to receive building footprint polygons in your result records. Version 3+ feature only. |
rpp | 10 | false | Results per page. If you have more results than this parameter, the API will paginate. Also see note. |
page | 1 | false | Result page, if there are more results than specified in the rpp parameter. |
Robust Id & Rausa Id Queries
You can query a specific parcel record which you have queried in the past in one of two ways. Each is based on querying for a record with a unique key (i.e., a primary key).
The two unique keys for parcel records are the singular key robust_id=…
, and the compound (pair of values) key county_id=…&rausa_id=…
.
robust_id
is a better choice for longer-term referencing of a parcel record, since it is unlikely to change across data reloads (unless the parcel record in question has changed significantly, such as a parcel_id change). The robust_id
of a parcel record is a string value.
For the HTTP request URL and response format, see the Request & Response Structure section above.
Robust Id Query Parameters
Parameter | Default | Required | Description |
---|---|---|---|
client/token | none | true | Your client key or generated token. |
v | none | true | API version. Current version is 9. |
robust_id | none | true | ReportAll robust_id parcel record identifier. A string. |
Alternatively, a parcel record can be queried by requesting it with county_id=…
and rausa_id=…
integer values. The rausa_id
of a parcel record is very likely to change when the data is reloaded (refreshed), so it should not be used to reference a property record over a long time period.
County Id & RaUsa Id Query Parameters
Parameter | Default | Required | Description |
---|---|---|---|
client/token | none | true | Your client key or generated token. |
v | none | true | API version. Current version is 9. |
county_id | none | true | County FIPS55 code. An integer. |
rausa_id | none | true | RaUsa Id of the parcel record within its county. An integer. |
Available Filters
We offer a wide assortment of additional filters that you can use to narrow down your result set. Any of the filters in the table below can be applied to our Address, Owner Name, or Parcel ID endpoints. Either append them to your GET query string, or to your POST body.
Filters
Filter | Description |
---|---|
trans_date_min | Transfer date, minimum. In the form of MM-DD-YYYY. |
trans_date_max | Transfer date, maximum. In the form of MM-DD-YYYY. |
sale_price_min | Sale price, minimum. |
sale_price_max | Sale price, maximum. |
mkt_val_tot_min | Total market value, minimum. |
mkt_val_tot_max | Total market value, maximum. |
mkt_val_bldg_min | Building market value, minimum. |
mkt_val_bldg_max | Building market value, maximum. |
bldg_sqft_min | Building square footage, minimum. |
bldg_sqft_max | Building square footage, maximum. |
buildings_min | Number of buildings on property, minimum. |
buildings_max | Number of buildings on property, maximum. |
story_height_min | Number of stories, minimum. A value of 1 to 6. |
story_height_max | Number of stories, maximum. A value of 1 to 6. |
ngh_code | Neighborhood code. A numeric value, can be separated by semicolons. |
land_use_code | Land use code. Numeric value. |
land_use_class | Land use classification. Can be any of: Residential, Agricultural, Commercial, Industrial, Mineral, Tax Exempt (case sensitive) |
acreage_min | Deeded acreage, minimum. |
acreage_max | Deeded acreage, maximum. |
calc_acreage_min | Calculated acreage, minimum. |
calc_acreage_max | Calculated acreage, maximum. |
acreage_adjacent_with_sameowner_min | Calculated acreage summed with that of nearby parcels with the same owner, minimum. |
acreage_adjacent_with_sameowner_max | Calculated acreage summed with that of nearby parcels with the same owner, maximum. |
school_dist_id | School district ID. A numeric value. |
Rate Limits
Standard API parcels requests are rate-limited to no more than 20 per second (per API key). If this limit is exceeded then subsequent requests (21+) in the same second will return a 429
(Too Many Requests) status code. (Note that an alternative possible cause of a 429
response is that quota is exceeded; see the "message"
value to distinguish the two cases.)
For more details about error responses see the Error Response Format section above or the Errors section below.
Standard API Raster Tiles
Using our raster tiles endpoint, you can overlay our parcel boundaries as raster tile images directly on your basemap of choice using a Tiled Mapping Service (TMS) compatible mapping framework.
REST API
curl "https://reportallusa.com/dyn/tile.py?map=siteroot/Base_Layers.map \
&layer=Parcels&mode=tile&tilemode=gmap&tile=X+Y+Z&client=[client_key]"
Parcel boundary raster tiles can be accessed by issuing an HTTP GET request to our server as specified below. The response is a transparent PNG image, 256px x 256px in size, of rendered parcel boundary lines.
HTTP Request
GET https://reportallusa.com/dyn/tile.py?
Query Parameters
Parameter | Description |
---|---|
map | Must be siteroot/Base_Layers.map |
layer | Must be Parcels |
mode | Must be tile |
tilemode | Must be gmap |
tile | Requested tile in the form of X+Y+Z, where X is the tile's X coordinate, Y is the tile's Y coordinate, and Z is the tile's Z (zoom) coordinate, in the Google Maps coordinate system. |
palette_recolor | Optional, accepts a value in the form of r%20g%20b ("%20" is a urlencoded space) where r, g, and b are numbers between 0 and 255 (inclusive), indicating the amount of red, green, and blue in the desired color. |
client/token | Your client key or generated token |
Javascript API
Google Maps:
<!-- Notice: Set the key= parameter below to your own Google Maps API Key. -->
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=[google_api_key]"></script>
<!-- Notice: Set the client= parameter below to your own Real Estate Portal USA Parcel Overlays client key. -->
<script type="text/javascript" src="https://reportallusa.com/overlay/js.php?v=9&map=Google&client=[client_key]"></script>
var mapOptions = {
center: new google.maps.LatLng(48.03, -122.4),
zoom: 15,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
REP.Layer.Google.Initialize(map, {'Return_Buildings': true});
Bing Maps:
<script type="text/javascript" src="http://www.bing.com/api/maps/mapcontrol?callback=repInitBingMap" async defer></script>
<!-- Notice: Set the client= parameter below to your own Real Estate Portal USA Parcel Overlays client key. -->
<script type="text/javascript" src="https://reportallusa.com/overlay/js.php?v=9&map=Bing&client=[client_key]"></script>
map = new Microsoft.Maps.Map(document.getElementById("mapDiv"), {credentials: bingMapsKey, center: new Microsoft.Maps.Location(48.03, -122.4), zoom: 15, mapTypeId: "r"});
var tileSource = new Microsoft.Maps.TileSource({uriConstructor: REP.Layer.Bing.parcelsURIConstructor, minZoom: 15, maxZoom: 21});
var tileLayer = new Microsoft.Maps.TileLayer({mercator: tileSource, visible: true});
//map.entities.push(tileLayer);
map.layers.insert(tileLayer);
OpenLayers 3:
<script src="//openlayers.org/en/v3.4.0/build/ol.js"></script>
<script type="text/javascript" src="https://reportallusa.com/overlay/js.php?v=9&map=OpenLayers3&client=[client_key]"></script>
map = new ol.Map({
target: 'map',
controls: [new ol.control.Zoom()],
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
}),
new ol.layer.Tile({
source: new ol.source.XYZ({
url: REP.Layer.OpenLayers3.parcelsPrefixedURL(REP.ClientKey)
}),
maxResolution: REP.Layer.OpenLayers3.parcelsMaxResolution(),
extent: REP.Layer.OpenLayers3.parcelsExtent()
})
],
view: new ol.View({
center: ol.proj.transform([-122.4, 48.03], 'EPSG:4326', 'EPSG:3857'),
zoom: 15
})
});
Using our parcel boundary tile Javascript API, you can overlay parcel data in your existing web map. To use it, simply include our Javascript library then add our tile layer to your map as shown on the right.
Library URL
https://reportallusa.com/overlay/js.php
Library Parameters
Parameter | Description |
---|---|
v | API version to use for popup querying on map click; the current version of our API is 9 |
map | Which mapping solution you're currently using. Available options are Google , Bing , OpenLayers2 , and OpenLayers3 |
client/token | Your ReportAll client key, or generated token |
ArcGIS API Map Service
Using our ArcGIS Map Service, you can integrate our parcel data into your application using our Map Service raster tile and query endpoints.
The Map Service raster tile (Tiled Map Service / TMS) endpoint can be used to overlay our parcel boundary raster tile images directly on your basemap of choice using an ArcGIS or Tiled Mapping Service (TMS) compatible mapping framework.
The Map Service query endpoint can be used to identify parcels by a spatial or attribute query, returning matching parcel records including vector and attribute information.
Map Service Raster Tile Endpoint
The Map Service parcel boundary Tiled Map Service (TMS) endpoint is:
https://reportallusa.com/api/rest_services/client=[client_key]/Parcels/MapServer
Using the above will cause clients to access it as a Tiled Map Service (TMS) with requests like .../MapServer/tile/<level>/<row>/<column>
, with the 3 parameters being a tile's Z, Y, and X parameters, respectively. Tiled map service requests return a transparent raster (PNG) image of parcel boundary lines to be overlaid on a basemap.
Note that tiled layers do not support reprojection or querying (such as clicking on parcels on the map). For querying, you can add our Parcels layer as a map service layer to handle clicks and other queries. For both querying and reprojection, you can see instead our ArcGIS API Feature Service endpoint.
For more information on request structure see ESRI's Map Tile documentation page.
Map Service Query Endpoint
The Map Service includes a query endpoint which allows searching for parcels with a where=
clause attribute expression (predicate). Due to the large size of the parcels layer there are some restrictions on available types of queries. For details on types of queries supported by the Map Service, see our ArcGIS API Service Queries section.
For more information on request structure see ESRI's Map Service Layer Query documentation page.
The default response format is in GeoServices format, the native response format of ArcGIS Server. For the alternative GeoJSON format output, see the GeoJSON section.
ArcGIS Maps SDK
You can add parcels as a visual Map Service layer to your ArcGIS Maps SDK map by passing the tiled map service endpoint URL as a parameter to ArcGISTiledMapServiceLayer or ArcGISTiledLayer (or similar, depending on the specific language), then adding that layer to your map. An example is shown at right (for JavaScript).
Add our tile layer to your ESRI map:
var tiled = new ArcGISTiledMapServiceLayer("https://reportallusa.com/api/rest_services/client=[client_key]/Parcels/MapServer");
map.addLayer(tiled);
You can query our parcels in your ArcGIS Maps SDK map by adding the Map Service's Parcels layer to your map and configuring the spatial or attribute query to run against it. For instance, an example showing querying the layer by a click is shown at right.
Query our parcel attributes with a click:
var queryTask = new QueryTask("https://reportallusa.com/api/rest_services/client=[client_key]/Parcels/MapServer/0");
// Build query filter.
var query = new Query();
query.returnGeometry = true;
query.outSpatialReference = { "wkid": 102100 };
map.infoWindow.resize(275, 325);
var currentClick = null;
// Listen for map click event and launch point query task.
map.on("click", function (evt) {
map.graphics.clear()
map.infoWindow.hide();
query.spatialRelationship = Query.SPATIAL_REL_INTERSECTS;
query.geometry = evt.mapPoint;
currentClick = evt.mapPoint;
queryTask.execute(query);
});
// Listen for QueryTask complete event.
queryTask.on("complete", function (evt) {
var features = evt.featureSet.features;
var symbol = new SimpleFillSymbol(SimpleFillSymbol.STYLE_SOLID, new SimpleLineSymbol(SimpleFillSymbol.STYLE_SOLID, new Color([200, 0, 0]), 2), new Color([144, 238, 144, 0.6]));
for (var i = 0; i < features.length; i++) {
var graphic = features[i];
graphic.setSymbol(symbol);
map.graphics.add(graphic);
}
if (features.length) {
var firstGraphic = evt.featureSet.features[0];
var attrs = firstGraphic.attributes;
map.infoWindow.setTitle("Parcel " + attrs.parcel_id + " in " + attrs.county_name + ", " + attrs.state_abbr);
var fieldAliases = evt.featureSet.fieldAliases;
var content = "";
for (var attr_name in attrs) {
if (attrs.hasOwnProperty(attr_name)) {
var fieldAlias = attr_name;
if (fieldAliases.hasOwnProperty(attr_name)) {
fieldAlias = fieldAliases[attr_name];
}
content += "<div><b>" + fieldAlias + ": </b>" + attrs[attr_name] + "</div>\n";
}
}
map.infoWindow.setContent(content);
var currentClickScreen = map.toScreen(currentClick);
map.infoWindow.show(currentClickScreen, map.getInfoWindowAnchor(currentClickScreen));
}
});
A complete working example including both raster tile overlays and querying for a parcel on click is available on our ArcGIS API for Javascript demonstration page. To see the query operation in use there, click on a parcel. For more details you can use your browser's "View Source" capability and/or Developer Tools Network tab to inspect the request and response.
Quota for Map Service requests
The type and amount of quota used for a Map Service request depends on the endpoint and the nature of the request as specified below.
Tiled Map Service requests
ArcGIS Tiled Map Service requests use 1 tile quota per tile request.
Map Service requests
ArcGIS Map Service Query requests by default return all attributes (outFields=*
).
Because of this, ArcGIS Map Service Query requests use 1 parcels quota for each parcel record returned. Note that single query request (HTTP request) can return zero or more parcel records. To limit the maximum number of records to be returned you can use the resultRecordCount
parameter. To calculate the number of records that would be returned for a query without returning the actual records (and without incurring any quota use) you can use the returnCountOnly=true
parameter.
ArcGIS API Feature Service
The ArcGIS Feature Service endpoint can be used to integrate our Parcel layer into maps in ESRI ArcGIS Pro, ArcGIS Online, and ArcGIS Earth. Unlike the Map Service described in the previous section, the Feature Service supports more types of spatial querying, reprojection, and (because it returns all data in vector form) custom symbology.
For the Feature Service Parcels Layer endpoint, either of the below can be used:
https://reportallusa.com/api/rest_services/client=[client_key]/Parcels/FeatureServer/0
or
https://reportallusa.com/client=[client_key]/rest/services/Parcels/FeatureServer/0
Some applications may only work with one of the formats above.
ArcGIS Pro
Using our Feature Service endpoint, you can add our Parcels layer to ArcGIS Pro with the following steps:
In ArcGIS Pro, click the "Map" tab
Click "Add Data" (the bottom part of the button for showing a dropdown, not the top part of the button which opens a dialog)
Click "Data From Path"
Enter Path:
https://reportallusa.com/api/rest_services/client=[client_key]/Parcels/FeatureServer/0
Click "Add"
Zoom in if necessary to view parcels
Clicking on the map selects a parcel and shows its attributes in a popup dialog. Symbology, labeling, and filtering can be configured by right-clicking the Parcels layer in the left pane.
ArcGIS Online
Using our Feature Service endpoint, you can add our Parcels layer to your ArcGIS Online map with the following steps:
In the left-side toolbar, click "Add" (plus sign), then "Add layer from URL". (Or in the "Layers" menu, click the dropdown next to the "Add" button and choose "Add layer from URL".)
In the "URL" field enter:
https://reportallusa.com/client=[client_key]/rest/services/Parcels/FeatureServer/0
Click "Add to Map"
Zoom in if necessary to view parcels
Clicking on the map selects a parcel and shows its attributes in a popup. Symbology, labeling, and filtering can be configured using the corresponding functions in the right-side toolbar.
ArcGIS Earth
Using our Feature Service endpoint, you can add our Parcels layer to ArcGIS Earth with the following steps:
Click the "plus" button in the upper-left toolbar to open the dialog for adding data to the map
Click the "Enter a URL" tab
In the "Type" field, ensure "ArcGIS Server Web Service" is selected
In the "URL" field enter:
https://reportallusa.com/api/rest_services/client=[client_key]/Parcels/FeatureServer/0
Wait for the "Name" field to auto-populate to the value "Parcels"
Click "OK"
Zoom in if necessary to view parcels
Clicking on the map selects a parcel and shows its attributes in a popup. Symbology, labeling, and filtering can be configured by right-clicking the "Parcels" layer in the left-hand panel.
Symbology Options
Feature Service responses return parcel polygons in vector form. The symbology with which they are rendered is up to the client application. A default single symbol styling of orange lines with no fill is specified in the Feature Service's Parcels layer metadata.
If you continue to use "Single symbol" symbology, which applies the same styling to all features in the layer, you can customize the layer symbology any way you wish.
For "Unique value" symbology, where features can be styled differently based on an attribute value, the feature service Parcels Layer supports the following attributes: county_id
, state_abbr
, county_name
, land_use_class
, owner_occupied
, usps_residential
, buildings
, and last_updated
. Unique value symbology cannot be used for other attributes as they have too many distinct values.
Feature Service Query Endpoint
The Feature Service includes a query endpoint which allows searching for parcels with a where=
clause attribute expression (predicate). Due to the large size of the parcels layer there are some restrictions on available types of queries. For details on types of queries supported by the Feature Service, see our ArcGIS API Service Queries section.
For more information on Feature Service query endpoint request structure see ESRI's Feature Service Layer Query documentation page.
Quota for Feature Service requests
Feature Service Query requests by default return minimal parcel attributes.
Requests for rectangular areas with no additional attributes (beyond those included by default: OBJECTID
, robust_id
, county_id
, county_name
, state_abbr
, muni_name
, census_place
, addr_city
, and cty_row_id
) use 1 tiles quota. These requests would be typical when viewing parcel boundaries on the map, but without any labeling or selection. If the number of records in the area exceeds maxRecordCount
then applications will request the remaining records in pages of (at most) maxRecordCount
features, with each of those page requests using 1 tiles quota.
Requests for rectangular areas with one additional attribute (beyond the default attributes listed above) use 10 tiles quota. These requests would be typical when viewing parcel boundaries on the map, with the parcels being labeled by a single attribute.
Requests which are not for rectangular areas, and/or which specify more than one additional attribute (beyond the default attributes) use an amount of parcel quota equal to the number of parcel records in the response times the fraction of attributes requested. These requests would be typical when selecting parcels. For instance when a request specifies outFields=*
, such as clicking on a parcel to identify it, the response includes all attributes so the fraction is 1.0 and the amount of parcels quota used is the number of returned records. When fewer attributes are requested, the amount of parcels quota used is proportionally less.
Feature Service on Legacy Maps
ESRI Web AppBuilder and ArcGIS Online Classic maps request all attributes (outFields=*
) with each request, which is typically unnecessary and causes them to use significant parcel quota. When the ReportAll Feature Service detects requests from such maps, it returns only minimal attributes in order to prevent excessive parcels quota use. You can tell whether this quota mitigation took place by checking whether an "Upgrade Note" attribute appears in every returned record (e.g. popup), and/or noting that most (all non-identifier) fields are empty.
It is not always possible for the ReportAll Feature Service to distinguish requests from legacy maps.
Web AppBuilder and its underlying JS 3.x library are being retired. ESRI recommends rebuilding Web AppBuilder maps with ArcGIS Experience Builder and/or ArcGIS Instant Apps. Maps rebuilt in these frameworks use a newer library which does not cause quota use problems.
If you experience excessive parcels quota use when adding the ReportAll Feature Service to a map, or if you are unable to rebuild a Web AppBuilder or other map using the legacy ESRI JS 3.x library, please contact sales@reportallusa.com to see if a workaround or other options are possible.
ArcGIS API Service Queries
The map service layer endpoint is:
https://reportallusa.com/api/rest_services/client=[client_key]/Parcels/MapServer/0
and the feature service layer endpoint is:
https://reportallusa.com/api/rest_services/client=[client_key]/Parcels/FeatureServer/0
Using the above for querying (parcel record search) operations will cause clients to access the layer's .../0/query?...
endpoint with query parameters specifying parcel records to match. The following query parameters are supported: geometry
, geometryType
, inSR
, spatialRel
, where
, objectIds
, outFields
, returnGeometry
, outSR
, returnCountOnly
, orderByFields
, resultRecordCount
, resultOffset
, and f
.
The query endpoint's where
clause supports search either by a unique record identifier or for all records matching an expression.
Unique Identifer Search
A parcel record(s) can be directly looked up by unique identifier by specifying the where
clause value as one of:
OBJECTID = …
orOBJECTID IN (…
)robust_id = …
orrobust_id IN (…)
county_id = … AND cty_row_id = …
(If you are storing a long-term reference to a parcel record, robust_id
is the best identifier to use.)
Multi-Record search
A multi-record search can be performed by specifying the where
clause value as an expression of the form field operator value
, where:
field
is a field from our ArcGIS API Data Dictionaryoperator
is=
,<>
,!=
,>
,<
,>=
,<=
,LIKE
, orNOT LIKE
value
is an integer, floating point number, single-quoted string, or unquoted string token without any special characters- Additionally,
value IS NULL
andvalue IS NOT NULL
are supported
Multiple field operator value
expressions can be connected with AND
or OR
operators, and parentheses can be used.
When doing a multi-record search, a geographic region constraint consisting of state_abbr = …
, county_id = …
, and/or county_name = …
is required. This limits the part of the dataset to be searched, and is needed is due to the large size of the parcel layer.
- A geographic region constraint is not required when a geometry predicate is specified (e.g. with ArcGIS Pro's "Definition Query").
- As an alternative to the
= …
operator, you can use theIN (…, …, …)
operator to specify a list of multiple values. - Attempting to perform a multi-record search without specifying a geographic region constraint will cause the service to return an error.
The resultOffset parameter can be used when fetching query results to skip the specified number of records and start from the next record (for example, resultOffset + 1th). Its default is 0. You can use resultOffset to fetch records beyond the layer's maxRecordCount value. For example, if maxRecordCount is 250, you can get the next 250 records by setting resultOffset=250; the query results returned would be record numbers 251 to (up to) 500.
For more information on query parameters see ESRI's Map Service Layer Query and/or Feature Service Layer Query documentation pages.
The default response format is in GeoServices format, the native response format of ArcGIS Server. For the alternative GeoJSON format output, see the GeoJSON section.
GeoJSON
To receive responses in GeoJSON format, issue queries against our Map Service or Feature Service endpoint as specified in our ArcGIS API Service Queries section and specify for the "f" (format) parameter, f=geojson
. This instructs the endpoint to output GeoJSON (rather than the default of f=json
which returns ArcGIS Server GeoServices JSON).
Several example GeoJSON queries and their responses are shown in the sidebar.
Querying by point intersection and receiving result(s) in GeoJSON format. Note that the query string contains (at the end) the "f=geojson" parameter. Make sure to replace
[client_key]
with your real client key.
curl 'https://reportallusa.com/api/rest_services/client=[client_key]/Parcels/MapServer/0/query?returnGeometry=true&outFields=*&inSR=4326&geometry=-122.43198375920183,48.038068850673966&geometryType=esriGeometryPoint&spatialRel=esriSpatialRelIntersects&outSR=4326&f=geojson'
{
"type": "FeatureCollection",
"crs": {"type": "name", "properties": {"name": "EPSG:4326"}},
"features": [
{
"type": "Feature",
"id": 86279636,
"properties": {"county_id": 53029, "cty_row_id": 18739, "OBJECTID": 86279636, "parcel_id": "810131", "county_name": "Island", "muni_name": "South Whidbey Island", "state_abbr": "WA", "address": "", "census_zip": "98260", "owner": "SMITH CRAIG N", "mail_address3": "FREELAND WA 98249", "mail_placename": "FREELAND", "mail_statename": "WA", "mail_zipcode": "98249", "mkt_val_land": "135000.00", "mkt_val_bldg": "0.00", "mkt_val_tot": "135000.00", "buildings": 0, "school_district": "South Whidbey School District", "acreage_deeded": "9.9600", "acreage_calc": 9.93992903278705, "census_block": 3006, "census_blkgrp": 3, "census_tract": 971900, "latitude": 48.0377695843873, "longitude": -122.43203610114, "elevation": 239.095362464569, "robust_id": "AADPJWQPbKvSJr-V", "last_updated": "2020-Q2"},
"geometry": {"type": "MultiPolygon", "coordinates": [[[[-122.43070543, 48.03855177], [-122.43073815, 48.03674716], [-122.43209362, 48.03676516], [-122.43342692, 48.03678286], [-122.43339154, 48.03858766], [-122.43070543, 48.03855177]]]]}
}
]
}
Querying by county (FIPS55 code) & parcel number and receiving result(s) in GeoJSON format.
curl 'https://reportallusa.com/api/rest_services/client=[client_key]/Parcels/MapServer/0/query?returnGeometry=true&outSR=4326&outFields=*&where=county_id=39055%20AND%20parcel=%2701-000050%27&f=geojson'
{
"type": "FeatureCollection",
"crs": {"type": "name", "properties": {"name": "EPSG:4326"}},
"features": [
{
"type": "Feature",
"id": 176430794,
"properties": {"county_id": 39055, "cty_row_id": 9988, "OBJECTID": 176430794, "parcel_id": "01-000050", "county_name": "Geauga", "muni_name": "Auburn", "state_abbr": "OH", "address": "9809 WASHINGTON St", "addr_number": "9809", "addr_street_name": "WASHINGTON", "addr_street_type": "St", "addr_city": "CHAGRIN FALLS", "addr_zip": "44023", "addr_zipplusfour": "5485", "census_zip": "44023", "owner": "RYLYND PROPERTIES LLC", "mail_name": "RYLYND PROPERTIES LLC", "mail_address1": "9809 WASHINGTON ST", "mail_address3": "CHAGRIN FALLS OH 44023", "mail_addressnumber": "9809", "mail_streetname": "WASHINGTON", "mail_streetnameposttype": "ST", "mail_placename": "CHAGRIN FALLS", "mail_statename": "OH", "mail_zipcode": "44023", "owner_occupied": true, "usps_residential": "Residential", "trans_date": 951454800000, "sale_price": "210000.00", "mkt_val_land": "113300.00", "mkt_val_bldg": "119900.00", "mkt_val_tot": "233200.00", "buildings": 8, "ngh_code": "22000", "land_use_code": "521", "land_use_class": "Residential", "legal_desc1": "SEC 1 TR 2", "legal_desc2": "SEC 1 TR 2", "legal_desc3": "SEC 1 TR 2", "school_district": "Kenston Local School District", "acreage_deeded": "4.8200", "acreage_calc": 5.36077292800584, "census_block": 1024, "census_blkgrp": 1, "census_tract": 311900, "latitude": 41.3930465864256, "longitude": -81.2923664551329, "elevation": 1210.9329944472, "robust_id": "AACYj1rgziw5ShYr", "last_updated": "2020-Q2"},
"geometry": {"type": "MultiPolygon", "coordinates": [[[[-81.29241491, 41.39234767], [-81.29290291, 41.39253324], [-81.29338028, 41.39271477], [-81.29257265, 41.39391954], [-81.29196033, 41.39368677], [-81.29164937, 41.39356856], [-81.2916328, 41.39356221], [-81.2914244, 41.39348229], [-81.29143891, 41.39197652], [-81.29192691, 41.39216209], [-81.29241491, 41.39234767]]]]}
}
]
}
Vector Tiles
Map tiles can be accessed in MapBox Vector Tile (MVT) format using the below endpoint:
HTTP Request
GET https://reportallusa.com/api/rest_services/client=[client_key]/ParcelsVectorTile/MapBoxVectorTileServer/tile/{z}/{x}/{y}.mvt
A working example is available at our API MapBox Vector Tiles example page.
The vector tiles endpoint supports zoom levels ("z" parameter) 14 thru 17 inclusive.
Setting Feature Id to robust_id
MapBox Vector Tiles slice polygons which cross tile boundaries. To ensure your mapping framework properly reconstructs parcels which cross tile boundaries back into single polygons (rather than presenting multiple, sliced polygons), you need to instruct your mapping framework that the feature id of the tile data's 'parcels' layer is its 'robust_id' attribute. In MapBox GL JS you can accomplish this by setting the source's promoteId
attribute to {"parcels": "robust_id"}
. For an example of how to set this for the MapBox GL JS framework, visit our API MapBox Vector Tiles example page, view its source, and search for promoteId
.
Additional Attributes
Additional attributes can be requested to be included in the vector tiles. To include additional attributes in the output (besides the default of robust_id), after the /client=.../ path part, add an additional path part specifying a comma-separated list of fields like: /outFields=field1,field2,.../. For example to include both parcel_id and owner in the output, use:
GET https://reportallusa.com/api/rest_services/client=[client_key]/outFields=parcel_id,owner/ParcelsVectorTile/MapBoxVectorTileServer/tile/{z}/{x}/{y}.mvt
A complete list of available fields can be found on our ArcGIS API Data Dictionary page.
If you need many attributes for a small number of (say, clicked or otherwise focused) parcels, instead of listing those attributes as outFields in the above, consider issuing a request(s) to the map service layer query endpoint instead. This may be more efficient from a quota perspective because a vector tile request specifying n
outFields attributes can use up to n+1
tile quota, whereas a query endpoint request for one record will use only one parcels (not tile) quota.
Such a query endpoint request for full parcel details (attributes) could look like:
GET https://reportallusa.com/api/rest_services/client=[client_key]/Parcels/MapServer/0/query?where=robust_id='[robust_id]'
See our API MapBox Vector Tiles example page (including "view source" on it) for a working example of this approach.
The response to the above is by default in ArcGIS Server (JSON) format, though you can request GeoJSON by adding an f=geojson parameter. (See ArcGIS and/or GeoJSON sections of this documentation for more details.)
Tile Quota Use
If no additional attributes are requested, vector tile requests use 1 tile quota per request. For each additional attribute requested, each vector tile request uses one additional tile quota, with the following exceptions:
- Attributes "robust_id", "county_id", "county_name", "state_abbr", "muni_name", "latitude", and "longitude" are free; I.e. they do not cost any tile quota to request. In fact, robust_id will always be included in the response.
- If no parcel centered in the tile has a nonempty value for an attribute, we do not charge any tile quota for that attribute. In other words, additional tile quota is only charged if one or more parcels centered in the tile return a nonempty value for that attribute. In this way, no additional tile quota is used when we return no data for that attribute in the tile.
Errors
If an error occurs in processing your request, the REST API will return an error response. The contents (body) of an error response vary by the endpoint, but are generally in JSON format with a "message": ...
value, possibly with other values indicating "status": "error"
, "code": ...
and/or "details": ..."
.
The ReportAll API uses the following HTTP error status codes:
Error Code | Meaning |
---|---|
404 | Not Found -- The specified endpoint could not be found. |
405 | Method Not Allowed -- You tried to access an endpoint with an invalid method. |
422 | Unprocessable Content -- One or more parameter(s) specifies an invalid value, or is required but missing. |
429 | Too Many Requests -- Either your account has exceeded its available quota, or is temporarily rate limited due to issuing too many requests in a recent time period (see "message"). |
500 | Internal Server Error -- We had a problem with our server. Try again later. |
Release Notes
June 12, 2022
- Addition of 'acreage_adjacent_with_sameowner' attribute.
April 14, 2023
- Add ArcGIS API Feature Service section.
- Restructure documentation.
September 15, 2023
- Clarify documentation ArcGIS API service URLs by populating with user's API key.
- Expand ArcGIS API (Map Service and Feature Service) query types.
- Document Feature Service quota mitigation on legacy maps like Web AppBuilder and ArcGIS Online Classic.
May 28, 2024
- Standard API: Add new version 9
- Add new attributes 'census_place', 'county_link', 'address' (concatenated), 'addr_zipplusfour', 'year_built', 'school_district', 'census_block', 'census_tract', 'fld_zone', 'zone_subty', and 'zoning'.
- For consistency, rename attributes 'rausa_id' to 'cty_row_id', 'physcity' to 'addr_city', and 'physzip' to 'addr_zip'.
- For 'land_cover' and 'crop_cover', change cover type keys from numeric codes to descriptive text.
- ArcGIS / Feature Service API:
- Add new attributes 'county_link', 'section_township_range', 'land_cover', and 'crop_cover'.