Reverse geocoding: convert a latitude/longitude into nearby property information.
For forward geocoding (address to coordinates) use /search. The /properties endpoint also supports bounding boxes and polygons.
| Name | Required | Type | Description |
|---|---|---|---|
| api_key | Yes | UUID v4 | Your API key for authorization |
| latitude | Yes | Float | Latitude of the search point |
| longitude | Yes | Float | Longitude of the search point |
| radius | No | Float | Search radius in kilometers. Default 1. |
| shape | No | String | Can either be 'circle' (default) or 'square'. |
| expand | No | String - see expanding | Comma-separated data sets to include with each property. Options are assessments, listings, listings_rent, and permits |
| filter_expand_match | No | String - see filtering | Use any to return only properties with at least one requested expansion, or all to return only properties with every requested expansion. Omit to return properties with or without expansion data |
| results_per_page | No | Integer | Number of results per page. Maximum 1000. |
| select | No | String - see selecting | The fields to return - address and property_id are always selected |
| page | No | Integer | The page number to retrieve results from, starting at 1 |
This endpoint also supports field filters and expansion filters, like expand_listing_date_gte and expand_permit_content_regex. See the filtering documentation for details.
Type declarations are available at the bottom of this page.
| Name | Type | Description |
|---|---|---|
| cache_hit | Boolean | Indicates if the response was a cache hit |
| cost_cents | Integer | Cost of the request in cents |
| data | Array<Property> | Array of property objects containing the geocoding results |
| error | String | Details about the error. Empty if no error |
| pagination | Pagination | Contains pagination info like current page and total pages |
| price_quote | Boolean | Indicates whether the response is a price quote |
| result_total | Integer | The total number of results |
| time_ms | Integer | Time taken for the request to complete in milliseconds |
| ui_info | UiInfo | Data to create user interfaces |
Each property contains fields chosen via select. Over 400 fields available.
See the Fields documentation for the full list.
| Name | Type | Description |
|---|---|---|
| current_page | Integer | Current page number (1-based) |
| has_next_page | Boolean | Whether there is a next page |
| has_previous_page | Boolean | Whether there is a previous page |
| page_total | Integer | Total number of pages |
Pre-computed UI elements for client-side rendering:
| Name | Type | Description |
|---|---|---|
| address_link | String | Pre-built URL link to the property page |
| address_slug | String | URL-friendly version of the address |
| city_link | String | Pre-built URL link to the city page |
| city_slug | String | URL-friendly version of the city name |
| community_link | String | Pre-built URL link to the community page |
| community_slug | String | URL-friendly version of the community name |
| province_abbreviation_link | String | Pre-built URL link to the province page |
| country_abbreviation_link | String | Pre-built URL link to the country page |
Select the programming language you want to display the code examples in.
curl -X GET "https://api.houski.ca/geocoding?api_key=YOUR_API_KEY&latitude=51.0447&longitude=-114.0719&radius=2&select=latitude,longitude,bedroom,den,bathroom_full,bathroom_half&shape=circle"
const houski_geocoding = async (): Promise<GeocodingResponse> => {
// You must copy the GeocodingResponse type declarations from the
// Houski API documentation to strongly type the response
const url = new URL('https://api.houski.ca/geocoding');
url.searchParams.set('api_key', 'YOUR_API_KEY');
url.searchParams.set('latitude', '51.0447');
url.searchParams.set('longitude', '-114.0719');
url.searchParams.set('radius', '2');
url.searchParams.set('select', 'latitude,longitude,bedroom,den,bathroom_full,bathroom_half');
url.searchParams.set('shape', 'circle');
const response = await fetch(url);
const data = await response.json();
return data;
}
(async () => {
let data: GeocodingResponse = await houski_geocoding();
// Log the response
console.log(data);
})();
{
"cache_hit": false,
"cost_cents": 2.6399998664855957,
"data": [
{
"address": "0 Calgary",
"bathroom_full": 2,
"bathroom_half": 0,
"bedroom": 3,
"den": 0,
"latitude": 51.044734954833984,
"longitude": -114.07188415527344,
"property_id": "8a4f3aa57d75cc88"
},
{
"address": "513 9 Avenue SW",
"bathroom_full": 1,
"bathroom_half": 0,
"bedroom": 1,
"den": 0,
"latitude": 51.044551849365234,
"longitude": -114.07221221923828,
"property_id": "e9baf46145362e25"
},
{
"address": "520 9 Avenue SW",
"bathroom_full": 1,
"bathroom_half": 0,
"bedroom": 1,
"den": 0,
"latitude": 51.04525375366211,
"longitude": -114.0722198486328,
"property_id": "8808ff7c79ba3508"
},
{
"address": "525 8 Avenue SW",
"bathroom_full": 1,
"bathroom_half": 0,
"bedroom": 1,
"den": 0,
"latitude": 51.04532241821289,
"longitude": -114.07242584228516,
"property_id": "301a806c3b139f6"
},
{
"address": "505 8 Avenue SW",
"bathroom_full": 1,
"bathroom_half": 0,
"bedroom": 1,
"den": 0,
"latitude": 51.0455207824707,
"longitude": -114.07184600830078,
"property_id": "3848dc60cd88ee55"
},
{
"address": "524 10 Avenue SW",
"bathroom_full": 1,
"bathroom_half": 0,
"bedroom": 2,
"den": 0,
"latitude": 51.043914794921875,
"longitude": -114.07219696044922,
"property_id": "cc8a04767d8753ff"
}
],
"error": "",
"pagination": {
"current_page": 1,
"has_next_page": true,
"has_previous_page": false,
"page_total": 8760
},
"price_quote": false,
"result_total": 52560,
"time_ms": 5774
}
interface GeocodingResponse {
cache_hit: boolean;
cost_cents: number;
data: Property[];
error: string;
pagination: Pagination;
price_quote: boolean;
result_total: number;
time_ms: number;
}
interface Pagination {
current_page: number;
has_next_page: boolean;
has_previous_page: boolean;
page_total: number;
}
interface Property {
estimate_city_population?: number | null;
city_id?: string | null;
community_id?: string | null;
country_abbreviation_id?: string | null;
list_price_vs_estimate?: number | null;
assessment_vs_estimate?: number | null;
country_abbreviation_link?: string | null;
province_abbreviation_link?: string | null;
city_link?: string | null;
community_link?: string | null;
demographic_age_average_of_the_population?: number | null;
demographic_age_median_of_the_population?: number | null;
demographic_municipal_population_density_sq_km?: number | null;
demographic_employment_income_percent?: number | null;
demographic_employment_insurance_benefit_percent?: number | null;
demographic_covid_19_government_income_support_and_benefit_percent?: number | null;
demographic_language_most_spoken_first?: string | null;
demographic_language_most_spoken_second?: string | null;
demographic_language_most_spoken_third?: string | null;
demographic_language_most_spoken_fourth?: string | null;
demographic_language_most_spoken_fifth?: string | null;
demographic_language_most_spoken_first_percent?: number | null;
demographic_language_most_spoken_second_percent?: number | null;
demographic_language_most_spoken_third_percent?: number | null;
demographic_language_most_spoken_fourth_percent?: number | null;
demographic_language_most_spoken_fifth_percent?: number | null;
demographic_municipal_population?: number | null;
demographic_municipal_population_male_percent?: number | null;
demographic_municipal_population_female_percent?: number | null;
demographic_dwellings_occupied_percent?: number | null;
demographic_income_median_pre_tax?: number | null;
demographic_income_median_after_tax?: number | null;
demographic_income_average_pre_tax?: number | null;
demographic_income_average_after_tax?: number | null;
demographic_median_covid_19_emergency_and_recovery_benefits?: number | null;
demographic_age_0_to_4_years_percent?: number | null;
demographic_age_5_to_9_years_percent?: number | null;
demographic_age_10_to_14_years_percent?: number | null;
demographic_age_15_to_19_years_percent?: number | null;
demographic_age_20_to_24_years_percent?: number | null;
demographic_age_25_to_29_years_percent?: number | null;
demographic_age_30_to_34_years_percent?: number | null;
demographic_age_35_to_39_years_percent?: number | null;
demographic_age_40_to_44_years_percent?: number | null;
demographic_age_45_to_49_years_percent?: number | null;
demographic_age_50_to_54_years_percent?: number | null;
demographic_age_55_to_59_years_percent?: number | null;
demographic_age_60_to_64_years_percent?: number | null;
demographic_age_65_to_69_years_percent?: number | null;
demographic_age_70_to_74_years_percent?: number | null;
demographic_age_75_to_79_years_percent?: number | null;
demographic_age_80_to_84_years_percent?: number | null;
demographic_age_85_to_89_years_percent?: number | null;
demographic_age_90_to_94_years_percent?: number | null;
demographic_age_95_to_99_years_percent?: number | null;
demographic_age_100_years_and_over_percent?: number | null;
demographic_household_size_1_person_percent?: number | null;
demographic_household_size_2_persons_percent?: number | null;
demographic_household_size_3_persons_percent?: number | null;
demographic_household_size_4_persons_percent?: number | null;
demographic_household_size_5_or_more_persons_percent?: number | null;
demographic_household_type_family_with_children_percent?: number | null;
demographic_household_type_family_without_children_percent?: number | null;
demographic_household_type_single_with_children_percent?: number | null;
demographic_household_type_single_without_children_percent?: number | null;
demographic_marital_status_married_percent?: number | null;
demographic_marital_status_common_law_percent?: number | null;
demographic_marital_status_single_percent?: number | null;
demographic_income_under_10000_percent?: number | null;
demographic_income_10000_to_19999_percent?: number | null;
demographic_income_20000_to_29999_percent?: number | null;
demographic_income_30000_to_39999_percent?: number | null;
demographic_income_40000_to_49999_percent?: number | null;
demographic_income_50000_to_59999_percent?: number | null;
demographic_income_60000_to_69999_percent?: number | null;
demographic_income_70000_to_79999_percent?: number | null;
demographic_income_80000_to_89999_percent?: number | null;
demographic_income_90000_to_99999_percent?: number | null;
demographic_income_100000_to_149999_percent?: number | null;
demographic_income_150000_and_over_percent?: number | null;
demographic_education_level_no_certificate_diploma_or_degree_percent?: number | null;
demographic_education_level_high_school_diploma_or_equivalency_certificate_percent?: number | null;
demographic_education_level_apprenticeship_or_trades_certificate_or_diploma_percent?: number | null;
demographic_education_level_bachelors_degree_percent?: number | null;
demographic_education_level_degree_in_medicine_dentistry_veterinary_medicine_or_optometry_percent?: number | null;
demographic_education_level_masters_degree_percent?: number | null;
demographic_education_level_earned_doctorate_percent?: number | null;
demographic_education_degree_teaching_percent?: number | null;
demographic_education_degree_humanities_percent?: number | null;
demographic_education_degree_social_and_behavioral_sciences_and_law_percent?: number | null;
demographic_education_degree_business_management_and_public_administration_percent?: number | null;
demographic_education_degree_physical_and_life_sciences_and_technologies_percent?: number | null;
demographic_education_degree_mathematics_computer_and_information_sciences_percent?: number | null;
demographic_education_degree_architecture_engineering_and_related_trades_percent?: number | null;
demographic_education_degree_agriculture_natural_resources_and_conservation_percent?: number | null;
demographic_education_degree_health_and_related_fields_percent?: number | null;
demographic_education_degree_personal_protective_and_transportation_services_percent?: number | null;
demographic_employment_employed_percent?: number | null;
demographic_employment_unemployed_percent?: number | null;
demographic_employment_occupations_legislative_and_senior_management_occupations_percent?: number | null;
demographic_employment_occupations_business_finance_and_administration_occupations_percent?: number | null;
demographic_employment_occupations_natural_and_applied_sciences_and_related_occupations_percent?: number | null;
demographic_employment_occupations_health_occupations_percent?: number | null;
demographic_employment_occupations_in_education_law_and_social_community_and_government_services_percent?: number | null;
demographic_employment_occupations_in_art_culture_recreation_and_sport_percent?: number | null;
demographic_employment_occupations_sales_and_service_occupations_percent?: number | null;
demographic_employment_occupations_trades_transport_and_equipment_operators_and_related_occupations_percent?: number | null;
demographic_employment_occupations_natural_resources_agriculture_and_related_production_occupations_percent?: number | null;
demographic_employment_occupations_in_manufacturing_and_utilities_percent?: number | null;
demographic_employment_industries_agriculture_forestry_fishing_and_hunting_percent?: number | null;
demographic_employment_industries_mining_quarrying_and_oil_and_gas_extraction_percent?: number | null;
demographic_employment_industries_utilities_percent?: number | null;
demographic_employment_industries_construction_percent?: number | null;
demographic_employment_industries_manufacturing_percent?: number | null;
demographic_employment_industries_wholesale_trade_percent?: number | null;
demographic_employment_industries_retail_trade_percent?: number | null;
demographic_employment_industries_transportation_and_warehousing_percent?: number | null;
demographic_employment_industries_information_and_cultural_industries_percent?: number | null;
demographic_employment_industries_finance_and_insurance_percent?: number | null;
demographic_employment_industries_real_estate_and_rental_and_leasing_percent?: number | null;
demographic_employment_industries_professional_scientific_and_technical_services_percent?: number | null;
demographic_employment_industries_management_of_companies_and_enterprises_percent?: number | null;
demographic_employment_industries_administrative_and_support_waste_management_and_remediation_services_percent?: number | null;
demographic_employment_industries_educational_services_percent?: number | null;
demographic_employment_industries_health_care_and_social_assistance_percent?: number | null;
demographic_employment_industries_arts_entertainment_and_recreation_percent?: number | null;
demographic_employment_industries_accommodation_and_food_services_percent?: number | null;
demographic_employment_industries_other_services_percent?: number | null;
demographic_employment_industries_public_administration_percent?: number | null;
demographic_transportation_car_truck_or_van_percent?: number | null;
demographic_transportation_public_transit_percent?: number | null;
demographic_transportation_walk_percent?: number | null;
demographic_transportation_bicycle_percent?: number | null;
assessments?: Assessment[] | null;
listings_rent?: ListingRent[] | null;
listings?: Listing[] | null;
permits?: Permit[] | null;
address_link?: string | null;
address_slug?: string | null;
address?: string | null;
air_cleaner_brand?: string | null;
air_cleaner_install_year?: number | null;
air_cleaner_type?: string | null;
architecture_style?: string | null;
assessment_value?: number | null;
assessment_year?: number | null;
attic_is_functional?: boolean | null;
has_expand_listings?: boolean | null;
has_expand_listings_rent?: boolean | null;
has_expand_permits?: boolean | null;
has_expand_assessments?: boolean | null;
backs_onto?: string | null;
balcony_type_first?: string | null;
balcony_type_second?: string | null;
balcony_type_third?: string | null;
basement_ceiling_height_m?: number | null;
basement_finish?: string | null;
basement_has_crawlspace?: boolean | null;
basement_has_entrance?: boolean | null;
basement_is_walkout?: boolean | null;
basement_type?: string | null;
basement_year_last_renovated?: number | null;
bathroom_full?: number | null;
bathroom_total?: number | null;
bathroom_half?: number | null;
bathroom_year_last_renovated?: number | null;
bedroom_year_last_renovated?: number | null;
bedroom?: number | null;
bedroom_total?: number | null;
building_name?: string | null;
carport_parking_space?: number | null;
cat_allowed_by_bylaw_require_approval?: boolean | null;
cat_allowed_by_bylaw?: boolean | null;
ceiling_height_m?: number | null;
ceiling_is_vaulted?: boolean | null;
ceiling_style?: string | null;
city_slug?: string | null;
city?: string | null;
commercial_use?: string | null;
community_slug?: string | null;
community?: string | null;
community_source?: string | null;
construction_material?: string | null;
construction_year?: number | null;
converted_to_commercial_use?: boolean | null;
converted_to_residential_use?: boolean | null;
cooling_brand_first?: string | null;
cooling_install_year_first?: number | null;
cooling_type_first?: string | null;
cooling_type_second?: string | null;
country_abbreviation?: string | null;
country_slug?: string | null;
country?: string | null;
den?: number | null;
direction_facing?: string | null;
dog_allowed_by_bylaw_require_approval?: boolean | null;
dog_allowed_by_bylaw?: boolean | null;
driveway_parking_space?: number | null;
electricity_provider?: string | null;
elevator?: number | null;
estimate_list_price?: number | null;
estimate_sale_price_per_sq_m?: number | null;
estimate_monthly_electrical_cost?: number | null;
estimate_monthly_heat_cost?: number | null;
estimate_monthly_water_cost?: number | null;
estimate_political_lean?: number | null;
estimate_rent_monthly_room?: number | null;
estimate_rent_monthly_suite_basement?: number | null;
estimate_rent_monthly_suite_main?: number | null;
estimate_rent_monthly?: number | null;
estimate_sale_price?: number | null;
exterior_finish?: string | null;
exterior_year_last_renovated?: number | null;
fence_type?: string | null;
fire_suppression_type?: string | null;
fireplace?: number | null;
floor_above_ground?: number | null;
floor_below_ground?: number | null;
floor_material_type_first?: string | null;
floor_material_type_second?: string | null;
floor_plan_type?: string | null;
for_rent_by?: string | null;
for_rent_cat_allowed_by_owner?: boolean | null;
for_rent_dog_allowed_by_owner?: boolean | null;
for_rent_has_own_laundry?: boolean | null;
for_rent_has_separate_external_entrance?: boolean | null;
for_rent?: boolean | null;
for_sale_by?: string | null;
for_sale?: boolean | null;
estimate_sale_date_listed?: string | null;
estimate_sale_date_sold?: string | null;
estimate_days_on_market_until_sale?: number | null;
estimate_rent_date_listed?: string | null;
estimate_rent_date_rented?: string | null;
estimate_days_on_market_until_rented?: number | null;
foundation_type?: string | null;
fronts_onto?: string | null;
garage_240v_first?: boolean | null;
garage_240v_second?: boolean | null;
garage_floor_above_ground_first?: number | null;
garage_floor_above_ground_second?: number | null;
garage_floor_below_ground_first?: number | null;
garage_floor_below_ground_second?: number | null;
garage_heating_type_first?: string | null;
garage_heating_type_second?: string | null;
garage_parking_space_first?: number | null;
garage_parking_space_second?: number | null;
garage_tandem_first?: boolean | null;
garage_tandem_second?: boolean | null;
garage_type_first?: string | null;
garage_type_second?: string | null;
gas_provider?: string | null;
has_assigned_storage_space?: boolean | null;
has_backyard?: boolean | null;
has_frontyard?: boolean | null;
has_private_indoor_gym?: boolean | null;
has_private_indoor_hot_tub?: boolean | null;
has_private_indoor_sauna?: boolean | null;
has_private_indoor_swimming_pool?: boolean | null;
has_private_indoor_workshop?: boolean | null;
has_private_outdoor_gym?: boolean | null;
has_private_outdoor_hot_tub?: boolean | null;
has_private_outdoor_sauna?: boolean | null;
has_private_outdoor_swimming_pool?: boolean | null;
has_rv_parking?: boolean | null;
has_shared_indoor_gym?: boolean | null;
has_shared_indoor_hot_tub?: boolean | null;
has_shared_indoor_sauna?: boolean | null;
has_shared_indoor_swimming_pool?: boolean | null;
has_shared_indoor_workshop?: boolean | null;
has_shared_laundry_room?: boolean | null;
has_shared_outdoor_gym?: boolean | null;
has_shared_outdoor_hot_tub?: boolean | null;
has_shared_outdoor_sauna?: boolean | null;
has_shared_outdoor_swimming_pool?: boolean | null;
heating_brand_first?: string | null;
heating_install_year_first?: number | null;
heating_type_first?: string | null;
heating_type_second?: string | null;
humidifier_brand?: string | null;
humidifier_install_year?: number | null;
humidifier_type?: string | null;
image?: string | null;
in_cul_de_sac?: boolean | null;
interior_sq_m?: number | null;
interior_sq_m_source?: string | null;
internet_provider?: string | null;
irrigation_system_type?: string | null;
is_commercial?: boolean | null;
is_condemned?: boolean | null;
is_judicial_sale?: boolean | null;
is_residential?: boolean | null;
kitchen_appliance_brand?: string | null;
kitchen_appliance_finish?: string | null;
kitchen_countertop_material?: string | null;
kitchen_dishwasher_install_year?: number | null;
kitchen_dishwasher_type?: string | null;
kitchen_fridge_install_year?: number | null;
kitchen_fridge_type?: string | null;
kitchen_microwave_install_year?: number | null;
kitchen_microwave_type?: string | null;
kitchen_stove_heat_type?: string | null;
kitchen_stove_install_year?: number | null;
kitchen_stove_type?: string | null;
kitchen_year_last_renovated?: number | null;
land_depth_m?: number | null;
land_frontage_m?: number | null;
latitude?: number | null;
laundry_appliance_brand?: string | null;
laundry_appliance_finish?: string | null;
laundry_dryer_install_year?: number | null;
laundry_dryer_type?: string | null;
laundry_washer_install_year?: number | null;
laundry_washer_type?: string | null;
list_price?: number | null;
rent_monthly?: number | null;
living_room_year_last_renovated?: number | null;
loading_bays?: number | null;
longitude?: number | null;
maintenance_fee_include_electric?: boolean | null;
maintenance_fee_include_heat?: boolean | null;
maintenance_fee_include_water?: boolean | null;
maintenance_fee?: number | null;
need_ceiling_repair?: boolean | null;
need_cooling_repair?: boolean | null;
need_drywall_repair?: boolean | null;
need_electrical_repair?: boolean | null;
need_floor_repair?: boolean | null;
need_foundation_repair?: boolean | null;
need_heating_repair?: boolean | null;
need_mold_repair?: boolean | null;
need_paint_repair?: boolean | null;
need_plumbing_repair?: boolean | null;
need_roof_repair?: boolean | null;
need_window_repair?: boolean | null;
neighborhood_id?: string | null;
outbuilding_type_fifth?: string | null;
outbuilding_type_first?: string | null;
outbuilding_type_fourth?: string | null;
outbuilding_type_second?: string | null;
outbuilding_type_third?: string | null;
ownership_type?: string | null;
parent_address?: string | null;
parking_lot_parking_space_legal_type?: string | null;
parking_lot_parking_space?: number | null;
plumbing_pipe_material?: string | null;
postal_code?: string | null;
property_id?: string | null;
property_type?: string | null;
province_abbreviation?: string | null;
province_slug?: string | null;
province?: string | null;
roof_is_functional?: boolean | null;
roof_material_install_year?: number | null;
roof_material?: string | null;
score_air_quality?: number | null;
score_bicycle?: number | null;
score_cell_coverage?: number | null;
score_curb_appeal?: number | null;
score_earthquake?: number | null;
score_education?: number | null;
score_entertainment?: number | null;
score_family?: number | null;
score_fire?: number | null;
score_flood?: number | null;
score_food_and_drink?: number | null;
score_hurricane?: number | null;
score_internet?: number | null;
score_nature?: number | null;
score_parking?: number | null;
score_quiet?: number | null;
score_retirement?: number | null;
score_safety?: number | null;
score_shopping?: number | null;
score_smell?: number | null;
score_tornado?: number | null;
score_total?: number | null;
score_traffic?: number | null;
score_transit?: number | null;
score_walkability?: number | null;
score_water_quality?: number | null;
secondary_suite_has_own_laundry_first?: boolean | null;
secondary_suite_has_own_laundry_second?: boolean | null;
secondary_suite_has_own_laundry_third?: boolean | null;
secondary_suite_seperate_entrance_first?: boolean | null;
secondary_suite_seperate_entrance_second?: boolean | null;
secondary_suite_seperate_entrance_third?: boolean | null;
shared_bicycle_storage_type?: string | null;
shared_garage_240v_first?: boolean | null;
shared_garage_240v_second?: boolean | null;
shared_garage_floor_above_ground_first?: number | null;
shared_garage_floor_above_ground_second?: number | null;
shared_garage_floor_below_ground_first?: number | null;
shared_garage_floor_below_ground_second?: number | null;
shared_garage_heating_type_first?: string | null;
shared_garage_heating_type_second?: string | null;
shared_garage_legal_type_first?: string | null;
shared_garage_legal_type_second?: string | null;
shared_garage_parking_space_first?: number | null;
shared_garage_parking_space_second?: number | null;
shared_garage_tandem_first?: boolean | null;
shared_garage_tandem_second?: boolean | null;
shared_garage_type_first?: string | null;
shared_garage_type_second?: string | null;
summer_garbage_pickup_day?: string | null;
summer_garbage_pickup_schedule?: string | null;
summer_organic_waste_pickup_day?: string | null;
summer_organic_waste_pickup_schedule?: string | null;
summer_recycle_pickup_day?: string | null;
summer_recycle_pickup_schedule?: string | null;
view_type?: string | null;
water_heater_brand?: string | null;
water_heater_install_year?: number | null;
water_heater_type?: string | null;
water_softener_brand?: string | null;
water_softener_install_year?: number | null;
water_softener_type?: string | null;
water_provider?: string | null;
winter_garbage_pickup_day?: string | null;
winter_garbage_pickup_schedule?: string | null;
winter_organic_waste_pickup_day?: string | null;
winter_organic_waste_pickup_schedule?: string | null;
winter_recycle_pickup_day?: string | null;
winter_recycle_pickup_schedule?: string | null;
workshop_type?: string | null;
zoning?: string | null;
cash_on_cash_return?: number | null;
cap_rate?: number | null;
return_on_investment?: number | null;
is_farmland?: boolean | null;
land_area_sq_m?: number | null;
parent_property_id?: string | null;
property_taxes?: number | null;
property_taxes_year?: number | null;
province_abbreviation_id?: string | null;
score_total_percent?: number | null;
shared_parking_lot_parking_space_legal_type?: string | null;
shared_parking_lot_parking_space?: number | null;
furnished?: boolean | null;
zoning_source?: string | null;
construction_year_source?: string | null;
is_commercial_source?: string | null;
is_farmland_source?: string | null;
is_residential_source?: string | null;
land_area_sq_m_source?: string | null;
area_residential_list_price_per_sq_m?: number | null;
area_residential_rent_price_per_sq_m?: number | null;
area_commercial_list_price_per_sq_m?: number | null;
area_comparable_list_price_per_sq_m?: number | null;
area_comparable_assessment_value_per_sq_m?: number | null;
area_comparable_property_tax_per_sq_m?: number | null;
secondary_suite_type_first?: string | null;
secondary_suite_type_second?: string | null;
secondary_suite_type_third?: string | null;
postal_code_source?: string | null;
}
interface Assessment {
property_id: string;
expand_assessment_year: number;
expand_assessment_value: number;
}
interface Listing {
property_id: string;
expand_listing_date: string;
expand_listing_event: string;
expand_estimate_list_price: number;
}
interface ListingRent {
property_id: string;
expand_listing_rent_date: string;
expand_listing_rent_event: string;
expand_estimate_rent_monthly: number;
expand_for_rent_what_is: string;
}
interface Permit {
property_id: string;
expand_permit_id: string;
expand_permit_application_date: string;
expand_permit_type: string;
expand_permit_content: string;
}