NAV
Examples

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&timestamp=1524751569"
{
  "status": "OK",
  "token": "xPBn6y9wBBxxcK2527AHY0YJ2c17k8nU5FAsuvW1_9Qv09NZ4b6BaQZ7lNUHZyl1"
}

Make sure to replace ffffffffff and 1524751569 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&region=Geauga%20County,%20OH&address=100%20Short%20Court"

curl "https://reportallusa.com/api/parcels?client=[client_key] \
  &v=9&region=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&region=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&region=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 \
  &region=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&region=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&region=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&region=Cuyahoga%20County,%20Ohio&owner=Smith;Jones"
{
  "status": "OK",
  "count": 5194,
  "page": 1,
  "rpp": 10,
  "results": [
    {
      "omitted for example"
    },
  ],
  "query": "client=[client_key]&v=9&region=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) or spatial_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 or spatial_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:

  1. In ArcGIS Pro, click the "Map" tab
    ArcGIS Pro Map Tab

  2. Click "Add Data" (the bottom part of the button for showing a dropdown, not the top part of the button which opens a dialog)
    ArcGIS Pro Add Data

  3. Click "Data From Path"
    ArcGIS Pro Add Data From Path

  4. Enter Path: https://reportallusa.com/api/rest_services/client=[client_key]/Parcels/FeatureServer/0
    ArcGIS Pro Add Data From Path Dialog

  5. Click "Add"

  6. Zoom in if necessary to view parcels
    ArcGIS Pro Zoomed In

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:

  1. 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".)
    ArcGIS Online Add Button
     
    ArcGIS Online Add Layer From URL

  2. In the "URL" field enter:
    https://reportallusa.com/client=[client_key]/rest/services/Parcels/FeatureServer/0

    ArcGIS Online Add Layer

  3. Click "Add to Map"

  4. Zoom in if necessary to view parcels
    ArcGIS Online Zoomed In

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:

  1. Click the "plus" button in the upper-left toolbar to open the dialog for adding data to the map
    ArcGIS Earth Add Data

  2. Click the "Enter a URL" tab
    ArcGIS Earth Enter a URL

  3. In the "Type" field, ensure "ArcGIS Server Web Service" is selected

  4. In the "URL" field enter:
    https://reportallusa.com/api/rest_services/client=[client_key]/Parcels/FeatureServer/0

    ArcGIS Earth URL

  5. Wait for the "Name" field to auto-populate to the value "Parcels"

  6. Click "OK"

  7. Zoom in if necessary to view parcels
    ArcGIS Earth Zoomed In

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.

A parcel record(s) can be directly looked up by unique identifier by specifying the where clause value as one of:

(If you are storing a long-term reference to a parcel record, robust_id is the best identifier to use.)

A multi-record search can be performed by specifying the where clause value as an expression of the form field operator value, where:

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.

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:

  1. 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.
  2. 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

April 14, 2023

September 15, 2023

May 28, 2024