curl --request POST \
--url https://api.investorlift.com/v1/properties/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"location": {
"zip": [
"<string>"
],
"county_fips": [
"<string>"
],
"bbox": [
0,
0,
0,
0
],
"property_id": "<string>",
"radius_miles": 19,
"market": "<string>"
}
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
location: {
zip: ['<string>'],
county_fips: ['<string>'],
bbox: [0, 0, 0, 0],
property_id: '<string>',
radius_miles: 19,
market: '<string>'
}
})
};
fetch('https://api.investorlift.com/v1/properties/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.investorlift.com/v1/properties/search"
payload = { "location": {
"zip": ["<string>"],
"county_fips": ["<string>"],
"bbox": [0, 0, 0, 0],
"property_id": "<string>",
"radius_miles": 19,
"market": "<string>"
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"data": [
{
"id": "prop_e93c776c53354a88de4e58448a6bf21b",
"market": "phx",
"distance_miles": 0,
"address": {
"street": "7436 E Virginia Ave",
"unit": null,
"city": "SCOTTSDALE",
"state": "AZ",
"zip": "85257",
"county_fips": "04013",
"apn": "131-28-253",
"latitude": 33.476917,
"longitude": -111.920385,
"census_tract": "040132179.002006",
"school_district": "Scottsdale Unified District"
},
"general": {
"segment": "SFR",
"property_type_category": "Residential",
"property_type_detail": "Single Family",
"land_use_code": "R2",
"vacant": false,
"mailing_address_vacant": false,
"parcel_count": 1
},
"building": {
"bedrooms": 3,
"bathrooms": 2,
"sqft": 1409,
"total_building_sqft": 1409,
"year_built": 1959,
"effective_year_built": 1959,
"stories": 1,
"pool": true,
"garage_spaces": 2,
"building_condition": "Average",
"construction_type": "Concrete Block",
"building_count": 1,
"unit_count": 1,
"fireplace_count": 1,
"roof_type": null,
"heat_source": "Yes",
"ac_source": "Refrigeration"
},
"lot": {
"lot_sqft": 6938,
"lot_acres": 0.159,
"zoning_code": "R-7",
"subdivision": "CAVALIER VISTA 4A",
"section_township_range": "SEC 35 TWN 2N RNG 4E"
},
"owner": {
"kind": "PERSON",
"owner_occupied": false,
"absentee": true,
"is_trust": false,
"is_public": false,
"holding_kind": "ABSENTEE_INDIVIDUAL",
"held_since": "2023-03-03",
"mailing_state": "NY",
"profile": null
},
"sale": {
"last_sale_date": "2023-03-03",
"last_sale_recording_date": "2023-03-03",
"last_sale_price": 735000,
"last_sale_document_type": "Warranty Deed",
"last_sale_transaction_type": "New construction residential transactions",
"last_sale_price_per_sqft": 522,
"last_sale_mortgage_amount": null,
"last_sale_lender": null,
"cash_sale_proxy": null,
"prior_sale_date": "2022-07-15",
"prior_sale_price": 585000,
"last_purchase_date": "2023-03-03",
"last_purchase_price": 735000
},
"tax": {
"assessed_total": 51800,
"assessed_land": null,
"assessed_improvement": null,
"assessment_year": 2026,
"market_value_total": 518000,
"tax_amount": 1321,
"tax_year": 2025,
"tax_delinquent_year": null,
"tax_exemptions": null
},
"listing": {
"status": "Sold",
"status_category": "Sold",
"price": null,
"listed_on": "2022-12-22",
"status_updated_on": null,
"sold_on": "2023-03-03",
"sold_price": 735000,
"is_rental": false,
"mls_number": null,
"brokerage": null
},
"valuation": null,
"financing": null,
"permits": null,
"history": null,
"quicklists": null
},
{
"id": "prop_5398c4996bbcf9bc93d181af1395b093",
"market": "phx",
"distance_miles": 0.01,
"address": {
"street": "7430 E Virginia Ave",
"unit": null,
"city": "SCOTTSDALE",
"state": "AZ",
"zip": "85257",
"county_fips": "04013",
"apn": "131-28-254",
"latitude": 33.476936,
"longitude": -111.920598,
"census_tract": "040132179.002006",
"school_district": "Scottsdale Unified District"
},
"general": {
"segment": "SFR",
"property_type_category": "Residential",
"property_type_detail": "Single Family",
"land_use_code": "R2",
"vacant": false,
"mailing_address_vacant": false,
"parcel_count": 1
},
"building": {
"bedrooms": 3,
"bathrooms": 2,
"sqft": 1428,
"total_building_sqft": 1428,
"year_built": 1959,
"effective_year_built": 1959,
"stories": 1,
"pool": true,
"garage_spaces": 2,
"building_condition": "Average",
"construction_type": "Concrete Block",
"building_count": 1,
"unit_count": 1,
"fireplace_count": 0,
"roof_type": null,
"heat_source": "Yes",
"ac_source": "Refrigeration"
},
"lot": {
"lot_sqft": 6177,
"lot_acres": 0.142,
"zoning_code": "R-7",
"subdivision": "CAVALIER VISTA 4A",
"section_township_range": "SEC 35 TWN 2N RNG 4E"
},
"owner": {
"kind": "PERSON",
"owner_occupied": true,
"absentee": false,
"is_trust": false,
"is_public": false,
"holding_kind": "OWNER_OCCUPIED",
"held_since": "2022-06-09",
"mailing_state": "AZ",
"profile": null
},
"sale": {
"last_sale_date": "2022-06-09",
"last_sale_recording_date": "2022-06-15",
"last_sale_price": 650000,
"last_sale_document_type": "Warranty Deed",
"last_sale_transaction_type": "Arms-length residential transactions (purchase/resales)",
"last_sale_price_per_sqft": 455,
"last_sale_mortgage_amount": null,
"last_sale_lender": null,
"cash_sale_proxy": null,
"prior_sale_date": null,
"prior_sale_price": 79000,
"last_purchase_date": "2022-06-09",
"last_purchase_price": 650000
},
"tax": {
"assessed_total": 47260,
"assessed_land": null,
"assessed_improvement": null,
"assessment_year": 2026,
"market_value_total": 472600,
"tax_amount": 1548,
"tax_year": 2025,
"tax_delinquent_year": null,
"tax_exemptions": null
},
"listing": {
"status": "Off Market",
"status_category": "Failed",
"price": 649999,
"listed_on": "2025-04-16",
"status_updated_on": "2025-04-16",
"sold_on": "2022-06-17",
"sold_price": 650000,
"is_rental": false,
"mls_number": null,
"brokerage": null
},
"valuation": null,
"financing": null,
"permits": null,
"history": null,
"quicklists": null
},
{
"id": "prop_2a3aa3e08680f3b9a838e58c6e8081e9",
"market": "phx",
"distance_miles": 0.01,
"address": {
"street": "7442 E Virginia Ave",
"unit": null,
"city": "SCOTTSDALE",
"state": "AZ",
"zip": "85257",
"county_fips": "04013",
"apn": "131-28-252",
"latitude": 33.476909,
"longitude": -111.920155,
"census_tract": "040132179.002006",
"school_district": "Scottsdale Unified District"
},
"general": {
"segment": "SFR",
"property_type_category": "Residential",
"property_type_detail": "Single Family",
"land_use_code": "R2",
"vacant": false,
"mailing_address_vacant": false,
"parcel_count": 1
},
"building": {
"bedrooms": null,
"bathrooms": 2,
"sqft": 1375,
"total_building_sqft": 1375,
"year_built": 1959,
"effective_year_built": 1959,
"stories": 1,
"pool": null,
"garage_spaces": 2,
"building_condition": "Average",
"construction_type": "Concrete Block",
"building_count": 1,
"unit_count": 1,
"fireplace_count": null,
"roof_type": null,
"heat_source": "Yes",
"ac_source": "Refrigeration"
},
"lot": {
"lot_sqft": 6943,
"lot_acres": 0.159,
"zoning_code": "R-7",
"subdivision": "CAVALIER VISTA 4A",
"section_township_range": "SEC 35 TWN 2N RNG 4E"
},
"owner": {
"kind": "PERSON",
"owner_occupied": true,
"absentee": false,
"is_trust": false,
"is_public": false,
"holding_kind": "OWNER_OCCUPIED",
"held_since": "2005-02-15",
"mailing_state": "AZ",
"profile": null
},
"sale": {
"last_sale_date": null,
"last_sale_recording_date": null,
"last_sale_price": null,
"last_sale_document_type": null,
"last_sale_transaction_type": null,
"last_sale_price_per_sqft": null,
"last_sale_mortgage_amount": null,
"last_sale_lender": null,
"cash_sale_proxy": null,
"prior_sale_date": null,
"prior_sale_price": null,
"last_purchase_date": null,
"last_purchase_price": null
},
"tax": {
"assessed_total": 45870,
"assessed_land": null,
"assessed_improvement": null,
"assessment_year": 2026,
"market_value_total": 458700,
"tax_amount": 1228,
"tax_year": 2025,
"tax_delinquent_year": null,
"tax_exemptions": null
},
"listing": {
"status": "Off Market",
"status_category": "Off Market",
"price": null,
"listed_on": null,
"status_updated_on": null,
"sold_on": null,
"sold_price": null,
"is_rental": false,
"mls_number": null,
"brokerage": null
},
"valuation": null,
"financing": null,
"permits": null,
"history": null,
"quicklists": null
}
],
"page": {
"next_cursor": "eyJ2IjoxLCJydW4iOiIxNzg5NTc0MjY4IiwicSI6ImNiMzdhYTZjZDI0ZWYxYWY4Nzk4YTk5Y2I1MGFiMjAxYzc4YzBkMjAyZGNjMDhlNjg5YTdjMjkzMWU5ZDBkYTQiLCJrIjpbMjEuMzUwNzQ1NjY1ODUwNTQzLCIyYTNhYTNlMDg2ODBmM2I5YTgzOGU1OGM2ZTgwODFlOSJdfQ",
"limit": 3,
"returned": 3
},
"meta": {
"generated_at": "2026-09-16T21:00:00.000Z",
"reference_point": {
"lat": 33.476917,
"lng": -111.920385
},
"geometry": {
"kind": "radius",
"lat": 33.476917,
"lng": -111.920385,
"radius_miles": 2,
"bbox": null,
"property_id": null,
"zip": null,
"city": null
},
"coverage": [
{
"market": "phx",
"state": "AZ",
"counties": [
{
"fips": "04013",
"name": "Maricopa",
"data_end": "2026-08-12"
},
{
"fips": "04021",
"name": "Pinal",
"data_end": "2026-08-06"
}
],
"bbox": [
-113.332773,
32.46915,
-110.455491,
33.999503
],
"data_end": "2026-08-27",
"build_run_id": 3,
"registry_run": 11,
"registry_version": "v6-auction",
"dataset_version": 1789574268,
"loaded_at": "2026-09-16T15:57:47.926Z",
"metro_buy_to_resale_ratio": 0.719,
"universe_kind": "metro",
"universe_zips": null,
"point_tolerance_miles": 20,
"n_parcels": 1836311,
"listings_data_end": "2026-08-31",
"agents_data_end": "2026-08-31",
"wholesale_as_of": "2026-09-09",
"str_as_of": "2026-09-10",
"str": {
"jurisdictions": [
{
"name": "APACHE_JUNCTION",
"regime": "NOT_REQUIRED",
"coverage_reason": "NO_REQUIREMENT",
"served": false,
"snapshot_only": false,
"licence_start": null,
"snapshot_date": null,
"feed_stale": false,
"sources": [],
"n_licensed": 0,
"n_pending": 0,
"n_expired": 0,
"n_advertised": 0,
"share_unmatched": null,
"share_assumed": null
},
{
"name": "AVONDALE",
"regime": "REQUIRED",
"coverage_reason": "REQUIRED_NOT_PUBLISHED",
"served": false,
"snapshot_only": false,
"licence_start": null,
"snapshot_date": null,
"feed_stale": false,
"sources": [],
"n_licensed": 0,
"n_pending": 0,
"n_expired": 0,
"n_advertised": 0,
"share_unmatched": null,
"share_assumed": null
}
]
},
"auction_counted": true,
"parcel_as_of": "2026-08-27",
"address_as_of": "2026-08-27",
"parcel": {
"parcel_as_of": "2026-08-27",
"n_parcels": 1836311,
"sale_mortgage_measured": false,
"financing": {
"as_of": "2026-06-25",
"dated": true,
"dated_reason": "dataset not in current delivery",
"n_parcels": 1611957,
"n_with_open_lien": 1032808,
"n_free_and_clear": 579149,
"n_avm": 1528967,
"n_involuntary": 192400,
"n_lenders": 76212
},
"permits": {
"as_of": "2026-09-01",
"n_permits": 2377496,
"n_parcels": 663045,
"n_unmatched": 355,
"jurisdictions": [
{
"jurisdiction": "PHOENIX",
"n_permits": 795764,
"last_issue_date": "2026-05-11",
"windows_measured": null
},
{
"jurisdiction": "MESA",
"n_permits": 330809,
"last_issue_date": "2026-05-29",
"windows_measured": null
}
]
},
"owner_profile": {
"as_of": "2026-09-09",
"n_parcels": 1611077,
"n_multi": 646963,
"n_portfolio_5": 277841
},
"history": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"zips": [
"85251"
],
"n_parcels": 18774,
"n_events": 236022,
"n_weeks": 62,
"domains": {
"tax": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 18597
},
"deed": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 17615
},
"sale": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 1700
},
"listing": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 21122
},
"mailing": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 2128
},
"vacancy": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 2583
},
"financing": {
"first_week": "2025-12-02",
"last_week": "2026-06-25",
"n_events": 6420
},
"occupancy": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 1297
},
"ownership": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 3238
},
"structure": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 2548
},
"valuation": {
"first_week": "2025-07-24",
"last_week": "2026-06-25",
"n_events": 83657
},
"assessment": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 16450
},
"owner_profile": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 58404
},
"classification": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 263
}
}
}
},
"lenders": {
"as_of": "2026-06-25",
"recordings_through": "2026-06-11",
"counties": [
"04013"
],
"history_capture_share": 0.183706,
"n_lender_ids": 32046,
"purchase_measured": true,
"investor_lending_measured": true,
"flips_measured": true,
"borrowers_measured": true,
"takebacks_measured": true,
"counties_measured": false,
"dated": true,
"n_parcels_uncovered": 224192
}
}
],
"terms": "Data: Investorlift Data Services. Public-record and MLS listing data licensed through BatchData; municipal short-term rental registries; Investorlift marketplace records. Attribution and data-use terms: https://developers.investorlift.com/guides/terms"
},
"summary": {
"total": null,
"datasets": [
"core",
"owner",
"sale",
"tax",
"listing"
],
"dated_filters": []
}
}Search parcels
Every parcel in a location that matches your filter groups and quicklists, with the blocks you ask for.
curl --request POST \
--url https://api.investorlift.com/v1/properties/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"location": {
"zip": [
"<string>"
],
"county_fips": [
"<string>"
],
"bbox": [
0,
0,
0,
0
],
"property_id": "<string>",
"radius_miles": 19,
"market": "<string>"
}
}
'const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
location: {
zip: ['<string>'],
county_fips: ['<string>'],
bbox: [0, 0, 0, 0],
property_id: '<string>',
radius_miles: 19,
market: '<string>'
}
})
};
fetch('https://api.investorlift.com/v1/properties/search', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.investorlift.com/v1/properties/search"
payload = { "location": {
"zip": ["<string>"],
"county_fips": ["<string>"],
"bbox": [0, 0, 0, 0],
"property_id": "<string>",
"radius_miles": 19,
"market": "<string>"
} }
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text){
"data": [
{
"id": "prop_e93c776c53354a88de4e58448a6bf21b",
"market": "phx",
"distance_miles": 0,
"address": {
"street": "7436 E Virginia Ave",
"unit": null,
"city": "SCOTTSDALE",
"state": "AZ",
"zip": "85257",
"county_fips": "04013",
"apn": "131-28-253",
"latitude": 33.476917,
"longitude": -111.920385,
"census_tract": "040132179.002006",
"school_district": "Scottsdale Unified District"
},
"general": {
"segment": "SFR",
"property_type_category": "Residential",
"property_type_detail": "Single Family",
"land_use_code": "R2",
"vacant": false,
"mailing_address_vacant": false,
"parcel_count": 1
},
"building": {
"bedrooms": 3,
"bathrooms": 2,
"sqft": 1409,
"total_building_sqft": 1409,
"year_built": 1959,
"effective_year_built": 1959,
"stories": 1,
"pool": true,
"garage_spaces": 2,
"building_condition": "Average",
"construction_type": "Concrete Block",
"building_count": 1,
"unit_count": 1,
"fireplace_count": 1,
"roof_type": null,
"heat_source": "Yes",
"ac_source": "Refrigeration"
},
"lot": {
"lot_sqft": 6938,
"lot_acres": 0.159,
"zoning_code": "R-7",
"subdivision": "CAVALIER VISTA 4A",
"section_township_range": "SEC 35 TWN 2N RNG 4E"
},
"owner": {
"kind": "PERSON",
"owner_occupied": false,
"absentee": true,
"is_trust": false,
"is_public": false,
"holding_kind": "ABSENTEE_INDIVIDUAL",
"held_since": "2023-03-03",
"mailing_state": "NY",
"profile": null
},
"sale": {
"last_sale_date": "2023-03-03",
"last_sale_recording_date": "2023-03-03",
"last_sale_price": 735000,
"last_sale_document_type": "Warranty Deed",
"last_sale_transaction_type": "New construction residential transactions",
"last_sale_price_per_sqft": 522,
"last_sale_mortgage_amount": null,
"last_sale_lender": null,
"cash_sale_proxy": null,
"prior_sale_date": "2022-07-15",
"prior_sale_price": 585000,
"last_purchase_date": "2023-03-03",
"last_purchase_price": 735000
},
"tax": {
"assessed_total": 51800,
"assessed_land": null,
"assessed_improvement": null,
"assessment_year": 2026,
"market_value_total": 518000,
"tax_amount": 1321,
"tax_year": 2025,
"tax_delinquent_year": null,
"tax_exemptions": null
},
"listing": {
"status": "Sold",
"status_category": "Sold",
"price": null,
"listed_on": "2022-12-22",
"status_updated_on": null,
"sold_on": "2023-03-03",
"sold_price": 735000,
"is_rental": false,
"mls_number": null,
"brokerage": null
},
"valuation": null,
"financing": null,
"permits": null,
"history": null,
"quicklists": null
},
{
"id": "prop_5398c4996bbcf9bc93d181af1395b093",
"market": "phx",
"distance_miles": 0.01,
"address": {
"street": "7430 E Virginia Ave",
"unit": null,
"city": "SCOTTSDALE",
"state": "AZ",
"zip": "85257",
"county_fips": "04013",
"apn": "131-28-254",
"latitude": 33.476936,
"longitude": -111.920598,
"census_tract": "040132179.002006",
"school_district": "Scottsdale Unified District"
},
"general": {
"segment": "SFR",
"property_type_category": "Residential",
"property_type_detail": "Single Family",
"land_use_code": "R2",
"vacant": false,
"mailing_address_vacant": false,
"parcel_count": 1
},
"building": {
"bedrooms": 3,
"bathrooms": 2,
"sqft": 1428,
"total_building_sqft": 1428,
"year_built": 1959,
"effective_year_built": 1959,
"stories": 1,
"pool": true,
"garage_spaces": 2,
"building_condition": "Average",
"construction_type": "Concrete Block",
"building_count": 1,
"unit_count": 1,
"fireplace_count": 0,
"roof_type": null,
"heat_source": "Yes",
"ac_source": "Refrigeration"
},
"lot": {
"lot_sqft": 6177,
"lot_acres": 0.142,
"zoning_code": "R-7",
"subdivision": "CAVALIER VISTA 4A",
"section_township_range": "SEC 35 TWN 2N RNG 4E"
},
"owner": {
"kind": "PERSON",
"owner_occupied": true,
"absentee": false,
"is_trust": false,
"is_public": false,
"holding_kind": "OWNER_OCCUPIED",
"held_since": "2022-06-09",
"mailing_state": "AZ",
"profile": null
},
"sale": {
"last_sale_date": "2022-06-09",
"last_sale_recording_date": "2022-06-15",
"last_sale_price": 650000,
"last_sale_document_type": "Warranty Deed",
"last_sale_transaction_type": "Arms-length residential transactions (purchase/resales)",
"last_sale_price_per_sqft": 455,
"last_sale_mortgage_amount": null,
"last_sale_lender": null,
"cash_sale_proxy": null,
"prior_sale_date": null,
"prior_sale_price": 79000,
"last_purchase_date": "2022-06-09",
"last_purchase_price": 650000
},
"tax": {
"assessed_total": 47260,
"assessed_land": null,
"assessed_improvement": null,
"assessment_year": 2026,
"market_value_total": 472600,
"tax_amount": 1548,
"tax_year": 2025,
"tax_delinquent_year": null,
"tax_exemptions": null
},
"listing": {
"status": "Off Market",
"status_category": "Failed",
"price": 649999,
"listed_on": "2025-04-16",
"status_updated_on": "2025-04-16",
"sold_on": "2022-06-17",
"sold_price": 650000,
"is_rental": false,
"mls_number": null,
"brokerage": null
},
"valuation": null,
"financing": null,
"permits": null,
"history": null,
"quicklists": null
},
{
"id": "prop_2a3aa3e08680f3b9a838e58c6e8081e9",
"market": "phx",
"distance_miles": 0.01,
"address": {
"street": "7442 E Virginia Ave",
"unit": null,
"city": "SCOTTSDALE",
"state": "AZ",
"zip": "85257",
"county_fips": "04013",
"apn": "131-28-252",
"latitude": 33.476909,
"longitude": -111.920155,
"census_tract": "040132179.002006",
"school_district": "Scottsdale Unified District"
},
"general": {
"segment": "SFR",
"property_type_category": "Residential",
"property_type_detail": "Single Family",
"land_use_code": "R2",
"vacant": false,
"mailing_address_vacant": false,
"parcel_count": 1
},
"building": {
"bedrooms": null,
"bathrooms": 2,
"sqft": 1375,
"total_building_sqft": 1375,
"year_built": 1959,
"effective_year_built": 1959,
"stories": 1,
"pool": null,
"garage_spaces": 2,
"building_condition": "Average",
"construction_type": "Concrete Block",
"building_count": 1,
"unit_count": 1,
"fireplace_count": null,
"roof_type": null,
"heat_source": "Yes",
"ac_source": "Refrigeration"
},
"lot": {
"lot_sqft": 6943,
"lot_acres": 0.159,
"zoning_code": "R-7",
"subdivision": "CAVALIER VISTA 4A",
"section_township_range": "SEC 35 TWN 2N RNG 4E"
},
"owner": {
"kind": "PERSON",
"owner_occupied": true,
"absentee": false,
"is_trust": false,
"is_public": false,
"holding_kind": "OWNER_OCCUPIED",
"held_since": "2005-02-15",
"mailing_state": "AZ",
"profile": null
},
"sale": {
"last_sale_date": null,
"last_sale_recording_date": null,
"last_sale_price": null,
"last_sale_document_type": null,
"last_sale_transaction_type": null,
"last_sale_price_per_sqft": null,
"last_sale_mortgage_amount": null,
"last_sale_lender": null,
"cash_sale_proxy": null,
"prior_sale_date": null,
"prior_sale_price": null,
"last_purchase_date": null,
"last_purchase_price": null
},
"tax": {
"assessed_total": 45870,
"assessed_land": null,
"assessed_improvement": null,
"assessment_year": 2026,
"market_value_total": 458700,
"tax_amount": 1228,
"tax_year": 2025,
"tax_delinquent_year": null,
"tax_exemptions": null
},
"listing": {
"status": "Off Market",
"status_category": "Off Market",
"price": null,
"listed_on": null,
"status_updated_on": null,
"sold_on": null,
"sold_price": null,
"is_rental": false,
"mls_number": null,
"brokerage": null
},
"valuation": null,
"financing": null,
"permits": null,
"history": null,
"quicklists": null
}
],
"page": {
"next_cursor": "eyJ2IjoxLCJydW4iOiIxNzg5NTc0MjY4IiwicSI6ImNiMzdhYTZjZDI0ZWYxYWY4Nzk4YTk5Y2I1MGFiMjAxYzc4YzBkMjAyZGNjMDhlNjg5YTdjMjkzMWU5ZDBkYTQiLCJrIjpbMjEuMzUwNzQ1NjY1ODUwNTQzLCIyYTNhYTNlMDg2ODBmM2I5YTgzOGU1OGM2ZTgwODFlOSJdfQ",
"limit": 3,
"returned": 3
},
"meta": {
"generated_at": "2026-09-16T21:00:00.000Z",
"reference_point": {
"lat": 33.476917,
"lng": -111.920385
},
"geometry": {
"kind": "radius",
"lat": 33.476917,
"lng": -111.920385,
"radius_miles": 2,
"bbox": null,
"property_id": null,
"zip": null,
"city": null
},
"coverage": [
{
"market": "phx",
"state": "AZ",
"counties": [
{
"fips": "04013",
"name": "Maricopa",
"data_end": "2026-08-12"
},
{
"fips": "04021",
"name": "Pinal",
"data_end": "2026-08-06"
}
],
"bbox": [
-113.332773,
32.46915,
-110.455491,
33.999503
],
"data_end": "2026-08-27",
"build_run_id": 3,
"registry_run": 11,
"registry_version": "v6-auction",
"dataset_version": 1789574268,
"loaded_at": "2026-09-16T15:57:47.926Z",
"metro_buy_to_resale_ratio": 0.719,
"universe_kind": "metro",
"universe_zips": null,
"point_tolerance_miles": 20,
"n_parcels": 1836311,
"listings_data_end": "2026-08-31",
"agents_data_end": "2026-08-31",
"wholesale_as_of": "2026-09-09",
"str_as_of": "2026-09-10",
"str": {
"jurisdictions": [
{
"name": "APACHE_JUNCTION",
"regime": "NOT_REQUIRED",
"coverage_reason": "NO_REQUIREMENT",
"served": false,
"snapshot_only": false,
"licence_start": null,
"snapshot_date": null,
"feed_stale": false,
"sources": [],
"n_licensed": 0,
"n_pending": 0,
"n_expired": 0,
"n_advertised": 0,
"share_unmatched": null,
"share_assumed": null
},
{
"name": "AVONDALE",
"regime": "REQUIRED",
"coverage_reason": "REQUIRED_NOT_PUBLISHED",
"served": false,
"snapshot_only": false,
"licence_start": null,
"snapshot_date": null,
"feed_stale": false,
"sources": [],
"n_licensed": 0,
"n_pending": 0,
"n_expired": 0,
"n_advertised": 0,
"share_unmatched": null,
"share_assumed": null
}
]
},
"auction_counted": true,
"parcel_as_of": "2026-08-27",
"address_as_of": "2026-08-27",
"parcel": {
"parcel_as_of": "2026-08-27",
"n_parcels": 1836311,
"sale_mortgage_measured": false,
"financing": {
"as_of": "2026-06-25",
"dated": true,
"dated_reason": "dataset not in current delivery",
"n_parcels": 1611957,
"n_with_open_lien": 1032808,
"n_free_and_clear": 579149,
"n_avm": 1528967,
"n_involuntary": 192400,
"n_lenders": 76212
},
"permits": {
"as_of": "2026-09-01",
"n_permits": 2377496,
"n_parcels": 663045,
"n_unmatched": 355,
"jurisdictions": [
{
"jurisdiction": "PHOENIX",
"n_permits": 795764,
"last_issue_date": "2026-05-11",
"windows_measured": null
},
{
"jurisdiction": "MESA",
"n_permits": 330809,
"last_issue_date": "2026-05-29",
"windows_measured": null
}
]
},
"owner_profile": {
"as_of": "2026-09-09",
"n_parcels": 1611077,
"n_multi": 646963,
"n_portfolio_5": 277841
},
"history": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"zips": [
"85251"
],
"n_parcels": 18774,
"n_events": 236022,
"n_weeks": 62,
"domains": {
"tax": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 18597
},
"deed": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 17615
},
"sale": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 1700
},
"listing": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 21122
},
"mailing": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 2128
},
"vacancy": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 2583
},
"financing": {
"first_week": "2025-12-02",
"last_week": "2026-06-25",
"n_events": 6420
},
"occupancy": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 1297
},
"ownership": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 3238
},
"structure": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 2548
},
"valuation": {
"first_week": "2025-07-24",
"last_week": "2026-06-25",
"n_events": 83657
},
"assessment": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 16450
},
"owner_profile": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 58404
},
"classification": {
"first_week": "2025-07-24",
"last_week": "2026-09-09",
"n_events": 263
}
}
}
},
"lenders": {
"as_of": "2026-06-25",
"recordings_through": "2026-06-11",
"counties": [
"04013"
],
"history_capture_share": 0.183706,
"n_lender_ids": 32046,
"purchase_measured": true,
"investor_lending_measured": true,
"flips_measured": true,
"borrowers_measured": true,
"takebacks_measured": true,
"counties_measured": false,
"dated": true,
"n_parcels_uncovered": 224192
}
}
],
"terms": "Data: Investorlift Data Services. Public-record and MLS listing data licensed through BatchData; municipal short-term rental registries; Investorlift marketplace records. Attribution and data-use terms: https://developers.investorlift.com/guides/terms"
},
"summary": {
"total": null,
"datasets": [
"core",
"owner",
"sale",
"tax",
"listing"
],
"dated_filters": []
}
}Use it when
The property search screen, and any list built from parcel criteria instead of deeds. For example: absentee owners with equity, houses with a solar permit, parcels with a price cut since they were listed.| Instead use | When |
|---|---|
GET /v1/deals | Investor purchases around a location, not every parcel. |
GET /v1/properties/resolve | One parcel id from a point, an address or an APN. |
GET /v1/properties/{property_id} | One parcel you have an id for, with its deals and its licence record. |
GET /v1/str-parcels | Parcels on a city’s short-term rental licence roll. |
The request body
This is the one route that takes aPOST, because the criteria nest. Send the same bearer key as everywhere else
and Content-Type: application/json. This example asks for absentee owners of three-bedroom houses in one
Scottsdale ZIP. The owners hold two or more properties and have most of their equity. The request sorts the best
equity first and drops parcels on the market at the feed’s data end:
curl -X POST "https://api.investorlift.com/v1/properties/search" \
-H "Authorization: Bearer $GM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"location": { "zip": ["85251"] },
"filters": {
"building": {
"beds": { "min": 3 },
"sqft": { "min": 1200, "max": 2400 }
},
"owner": { "absentee": true, "portfolio_count": { "min": 2 } }
},
"quicklists": ["absentee-owner", "high-equity"],
"not_quicklists": ["on-market"],
"datasets": [
"core",
"owner",
"owner_profile",
"valuation",
"quicklists"
],
"sort": "equity_percent_desc",
"limit": 100
}'
const res = await fetch("https://api.investorlift.com/v1/properties/search", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.GM_API_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({
"location": { "zip": ["85251"] },
"filters": {
"building": {
"beds": { "min": 3 },
"sqft": { "min": 1200, "max": 2400 },
},
"owner": { "absentee": true, "portfolio_count": { "min": 2 } },
},
"quicklists": ["absentee-owner", "high-equity"],
"not_quicklists": ["on-market"],
"datasets": [
"core",
"owner",
"owner_profile",
"valuation",
"quicklists",
],
"sort": "equity_percent_desc",
"limit": 100,
}),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
const body = await res.json();
import os
import requests
r = requests.post(
"https://api.investorlift.com/v1/properties/search",
json={
"location": {"zip": ["85251"]},
"filters": {
"building": {"beds": {"min": 3}, "sqft": {"min": 1200, "max": 2400}},
"owner": {"absentee": True, "portfolio_count": {"min": 2}},
},
"quicklists": ["absentee-owner", "high-equity"],
"not_quicklists": ["on-market"],
"datasets": [
"core",
"owner",
"owner_profile",
"valuation",
"quicklists",
],
"sort": "equity_percent_desc",
"limit": 100,
},
headers={"Authorization": f"Bearer {os.environ['GM_API_KEY']}"},
timeout=30,
)
r.raise_for_status()
body = r.json()
location. Give at least one of zip, county_fips, point, bbox or property_id. The three
geometries exclude each other, and you can narrow any one of them further with zip or county_fips.
property_id searches around that parcel’s centre, and radius_miles beside it widens the circle. A point carries
its own radius_miles. market restricts the search to one loaded market by code.
A zip list alone chooses the markets. With no point, bbox or property_id, the API searches only the markets whose
parcels carry those ZIP codes. A ZIP no market carries is 422 outside_coverage, and the problem names it in zips_unknown.
The API combines the filter groups with AND, and every field inside a group the same way. The groups are
general, building, lot, legal, owner, sale, tax, listing, valuation, financing, liens, permits
and history. A range is { "min": ..., "max": ... } and both ends are inclusive. A parcel whose value is null does
not pass a range.
A quicklist is a named predicate over the same columns. quicklists keeps the parcels that match all of them.
any_quicklists keeps those that match at least one. not_quicklists drops those that match any.
Every quicklist and its predicate in words.
Datasets: what each row carries
datasets decides the blocks on a row. The default set is core, owner, sale, tax and listing. The rest are
owner_profile, valuation, financing, permits, history and quicklists. A block you did not ask for is
null. That null is not the same answer as “this parcel has none”, so read summary.datasets and do not guess
from the row. For a name this API does not serve, the API answers
400 dataset_unavailable naming it.
owner_profile adds owner.profile, the owner’s portfolio across every property BatchData links to them, read from
the latest weekly delivery. It is what the owner.portfolio_count, portfolio_equity and portfolio_mortgages
filters and the tired-landlord quicklist read.
Dated blocks
Thevaluation and financing datasets read a snapshot valued at meta.coverage[].parcel.financing.as_of and not
current data. So do the valuation, financing and liens filter groups, the dated quicklists, and the
equity_percent_desc, equity_percent_asc and avm_desc sorts.
summary.dated_filtersnames the parts of your request that read it, for examplefilters.valuation,quicklist high-equity,sort avm_desc. It is empty when nothing did.meta.dated[]names the blocks on the wire, each with its as-of date and the reason.- With
require_current: true, the API refuses such a request with422 dated_refusedand does not serve the snapshot.
Read the response
data[]is one parcel search row per parcel. Itsidis theprop_id every other property route takes.- The API sets
distance_milesonly when the location was apointor aproperty_id. In that casesort: "distance"is the default. Without one, the default order isid: market, then parcel id, the table’s primary key order. That order is stable and pages quickly over any location, but it means nothing. meta.geometryis the location that ran. Apointechoes as aradius. Aproperty_idechoes as aradiusaround the parcel’s centroid, withproperty_idset, and with the defaultradius_mileswhen the body named none. Abboxechoes as the tuple, and aziplist alone echoes as aplace. Acounty_fipslist alone echoes nothing, and the API applies aziporcounty_fipslist beside a geometry as sent, without an echo. See the envelope.quicklists[]on a row lists every quicklist the parcel matches, and it appears only when you ask for thequicklistsdataset. The API computes it from the same expressions the filters use, so a row can never match a filter it does not report.- This host does not serve
owner.namesandowner.mailing: the owner block carries no such keys. count_only: trueanswers withsummary.totaland no rows. A paged request leavestotalnull: followpage.next_cursorinstead.
Gotchas
sort: "distance"needs apointor aproperty_id. Without one, the API answers400 sort_requires_point. Every other sort puts null values last in both directions.- The
historyfilter group, thehistorydataset and the history quicklists only answer inside the ZIP codes the history lake covers.meta.coverage[].parcel.history.zipsand Counties, cities and ZIP codes list them. Elsewhere the block is null and those filters match nothing. - This host has no owner-name filter: it does not serve the owner names such a filter reads.
financing.lender_name_containsreads the lender, a business name, and is dated like the rest of the financing group. A lender’s profile, the Lender object, lists innames[]every spelling its instruments use. So you can widen a search on one spelling to the others.financing.lender_id, in the same group, takes the registry id:len_plus 12 hex, from a lender search, a ranking row or a parcel’s financing block. It matches the parcels whose last recorded mortgage’s lender carries that id, every spelling at once, over an index. For an id whose market has no lender registry, the API answers400 validation_errornaming the field. Since 0.17.0 the API follows an oldlender_idto the current lender withmeta.resolved_from. A retired one is410 gone(Retired ids).- The
private-lender-financedquicklist reads the same last mortgage. Its lender is a private party or a person (lender_classPRIVATEorINDIVIDUAL), or a hard-money lender of the registry (is_hard_money). See Quicklists. - A cursor is valid only for the market’s
dataset_versionand the body you sent. If you page across a refresh or with a changed body, the API answers400 invalid_cursor. - For a market with no published parcel tables, the API answers
422 parcels_unavailable, andmeta.coverage[].parcelis null there.
Related
New construction near here: the search around a point and around a resolved address, with the listing, valuation and owner blocks read end to end.Authorizations
API key from the developer console (starts with zpka_). Create one at https://developers.investorlift.com/get-a-key.
Body
Where to search: at least one of zip, county_fips, point, bbox or property_id. Send only one of point, bbox and property_id. You can combine that one with zip or county_fips.
Show child attributes
Show child attributes
The filter groups. Every group and every field is optional. The API combines the groups with AND.
Show child attributes
Show child attributes
Every listed quicklist must match (AND).
1 - 20 elementsA quicklist name, for example absentee-owner, free-and-clear, price-cut-listing, tired-landlord. The quicklists guide documents the list and every predicate. The API answers 400 quicklist_unavailable to an unavailable name.
1 - 64At least one listed quicklist must match (OR).
1 - 20 elementsA quicklist name, for example absentee-owner, free-and-clear, price-cut-listing, tired-landlord. The quicklists guide documents the list and every predicate. The API answers 400 quicklist_unavailable to an unavailable name.
1 - 64Keep parcels that match none of the listed quicklists.
1 - 20 elementsA quicklist name, for example absentee-owner, free-and-clear, price-cut-listing, tired-landlord. The quicklists guide documents the list and every predicate. The API answers 400 quicklist_unavailable to an unavailable name.
1 - 64Which blocks each row carries: core, owner, owner_profile, sale, tax, listing, valuation, financing, permits, history, quicklists. Default: core, owner, sale, tax, listing. The valuation and financing blocks are dated (meta.dated[]). The API answers 400 dataset_unavailable to an unavailable name.
1 - 20 elementsWhich blocks each row carries: core, owner, owner_profile, sale, tax, listing, valuation, financing, permits, history, quicklists. Default: core, owner, sale, tax, listing. The valuation and financing blocks are dated (meta.dated[]). The API answers 400 dataset_unavailable to an unavailable name.
1 - 32With true, the API answers 422 dated_refused when the request filters on, sorts by or returns a dated block (valuation, financing, liens). Default false: the API serves dated blocks and stamps them in meta.dated[].
Row order, null values last on every sort. distance: nearest first, the default with a point or a property_id. The sort id orders rows by market then id, the primary key order: stable and fast over any location, the default otherwise. The sorts last_sale_date_desc and last_sale_date_asc order by the last sale date, listing_price_asc and listing_price_desc by the list price. The sort last_owner_change_desc puts the history ZIP set first and the others last. The sorts equity_percent_desc, equity_percent_asc and avm_desc are dated (meta.dated[]). The sorts year_built_desc, year_built_asc, sqft_desc and last_permit_desc order by year built, the living area and the newest permit.
distance, id, last_sale_date_desc, last_sale_date_asc, last_owner_change_desc, equity_percent_desc, equity_percent_asc, listing_price_asc, listing_price_desc, avm_desc, year_built_desc, year_built_asc, sqft_desc, last_permit_desc Page size, 1-500 (default 100).
1 <= x <= 500Opaque cursor from page.next_cursor of the previous page. A change of query, sort, weights or data version invalidates it (400 invalid_cursor). Then restart from page 1.
1 - 4096True returns the count of matching parcels in summary.total and no rows.
Response
One page of parcels that match the location, filters and quicklists, in the requested sort, with the cursor for the next page. With count_only the response has no rows and carries summary.total.
One page of parcels that match the location, filters and quicklists, in the requested sort, with the cursor for the next page. With count_only the response has no rows and carries summary.total.
The rows of this page.
Show child attributes
Show child attributes
Pagination: the page size, the rows returned and the cursor for the next page. Paged lists carry no total. The summary block does.
Show child attributes
Show child attributes
Response metadata: when the API produced it, which markets it covers, and how fresh they are.
Show child attributes
Show child attributes
What the request asked for and, on count_only, how many parcels match.
Show child attributes
Show child attributes
Was this page helpful?