/geocoding

GET
http://127.0.0.1:8080/geocoding

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.

Example use cases

  1. Location-based apps showing property info near the user.
  2. Real estate platforms showing listings near a landmark.
  3. Emergency services accessing property data within a zone.
  4. Environmental groups tracking land use and zoning.
  5. Municipal planning for public services and infrastructure.

Request parameters

NameRequiredTypeDescription
api_keyYesUUID v4Your API key for authorization
latitudeYesFloatLatitude of the search point
longitudeYesFloatLongitude of the search point
radiusNoFloatSearch radius in kilometers, a positive number. Default 1.
shapeNoStringcircle (default) returns properties within radius kilometers of the point. square returns properties within radius kilometers north, south, east, or west of the point, which is the square drawn around that circle. Either way, results come nearest first unless you sort by a field.
expandNoString - see expandingComma-separated data sets to include with each property. Options are assessments, listings, listings_rent, and permits
filter_expand_matchNoString - see filteringUse 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_pageNoIntegerNumber of results per page (default: 6, max: 1000). A response can hold at most 10,000 values, counted as rows times selected fields, so wide selects allow fewer rows.
selectNoString - see selectingThe fields to return - address and property_id are always selected
pageNoIntegerThe 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.

Response object

Type declarations are available at the bottom of this page.

NameTypeDescription
cache_hitBooleanIndicates if the response was a cache hit
cost_centsFloatCost of the request in cents
dataArray<Property>Array of property objects containing the geocoding results
errorStringDetails about the error. Empty if no error
paginationPaginationContains pagination info like current page and total pages
price_quoteBooleanIndicates whether the response is a price quote
result_totalIntegerThe total number of results
time_msIntegerTime taken for the request to complete in milliseconds

Property object

Each property contains fields chosen via select. Over 400 fields available.

See the Fields documentation for the full list.

Pagination object

NameTypeDescription
current_pageIntegerCurrent page number (1-based)
has_next_pageBooleanWhether there is a next page
has_previous_pageBooleanWhether there is a previous page
page_totalIntegerTotal number of pages

Example requests and responses

Programming language

Select the programming language you want to display the code examples in.

Get properties around a point
Get properties around a point.
Request
Shell session
curl -X GET "http://127.0.0.1:8080/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"
TypeScript code
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('http://127.0.0.1:8080/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);
})();
Response
JSON
{
  "cache_hit": true,
  "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": "404 9 Avenue SW",
      "bathroom_full": 1,
      "bathroom_half": 0,
      "bedroom": 1,
      "den": 0,
      "latitude": 51.04509735107422,
      "longitude": -114.07098388671876,
      "property_id": "4b31244b21b9173a"
    },
    {
      "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": "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": 10599
  },
  "price_quote": false,
  "result_total": 63589,
  "time_ms": 419
}

Response type declarations

TypeScript code
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;
}