Property Type
Also known as: Asset Type, Real Estate Type, Listing Property Type, Property Category, Building Category, Home Type, Premises Type
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
Events
| Platform | Event |
|---|---|
| Google Analytics 4 | item_category |
| Adobe | view_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
Derived Dimensions
Governance
GitHub
catalog/dimensions/property-type.yml