MapWise Parcels API Reference (v2)

The MapWise Parcels API provides enhanced programmatic access to Florida parcel data, allowing you to search by owner, PIN, address, acreage, sales, and more. This version includes improved performance, additional fields, and better error handling. Data is sourced from a variety of locations, including county property appraiser offices and the Florida Department of Revenue. This API is not intended for bulk data download, but for targeted queries and integrations.

Authentication

API Key Authentication

All API endpoints require authentication using an API key. You can provide your API key in one of two ways:

Authentication Methods

  • Authorization Header: Authorization: Bearer YOUR_API_KEY
  • X-API-Key Header: X-API-Key: YOUR_API_KEY

Getting Your API Key

To obtain an API key, you must have a valid MapWise subscription and Super Admin privileges:

  1. Log in to your MapWise account
  2. Navigate to My AccountAPI Dashboard
  3. Ensure you have a valid MapWise subscription
  4. Verify you have Super Admin privileges
  5. Generate a new API key from the dashboard
  6. Keep your API key secure and never share it publicly

Requirements:

  • Valid MapWise subscription
  • Super Admin privileges
  • Access to My Account → API Dashboard

Rate Limiting

API keys are subject to rate limiting:

  • Global Limit: 60 requests per minute
  • User Limit: 180 requests per minute (burst)
  • Daily Limit: 5 requests per day (unauthenticated)

Security Best Practices

  • Store API keys in environment variables
  • Never commit API keys to version control
  • Rotate API keys regularly
  • Use HTTPS for all API requests
  • Monitor your API usage and rate limits
GET /api_v2/parcels
curl -X GET "https://maps.mapwise.com/api_v2/parcels?searchCounty=ALACHUA&limit=1" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json"
import requests api_key = "YOUR_API_KEY" url = "https://maps.mapwise.com/api_v2/parcels" params = { "searchCounty": "ALACHUA", "limit": 1 } headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } response = requests.get(url, params=params, headers=headers) data = response.json() print(data)
const apiKey = "YOUR_API_KEY"; const url = "https://maps.mapwise.com/api_v2/parcels?searchCounty=ALACHUA&limit=1"; fetch(url, { method: "GET", headers: { "Authorization": `Bearer ${apiKey}`, "Content-Type": "application/json" } }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error("Error:", error));
<?php $api_key = "YOUR_API_KEY"; $url = "https://maps.mapwise.com/api_v2/parcels"; $params = [ "searchCounty" => "ALACHUA", "limit" => 1 ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url . "?" . http_build_query($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer " . $api_key, "Content-Type: application/json" ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); print_r($data); ?>

Building a Query

Parcels Endpoint

The /api_v2/parcels endpoint provides comprehensive access to parcel data across all supported counties. This endpoint requires authentication and provides full access to the complete dataset.

Parcels Endpoint Features

  • Full Data Access: Complete parcel data across all supported counties
  • Authentication Required: API key authentication for secure access
  • Comprehensive Search: Multiple search parameters and filtering options
  • Flexible Response Format: JSON or HTML output with customizable fields
  • Pagination Support: Built-in pagination for large result sets
  • Aggregation Options: Support for data aggregation and grouping

Usage Guidelines

  • Endpoint: https://maps.mapwise.com/api_v2/parcels
  • Method: GET
  • Authentication: API key required (Bearer token or X-API-Key header)
  • Data Source: Complete parcel database across all supported counties
  • Rate Limiting: Based on your subscription tier
  • Response Format: JSON (default) or HTML

Data Access & Limitations

  • County Coverage: All supported counties available
  • Data Completeness: Full dataset with all available fields
  • Historical Data: Complete sales history and property records
  • Real-time Updates: Data is updated regularly from official sources

The MapWise API v2 supports various query parameters to filter and customize your results. All parameters are optional unless otherwise noted.

Query Parameters

searchCounty string required
Florida county name to search (e.g., 'HILLSBOROUGH', 'POLK'). Use 'ALL' for statewide search. Either searchCounty OR lat_lon is required.
Example: HILLSBOROUGH
lat_lon string required
Coordinate pair for point-in-polygon search within Florida bounding box. Either searchCounty OR lat_lon is required.
Example: 27.9506,-82.4572
searchOwner string
Owner name substring match (case-insensitive).
Example: SMITH
searchPin string
Parcel identification number (PIN) – partial matches allowed.
Example: A-14-29-18-4PP

More Parameters

searchCountyMulti string
Comma-separated list of counties (overrides searchCounty).
Example: HILLSBOROUGH,POLK,ORANGE
searchMailing string
Mailing address substring match across owner address fields.
Example: 123 MAIN ST
searchCityOwner string
Owner mailing address city starts-with filter (searches o_city field).
Example: TAMPA
searchStateOwner string
Owner mailing address state starts-with filter (searches o_state field).
Example: FL
searchZipcodeOwner string
Owner mailing address ZIP code starts-with filter (searches o_zipcode field).
Example: 33602
searchParcelId string
Parcel identification number (PIN) – exact match for unique parcel lookup.
Example: A-14-29-18-4PP-000008-00008.0
searchCity string
Site city starts-with filter.
Example: TAMPA
searchZipcode string
ZIP code starts-with filter (5-digit or ZIP+4).
Example: 33602
searchAddress string
Site address substring match (searches s_address field).
Example: 123 MAIN ST
searchNumber string
Site address street number filter (searches s_number field).
Example: 123
searchStreet string
Site address street name filter (searches s_name field).
Example: MAIN ST
searchUnit string
Site address unit/apartment number filter (searches s_unit field).
Example: APT 101
searchAcresMin number
Minimum GIS acres filter.
Example: 0.5
searchAcresMax number
Maximum GIS acres filter.
Example: 10.0
saleDateMin date
Return parcels with most recent sale on or after this date (YYYY-MM-DD).
Example: 2020-01-01
saleDateMax date
Return parcels with most recent sale on or before this date (YYYY-MM-DD).
Example: 2023-12-31
saleAmountMin number
Minimum sale amount filter (dollars).
Example: 100000
saleAmountMax number
Maximum sale amount filter (dollars).
Example: 500000
searchAggType string
Aggregation type for results (NOAGG, OWNER, SALE).
Example: OWNER
sortBy string
Column to sort results by (default: 'owner').
Example: owner
order string
Sort direction (default: ASC).
Example: ASC
limit number
Maximum records returned per page (default: 50, max: 100).
Example: 50
offset number
Offset for pagination (default: 0).
format string
Response format (JSON, HTML).
Example: JSON
includeGeometry boolean
Include GeoJSON geometry fields in output (default: false).
Example: true
legacy boolean
Return output in legacy format (default: false).
Example: false
fields string
Comma-separated list of fields to include in the response. Supports dot notation for nested fields.
Example: owner.name,site.address,land.acres
GET /api_v2/parcels
curl -X GET "https://maps.mapwise.com/api_v2/parcels" \ -G \ --data-urlencode "searchCounty=HILLSBOROUGH" \ --data-urlencode "searchParcelId=A-14-29-18-4PP-000008-00008.0" \ --data-urlencode "limit=10" \ --data-urlencode "start=0" \ --data-urlencode "sortBy=owner_name" \ --data-urlencode "sortOrder=asc" \ -H "Authorization: Bearer YOUR_API_KEY" \ -H "Content-Type: application/json"
import requests api_key = "YOUR_API_KEY" url = "https://maps.mapwise.com/api_v2/parcels" params = { "searchCounty": "HILLSBOROUGH", "searchParcelId": "A-14-29-18-4PP-000008-00008.0", "limit": 10, "start": 0, "sortBy": "owner_name", "sortOrder": "asc" } headers = { "Authorization": f"Bearer {api_key}", "Content-Type": "application/json" } response = requests.get(url, params=params, headers=headers) data = response.json() print(data)
const apiKey = "YOUR_API_KEY"; const url = "https://maps.mapwise.com/api_v2/parcels"; const params = new URLSearchParams({ searchCounty: "HILLSBOROUGH", searchParcelId: "A-14-29-18-4PP-000008-00008.0", limit: 10, start: 0, sortBy: "owner_name", sortOrder: "asc" }); fetch(`${url}?${params}`, { method: "GET", headers: { "Authorization": `Bearer ${apiKey}`, "Content-Type": "application/json" } }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error("Error:", error));
<?php $api_key = "YOUR_API_KEY"; $url = "https://maps.mapwise.com/api_v2/parcels"; $params = [ "searchCounty" => "HILLSBOROUGH", "searchParcelId" => "A-14-29-18-4PP-000008-00008.0", "limit" => 10, "start" => 0, "sortBy" => "owner_name", "sortOrder" => "asc" ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url . "?" . http_build_query($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Authorization: Bearer " . $api_key, "Content-Type: application/json" ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); print_r($data); ?>
{ "success": true, "status": 200, "timestamp": "2025-07-30 16:42:32.933652", "meta": { "record_count": 1, "total_count": 3418 }, "data": [ { "meta": { "ogc_fid": 915070044, "county": "HILLSBOROUGH", "extracted_at": "20250724", "count": 1, "pa_pin_link": "http://gis.hcpafl.org/propertysearch/#/parcel/basic/1829144PP000008000080A" }, "identifiers": { "pin": "A-14-29-18-4PP-000008-00008.0", "pin_clean": "A1429184PP000008000080", "pin2": "1829144PP000008000080A", "pin2_clean": "1829144PP000008000080A", "altkey": "A-14-29-18-4PP-000008-00008.0", "prop_details": null }, "owner": { "primary_name": "10 MINUTE LOCKSMITH LLC", "secondary_name": null, "tertiary_name": null, "address_line1": "8870 N HIMES AVE", "address_line2": null, "address_line3": null, "city": "TAMPA", "state": "FL", "zipcode": "33614-1627" }, "site": { "address": "1002 W NASSAU ST", "city": "TAMPA", "zipcode": "33607", "subdivision": null, "subdivision_common": null, "subdivision_id": "4PP", "condo": "NO" }, "land": { "acres_deed": null, "acres_gis": "0.10901891648857046", "zoning": null, "land_use": { "luse": "0100", "luse_desc": null, "lusedor": "01", "lusedor_desc": "Single Family Residential" } }, "building": { "num_buildings": 1, "stories": 1, "sqft": { "heated": 860, "total": 903, "adjusted": null }, "year_built_actual": 1944, "year_built_effective": 1984, "beds": 1, "baths": { "full": 1, "half": null } }, "valuation": { "market": { "building": 80705, "improvements": 0, "land": 118560, "ag": null, "total": 199265 }, "assessed_total": 166361, "exempt_total": null, "taxable_total": 166361 }, "sales": { "recent": { "date": "2018-12-28", "amount": 118000, "type": "WD", "qual": "U", "vac": "I", "book": "26315", "page": "1274", "docnum": "2019007364", "grantor": "FEDERAL NATIONAL MORTGAGE ASSOC" } } } ] }

Testing a Query

Test Endpoint

The /api_v2/parcels/test endpoint allows you to test API queries without requiring an API key. This endpoint is specifically designed for development and testing purposes.

Test Endpoint Features

  • No API Key Required: Perfect for testing and development
  • Alachua County Only: Limited to Alachua County data
  • Rate Limited: Subject to rate limiting for fair usage
  • Same Response Format: Returns the same data structure as the main endpoint
  • Development Friendly: Ideal for testing queries before implementing with API keys

Usage Guidelines

  • Endpoint: https://maps.mapwise.com/api_v2/parcels/test
  • Method: GET
  • Authentication: None required
  • Data Source: Alachua County, Gainesville city, 1990-2000 sales only
  • Rate Limiting: 1 request per second per IP address
  • Response Format: JSON (default) or HTML

Supported Parameters

The test endpoint supports the same parameters as the main parcels endpoint. Please refer to the Building a Query section for a comprehensive list of all available parameters.

Important Note: While all parameters are supported, the test endpoint has data scope restrictions that limit results to Alachua County, Gainesville city, and sales between 1990-2000.

Data Scope Restrictions

  • County: ALACHUA only - all other counties return empty results
  • City: GAINESVILLE only for site address searches
  • Sale Dates: 1990-01-01 to 2000-12-31 only
  • Rate Limiting: 1 request per second per IP address
GET/api_v2/parcels/test
curl -X GET "https://maps.mapwise.com/api_v2/parcels/test" \ -G \ --data-urlencode "searchCounty=ALACHUA" \ --data-urlencode "searchParcelId=13123-000-000" \ --data-urlencode "limit=1" \ -H "Content-Type: application/json"
import requests url = "https://maps.mapwise.com/api_v2/parcels/test" params = { "searchCounty": "ALACHUA", "searchParcelId": "13123-000-000", "limit": 1 } response = requests.get(url, params=params) data = response.json() print(data)
const url = "https://maps.mapwise.com/api_v2/parcels/test"; const params = new URLSearchParams({ searchCounty: "ALACHUA", searchParcelId: "13123-000-000", limit: 1 }); fetch(`${url}?${params}`, { method: "GET", headers: { "Content-Type": "application/json" } }) .then(response => response.json()) .then(data => console.log(data)) .catch(error => console.error("Error:", error));
<?php $url = "https://maps.mapwise.com/api_v2/parcels/test"; $params = [ "searchCounty" => "ALACHUA", "searchParcelId" => "13123-000-000", "limit" => 1 ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url . "?" . http_build_query($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Content-Type: application/json" ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); print_r($data); ?>
{ "success": true, "status": 200, "timestamp": "2025-07-30 20:41:34.759100", "meta": { "record_count": 1, "total_count": 1, "test_mode": true, "data_scope": { "county": "ALACHUA" } }, "data": [ { "meta": { "ogc_fid": 884409165, "county": "ALACHUA", "extracted_at": "20250705", "count": 1, "pa_pin_link": "https://qpublic.schneidercorp.com/Application.aspx?AppID=1081&LayerID=26490&PageTypeID=4&PageID=10770&Q=422075161&KeyValue=13123-000-000" }, "identifiers": { "pin": "13123-000-000", "pin_clean": "13123000000", "pin2": null, "pin2_clean": null, "altkey": null, "prop_details": null }, "owner": { "primary_name": "ORANGE AND BLUE APARTMENT INVESTORS LLC", "secondary_name": null, "tertiary_name": null, "address_line1": "6626 ROXBURY LN", "address_line2": null, "address_line3": null, "city": "MIAMI BEACH", "state": "FL", "zipcode": "33141" }, "site": { "address": "1130 SW 5TH AVE", "city": "GAINESVILLE", "zipcode": "32601", "subdivision": "HICKSONS S/D BLK 8 UIV HTS", "subdivision_common": null, "subdivision_id": "092500", "condo": "NO" }, "land": { "acres_deed": null, "acres_gis": "0.2687370362524729", "zoning": "U5", "land_use": { "luse": "0300", "luse_desc": "MFR>10 UNITS", "lusedor": "03", "lusedor_desc": "Multi Family 10+ Units" } }, "building": { "num_buildings": null, "stories": null, "sqft": { "heated": 19371, "total": null, "adjusted": null }, "year_built_actual": 2012, "year_built_effective": 2012, "beds": null, "baths": { "full": null, "half": null } }, "valuation": { "market": { "building": 3779359, "improvements": null, "land": 426741, "ag": 0, "total": 4206100 }, "assessed_total": 2292874, "exempt_total": 0, "taxable_total": 2292874 }, "sales": { "recent": { "date": "2018-06-14", "amount": 17800000, "type": "MS ", "qual": "Q", "vac": "No", "book": "4608 ", "page": "0879 ", "docnum": null, "grantor": null } } } ] }

The Parcels Object

Each parcel in the response contains comprehensive property information organized into logical categories. The object structure uses nested objects for better organization and supports field filtering for performance optimization.

Object Fields

meta.county string
County name
identifiers.pin string
Primary parcel identification number
owner.primary_name string
Primary owner name
site.address string
Site/property address

More Fields

meta.pa_pin_link string
Link to Property Appraiser website
meta.extracted_at string
Data extraction date
identifiers.pin_clean string
Cleaned PIN without formatting
identifiers.pin2 string
Alternative PIN format
identifiers.altkey string
Alternative parcel key
owner.secondary_name string
Secondary owner name
owner.tertiary_name string
Tertiary owner name
owner.address_line1 string
Owner mailing address line 1
owner.address_line2 string
Owner mailing address line 2
owner.address_line3 string
Owner mailing address line 3
owner.city string
Owner mailing city
owner.state string
Owner mailing state
owner.zipcode string
Owner mailing ZIP code
site.city string
Site city
site.zipcode string
Site ZIP code
site.subdivision string
Subdivision name
site.subdivision_id string
Subdivision ID
site.condo string
Condominium status
land.acres_gis number
Property size in acres (from GIS)
land.acres_deed number
Property size in acres (from deed)
land.zoning string
Zoning classification
land.land_use.luse string
Land use code
land.land_use.lusedor string
Land use DOR code
building.num_buildings number
Number of buildings on property
building.stories number
Number of stories
building.sqft.heated number
Heated square footage
building.sqft.total number
Total square footage
building.year_built_actual number
Actual year built
building.year_built_effective number
Effective year built
building.beds number
Number of bedrooms
building.baths.full number
Number of full bathrooms
building.baths.half number
Number of half bathrooms
valuation.market.building number
Building market value
valuation.market.land number
Land market value
valuation.market.total number
Total market value
valuation.assessed_total number
Total assessed value
valuation.taxable_total number
Total taxable value
sales.recent.date string
Date of most recent sale
sales.recent.amount number
Amount of most recent sale
sales.recent.type string
Type of most recent sale
{ "meta": {
"ogc_fid": 884409165,
"county": "ALACHUA",
"extracted_at": 20250705,
"count": 1,
"pa_pin_link": "https://qpublic.schneidercorp.com/Application.aspx?AppID=1081&LayerID=26490&PageTypeID=4&PageID=10770&Q=422075161&KeyValue=13123-000-000"
}
, "identifiers": {
"pin": "13123-000-000",
"pin_clean": 13123000000,
"pin2": null,
"pin2_clean": null,
"altkey": null,
"prop_details": null
}
, "owner": {
"primary_name": "ORANGE AND BLUE APARTMENT INVESTORS LLC",
"secondary_name": null,
"tertiary_name": null,
"address_line1": "6626 ROXBURY LN",
"address_line2": null,
"address_line3": null,
"city": "MIAMI BEACH",
"state": "FL",
"zipcode": 33141
}
, "site": {
"address": "1130 SW 5TH AVE",
"city": "GAINESVILLE",
"zipcode": 32601,
"subdivision": "HICKSONS S/D BLK 8 UIV HTS",
"subdivision_common": null,
"subdivision_id": 092500,
"condo": "NO"
}
, "land": {
"acres_deed": null,
"acres_gis": 0.2687370362524729,
"zoning": "U5",
"land_use": {
"luse": 0300,
"luse_desc": "MFR>10 UNITS",
"lusedor": 03,
"lusedor_desc": "Multi Family 10+ Units"
}

}
, "building": {
"num_buildings": null,
"stories": null,
"sqft": {
"heated": 19371,
"total": null,
"adjusted": null
}
,
"year_built_actual": 2012,
"year_built_effective": 2012,
"beds": null,
"baths": {
"full": null,
"half": null
}

}
, "valuation": {
"market": {
"building": 3779359,
"improvements": null,
"land": 426741,
"ag": 0,
"total": 4206100
}
,
"assessed_total": 2292874,
"exempt_total": 0,
"taxable_total": 2292874
}
, "sales": {
"recent": {
"date": "2018-06-14",
"amount": 17800000,
"type": "MS",
"qual": "Q",
"vac": "No",
"book": 4608,
"page": 0879,
"docnum": null,
"grantor": null
}

}
}

Error Responses

HTTP Status Codes

Status CodeDescription
400Bad Request – missing or malformed parameters
401Unauthorized – API key required or invalid
404Not Found – no parcels match the search criteria
429Too Many Requests – rate limit exceeded
500Internal Server Error – unexpected server failure

Best Practices

  • Validate all user-supplied input before sending requests.
  • Check meta.record_count to determine if any results were returned.
  • Handle non-200 HTTP status codes gracefully in your application.
{ "success": false, "status": 400, "timestamp": "2025-07-30 16:20:15.938079", "errormsg": "searchCounty (or lat_lon or searchCountyMulti) is required", "errors": [ "searchCounty (or lat_lon or searchCountyMulti) is required" ], "help": { "message": "For a complete list of valid parameters and their usage, please visit:", "url": "/api_v2/help?topic=parcels" } }
{ "success": false, "status": 401, "timestamp": "2025-07-30 16:20:11.834025", "errormsg": "API key required for metered endpoints", "errors": { "auth_required": "API key authentication required for metered endpoints", "how_to_get_key": "Generate an API key at /api_v2/apikey (requires login)", "headers": [ "Authorization: Bearer YOUR_API_KEY", "X-API-Key: YOUR_API_KEY" ], "code": "API_KEY_REQUIRED" } }
{ "success": false, "status": 404, "timestamp": "2025-07-30 16:20:15.938079", "errormsg": "No parcels found matching the specified criteria", "meta": { "record_count": 0, "total_count": 0 } }
{ "success": false, "error": "RATE_LIMIT_EXCEEDED", "message": "Rate limit exceeded. Please try again later.", "reason": "GLOBAL_LIMIT_EXCEEDED", "limit_type": "global", "retry_after_seconds": 60, "reset_time": 1735689600, "remaining": 0, "details": { "limit": 60, "current_count": 60, "window_seconds": 60 } }
{ "success": false, "status": 500, "timestamp": "2025-07-30 16:20:15.938079", "errormsg": "Internal server error" }

Need More Information?

If you need additional information, have questions about the API, or are looking for custom integrations and enterprise pricing, we're here to help.

Contact Us