← Back to Dimensions

Property Type

Also known as: Asset Type, Real Estate Type, Listing Property Type, Property Category, Building Category, Home Type, Premises Type

ConversiondimensionTechnology

Property Type classifies the physical real estate asset associated with a property or listing into a governed category such as apartment, single-family home, office, retail, land, or mixed-use. It enables consistent analysis of inventory, discovery, engagement, conversion, pricing, and transaction performance across asset categories.

Business Use Case

The Product and Revenue Management teams compare search demand, available inventory, listing engagement, qualified-lead conversion, and transaction outcomes by property type and market. If apartment demand is high but qualified-lead conversion is low in a target city, they can investigate apartment inventory quality, pricing, ranking, content completeness, and partner coverage before changing merchandising or supply-acquisition investment.

Business Criticality

High

Journey / Navigation Area

Discovery

Owning Function

Product

Scope

Item

Calculation Notes

1️⃣ Assign canonical type based on specific asset identifier. 2️⃣ Use unit-level type for unit listings; whole-asset type for whole listings. 3️⃣ Apply mixed_use only for multiple designated uses or no primary use. 4️⃣ Exclude transaction purpose, tenure, occupancy, furnishing, style, and marketing labels. 5️⃣ Normalize values using versioned taxonomy crosswalk in specified order. 6️⃣ Resolve null or invalid values to unknown; reserve other for valid types outside taxonomy. 7️⃣ Use effective value for historical analysis; active value for current inventory reporting.

Technical Details

Data Typestring
Lookback WindowEvent

Events

PlatformEvent
Google Analytics 4item_category
Adobeview_item

Data Mappings

W3 Data Layer
{
  "digitalData": {
    "event": [
      {
        "eventInfo": {
          "eventName": "view_item",
          "eventAction": "view_item"
        }
      }
    ],
    "product": [
      {
        "category": {
          "primaryCategory": "apartment"
        }
      }
    ]
  }
}
GA4 Data Layer
{
  "event": "view_item",
  "ecommerce": {
    "items": [
      {
        "item_category": "apartment"
      }
    ]
  }
}
Adobe Client Data Layer
{
  "data": {
    "product": [
      {
        "category": {
          "primaryCategory": "apartment"
        }
      }
    ]
  },
  "event": "view_item"
}
XDM Mapping
{
  "eventType": "commerce.productViews",
  "productListItems": [
    {
      "productCategories": [
        {
          "categoryName": "apartment"
        }
      ]
    }
  ]
}

SQL Queries

Google Analytics 4 (BigQuery)
-- ==========================================
-- 1. GOOGLE BIGQUERY SQL
-- ==========================================
WITH raw_property_types AS (
  SELECT
    NULLIF(
      REGEXP_REPLACE(
        REGEXP_REPLACE(LOWER(TRIM(item.item_category)), r'[^a-z0-9]+', '_'),
        r'(^_+|_+$)',
        ''
      ),
      ''
    ) AS raw_property_type
  FROM `your-project.analytics_123456789.events_*` AS events
  CROSS JOIN UNNEST(events.items) AS item
  WHERE events.event_name = 'view_item'
    AND REGEXP_CONTAINS(_TABLE_SUFFIX, r'^[0-9]{8}$')
),
canonicalized AS (
  SELECT
    CASE
      WHEN raw_property_type IS NULL THEN 'unknown'
      WHEN raw_property_type IN ('apartment', 'apartments', 'flat', 'flats') THEN 'apartment'
      WHEN raw_property_type IN ('condo', 'condos', 'condominium', 'condominiums') THEN 'condominium'
      WHEN raw_property_type IN ('townhome', 'townhomes', 'townhouse', 'townhouses') THEN 'townhouse'
      WHEN raw_property_type IN ('single_family', 'single_family_home', 'single_family_homes') THEN 'single_family_home'
      WHEN raw_property_type IN ('multi_family', 'multi_family_home', 'multi_family_homes') THEN 'multi_family_home'
      WHEN raw_property_type IN ('lot', 'lots', 'land') THEN 'land'
      ELSE raw_property_type
    END AS property_type_code
  FROM raw_property_types
),
dimension_values AS (
  SELECT DISTINCT property_type_code
  FROM canonicalized

  UNION DISTINCT

  SELECT 'unknown' AS property_type_code
)
SELECT
  TO_HEX(MD5(property_type_code)) AS property_type_key,
  property_type_code,
  CASE
    WHEN property_type_code = 'unknown' THEN 'Unknown'
    ELSE INITCAP(REPLACE(property_type_code, '_', ' '))
  END AS property_type_name
FROM dimension_values
ORDER BY property_type_code;
Adobe Experience Platform (AEP Query Service)
-- ==========================================
-- 2. ADOBE AEP QUERY SERVICE SQL
-- ==========================================
WITH product_items AS (
  SELECT
    EXPLODE(productListItems) AS product_item
  FROM aep_analytics_dataset
  WHERE eventType = 'commerce.productViews'
),
product_categories AS (
  SELECT
    EXPLODE(product_item.productCategories) AS category_item
  FROM product_items
),
raw_property_types AS (
  SELECT
    NULLIF(
      REGEXP_REPLACE(
        REGEXP_REPLACE(LOWER(TRIM(category_item.categoryName)), '[^a-z0-9]+', '_'),
        '(^_+|_+$)',
        ''
      ),
      ''
    ) AS raw_property_type
  FROM product_categories
),
canonicalized AS (
  SELECT
    CASE
      WHEN raw_property_type IS NULL THEN 'unknown'
      WHEN raw_property_type IN ('apartment', 'apartments', 'flat', 'flats') THEN 'apartment'
      WHEN raw_property_type IN ('condo', 'condos', 'condominium', 'condominiums') THEN 'condominium'
      WHEN raw_property_type IN ('townhome', 'townhomes', 'townhouse', 'townhouses') THEN 'townhouse'
      WHEN raw_property_type IN ('single_family', 'single_family_home', 'single_family_homes') THEN 'single_family_home'
      WHEN raw_property_type IN ('multi_family', 'multi_family_home', 'multi_family_homes') THEN 'multi_family_home'
      WHEN raw_property_type IN ('lot', 'lots', 'land') THEN 'land'
      ELSE raw_property_type
    END AS property_type_code
  FROM raw_property_types
),
dimension_values AS (
  SELECT DISTINCT property_type_code
  FROM canonicalized

  UNION

  SELECT 'unknown' AS property_type_code
)
SELECT
  MD5(property_type_code) AS property_type_key,
  property_type_code,
  CASE
    WHEN property_type_code = 'unknown' THEN 'Unknown'
    ELSE INITCAP(REPLACE(property_type_code, '_', ' '))
  END AS property_type_name
FROM dimension_values
ORDER BY property_type_code;

Source Data

Property Master, listing management applications, MLS and licensed property registry feeds, partner listing feeds, and digital analytics events

Dependencies

[ "property_id", "listing_id", "raw_property_type", "property_type_taxonomy", "property_type_crosswalk", "property_snapshot_effective_at" ]

Report Attributes

Market Country Region City Neighborhood Property Type Group Property Subtype Listing Type Transaction Type Listing Status Price Band Bedroom Count Acquisition Channel Device Type Partner Calendar Period

Segment Eligibility

true

Governance

Data Sensitivityinternal

Derived Dimensions

Governance

Created bydevyendarm
Created on9/2/2026
Last modified bydevyendarm
StatusPUBLISHED

GitHub

View File on GitHubcatalog/dimensions/property-type.yml

Community Discussion